NeMo
English
audio
speech
forced-alignment
reference-text-alignment
speech-processing
mfa
whisperx
python
metric:mae
Eval Results (legacy)
Instructions to use vertox-ai/speech-text-data-aligners with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use vertox-ai/speech-text-data-aligners with NeMo:
# tag did not correspond to a valid NeMo domain.
- Notebooks
- Google Colab
- Kaggle
|
Download docs/CONFIGURATION.md from vertox-ai/speech-text-data-aligners: direct link, hf CLI and curl.
- Browser
- Download file 12.4 kB
-
https://huggingface.co/vertox-ai/speech-text-data-aligners/resolve/main/docs/CONFIGURATION.md
- Command line
-
hf download hf://vertox-ai/speech-text-data-aligners/docs/CONFIGURATION.md
-
curl -L -o CONFIGURATION.md https://huggingface.co/vertox-ai/speech-text-data-aligners/resolve/main/docs/CONFIGURATION.md
12.4 kB
| # Configuration | |
| This page is the authoritative configuration reference for Speech-Text Data Aligners. | |
| Typed backend dataclasses validate configuration before model or process execution. | |
| Unknown keys and invalid primitive types are rejected rather than ignored. | |
| ## Manifest Versus Runtime Configuration | |
| [`config.json`](../config.json) is a versioned machine-readable project/model manifest. | |
| It records package identity, the data contract, registered backends, pinned model | |
| identity, evaluation scope, and documentation paths. It is validated by | |
| `tests/quality/test_config_manifest.py`. | |
| The manifest is not passed directly to `--backend-config-json`. Runtime configuration | |
| has these CLI shapes: | |
| | Command | `--backend-config-json` shape | | |
| |---|---| | |
| | `annotate` | One selected backend's configuration object, for example `{"environment_name":"speech-aligners-mfa"}` | | |
| | `benchmark` | One outer object keyed by each selected backend, for example `{"mfa":{...},"whisperx":{...}}` | | |
| | `readiness` | Provider configuration lives under each catalog `backends.<name>.config` value | | |
| All path-valued JSON strings are converted to `pathlib.Path`. `null` is accepted only | |
| for fields documented as optional or nullable. | |
| ## Environment Isolation | |
| | Runtime | Specification | Default selector | Notes | | |
| |---|---|---|---| | |
| | Core development | `environments/core-dev.yml` | `speech-aligners-core-dev` | Deterministic tests, lint, type, coverage, and import checks | | |
| | MFA | `environments/mfa.yml` | `speech-aligners-mfa` | Dedicated CPU Conda runtime | | |
| | NeMo | `environments/nemo.yml` | No default environment name | Requires explicit pinned source/script and local or registry model | | |
| | WhisperX | `environments/whisperx.yml` | Current Python by default | Dedicated CPU runtime is recommended | | |
| MFA and NeMo execute through an isolated process boundary. WhisperX executes in a | |
| dedicated worker that imports Torch/Torchaudio/WhisperX only after invocation. Heavy | |
| backend packages are never imported by core, data, benchmarking, or application layers. | |
| ## Common Artifact Policy | |
| MFA, NeMo, and WhisperX share these artifact semantics: | |
| | `artifact_policy` | Behavior | | |
| |---|---| | |
| | `never` | Remove adapter workspaces; default | | |
| | `on_failure` | Retain native workspace only after failure | | |
| | `always` | Retain native workspace on success or failure | | |
| When the policy is not `never`, `retention_root` is required. `run_id` must be one safe | |
| path component. `temporary_root` is an optional parent for unique workspaces. | |
| Retained native artifacts are diagnostic evidence. They do not replace the | |
| backend-neutral result, and native CTM/TextGrid/WhisperX structures do not cross the | |
| adapter interface. | |
| ## MFA Configuration | |
| Python type: `speech_text_data_aligners.backends.mfa.config.MfaConfig`. | |
| | Field | Type | Default | Meaning | | |
| |---|---|---|---| | |
| | `conda_executable` | string | `conda` | Conda command or executable path | | |
| | `environment_name` | string/null | `speech-aligners-mfa` | Dedicated environment name | | |
| | `environment_prefix` | path/null | `null` | Dedicated environment prefix | | |
| | `mfa_executable` | string | `mfa` | Executable inside the selected environment | | |
| | `model_id` | string | `MontrealCorpusTools/english_mfa` | Hugging Face MFA model repository, without revision | | |
| | `model_revision` | string | `1009e3c6c689f10875146a5e4e5c2233f8eaf922` | Required 40-character lowercase commit | | |
| | `model_version` | string | `3.3.0` | Model bundle version recorded in provenance | | |
| | `dialect` | string | `english_us_mfa` | Dictionary/G2P dialect | | |
| | `use_g2p` | boolean | `true` | Generate pronunciations for dictionary OOVs | | |
| | `expected_mfa_version` | string | `3.4.2` | Required MFA distribution | | |
| | `expected_kaldi_version` | string | `5.5.1172` | Required Kaldi distribution | | |
| | `expected_kalpy_version` | string | `0.10.5` | Required Kalpy distribution | | |
| | `expected_openfst_version` | string | `1.8.4` | Required OpenFst distribution | | |
| | `expected_model_sha256` | string/null | `null` | Optional lowercase model-tree SHA-256 | | |
| | `num_jobs` | positive integer | `1` | MFA worker process count | | |
| | `timeout_s` | positive finite number | `3600.0` | Timeout for probe and alignment commands | | |
| | `artifact_policy` | enum | `never` | Native artifact retention policy | | |
| | `temporary_root` | path/null | `null` | Parent for temporary workspaces | | |
| | `retention_root` | path/null | `null` | Required parent when retention is enabled | | |
| | `run_id` | string | `mfa-run` | Safe retained-workspace component | | |
| Exactly one of `environment_name` and `environment_prefix` must be set. When selecting | |
| a prefix from CLI JSON, use `"environment_name": null` explicitly. The adapter always | |
| uses long TextGrid output and a commit-qualified model; those safety choices are not | |
| configurable. | |
| Minimal CLI JSON: | |
| ```json | |
| { | |
| "environment_name": "speech-aligners-mfa", | |
| "num_jobs": 1, | |
| "artifact_policy": "never" | |
| } | |
| ``` | |
| Failure-only artifact example: | |
| ```json | |
| { | |
| "environment_prefix": "/opt/conda/envs/speech-aligners-mfa", | |
| "environment_name": null, | |
| "artifact_policy": "on_failure", | |
| "retention_root": "artifacts/mfa", | |
| "run_id": "metadata-run-001" | |
| } | |
| ``` | |
| ## NeMo / NFA Configuration | |
| Python type: `speech_text_data_aligners.backends.nemo.config.NemoConfig`. | |
| | Field | Type | Default | Meaning | | |
| |---|---|---|---| | |
| | `align_script` | path | Required | Exact `tools/nemo_forced_aligner/align.py` | | |
| | `python_executable` | path | Current interpreter | Python in the isolated NeMo runtime | | |
| | `pretrained_name` | string/null | `stt_en_fastconformer_hybrid_large_pc` | Registry model name | | |
| | `model_path` | path/null | `null` | Local `.nemo` checkpoint | | |
| | `model_id` | string | `stt_en_fastconformer_hybrid_large_pc` | Stable model identity for provenance | | |
| | `model_revision` | string/null | `null` | Registry/source revision when known | | |
| | `expected_model_sha256` | string/null | `null` | Required local checkpoint SHA-256 | | |
| | `expected_nemo_version` | string | `3.0.0` | Required NeMo distribution | | |
| | `nemo_source_revision` | string | `fd6a877539710e2b98f28c43272ff81312f83417` | Pinned Speech checkout | | |
| | `expected_align_script_sha256` | string | `1cfaf9526b47037204b7874c4432e4d5d07364a7fca1b840052c370d46ee2f03` | Required entry-point hash | | |
| | `transcribe_device` | string | `cuda` | Torch device for acoustic inference | | |
| | `viterbi_device` | string | `cuda` | Torch device for Viterbi alignment | | |
| | `batch_size` | positive integer | `1` | NFA batch size | | |
| | `use_local_attention` | boolean | `true` | Request supported local attention | | |
| | `timeout_s` | positive finite number | `3600.0` | Timeout for probe and alignment | | |
| | `save_ass` | boolean | `false` | Retain optional ASS output in addition to CTM | | |
| | `artifact_policy` | enum | `never` | Native artifact retention policy | | |
| | `temporary_root` | path/null | `null` | Parent for temporary workspaces | | |
| | `retention_root` | path/null | `null` | Required parent when retention is enabled | | |
| | `run_id` | string | `nemo-run` | Safe retained-workspace component | | |
| Exactly one of `pretrained_name` and `model_path` must be set. When using a local | |
| checkpoint from CLI JSON, set `"pretrained_name": null` explicitly. | |
| `expected_model_sha256` is valid only with `model_path`. | |
| Local-checkpoint example: | |
| ```json | |
| { | |
| "align_script": "/opt/runtimes/nemo-speech-v3.0.0/tools/nemo_forced_aligner/align.py", | |
| "python_executable": "/opt/runtimes/nemo-speech-v3.0.0/.venv/bin/python", | |
| "pretrained_name": null, | |
| "model_path": "/opt/models/stt_en_fastconformer_hybrid_large_pc.nemo", | |
| "expected_model_sha256": "<lowercase-64-character-sha256>", | |
| "transcribe_device": "cuda", | |
| "viterbi_device": "cuda", | |
| "artifact_policy": "on_failure", | |
| "retention_root": "artifacts/nemo", | |
| "run_id": "metadata-run-001" | |
| } | |
| ``` | |
| Reference-text mode, CTM output, and unmodified zero-minimum timestamps are mandatory | |
| and intentionally not configurable. | |
| ## WhisperX Configuration | |
| Python type: `speech_text_data_aligners.backends.whisperx.config.WhisperXConfig`. | |
| | Field | Type | Default | Meaning | | |
| |---|---|---|---| | |
| | `python_executable` | path | Current interpreter | Python in the isolated WhisperX runtime | | |
| | `model_id` | string | `WAV2VEC2_ASR_BASE_960H` | English alignment bundle | | |
| | `model_revision` | string | `torchaudio-2.8.0` | Model asset revision recorded in provenance | | |
| | `expected_model_sha256` | string/null | `null` | Optional model-cache aggregate hash | | |
| | `language` | string | `en` | Alignment language; only `en` is supported | | |
| | `device` | string | `cpu` | Torch model/alignment device | | |
| | `model_dir` | path/null | `null` | Persistent model cache directory | | |
| | `model_cache_only` | boolean | `false` | Disable remote model access where supported | | |
| | `expected_whisperx_version` | string | `3.8.6` | Required WhisperX distribution | | |
| | `expected_torch_version` | string | `2.8.0` | Required Torch base version | | |
| | `expected_torchaudio_version` | string | `2.8.0` | Required Torchaudio base version | | |
| | `timeout_s` | positive finite number | `3600.0` | Worker-process timeout | | |
| | `artifact_policy` | enum | `never` | Native artifact retention policy | | |
| | `temporary_root` | path/null | `null` | Parent for temporary workspaces | | |
| | `retention_root` | path/null | `null` | Required parent when retention is enabled | | |
| | `run_id` | string | `whisperx-run` | Safe retained-workspace component | | |
| `expected_model_sha256` requires `model_dir`. WhisperX 3.8.6 does not enforce | |
| `model_cache_only` for Torchaudio bundle downloads, so prepare and hash the cache before | |
| offline use when remote access must be impossible. | |
| CPU example: | |
| ```json | |
| { | |
| "python_executable": "/opt/conda/envs/speech-aligners-whisperx/bin/python", | |
| "device": "cpu", | |
| "model_dir": "/opt/models/whisperx-align", | |
| "model_cache_only": true, | |
| "expected_model_sha256": "<lowercase-64-character-sha256>" | |
| } | |
| ``` | |
| The authoritative transcript, full-duration reference segment, disabled interpolation, | |
| and no-ASR workflow are mandatory and intentionally not configurable. | |
| ## Benchmark Composition | |
| Pass unique backend names to repeated `--backend` options. The configuration object | |
| must contain at most those names; entries for unselected names are ignored by the CLI | |
| factory lookup, while malformed selected values fail construction. | |
| ```bash | |
| speech-text-aligners benchmark \ | |
| metadata.csv first-word-gold.csv wavs \ | |
| --backend mfa --backend whisperx \ | |
| --backend-config-json '{"mfa":{"environment_name":"speech-aligners-mfa"},"whisperx":{"device":"cpu"}}' \ | |
| --output-base reports/mfa-whisperx | |
| ``` | |
| For reproducible heterogeneous runs, prefer constructing typed configs in Python and | |
| calling `benchmark_backends` with an insertion-ordered mapping. | |
| ## Readiness Catalog | |
| The readiness catalog is a JSON object: | |
| ```json | |
| { | |
| "backends": { | |
| "mfa": { | |
| "identity": { | |
| "backend_name": "mfa", | |
| "backend_version": "3.4.2", | |
| "model_id": "MontrealCorpusTools/english_mfa", | |
| "model_revision": "1009e3c6c689f10875146a5e4e5c2233f8eaf922" | |
| }, | |
| "config": { | |
| "environment_name": "speech-aligners-mfa" | |
| } | |
| }, | |
| "whisperx": { | |
| "identity": { | |
| "backend_name": "whisperx", | |
| "backend_version": "3.8.6", | |
| "model_id": "WAV2VEC2_ASR_BASE_960H" | |
| }, | |
| "config": null, | |
| "unavailable_reason": "runtime is intentionally not installed" | |
| } | |
| }, | |
| "evidence": [ | |
| { | |
| "audio_id": "example_audio_id", | |
| "backend": "mfa", | |
| "candidates": [ | |
| { | |
| "path": "/absolute/path/to/evidence.json", | |
| "sha256": "<lowercase-64-character-sha256>" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| ``` | |
| `identity.backend_name` must match its map key and the constructed adapter name. | |
| `config: null` means the runtime is explicitly unavailable. Evidence candidates are | |
| reused only after audio, transcript, backend/model provenance, and complete full-word | |
| timing are verified. See [W1-T Semantic Readiness](W1_T_SEMANTIC_READINESS.md). | |
| ## Provenance Fields | |
| For empirical runs, retain at least: | |
| - backend and backend package version; | |
| - model/checkpoint/dictionary identifiers; | |
| - model revision/hash when feasible; | |
| - Python and Torch/CUDA versions where relevant; | |
| - CPU/GPU device; | |
| - command/configuration identity; | |
| - input metadata hash; | |
| - result and diagnostic artifact paths. | |
| The runtime receipt and backend result provenance carry these fields. Preserve receipts | |
| with benchmark outputs; do not infer missing versions from documentation alone. | |