CoolFace
Datasetpublic

Harshkmr/omniscribe_corpus

OmniScribe Corpus A multilingual speech transcription corpus designed for fine-tuning ASR models on Indian medical and general-domain speech. It covers Hindi, Marathi, and Indian English, with a focus on clinical and healthcare contexts. Overview Split Rows (after oversampling) Approx. Duration train ~30750 ~230 hrs benchmark ~4,089 ~25 hrs Audio samples average 20–30 seconds each. All samples are at least 5 seconds… See the full description on the dataset page: https://huggingface.co/datasets/Harshkmr/omniscribe_corpus.

sourceHugging Faceotherupdated 5mo agoView on Hugging Face
0likes7downloads
Dataset Card

OmniScribe Corpus

A multilingual speech transcription corpus designed for fine-tuning ASR models on Indian medical and general-domain speech. It covers Hindi, Marathi, and Indian English, with a focus on clinical and healthcare contexts.


Overview

SplitRows (after oversampling)Approx. Duration
train~30750~230 hrs
benchmark~4,089~25 hrs

Audio samples average 20–30 seconds each. All samples are at least 5 seconds long.


Data Sources

Train Split

SourceLanguageUnique RowsOversampleEffective RowsDomain
ai4bharat/IndicVoices (hindi/train)Hindi9,000×19,000General
ai4bharat/IndicVoices (marathi/train)Marathi9,000×19,000General
OUTCOMESAI/medical_n_common_speech_corpus_50_50 (en/train)English9,000×19,000Medical
ekacare/eka-medical-asr-evaluation-dataset (en/test, rows 0–1499)English1,500×23,000Medical
ekacare/eka-medical-asr-evaluation-dataset (hi/test, rows 0–149)Hindi150×5750Medical
Oversampling note: Ekacare rows are repeated (×2 EN, ×5 HI) in the train split to compensate for the small pool size and to up-weight high-quality clinical speech. Oversampled rows are spread evenly via a global shuffle (seed=42).

Benchmark Split

No oversampling is applied. Sources are held-out partitions not seen during training.

SourceLanguageRowsDomain
ai4bharat/IndicVoices (hindi/valid)Hindi600General
ai4bharat/IndicVoices (marathi/valid)Marathi600General
OUTCOMESAI/medical_n_common_speech_corpus_50_50 (en/test)English600Medical
ekacare/eka-medical-asr-evaluation-dataset (en/test, rows 1500–3619)English2,119Medical
ekacare/eka-medical-asr-evaluation-dataset (hi/test, rows 150–319)Hindi170Medical

Schema

Each row contains the following columns:

ColumnTypeDescription
audioAudioAudio sample (sampling rate varies by source)
textstringGround-truth transcription
languagestringOne of hindi, marathi, english
sourcestringSource dataset identifier (e.g. IndicVoices-train, ekacare-test-en)
durationfloatAudio duration in seconds
system_promptstringRole-specific instruction prompt for the transcription model

System Prompts

Each row carries a system_prompt tailored to its source and language. These are designed for instruction-tuned models (e.g. Whisper, Gemini, Qwen-Audio) that accept a system/instruction context alongside the audio.

Source keyLanguagePersona
IndicVoices-trainHindiGeneral clerk, Uttar Pradesh
IndicVoices-trainMarathiGeneral clerk, Maharashtra
OUTCOMESAI-trainEnglishMedical clerk, Delhi
ekacare-test-enEnglishMedical clerk, hospital in Delhi
ekacare-test-hiHindiMedical clerk, hospital in Delhi (Hindi + English medical terms allowed)

All prompts instruct the model to use [INAUDIBLE] for uncertain words and to return only the transcription with no additional commentary.


Construction

The corpus was built using a two-stage pipeline:

  1. 1.`build_corpus` — streams each source dataset independently, filters samples shorter than 5 seconds, shuffles with a 200-sample buffer (seed=42), and uploads to five separate per-language HF repos in 300-row Parquet chunks. Each repo can be rebuilt independently on failure.
  1. 1.`concat_corpus` — loads all per-language repos, applies oversampling to the train split, concatenates, shuffles globally (seed=42), and pushes to this final repo.

Per-language intermediate repos:

  • —Harshkmr/omniscribe_indic_hindi
  • —Harshkmr/omniscribe_indic_marathi
  • —Harshkmr/omniscribe_outcomesai
  • —Harshkmr/omniscribe_ekacare_en
  • —Harshkmr/omniscribe_ekacare_hi

Usage

python
from datasets import load_dataset
 
# Full train split
ds_train = load_dataset("Harshkmr/omniscribe_corpus", split="train")
 
# Benchmark split
ds_bench = load_dataset("Harshkmr/omniscribe_corpus", split="benchmark")
 
# Filter by language
hindi_train = ds_train.filter(lambda x: x["language"] == "hindi")

Using with a model

python
# The system_prompt field is ready to pass directly to instruction-tuned ASR models
sample = ds_train[0]
print(sample["system_prompt"])
# → "You are a helpful general clerk from India who is fluent in Hindi ..."
 
audio  = sample["audio"]   # {"array": np.ndarray, "sampling_rate": int}
target = sample["text"]    # ground-truth transcription

Intended Use

  • —Fine-tuning multilingual ASR models on Indian-accented speech
  • —Benchmarking transcription quality on medical vs. general-domain audio
  • —Instruction-tuning audio-language models with role-specific prompts

Limitations

  • —Ekacare rows are repeated in the train split (×2 EN, ×5 HI). Models may memorise these samples; exclude the ekacare-* source rows if you need a fully deduplicated train set.
  • —No Bhojpuri in the current build (infrastructure is in place; data sourcing is pending).
  • —Audio quality varies across sources — IndicVoices is crowdsourced field audio; OUTCOMESAI and Ekacare are semi-controlled clinical recordings.
  • —This corpus is private and intended for internal model development only. Downstream licensing must comply with each upstream dataset's terms.

Citation

If you use this corpus, please cite the upstream datasets:

@misc{omniscribe_corpus,
  title  = {OmniScribe Corpus},
  author = {Harshkmr},
  year   = {2025},
  note   = {Compiled from ai4bharat/IndicVoices, OUTCOMESAI/medical\_n\_common\_speech\_corpus\_50\_50, and ekacare/eka-medical-asr-evaluation-dataset}
}