vanarp/legal2023_38hrs
legal2023_38hrs Court-audio ASR dataset: 38.6 h of English legal/court speech cut into per-speaker segments, with speaker-disjoint train / validation / test splits. ⚠️ Pseudo-labels, not gold. Transcripts are produced by an automatic pipeline not human annotation. Corpus WER vs an independent judge (nvidia/parakeet-rnnt-1.1b) is ~20%. A per-segment confidence avg_score is provided; only segments with avg_score >= 0.4 are included. Filter further on segment_wer if you need… See the full description on the dataset page: https://huggingface.co/datasets/vanarp/legal2023_38hrs.
legal2023_38hrs
Court-audio ASR dataset: 38.6 h of English legal/court speech cut into per-speaker segments, with speaker-disjoint train / validation / test splits.
⚠️ Pseudo-labels, not gold. Transcripts are produced by an automatic pipeline not human annotation. Corpus WER vs an independent judge (nvidia/parakeet-rnnt-1.1b) is ~20%. A per-segment confidence avg_score is provided; only segments with avg_score >= 0.4 are included. Filter further on segment_wer if you need cleaner labels.
Split DURATION / SIZE (durations are @ avg_score >= 0.4)
Splits are speaker-disjoint (a speaker's segments are entirely within one split)
LABEL-QUALITY (per-set corpus WER over the avg_score >= 0.4 segments; parakeet-rnnt-1.1b)
train 17.68% dev 19.19% test 21.99% ( Corpus-wide unfiltered all-speakers WER was 20.34%.)
Columns
audio: 16 kHz mono; decoded to a waveform by theAudiofeature.audio_path: Unique segment file nametext: pseudo-label transcript (lowercase-normalized-spoken-form).speaker: global speaker id (spk_XXXX), consistent across source files.avg_score/min_score: per-segment mean / min word confidence (0–1).segment_wer/ segment_wer on the rnnt1.1b ASR experiment, recommended threshold <= 0.8duration: seconds.source_file: originating audio file id.
Load
from datasets import load_dataset
ds = load_dataset("vanarp/legal2023_38hrs") # DatasetDict: train / validation / test
AVG_SCORE_MIN = 0.4
WER_MAX = 0.8
def keep(ex):
return ex["avg_score"] >= AVG_SCORE_MIN and ex["segment_wer"] <= WER_MAX
filtered = ds.filter(keep) # applies to every split at once
train = filtered["train"]
dev = filtered["validation"]
test = filtered["test"]
