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.