chore: import upstream snapshot with attribution
Create PR to main with cherry-pick from release / cherry-pick (push) Failing after 0s
CICD NeMo / pre-flight (push) Failing after 0s
CICD NeMo / configure (push) Has been skipped
Build, validate, and release Neural Modules / pre-flight (push) Failing after 1s
CICD NeMo / code-linting (push) Has been skipped
Build, validate, and release Neural Modules / release (push) Has been skipped
Build, validate, and release Neural Modules / release-summary (push) Has been cancelled
CICD NeMo / cicd-test-container-build (push) Has been cancelled
CICD NeMo / cicd-import-tests (push) Has been cancelled
CICD NeMo / L0_Setup_Test_Data_And_Models (push) Has been cancelled
CICD NeMo / cicd-main-unit-tests (push) Has been cancelled
CICD NeMo / cicd-main-speech (push) Has been cancelled
CICD NeMo / Nemo_CICD_Test (push) Has been cancelled
CICD NeMo / Coverage (e2e) (push) Has been cancelled
CICD NeMo / Coverage (unit-test) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
CICD NeMo / cicd-wait-in-queue (push) Has been cancelled
Create PR to main with cherry-pick from release / cherry-pick (push) Failing after 0s
CICD NeMo / pre-flight (push) Failing after 0s
CICD NeMo / configure (push) Has been skipped
Build, validate, and release Neural Modules / pre-flight (push) Failing after 1s
CICD NeMo / code-linting (push) Has been skipped
Build, validate, and release Neural Modules / release (push) Has been skipped
Build, validate, and release Neural Modules / release-summary (push) Has been cancelled
CICD NeMo / cicd-test-container-build (push) Has been cancelled
CICD NeMo / cicd-import-tests (push) Has been cancelled
CICD NeMo / L0_Setup_Test_Data_And_Models (push) Has been cancelled
CICD NeMo / cicd-main-unit-tests (push) Has been cancelled
CICD NeMo / cicd-main-speech (push) Has been cancelled
CICD NeMo / Nemo_CICD_Test (push) Has been cancelled
CICD NeMo / Coverage (e2e) (push) Has been cancelled
CICD NeMo / Coverage (unit-test) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
CICD NeMo / cicd-wait-in-queue (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
Speech Data Explorer
|
||||
--------------------
|
||||
|
||||
[Dash](https://plotly.com/dash/)-based tool for interactive exploration of ASR/TTS datasets.
|
||||
|
||||
Features:
|
||||
- dataset's statistics (alphabet, vocabulary, duration-based histograms)
|
||||
- navigation across dataset (sorting, filtering)
|
||||
- inspection of individual utterances (waveform, spectrogram, audio player)
|
||||
- errors' analysis (Word Error Rate, Character Error Rate, Word Match Rate, Mean Word Accuracy, diff)
|
||||
- comparison of two ASR models using interactive word-level accuracy plot
|
||||
- read manifests and audio directly from S3-compatible storage (including AIStore)
|
||||
- support for tarred audio datasets with efficient byte-range reads via DALI index files
|
||||
|
||||
## Quick Start
|
||||
|
||||
Install the requirements:
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Run with a local manifest:
|
||||
```
|
||||
python data_explorer.py path_to_manifest.json
|
||||
```
|
||||
|
||||
## S3 / AIStore Support
|
||||
|
||||
Speech Data Explorer can read manifests and audio files directly from S3-compatible
|
||||
object storage, including NVIDIA AIStore (AIS).
|
||||
|
||||
### Using an S3 config file
|
||||
|
||||
```
|
||||
python data_explorer.py s3://bucket/manifest.json --s3cfg ~/.s3cfg[default]
|
||||
```
|
||||
|
||||
### Using AIStore with environment variables
|
||||
|
||||
```
|
||||
export AIS_ENDPOINT=http://ais-gateway:8080
|
||||
export AIS_AUTHN_TOKEN=your_token
|
||||
python data_explorer.py s3://bucket/manifest.json --s3cfg AIS
|
||||
```
|
||||
|
||||
### Sharded paths (`_OP_/_CL_` syntax)
|
||||
|
||||
Manifests and tar files are often split into numbered shards. Instead of listing
|
||||
every shard explicitly, use the `_OP_start..end_CL_` range pattern. The tool
|
||||
expands it into individual paths automatically:
|
||||
|
||||
```
|
||||
s3://bucket/manifest__OP_0..255_CL_.json
|
||||
→ s3://bucket/manifest_0.json
|
||||
s3://bucket/manifest_1.json
|
||||
...
|
||||
s3://bucket/manifest_255.json
|
||||
```
|
||||
|
||||
Multiple ranges in a single path produce a **cartesian product** — useful when
|
||||
shards are spread across several buckets or directories:
|
||||
|
||||
```
|
||||
s3://store_OP_1..2_CL_/audio__OP_0..1_CL_.tar
|
||||
→ s3://store1/audio_0.tar
|
||||
s3://store1/audio_1.tar
|
||||
s3://store2/audio_0.tar
|
||||
s3://store2/audio_1.tar
|
||||
```
|
||||
|
||||
### Tarred audio
|
||||
|
||||
When audio is stored in tar archives locally or on S3, use `--tar-base-path` to
|
||||
point to the tar files. DALI index files are used automatically (if available at
|
||||
`<tar_dir>/dali_index/`) for fast byte-range lookups:
|
||||
|
||||
```
|
||||
python data_explorer.py /data/manifests/manifest.json \
|
||||
--tar-base-path /data/tarred/audio.tar
|
||||
```
|
||||
|
||||
```
|
||||
python data_explorer.py s3://bucket/manifests/manifest__OP_0..255_CL_.json \
|
||||
--tar-base-path s3://bucket/tarred/audio__OP_0..255_CL_.tar \
|
||||
--s3cfg ~/.s3cfg[default]
|
||||
```
|
||||
|
||||
You can also specify a custom DALI index location:
|
||||
```
|
||||
python data_explorer.py s3://bucket/manifest.json \
|
||||
--tar-base-path s3://bucket/tarred/audio__OP_0..255_CL_.tar \
|
||||
--dali-index-base s3://bucket/tarred/dali_index/ \
|
||||
--s3cfg ~/.s3cfg[default]
|
||||
```
|
||||
|
||||
## Comparing Two ASR Models
|
||||
|
||||
### Single manifest with two prediction fields
|
||||
|
||||
If your manifest contains two `pred_text_*` fields (e.g. `pred_text_contextnet`
|
||||
and `pred_text_conformer`):
|
||||
|
||||
```
|
||||
python data_explorer.py path_to_manifest.json \
|
||||
-nc pred_text_contextnet pred_text_conformer
|
||||
```
|
||||
|
||||
### Two separate manifests
|
||||
|
||||
You can also pass two separate manifests (order-invariant). Each manifest must
|
||||
contain a plain `pred_text` field, and `-nc` names the models:
|
||||
|
||||
```
|
||||
python data_explorer.py manifest_model_A.json manifest_model_B.json \
|
||||
-nc pred_text_model_A pred_text_model_B
|
||||
```
|
||||
|
||||
## Manifest Format
|
||||
|
||||
JSON manifest file should contain the following fields:
|
||||
- `audio_filepath` — path to audio file (local path, or filename inside a tar archive when using `--tar-base-path`)
|
||||
- `duration` — duration of the audio file in seconds
|
||||
- `text` — reference transcript
|
||||
|
||||
Errors' analysis requires `pred_text` (ASR transcript) for all utterances.
|
||||
|
||||
Any additional field will be parsed and displayed in the Samples tab.
|
||||
|
||||
## Additional Options
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--vocab` | Vocabulary file to highlight OOV words |
|
||||
| `--port` | Serving port (default: 8050) |
|
||||
| `--estimate-audio-metrics` / `-a` | Estimate audio metrics |
|
||||
| `--base-path` | Base path for relative audio paths in the manifest |
|
||||
| `--tar-base-path` | Local or S3 path to tarred audio files (supports sharded `_OP_..._CL_` patterns) |
|
||||
| `--dali-index-base` | Local or S3 path to DALI index directory for fast tar lookups |
|
||||
| `--s3cfg` / `-s3c` | S3 config file and section, or `AIS` for AIStore env vars |
|
||||
| `--force` / `-f` | Tolerate manifest entries with missing required fields |
|
||||
| `-nc` / `--names_compared` | Two field names for model comparison |
|
||||
| `--show_statistics` / `-shst` | Field name to show statistics for |
|
||||
| `--debug` / `-d` | Enable debug mode |
|
||||
|
||||

|
||||
Executable
+2913
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
boto3
|
||||
braceexpand
|
||||
dash>=2.1.0
|
||||
dash_bootstrap_components>=1.0.3
|
||||
diff_match_patch
|
||||
kaldialign
|
||||
librosa>=0.9.1
|
||||
numpy
|
||||
pandas
|
||||
plotly
|
||||
requests
|
||||
SoundFile
|
||||
tqdm
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
Reference in New Issue
Block a user