File size: 5,046 Bytes
00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 2dd9831 00f6d1c 9038e58 00f6d1c 2dd9831 9038e58 2dd9831 9038e58 2dd9831 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 2dd9831 9038e58 2dd9831 9038e58 2dd9831 9038e58 2dd9831 9038e58 2dd9831 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 00f6d1c 9038e58 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | ---
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.
|