faeea's picture
Update Streaming GOPT checkpoint to v6 ASR-confidence model
9038e58 verified
|
Raw
History Blame Contribute Delete
5.05 kB
---
tags:
- speech
- whisper
- forced-alignment
- pronunciation-assessment
- gopt
license: other
---
# custom-gopt-252-eval
This repository bundles the models needed for the local evaluation pipeline:
`Whisper ASR -> Charsiu phone alignment -> Streaming GOPT pronunciation scoring`
The current Streaming GOPT checkpoint is the v6 ASR-confidence version. It uses 47-dimensional phone-segment features: the previous Charsiu-derived acoustic features plus one ASR confidence feature.
## Files
- `streaming_gopt_best/best_audio_model.pth`: best validation Streaming GOPT checkpoint.
- `streaming_gopt_best/config.json`: model architecture and training arguments.
- `streaming_gopt_best/inference_assets.json`: normalization statistics and phone-id mapping used by the inference example.
- `streaming_gopt_best/result.csv`: per-epoch training and validation metrics.
- `streaming_gopt_best/test_metrics.json`: held-out test metrics for the selected checkpoint.
- `whisper_best_model/`: Whisper ASR model used by the pipeline.
- `charsiu_en_w2v2_tiny_fc_10ms/`: Charsiu frame-level phone alignment model.
- `examples/infer_one_audio.py`: one-audio inference example.
## Download
```python
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="faeea/custom-gopt-252-eval",
repo_type="model",
local_dir="./hf_models/custom-gopt-252-eval",
)
```
Then set:
```bash
export BUNDLE_DIR=$PWD/hf_models/custom-gopt-252-eval
```
## Code Dependencies
This model bundle is not a standalone Transformers model. The inference script needs the model definitions from `custom-gopt` and the official Charsiu code.
```bash
git clone https://github.com/hf49w/custom-gopt.git
git clone https://github.com/lingjzhu/charsiu third_party/charsiu_repo
git -C third_party/charsiu_repo checkout 13a69f2a22ca0c0962b75cc693399b0ae23a12c9
```
Install the project dependencies in the `custom-gopt` repository, then install the small extra NLTK assets used by Charsiu/G2P:
```bash
pip install -r requirements.txt
python -m pip install nltk
python -m nltk.downloader cmudict averaged_perceptron_tagger averaged_perceptron_tagger_eng
```
## One-Audio Inference
```bash
python "$BUNDLE_DIR/examples/infer_one_audio.py" \
--audio /path/to/demo.wav \
--bundle-dir "$BUNDLE_DIR" \
--repo-root /path/to/custom-gopt \
--charsiu-src-dir /path/to/third_party/charsiu_repo \
--device cuda \
--output-json ./one_audio_score.json
```
Use `--device cpu` when CUDA is unavailable.
The example accepts an English short utterance audio file. A mono 16 kHz WAV is preferred; other sample rates are resampled inside the script.
## Output Meaning
The Streaming GOPT model forward pass returns:
- `u1`: utterance-level accuracy.
- `u2`: utterance-level completeness.
- `u3`: utterance-level fluency.
- `u4`: utterance-level prosodic score.
- `u5`: utterance-level total score.
- `p`: phone-level pronunciation score for each visible phone token.
- `w1`: word-level accuracy.
- `w2`: word-level stress.
- `w3`: word-level total score.
- `w4`: word-level ASR accuracy.
The example script reports the user-facing utterance scores as:
```json
{
"utterance_scores": {
"accuracy": 8.4,
"completeness": 10.0,
"fluency": 8.3,
"prosodic": 7.9,
"total": 8.0
},
"overall_score": 8.0
}
```
For `accuracy`, `completeness`, `fluency`, `prosodic`, and `total`, higher is better. These scores follow the SpeechOcean-style pronunciation scoring scale used during training.
The word-level outputs have this meaning:
- `word_accuracy`: pronunciation accuracy for the word.
- `word_stress`: stress score for the word.
- `word_total`: overall word score.
- `word_asr_accuracy`: whether the ASR-driven word matched the expected word.
`word_asr_accuracy` is a 0/1-style score. In practice, it can be used as a word-read-correctly indicator: a value near `1` means the word was recognized/matched as read correctly, while a value near `0` means the word was not matched, not recognized correctly, or was not committed yet in the streaming prefix.
中文提示:词级别的 `asr_accuracy` 评分可以当作“这个词是否读对”的辅助指标。它不替代发音分数本身,但很适合用来标记某个词在 ASR 视角下是否正确读出。
## Test Metrics
Best checkpoint epoch: `11`
Held-out test metrics:
- `phone_test_mse`: `0.049197`
- `phone_test_pcc`: `0.397571`
- `utt_test_pcc`: `[0.651909, 0.012690, 0.724998, 0.733279, 0.681940]`
- `word_test_pcc`: `[0.404714, -0.003912, 0.412258, 0.417467]`
The word PCC order is:
`accuracy`, `stress`, `total`, `asr_accuracy`
## Notes
- The model was trained on SpeechOcean762-style English learner speech.
- The pipeline does not require a reference transcript at inference time; it first obtains a transcript from Whisper, aligns phones with Charsiu, then scores with Streaming GOPT.
- ASR errors can affect downstream word and phone alignment. Use `word_asr_accuracy` to identify words that the ASR-driven pipeline likely did or did not match correctly.