faeea commited on
Commit
9038e58
·
verified ·
1 Parent(s): 2dd9831

Update Streaming GOPT checkpoint to v6 ASR-confidence model

Browse files
README.md CHANGED
@@ -10,14 +10,26 @@ license: other
10
 
11
  # custom-gopt-252-eval
12
 
13
- 这个仓库只做一件事:把本地保存的整套评测必需模型集中起来,并提供一个“输入 1 个音频,直接输出整体评分”的最短用法。
14
 
15
- 整体评分看 `total`,分值范围是 `0` `5`。
16
 
17
- ## 1. 下载模型包
18
 
19
- ```bash
20
- python - <<'PY'
 
 
 
 
 
 
 
 
 
 
 
 
21
  from huggingface_hub import snapshot_download
22
 
23
  snapshot_download(
@@ -25,18 +37,17 @@ snapshot_download(
25
  repo_type="model",
26
  local_dir="./hf_models/custom-gopt-252-eval",
27
  )
28
- PY
29
  ```
30
 
31
- 下载后约定:
32
 
33
  ```bash
34
  export BUNDLE_DIR=$PWD/hf_models/custom-gopt-252-eval
35
  ```
36
 
37
- ## 2. 下载运行代码
38
 
39
- 这个模型包不是一个单独的 Transformers 模型;本地推理还要依赖 `custom-gopt` 的模型定义,以及 `Charsiu` 的文本到音素处理代码。
40
 
41
  ```bash
42
  git clone https://github.com/hf49w/custom-gopt.git
@@ -44,9 +55,7 @@ git clone https://github.com/lingjzhu/charsiu third_party/charsiu_repo
44
  git -C third_party/charsiu_repo checkout 13a69f2a22ca0c0962b75cc693399b0ae23a12c9
45
  ```
46
 
47
- ## 3. 安装最小依赖
48
-
49
- 在 `custom-gopt` 仓库根目录执行:
50
 
51
  ```bash
52
  pip install -r requirements.txt
@@ -54,96 +63,82 @@ python -m pip install nltk
54
  python -m nltk.downloader cmudict averaged_perceptron_tagger averaged_perceptron_tagger_eng
55
  ```
56
 
57
- 如果你已经有可用环境,这一步只要保证下面这些包能导入即可:
58
-
59
- - `torch`
60
- - `transformers`
61
- - `librosa`
62
- - `soundfile`
63
- - `g2p_en`
64
- - `g2pM`
65
- - `praatio`
66
- - `nltk`
67
-
68
- ## 4. 准备一个待评分音频
69
-
70
- 要求尽量简单:
71
-
72
- - 英语单句或单段短语音频
73
- - `wav` 最稳妥
74
- - 单声道更好
75
- - `16kHz` 最理想,不是 `16kHz` 也会在脚本里自动重采样
76
-
77
- 假设你的音频路径是:
78
-
79
- ```bash
80
- export AUDIO_PATH=/path/to/demo.wav
81
- ```
82
-
83
- ## 5. 直接跑单音频整体评分
84
-
85
- 在 `custom-gopt` 仓库根目录执行:
86
 
87
  ```bash
88
  python "$BUNDLE_DIR/examples/infer_one_audio.py" \
89
- --audio "$AUDIO_PATH" \
90
  --bundle-dir "$BUNDLE_DIR" \
91
- --repo-root "$PWD" \
92
- --charsiu-src-dir "$PWD/../third_party/charsiu_repo" \
93
  --device cuda \
94
  --output-json ./one_audio_score.json
95
  ```
96
 
97
- 如果你没有 GPU,把 `--device cuda` 改成:
98
 
99
- ```bash
100
- --device cpu
101
- ```
102
 
103
- ## 6. 成功运行后会输出什么
104
 
105
- 脚本会在终端打印一段 JSON,并在 `--output-json` 指定的位置写出同样内容。
 
 
 
 
 
 
 
 
 
106
 
107
- 典型输出结构如下:
108
 
109
  ```json
110
  {
111
- "status": "ok",
112
- "audio_path": "/path/to/demo.wav",
113
- "transcript": "she had your dark suit in greasy wash water all year",
114
  "utterance_scores": {
115
- "accuracy": 3.91,
116
- "completeness": 4.12,
117
- "fluency": 3.66,
118
- "prosodic": 3.58,
119
- "total": 3.82
120
  },
121
- "overall_score": 3.82
122
  }
123
  ```
124
 
125
- 其中:
126
 
127
- - `overall_score` 就是整体评分
128
- - `overall_score` 和 `utterance_scores.total` 是同一个值
129
- - 脚本会把最终分数裁到 `0-5` 区间,便于直接使用
130
 
131
- ## 7. 最短验证命令
 
 
 
132
 
133
- 如果你只是想先确认“模型能不能在本地跑通”,可以直接拿 `Charsiu` 仓库自带的示例音频试一下:
134
 
135
- ```bash
136
- python "$BUNDLE_DIR/examples/infer_one_audio.py" \
137
- --audio "$PWD/../third_party/charsiu_repo/local/SA1.WAV" \
138
- --bundle-dir "$BUNDLE_DIR" \
139
- --repo-root "$PWD" \
140
- --charsiu-src-dir "$PWD/../third_party/charsiu_repo" \
141
- --device cpu
142
- ```
 
 
 
 
 
 
 
 
143
 
144
- ## 8. 说明
145
 
146
- - 这个脚本走的是:`Whisper -> Charsiu -> Streaming GOPT`
147
- - 输入 1 个音频,不需要你自己提供文本
148
- - 模型会先自动识别文本,再对齐音素,最后输出整体评分
149
- - 训练数据是 SpeechOcean762,所以更适合英语学习者短句朗读场景
 
10
 
11
  # custom-gopt-252-eval
12
 
13
+ This repository bundles the models needed for the local evaluation pipeline:
14
 
15
+ `Whisper ASR -> Charsiu phone alignment -> Streaming GOPT pronunciation scoring`
16
 
17
+ 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.
18
 
19
+ ## Files
20
+
21
+ - `streaming_gopt_best/best_audio_model.pth`: best validation Streaming GOPT checkpoint.
22
+ - `streaming_gopt_best/config.json`: model architecture and training arguments.
23
+ - `streaming_gopt_best/inference_assets.json`: normalization statistics and phone-id mapping used by the inference example.
24
+ - `streaming_gopt_best/result.csv`: per-epoch training and validation metrics.
25
+ - `streaming_gopt_best/test_metrics.json`: held-out test metrics for the selected checkpoint.
26
+ - `whisper_best_model/`: Whisper ASR model used by the pipeline.
27
+ - `charsiu_en_w2v2_tiny_fc_10ms/`: Charsiu frame-level phone alignment model.
28
+ - `examples/infer_one_audio.py`: one-audio inference example.
29
+
30
+ ## Download
31
+
32
+ ```python
33
  from huggingface_hub import snapshot_download
34
 
35
  snapshot_download(
 
37
  repo_type="model",
38
  local_dir="./hf_models/custom-gopt-252-eval",
39
  )
 
40
  ```
41
 
42
+ Then set:
43
 
44
  ```bash
45
  export BUNDLE_DIR=$PWD/hf_models/custom-gopt-252-eval
46
  ```
47
 
48
+ ## Code Dependencies
49
 
50
+ This model bundle is not a standalone Transformers model. The inference script needs the model definitions from `custom-gopt` and the official Charsiu code.
51
 
52
  ```bash
53
  git clone https://github.com/hf49w/custom-gopt.git
 
55
  git -C third_party/charsiu_repo checkout 13a69f2a22ca0c0962b75cc693399b0ae23a12c9
56
  ```
57
 
58
+ Install the project dependencies in the `custom-gopt` repository, then install the small extra NLTK assets used by Charsiu/G2P:
 
 
59
 
60
  ```bash
61
  pip install -r requirements.txt
 
63
  python -m nltk.downloader cmudict averaged_perceptron_tagger averaged_perceptron_tagger_eng
64
  ```
65
 
66
+ ## One-Audio Inference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
  ```bash
69
  python "$BUNDLE_DIR/examples/infer_one_audio.py" \
70
+ --audio /path/to/demo.wav \
71
  --bundle-dir "$BUNDLE_DIR" \
72
+ --repo-root /path/to/custom-gopt \
73
+ --charsiu-src-dir /path/to/third_party/charsiu_repo \
74
  --device cuda \
75
  --output-json ./one_audio_score.json
76
  ```
77
 
78
+ Use `--device cpu` when CUDA is unavailable.
79
 
80
+ The example accepts an English short utterance audio file. A mono 16 kHz WAV is preferred; other sample rates are resampled inside the script.
81
+
82
+ ## Output Meaning
83
 
84
+ The Streaming GOPT model forward pass returns:
85
 
86
+ - `u1`: utterance-level accuracy.
87
+ - `u2`: utterance-level completeness.
88
+ - `u3`: utterance-level fluency.
89
+ - `u4`: utterance-level prosodic score.
90
+ - `u5`: utterance-level total score.
91
+ - `p`: phone-level pronunciation score for each visible phone token.
92
+ - `w1`: word-level accuracy.
93
+ - `w2`: word-level stress.
94
+ - `w3`: word-level total score.
95
+ - `w4`: word-level ASR accuracy.
96
 
97
+ The example script reports the user-facing utterance scores as:
98
 
99
  ```json
100
  {
 
 
 
101
  "utterance_scores": {
102
+ "accuracy": 8.4,
103
+ "completeness": 10.0,
104
+ "fluency": 8.3,
105
+ "prosodic": 7.9,
106
+ "total": 8.0
107
  },
108
+ "overall_score": 8.0
109
  }
110
  ```
111
 
112
+ For `accuracy`, `completeness`, `fluency`, `prosodic`, and `total`, higher is better. These scores follow the SpeechOcean-style pronunciation scoring scale used during training.
113
 
114
+ The word-level outputs have this meaning:
 
 
115
 
116
+ - `word_accuracy`: pronunciation accuracy for the word.
117
+ - `word_stress`: stress score for the word.
118
+ - `word_total`: overall word score.
119
+ - `word_asr_accuracy`: whether the ASR-driven word matched the expected word.
120
 
121
+ `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.
122
 
123
+ 中文提示:词级别的 `asr_accuracy` 评分可以当作“这个词是否读对”的辅助指标。它不替代发音分数本身,但很适合用来标记某个词在 ASR 视角下是否正确读出。
124
+
125
+ ## Test Metrics
126
+
127
+ Best checkpoint epoch: `11`
128
+
129
+ Held-out test metrics:
130
+
131
+ - `phone_test_mse`: `0.049197`
132
+ - `phone_test_pcc`: `0.397571`
133
+ - `utt_test_pcc`: `[0.651909, 0.012690, 0.724998, 0.733279, 0.681940]`
134
+ - `word_test_pcc`: `[0.404714, -0.003912, 0.412258, 0.417467]`
135
+
136
+ The word PCC order is:
137
+
138
+ `accuracy`, `stress`, `total`, `asr_accuracy`
139
 
140
+ ## Notes
141
 
142
+ - The model was trained on SpeechOcean762-style English learner speech.
143
+ - 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.
144
+ - 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.
 
bundle_manifest.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "repo_id": "faeea/custom-gopt-252-eval",
3
- "description": "Bundle of the locally downloaded best validation Streaming GOPT checkpoint plus the Whisper and Charsiu models required by the evaluation pipeline.",
4
  "artifacts": [
5
  {
6
  "path": "streaming_gopt_best/best_audio_model.pth",
@@ -10,7 +10,7 @@
10
  {
11
  "path": "streaming_gopt_best/config.json",
12
  "type": "streaming_gopt_config",
13
- "purpose": "Network shape and training arguments used to restore the model."
14
  },
15
  {
16
  "path": "streaming_gopt_best/result.csv",
@@ -22,54 +22,81 @@
22
  "type": "test_metrics",
23
  "purpose": "Held-out test metrics for the best validation checkpoint."
24
  },
 
 
 
 
 
25
  {
26
  "path": "whisper_best_model",
27
  "type": "transformers_whisper_model",
28
- "purpose": "ASR model used to build streaming ASR-driven GOPT chunks."
29
  },
30
  {
31
  "path": "charsiu_en_w2v2_tiny_fc_10ms",
32
  "type": "charsiu_aligner_model",
33
- "purpose": "Frame-level phone alignment model used by preprocessing."
34
- },
35
- {
36
- "path": "examples/eval_streaming_gopt_test.py",
37
- "type": "example_script",
38
- "purpose": "Minimal evaluation script for val/test split using the bundled best GOPT checkpoint."
39
  },
40
  {
41
  "path": "examples/infer_one_audio.py",
42
  "type": "example_script",
43
- "purpose": "Minimal one-audio local inference script that prints the overall utterance score."
44
  },
45
  {
46
- "path": "streaming_gopt_best/inference_assets.json",
47
- "type": "inference_metadata",
48
- "purpose": "Normalization stats and phone-id mapping required for one-audio local inference."
49
  }
50
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  "best_validation_summary": {
52
  "selection_metric": "phone_val_mse",
53
- "best_epoch": 15,
54
- "phone_val_mse": 0.04897475987672806,
55
- "phone_val_pcc": 0.24482591936290432,
56
- "utt_val_pcc_total": 0.6696266195414817,
57
- "word_val_pcc_total": 0.24699408632096473
 
58
  },
59
  "test_summary": {
60
- "phone_test_mse": 0.04749840870499611,
61
- "phone_test_pcc": 0.3332444625995981,
62
  "utt_test_pcc": [
63
- 0.6184778675115561,
64
- -0.005628494483717365,
65
- 0.7233702728305461,
66
- 0.7387418272039076,
67
- 0.6823243104620896
68
  ],
69
  "word_test_pcc": [
70
- 0.3099214468824142,
71
- 0.022433912396827224,
72
- 0.321762854413528
 
 
 
 
 
 
 
73
  ]
74
  },
75
  "code_dependencies": {
 
1
  {
2
  "repo_id": "faeea/custom-gopt-252-eval",
3
+ "description": "Bundle of the v6 ASR-confidence Streaming GOPT checkpoint plus the Whisper and Charsiu models required by the local evaluation pipeline.",
4
  "artifacts": [
5
  {
6
  "path": "streaming_gopt_best/best_audio_model.pth",
 
10
  {
11
  "path": "streaming_gopt_best/config.json",
12
  "type": "streaming_gopt_config",
13
+ "purpose": "Network shape and training arguments used to restore the v6 ASR-confidence model."
14
  },
15
  {
16
  "path": "streaming_gopt_best/result.csv",
 
22
  "type": "test_metrics",
23
  "purpose": "Held-out test metrics for the best validation checkpoint."
24
  },
25
+ {
26
+ "path": "streaming_gopt_best/inference_assets.json",
27
+ "type": "inference_metadata",
28
+ "purpose": "Normalization stats, feature dimension, and phone-id mapping required for one-audio local inference."
29
+ },
30
  {
31
  "path": "whisper_best_model",
32
  "type": "transformers_whisper_model",
33
+ "purpose": "ASR model used to build ASR-driven GOPT chunks."
34
  },
35
  {
36
  "path": "charsiu_en_w2v2_tiny_fc_10ms",
37
  "type": "charsiu_aligner_model",
38
+ "purpose": "Frame-level phone alignment model used by preprocessing and inference."
 
 
 
 
 
39
  },
40
  {
41
  "path": "examples/infer_one_audio.py",
42
  "type": "example_script",
43
+ "purpose": "Minimal one-audio local inference script that prints utterance-level scores."
44
  },
45
  {
46
+ "path": "examples/eval_streaming_gopt_test.py",
47
+ "type": "example_script",
48
+ "purpose": "Minimal evaluation script for val/test split using the bundled best GOPT checkpoint."
49
  }
50
  ],
51
+ "model_outputs": {
52
+ "utterance": [
53
+ "accuracy",
54
+ "completeness",
55
+ "fluency",
56
+ "prosodic",
57
+ "total"
58
+ ],
59
+ "phone": [
60
+ "phone pronunciation score"
61
+ ],
62
+ "word": [
63
+ "accuracy",
64
+ "stress",
65
+ "total",
66
+ "asr_accuracy"
67
+ ],
68
+ "word_asr_accuracy_note": "The word-level ASR accuracy score can be used as an auxiliary indicator of whether the word was read correctly."
69
+ },
70
  "best_validation_summary": {
71
  "selection_metric": "phone_val_mse",
72
+ "best_epoch": 11,
73
+ "phone_val_mse": 0.04760764539241791,
74
+ "phone_val_pcc": 0.34831968338670993,
75
+ "utt_val_pcc_total": 0.661865583803676,
76
+ "word_val_pcc_total": 0.3418123225833971,
77
+ "word_val_pcc_asr_accuracy": 0.3633849619530143
78
  },
79
  "test_summary": {
80
+ "phone_test_mse": 0.04919730871915817,
81
+ "phone_test_pcc": 0.3975705055993251,
82
  "utt_test_pcc": [
83
+ 0.651909193610124,
84
+ 0.012690043750859805,
85
+ 0.7249977587357453,
86
+ 0.7332794084754206,
87
+ 0.681940037784353
88
  ],
89
  "word_test_pcc": [
90
+ 0.4047142491023989,
91
+ -0.0039119825110344765,
92
+ 0.4122583381095728,
93
+ 0.41746734262039764
94
+ ],
95
+ "word_score_names": [
96
+ "accuracy",
97
+ "stress",
98
+ "total",
99
+ "asr_accuracy"
100
  ]
101
  },
102
  "code_dependencies": {
examples/infer_one_audio.py CHANGED
@@ -296,7 +296,7 @@ def predict_scores(model, x, p, main_context_tokens, right_context_tokens):
296
  right_context_tokens=int(right_context_tokens),
297
  )
298
  values = torch.cat([u1, u2, u3, u4, u5], dim=1).squeeze(0).cpu().numpy() * 5.0
299
- values = np.clip(values, 0.0, 5.0)
300
  return {name: float(value) for name, value in zip(SCORE_NAMES, values.tolist())}
301
 
302
 
 
296
  right_context_tokens=int(right_context_tokens),
297
  )
298
  values = torch.cat([u1, u2, u3, u4, u5], dim=1).squeeze(0).cpu().numpy() * 5.0
299
+ values = np.clip(values, 0.0, 10.0)
300
  return {name: float(value) for name, value in zip(SCORE_NAMES, values.tolist())}
301
 
302
 
streaming_gopt_best/best_audio_model.pth CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:c86a67b3157d95635e5aebaa10e4a8e45eacf5b052201a2444a7ec61d26b8a20
3
- size 170812
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d3ab226af75d1dfd7dd71cbcf512a9441aa1200ba2079d34470f81159cd6b977
3
+ size 190932
streaming_gopt_best/config.json CHANGED
@@ -1,11 +1,11 @@
1
  {
2
- "data_dir": "/DATA_2/guest/custom-gopt/data/streaming_asr_gopt_v4",
3
- "input_dim": 46,
4
  "phn_num": 40,
5
- "seq_len": 499,
6
  "args": {
7
- "data_dir": "/DATA_2/guest/custom-gopt/data/streaming_asr_gopt_v4",
8
- "exp_dir": "/DATA_2/guest/custom-gopt/exp/streaming-asr-gopt",
9
  "lr": 0.001,
10
  "n_epochs": 100,
11
  "depth": 3,
@@ -14,15 +14,16 @@
14
  "embed_dim": 24,
15
  "loss_w_phn": 1.0,
16
  "loss_w_word": 1.0,
 
17
  "loss_w_utt": 1.0,
18
  "model": "streaming_gopt",
19
  "noise": 0.0,
20
- "num_workers": 8,
21
  "device": "cuda",
22
  "main_context_tokens": "4,8,12,16",
23
  "right_context_tokens": "0,1,2,4",
24
- "compile": true,
25
- "tf32": true,
26
  "seed": 1337,
27
  "resume": false,
28
  "main_context_token_choices": [
 
1
  {
2
+ "data_dir": "/DATA_2/guest/custom-gopt/data/streaming_asr_gopt_v6_asrconf",
3
+ "input_dim": 47,
4
  "phn_num": 40,
5
+ "seq_len": 692,
6
  "args": {
7
+ "data_dir": "/DATA_2/guest/custom-gopt/data/streaming_asr_gopt_v6_asrconf",
8
+ "exp_dir": "/DATA_2/guest/custom-gopt/exp/streaming-asr-gopt-v6-asrconf",
9
  "lr": 0.001,
10
  "n_epochs": 100,
11
  "depth": 3,
 
14
  "embed_dim": 24,
15
  "loss_w_phn": 1.0,
16
  "loss_w_word": 1.0,
17
+ "loss_w_word_asr": 1.0,
18
  "loss_w_utt": 1.0,
19
  "model": "streaming_gopt",
20
  "noise": 0.0,
21
+ "num_workers": 4,
22
  "device": "cuda",
23
  "main_context_tokens": "4,8,12,16",
24
  "right_context_tokens": "0,1,2,4",
25
+ "compile": false,
26
+ "tf32": false,
27
  "seed": 1337,
28
  "resume": false,
29
  "main_context_token_choices": [
streaming_gopt_best/inference_assets.json CHANGED
@@ -1,8 +1,8 @@
1
  {
2
  "sample_rate": 16000,
3
- "train_norm_mean": 0.04211217910051346,
4
- "train_norm_std": 0.23447780311107635,
5
- "feat_dim": 46,
6
  "phn_num": 40,
7
  "phn_dict": {
8
  "W": 0,
 
1
  {
2
  "sample_rate": 16000,
3
+ "train_norm_mean": 0.0722440779209137,
4
+ "train_norm_std": 0.25949764251708984,
5
+ "feat_dim": 47,
6
  "phn_num": 40,
7
  "phn_dict": {
8
  "W": 0,
streaming_gopt_best/result.csv CHANGED
The diff for this file is too large to render. See raw diff
 
streaming_gopt_best/test_metrics.json CHANGED
@@ -1,29 +1,37 @@
1
  {
2
- "phone_test_mse": 0.04749840870499611,
3
- "phone_test_pcc": 0.3332444625995981,
4
  "utt_test_mse": [
5
- 0.060593076050281525,
6
- 0.010257643647491932,
7
- 0.037500832229852676,
8
- 0.03365592285990715,
9
- 0.05141453817486763
10
  ],
11
  "utt_test_pcc": [
12
- 0.6184778675115561,
13
- -0.005628494483717365,
14
- 0.7233702728305461,
15
- 0.7387418272039076,
16
- 0.6823243104620896
17
  ],
18
  "word_test_mse": [
19
- 0.05728999897837639,
20
- 0.0032619887497276068,
21
- 0.04410763829946518
 
22
  ],
23
  "word_test_pcc": [
24
- 0.3099214468824142,
25
- 0.022433912396827224,
26
- 0.321762854413528
 
27
  ],
28
- "best_epoch": 15
 
 
 
 
 
 
29
  }
 
1
  {
2
+ "phone_test_mse": 0.04919730871915817,
3
+ "phone_test_pcc": 0.3975705055993251,
4
  "utt_test_mse": [
5
+ 0.051985688507556915,
6
+ 0.0016903950599953532,
7
+ 0.03446277603507042,
8
+ 0.03239584341645241,
9
+ 0.04794545844197273
10
  ],
11
  "utt_test_pcc": [
12
+ 0.651909193610124,
13
+ 0.012690043750859805,
14
+ 0.7249977587357453,
15
+ 0.7332794084754206,
16
+ 0.681940037784353
17
  ],
18
  "word_test_mse": [
19
+ 0.06279397755861282,
20
+ 0.0037991644348949194,
21
+ 0.04641091078519821,
22
+ 0.14399507641792297
23
  ],
24
  "word_test_pcc": [
25
+ 0.4047142491023989,
26
+ -0.0039119825110344765,
27
+ 0.4122583381095728,
28
+ 0.41746734262039764
29
  ],
30
+ "word_score_names": [
31
+ "accuracy",
32
+ "stress",
33
+ "total",
34
+ "asr_accuracy"
35
+ ],
36
+ "best_epoch": 11
37
  }