Index Strategy (root_strategy: "index")
A single delimited index file (CSV / TSV / pipe) lists one row per sample, e.g. mapping audio paths to transcriptions and other metadata columns.
When the schema declares columns, the loader applies the column mappings
(renaming, dtype conversion, file-path resolution). When columns is omitted,
the raw index file is returned as-is.
Controlled by:
| Field | Required | Description |
|---|---|---|
root_strategy |
✓ | Must be "index". |
index_file |
✓ | Path to the index file, relative to the dataset root. |
columns |
✗ | Mapping of logical column names to source columns and dtypes. When omitted, the raw index file is returned unchanged. |
base_audio_path |
✗ | Directory prefix or list of directories used to resolve file_path/file_content dtype columns. |
format |
✗ | Optional file format hint ("csv", "tsv", "pipe"). When omitted, the loader infers it from index_file where possible. |
separator |
✗ | Explicit column separator (e.g. "\|"). |
has_header |
✗ | Whether the index file has a header row. When false, source_column must be a positional integer. |
encoding |
✗ | File encoding (e.g. "utf-8-sig" for files with a BOM). |
strict |
✗ | Disable archive heuristics: index_file must exist at its literal relative path (no recursive search), exact column-name matching only. |
Examples
Basic index schema (ASR)
dataset_id: "cmj8u48g4005lnxzp98cpr7b2"
task: "ASR"
root_strategy: "index"
format: "tsv"
index_file: "ss-corpus-shi.tsv"
base_audio_path: "audios/"
columns:
audio_path:
source_column: "audio_file"
dtype: "file_path"
transcription:
source_column: "transcription"
dtype: "string"
speaker_id:
source_column: "client_id"
dtype: "category"
optional: true
audio_id:
source_column: "audio_id"
dtype: "string"
optional: true
duration_ms:
source_column: "duration_ms"
dtype: "int"
optional: true
prompt_id:
source_column: "prompt_id"
dtype: "string"
optional: true
prompt:
source_column: "prompt"
dtype: "string"
optional: true
votes:
source_column: "votes"
dtype: "int"
optional: true
age:
source_column: "age"
dtype: "category"
optional: true
gender:
source_column: "gender"
dtype: "category"
optional: true
language:
source_column: "language"
dtype: "category"
optional: true
split:
source_column: "split"
dtype: "category"
optional: true
char_per_sec:
source_column: "char_per_sec"
dtype: "float"
optional: true
quality_tags:
source_column: "quality_tags"
dtype: "string"
optional: true
Pipe-delimited, headerless metadata (TTS)
dataset_id: "aso-ckb-tts"
task: "TTS"
root_strategy: "index"
format: "pipe"
separator: "|"
has_header: false
index_file: "metadata.csv"
base_audio_path: "wavs/"
columns:
audio_path:
source_column: 0 # positional index (no header)
dtype: "file_path"
transcription:
source_column: 1
dtype: "string"
Search-based audio resolution
When the metadata stores an ID or partial filename instead of a directly
joinable relative path, file_path columns can search within one or more
audio roots:
dataset_id: "example-asr"
task: "ASR"
root_strategy: "index"
index_file: "data/metadata.csv"
base_audio_path:
- "data/recipes/"
- "data/giving_gift/"
columns:
audio_path:
source_column: "Sentence ID"
dtype: "file_path"
path_match_strategy: "exact" # or "contains"
file_extension: ".wav"
transcription:
source_column: "Sentences"
dtype: "string"
path_match_strategy: "direct" remains the default and preserves the existing
extract_dir / base_audio_path / value behavior. The loader also trims BOMs
and surrounding header whitespace. The separator is never guessed from file
contents — when the declared/inferred separator is wrong, loading fails with
the raw (single-column) headers listed; declare separator explicitly.
If the true audio filename is composed from multiple metadata columns, use
path_template instead of a fuzzy search:
dataset_id: "khmer-asr-cultural-dataset-4e33cd05"
task: "ASR"
root_strategy: "index"
index_file: "data/metadata.csv"
base_audio_path:
- "data/recipes/"
- "data/giving_gift/"
columns:
audio_path:
source_column: "Sentence ID"
dtype: "file_path"
file_extension: ".wav"
path_template: "${Speaker ID}_khm_${Sentence ID}.wav"
transcription:
source_column: "Sentences"
dtype: "string"
Template placeholders reference raw metadata column names exactly, and
${value} refers to the current source_column value. Relative paths are
resolved from the dataset root inferred from the resolved index_file.
If the audio directory itself varies per row, base_audio_path can use the
same placeholder syntax:
dataset_id: "khmer-asr-cultural-dataset-4e33cd05"
task: "ASR"
root_strategy: "index"
index_file: "data/metadata.csv"
base_audio_path: "data/${Split}/"
columns:
audio_path:
source_column: "Sentence ID"
dtype: "file_path"
file_extension: ".wav"
path_template: "${Speaker ID}_khm_${value}"
transcription:
source_column: "Sentences"
dtype: "string"
That resolves each row as
dataset_root / data/<Split>/<Speaker ID>_khm_<Sentence ID>.wav.
File-content dtype
When the index file stores paths to transcription files instead of inline text,
use dtype: "file_content" to read the file contents into the DataFrame:
dataset_id: "speech-data-nupe"
task: "ASR"
root_strategy: "index"
index_file: "Metadata.csv"
base_audio_path:
- "Speaker_id_1"
- "Speaker_id_2"
columns:
audio_path:
source_column: "Audio_File_Path"
dtype: "file_path"
file_extension: ".wav"
transcription:
source_column: "Transcript_File_Path"
dtype: "file_content"
file_extension: ".txt"
speaker_id:
source_column: "Speaker_ID"
The file_content dtype reuses the same path resolution as file_path
(base_audio_path, file_extension, path_match_strategy, path_template)
but returns the file's text content instead of the resolved path.
Raw index file (no column mappings)
A dataset described by a single delimited index file, returned as-is. Note
that a schema without columns should only declare a task whose raw columns
already satisfy the task contract (or a task without one, e.g. OTH) —
otherwise every load emits a TaskValidationWarning.
dataset_id: "common-voice-text-langid"
task: "OTH"
root_strategy: "index"
format: "tsv"
index_file: "data.tsv"
columns:
sentence:
source_column: "sentence"
dtype: "string"
language:
source_column: "lang"
dtype: "category"
When columns is omitted, the index file is returned as a raw DataFrame with
its original columns.