hunterschep commited on
Commit
1579350
·
verified ·
1 Parent(s): 8f278ba

Publish current best Formosan ASR checkpoint for Saisiyat

Browse files
.gitattributes CHANGED
@@ -1,35 +1 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  *.safetensors filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
README.md ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - "xsy"
4
+ library_name: transformers
5
+ pipeline_tag: automatic-speech-recognition
6
+ tags:
7
+ - formosanbank
8
+ - formosan
9
+ - endangered-languages
10
+ - speech
11
+ - asr
12
+ - xlsr53
13
+ - tacl
14
+ base_model: facebook/wav2vec2-large-xlsr-53
15
+ base_model_relation: finetune
16
+ license: cc-by-4.0
17
+ metrics:
18
+ - wer
19
+ - cer
20
+ ---
21
+
22
+ # Formosan ASR — Saisiyat
23
+
24
+ This is FormosanBank's current general-purpose automatic speech recognition
25
+ checkpoint for **Saisiyat**. It was selected by the lowest normalized
26
+ micro word error rate among the completed language-level TACL systems evaluated
27
+ on the same frozen all-corpora test partition.
28
+
29
+ ## Model
30
+
31
+ - Repository: `FormosanBank/formosan-asr-saisiyat`
32
+ - Architecture family: **XLS-R 53**
33
+ - Training path: **language-pooled supervised fine-tuning**
34
+ - Base model: `facebook/wav2vec2-large-xlsr-53`
35
+ - Parameters are stored in `model.safetensors`
36
+
37
+ ### Training lineage
38
+
39
+ 1. Base checkpoint: `facebook/wav2vec2-large-xlsr-53`.
40
+ 2. Supervised ASR fine-tuning on the target language's pooled training corpora.
41
+
42
+ The target-language supervised stage used `ILRDF`, `NTU`, `ePark1`, `ePark2`, `ePark3`. The experiment used
43
+ `dataset_v1`, frozen `split_v2`, normalization `formosan_safe_v1`, and seed
44
+ `13`. Full machine-readable provenance is included in
45
+ `training_config.json`.
46
+
47
+ ## Evaluation
48
+
49
+ Evaluation uses the frozen, leakage-controlled `split_v2` test manifests and
50
+ normalized text. Metrics are computed by summing edit counts across all
51
+ available Saisiyat test corpora, so larger corpora contribute in
52
+ proportion to their reference tokens.
53
+
54
+ - Normalized micro WER: **22.93%**
55
+ - Normalized micro CER: **7.93%**
56
+ - Test utterances: **1,189**
57
+ - Test corpora: **5**
58
+ - Automated readiness: **pass**
59
+
60
+ | Corpus | Utterances | WER | CER |
61
+ |---|---:|---:|---:|
62
+ | ILRDF | 610 | 21.16% | 8.10% |
63
+ | NTU | 104 | 65.11% | 28.31% |
64
+ | ePark1 | 75 | 15.16% | 2.84% |
65
+ | ePark2 | 106 | 10.68% | 2.62% |
66
+ | ePark3 | 294 | 16.95% | 4.52% |
67
+
68
+ Detailed edit counts are provided in `evaluation_results.json` and
69
+ `metrics_by_corpus.tsv`.
70
+
71
+ These figures are specific to the frozen TACL evaluation protocol. They should
72
+ not be compared directly with the April 2026 stage-one releases, which used a
73
+ different experiment snapshot.
74
+
75
+ ## Usage
76
+
77
+ ```python
78
+ from transformers import pipeline
79
+
80
+ repo_id = "FormosanBank/formosan-asr-saisiyat"
81
+ transcribe = pipeline("automatic-speech-recognition", model=repo_id)
82
+ result = transcribe("path/to/16khz_audio.wav")
83
+ print(result["text"])
84
+ ```
85
+
86
+ For long recordings, segment the audio before inference. The training recipe
87
+ used utterances between 2 and 20 seconds.
88
+
89
+ ## Intended use
90
+
91
+ This checkpoint supports research, education, language documentation, and
92
+ revitalization work involving Saisiyat. Human review is recommended
93
+ before using transcriptions in archives, publications, teaching materials, or
94
+ other consequential settings.
95
+
96
+ ## Limitations
97
+
98
+ Performance varies substantially across corpora, speakers, recording
99
+ conditions, dialects, speaking styles, and orthographic conventions. The
100
+ aggregate score can hide weak performance on a particular corpus. The model
101
+ may omit, substitute, or hallucinate words and should not be treated as an
102
+ authoritative transcription source.
103
+
104
+ ## Data provenance
105
+
106
+ Training and evaluation artifacts come from the frozen Hunter Formosan TACL
107
+ pipeline. Source corpus IDs can include Bible, ILRDF, NTU, ePark1, ePark2,
108
+ ePark3, Xuan, YeddaPalemeqBlog, Youtube, and YutasWilang, depending on language
109
+ availability. Audio is not redistributed in this repository. Underlying
110
+ recordings retain their original rights and access conditions.
111
+
112
+ ## License and attribution
113
+
114
+ This model release and FormosanBank annotations/metadata are provided under
115
+ **CC BY 4.0**. The upstream `facebook/wav2vec2-large-xlsr-53` checkpoint is distributed under
116
+ Apache 2.0. Users remain responsible for respecting the terms associated with
117
+ underlying source recordings.
118
+
119
+ Please cite FormosanBank:
120
+
121
+ ```bibtex
122
+ @misc{mohamed2024formosanbank,
123
+ author = {Mohamed, W. and Le Ferrand, É. and Sung, L.-M. and Prud'hommeaux, E. and Hartshorne, J. K.},
124
+ title = {FormosanBank},
125
+ year = {2024},
126
+ note = {Electronic Resource},
127
+ url = {https://ai4commsci.gitbook.io/formosanbank}
128
+ }
129
+ ```
added_tokens.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "</s>": 32,
3
+ "<s>": 31
4
+ }
config.json ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "facebook/wav2vec2-large-xlsr-53",
3
+ "activation_dropout": 0.0,
4
+ "adapter_attn_dim": null,
5
+ "adapter_kernel_size": 3,
6
+ "adapter_stride": 2,
7
+ "add_adapter": false,
8
+ "apply_spec_augment": true,
9
+ "architectures": [
10
+ "Wav2Vec2ForCTC"
11
+ ],
12
+ "attention_dropout": 0.0,
13
+ "bos_token_id": 1,
14
+ "classifier_proj_size": 256,
15
+ "codevector_dim": 768,
16
+ "contrastive_logits_temperature": 0.1,
17
+ "conv_bias": true,
18
+ "conv_dim": [
19
+ 512,
20
+ 512,
21
+ 512,
22
+ 512,
23
+ 512,
24
+ 512,
25
+ 512
26
+ ],
27
+ "conv_kernel": [
28
+ 10,
29
+ 3,
30
+ 3,
31
+ 3,
32
+ 3,
33
+ 2,
34
+ 2
35
+ ],
36
+ "conv_stride": [
37
+ 5,
38
+ 2,
39
+ 2,
40
+ 2,
41
+ 2,
42
+ 2,
43
+ 2
44
+ ],
45
+ "ctc_loss_reduction": "mean",
46
+ "ctc_zero_infinity": true,
47
+ "diversity_loss_weight": 0.1,
48
+ "do_stable_layer_norm": true,
49
+ "eos_token_id": 2,
50
+ "feat_extract_activation": "gelu",
51
+ "feat_extract_dropout": 0.0,
52
+ "feat_extract_norm": "layer",
53
+ "feat_proj_dropout": 0.0,
54
+ "feat_quantizer_dropout": 0.0,
55
+ "final_dropout": 0.0,
56
+ "gradient_checkpointing": false,
57
+ "hidden_act": "gelu",
58
+ "hidden_dropout": 0.0,
59
+ "hidden_size": 1024,
60
+ "initializer_range": 0.02,
61
+ "intermediate_size": 4096,
62
+ "layer_norm_eps": 1e-05,
63
+ "layerdrop": 0.0,
64
+ "mask_channel_length": 10,
65
+ "mask_channel_min_space": 1,
66
+ "mask_channel_other": 0.0,
67
+ "mask_channel_prob": 0.0,
68
+ "mask_channel_selection": "static",
69
+ "mask_feature_length": 10,
70
+ "mask_feature_min_masks": 0,
71
+ "mask_feature_prob": 0.0,
72
+ "mask_time_length": 10,
73
+ "mask_time_min_masks": 2,
74
+ "mask_time_min_space": 1,
75
+ "mask_time_other": 0.0,
76
+ "mask_time_prob": 0.0,
77
+ "mask_time_selection": "static",
78
+ "model_type": "wav2vec2",
79
+ "num_adapter_layers": 3,
80
+ "num_attention_heads": 16,
81
+ "num_codevector_groups": 2,
82
+ "num_codevectors_per_group": 320,
83
+ "num_conv_pos_embedding_groups": 16,
84
+ "num_conv_pos_embeddings": 128,
85
+ "num_feat_extract_layers": 7,
86
+ "num_hidden_layers": 24,
87
+ "num_negatives": 100,
88
+ "output_hidden_size": 1024,
89
+ "pad_token_id": 30,
90
+ "proj_codevector_dim": 768,
91
+ "tdnn_dilation": [
92
+ 1,
93
+ 2,
94
+ 3,
95
+ 1,
96
+ 1
97
+ ],
98
+ "tdnn_dim": [
99
+ 512,
100
+ 512,
101
+ 512,
102
+ 512,
103
+ 1500
104
+ ],
105
+ "tdnn_kernel": [
106
+ 5,
107
+ 3,
108
+ 3,
109
+ 1,
110
+ 1
111
+ ],
112
+ "torch_dtype": "float32",
113
+ "transformers_version": "4.46.3",
114
+ "use_weighted_layer_sum": false,
115
+ "vocab_size": 33,
116
+ "xvector_output_dim": 512
117
+ }
dev_selection_history.tsv ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ step train_loss dev_loss selection_metric selection_scope selection_cer selection_wer macro_cell_cer macro_cell_wer macro_language_cer macro_language_wer micro_cer micro_wer dev_cells dev_languages dev_rows
2
+ 1 21.27985954284668 19.994058513001306 decoded_dev_normalized_cer macro_cell 0.965583 1.000105 0.965583 1.000105 0.948863 1.000226 0.948863 1.000226 5 1 1190
3
+ 7105 0.03559953719377518 0.4101992818783194 decoded_dev_normalized_cer macro_cell 0.096367 0.286279 0.096367 0.286279 0.079569 0.253559 0.079569 0.253559 5 1 1190
4
+ 14210 0.0427422970533371 0.4840303489675858 decoded_dev_normalized_cer macro_cell 0.092797 0.267644 0.092797 0.267644 0.077902 0.236271 0.077902 0.236271 5 1 1190
5
+ 21315 0.007264204788953066 0.578342515937734 decoded_dev_normalized_cer macro_cell 0.096725 0.267729 0.096725 0.267729 0.082294 0.238418 0.082294 0.238418 5 1 1190
6
+ 28420 0.0392894484102726 0.6794542931395289 decoded_dev_normalized_cer macro_cell 0.094822 0.264003 0.094822 0.264003 0.083255 0.237175 0.083255 0.237175 5 1 1190
7
+ 35524 0.033548079431056976 0.65875939322298 decoded_dev_normalized_cer macro_cell 0.101889 0.288365 0.101889 0.288365 0.087843 0.257401 0.087843 0.257401 5 1 1190
evaluation_results.json ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "aggregate": {
3
+ "cer_normalized_micro": 0.0792860273317662,
4
+ "character_errors": 3980,
5
+ "corpora": 5,
6
+ "reference_characters": 50198,
7
+ "reference_words": 8748,
8
+ "utterances": 1189,
9
+ "wer_normalized_micro": 0.2293095564700503,
10
+ "word_errors": 2006
11
+ },
12
+ "by_corpus": [
13
+ {
14
+ "cer_normalized": "0.08096",
15
+ "cer_raw": "0.08096",
16
+ "char_deletions": "682",
17
+ "char_deletions_raw": "682",
18
+ "char_insertions": "482",
19
+ "char_insertions_raw": "482",
20
+ "char_substitutions": "621",
21
+ "char_substitutions_raw": "621",
22
+ "eval_corpus": "ILRDF",
23
+ "eval_language": "saisiyat",
24
+ "eval_utterances": "610",
25
+ "reference_characters": "22048",
26
+ "reference_characters_raw": "22048",
27
+ "reference_words": "3766",
28
+ "reference_words_raw": "3766",
29
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
30
+ "wer_normalized": "0.21163",
31
+ "wer_raw": "0.21163",
32
+ "word_deletions": "108",
33
+ "word_deletions_raw": "108",
34
+ "word_insertions": "77",
35
+ "word_insertions_raw": "77",
36
+ "word_substitutions": "612",
37
+ "word_substitutions_raw": "612"
38
+ },
39
+ {
40
+ "cer_normalized": "0.283092",
41
+ "cer_raw": "0.283092",
42
+ "char_deletions": "542",
43
+ "char_deletions_raw": "542",
44
+ "char_insertions": "304",
45
+ "char_insertions_raw": "304",
46
+ "char_substitutions": "403",
47
+ "char_substitutions_raw": "403",
48
+ "eval_corpus": "NTU",
49
+ "eval_language": "saisiyat",
50
+ "eval_utterances": "104",
51
+ "reference_characters": "4412",
52
+ "reference_characters_raw": "4412",
53
+ "reference_words": "877",
54
+ "reference_words_raw": "877",
55
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
56
+ "wer_normalized": "0.651083",
57
+ "wer_raw": "0.651083",
58
+ "word_deletions": "89",
59
+ "word_deletions_raw": "89",
60
+ "word_insertions": "40",
61
+ "word_insertions_raw": "40",
62
+ "word_substitutions": "442",
63
+ "word_substitutions_raw": "442"
64
+ },
65
+ {
66
+ "cer_normalized": "0.028431",
67
+ "cer_raw": "0.028431",
68
+ "char_deletions": "18",
69
+ "char_deletions_raw": "18",
70
+ "char_insertions": "10",
71
+ "char_insertions_raw": "10",
72
+ "char_substitutions": "30",
73
+ "char_substitutions_raw": "30",
74
+ "eval_corpus": "ePark1",
75
+ "eval_language": "saisiyat",
76
+ "eval_utterances": "75",
77
+ "reference_characters": "2040",
78
+ "reference_characters_raw": "2040",
79
+ "reference_words": "343",
80
+ "reference_words_raw": "343",
81
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
82
+ "wer_normalized": "0.151603",
83
+ "wer_raw": "0.151603",
84
+ "word_deletions": "6",
85
+ "word_deletions_raw": "6",
86
+ "word_insertions": "2",
87
+ "word_insertions_raw": "2",
88
+ "word_substitutions": "44",
89
+ "word_substitutions_raw": "44"
90
+ },
91
+ {
92
+ "cer_normalized": "0.02624",
93
+ "cer_raw": "0.02624",
94
+ "char_deletions": "77",
95
+ "char_deletions_raw": "77",
96
+ "char_insertions": "27",
97
+ "char_insertions_raw": "27",
98
+ "char_substitutions": "24",
99
+ "char_substitutions_raw": "24",
100
+ "eval_corpus": "ePark2",
101
+ "eval_language": "saisiyat",
102
+ "eval_utterances": "106",
103
+ "reference_characters": "4878",
104
+ "reference_characters_raw": "4878",
105
+ "reference_words": "824",
106
+ "reference_words_raw": "824",
107
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
108
+ "wer_normalized": "0.106796",
109
+ "wer_raw": "0.106796",
110
+ "word_deletions": "16",
111
+ "word_deletions_raw": "16",
112
+ "word_insertions": "8",
113
+ "word_insertions_raw": "8",
114
+ "word_substitutions": "64",
115
+ "word_substitutions_raw": "64"
116
+ },
117
+ {
118
+ "cer_normalized": "0.045184",
119
+ "cer_raw": "0.045184",
120
+ "char_deletions": "371",
121
+ "char_deletions_raw": "371",
122
+ "char_insertions": "245",
123
+ "char_insertions_raw": "245",
124
+ "char_substitutions": "144",
125
+ "char_substitutions_raw": "144",
126
+ "eval_corpus": "ePark3",
127
+ "eval_language": "saisiyat",
128
+ "eval_utterances": "294",
129
+ "reference_characters": "16820",
130
+ "reference_characters_raw": "16820",
131
+ "reference_words": "2938",
132
+ "reference_words_raw": "2938",
133
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
134
+ "wer_normalized": "0.169503",
135
+ "wer_raw": "0.169503",
136
+ "word_deletions": "82",
137
+ "word_deletions_raw": "82",
138
+ "word_insertions": "48",
139
+ "word_insertions_raw": "48",
140
+ "word_substitutions": "368",
141
+ "word_substitutions_raw": "368"
142
+ }
143
+ ],
144
+ "condition": "language_pooled",
145
+ "dataset_version": "dataset_v1",
146
+ "iso_639_3": "xsy",
147
+ "language": "Saisiyat",
148
+ "language_id": "saisiyat",
149
+ "model_family": "xlsr53",
150
+ "normalization_version": "formosan_safe_v1",
151
+ "readiness": {
152
+ "actual_train_rows": 9473,
153
+ "best_selection_cer": 0.09279681756460974,
154
+ "best_selection_wer": 0.2676440207226045,
155
+ "best_step": 14210,
156
+ "condition": "language_pooled",
157
+ "dominant_hypothesis_rate": 0.001682085786375105,
158
+ "estimated_effective_epochs": 30.000211126359126,
159
+ "failures": 0,
160
+ "generated_at": "2026-06-23T08:17:51+00:00",
161
+ "intended_train_rows": 9473,
162
+ "manifest_dir": "/projects/prudlab/tacl_formosan_asr/experiments/manifests/gate4_xlsr_supervised_matrix/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
163
+ "nonempty_hypothesis_rate": 0.9991589571068125,
164
+ "prediction_rows": 1189,
165
+ "result_dir": "/scratch/scheppat/projects/tacl_formosan_asr/runs_xlsr_final_v2/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
166
+ "result_label": "final",
167
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
168
+ "status": "pass",
169
+ "steps": 35524,
170
+ "test_rows": 1189,
171
+ "train_batch_size": 8,
172
+ "warnings": 0
173
+ },
174
+ "seed": 13,
175
+ "split_version": "split_v2"
176
+ }
metrics_by_corpus.tsv ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ run_id eval_language eval_corpus eval_utterances wer_raw cer_raw wer_normalized cer_normalized word_substitutions word_deletions word_insertions reference_words char_substitutions char_deletions char_insertions reference_characters word_substitutions_raw word_deletions_raw word_insertions_raw reference_words_raw char_substitutions_raw char_deletions_raw char_insertions_raw reference_characters_raw
2
+ xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13 saisiyat ILRDF 610 0.21163 0.08096 0.21163 0.08096 612 108 77 3766 621 682 482 22048 612 108 77 3766 621 682 482 22048
3
+ xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13 saisiyat NTU 104 0.651083 0.283092 0.651083 0.283092 442 89 40 877 403 542 304 4412 442 89 40 877 403 542 304 4412
4
+ xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13 saisiyat ePark1 75 0.151603 0.028431 0.151603 0.028431 44 6 2 343 30 18 10 2040 44 6 2 343 30 18 10 2040
5
+ xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13 saisiyat ePark2 106 0.106796 0.02624 0.106796 0.02624 64 16 8 824 24 77 27 4878 64 16 8 824 24 77 27 4878
6
+ xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13 saisiyat ePark3 294 0.169503 0.045184 0.169503 0.045184 368 82 48 2938 144 371 245 16820 368 82 48 2938 144 371 245 16820
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c1fb355becaa03b31effb5bde521abdaf9f1c3e4860a44ceb936b5a5db4c8031
3
+ size 1261938588
preprocessor_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "do_normalize": true,
3
+ "feature_extractor_type": "Wav2Vec2FeatureExtractor",
4
+ "feature_size": 1,
5
+ "padding_side": "right",
6
+ "padding_value": 0.0,
7
+ "processor_class": "Wav2Vec2Processor",
8
+ "return_attention_mask": true,
9
+ "sampling_rate": 16000
10
+ }
readiness_summary.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "actual_train_rows": 9473,
3
+ "best_selection_cer": 0.09279681756460974,
4
+ "best_selection_wer": 0.2676440207226045,
5
+ "best_step": 14210,
6
+ "condition": "language_pooled",
7
+ "dominant_hypothesis_rate": 0.001682085786375105,
8
+ "estimated_effective_epochs": 30.000211126359126,
9
+ "failures": 0,
10
+ "generated_at": "2026-06-23T08:17:51+00:00",
11
+ "intended_train_rows": 9473,
12
+ "manifest_dir": "/projects/prudlab/tacl_formosan_asr/experiments/manifests/gate4_xlsr_supervised_matrix/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
13
+ "nonempty_hypothesis_rate": 0.9991589571068125,
14
+ "prediction_rows": 1189,
15
+ "result_dir": "/scratch/scheppat/projects/tacl_formosan_asr/runs_xlsr_final_v2/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
16
+ "result_label": "final",
17
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
18
+ "status": "pass",
19
+ "steps": 35524,
20
+ "test_rows": 1189,
21
+ "train_batch_size": 8,
22
+ "warnings": 0
23
+ }
release_manifest.json ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "aggregate_metrics": {
3
+ "cer_normalized_micro": 0.0792860273317662,
4
+ "character_errors": 3980,
5
+ "corpora": 5,
6
+ "reference_characters": 50198,
7
+ "reference_words": 8748,
8
+ "utterances": 1189,
9
+ "wer_normalized_micro": 0.2293095564700503,
10
+ "word_errors": 2006
11
+ },
12
+ "base_model": "facebook/wav2vec2-large-xlsr-53",
13
+ "condition": "language_pooled",
14
+ "files": [
15
+ {
16
+ "bytes": 50,
17
+ "name": ".gitattributes",
18
+ "sha256": "ee05350c7fda0af4da116020dd7b976d731de3beed4f5e717d5bcc95ead24550"
19
+ },
20
+ {
21
+ "bytes": 4182,
22
+ "name": "README.md",
23
+ "sha256": "c23d8719005fe9d89a14e81f6cc09feb95edce48ca6ed13f6c5085575c34498a"
24
+ },
25
+ {
26
+ "bytes": 30,
27
+ "name": "added_tokens.json",
28
+ "sha256": "2f1da08637d8de6300081239c996342b9c89aa9e1104f167b980fea403358a1f"
29
+ },
30
+ {
31
+ "bytes": 2335,
32
+ "name": "config.json",
33
+ "sha256": "d8d236d9d520a37e96eb9812b3bf1e4a714debb58123b7b9a3ab02bb569b2d50"
34
+ },
35
+ {
36
+ "bytes": 1188,
37
+ "name": "dev_selection_history.tsv",
38
+ "sha256": "02e920c678eeaf49abc585a66ad0c6221af59bb620ed8dc4dc935fd30c1902ea"
39
+ },
40
+ {
41
+ "bytes": 6351,
42
+ "name": "evaluation_results.json",
43
+ "sha256": "49c6f688d1b08c129a56a1d3097ecfaae231df20b9efd3e8e0b603268d7b6b88"
44
+ },
45
+ {
46
+ "bytes": 1514,
47
+ "name": "metrics_by_corpus.tsv",
48
+ "sha256": "929e84dcd7422a42e1f2c8db9dd4ca9006f3dfa4610525074f0a1f02efbc2066"
49
+ },
50
+ {
51
+ "bytes": 1261938588,
52
+ "name": "model.safetensors",
53
+ "sha256": "c1fb355becaa03b31effb5bde521abdaf9f1c3e4860a44ceb936b5a5db4c8031"
54
+ },
55
+ {
56
+ "bytes": 256,
57
+ "name": "preprocessor_config.json",
58
+ "sha256": "ffc72f475cd79680d5d659fbaefc691cdbcee5c9703a15faf708a5e91452a8d8"
59
+ },
60
+ {
61
+ "bytes": 1111,
62
+ "name": "readiness_summary.json",
63
+ "sha256": "a6d725e7ef8d7547f6ec9dee17134c414144d6724d924dbd27585e7ee08f6834"
64
+ },
65
+ {
66
+ "bytes": 96,
67
+ "name": "special_tokens_map.json",
68
+ "sha256": "9046da57c270c8e74d0f38832b4adce269c9d914ef21d2a0925e7772152dd793"
69
+ },
70
+ {
71
+ "bytes": 1096,
72
+ "name": "tokenizer_config.json",
73
+ "sha256": "5ec9d1d8004284dc7081e99c75280e2f7685491ba7f9c071b41e4e74cfedc63b"
74
+ },
75
+ {
76
+ "bytes": 5969,
77
+ "name": "training_config.json",
78
+ "sha256": "64f9909ec45fd93f448a8488355a5ce7b30329dab5d3040e017b92162e97cc1a"
79
+ },
80
+ {
81
+ "bytes": 1420,
82
+ "name": "training_summary.json",
83
+ "sha256": "75de33dce242b11915676883486a1246aad89bab518f56b2e8ca1a39b2a01c1f"
84
+ },
85
+ {
86
+ "bytes": 342,
87
+ "name": "vocab.json",
88
+ "sha256": "b99f83ad72973910f493aeee8abc9822fd1f1f7a7d957cdbca51ce290cdb700e"
89
+ }
90
+ ],
91
+ "iso_639_3": "xsy",
92
+ "language": "Saisiyat",
93
+ "model_family": "xlsr53",
94
+ "readiness_status": "pass",
95
+ "repo_id": "FormosanBank/formosan-asr-saisiyat",
96
+ "source_run": "/scratch/scheppat/projects/tacl_formosan_asr/runs_xlsr_final_v2/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13"
97
+ }
special_tokens_map.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "eos_token": "</s>",
4
+ "pad_token": "<pad>",
5
+ "unk_token": "<unk>"
6
+ }
tokenizer_config.json ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "29": {
4
+ "content": "<unk>",
5
+ "lstrip": true,
6
+ "normalized": false,
7
+ "rstrip": true,
8
+ "single_word": false,
9
+ "special": false
10
+ },
11
+ "30": {
12
+ "content": "<pad>",
13
+ "lstrip": true,
14
+ "normalized": false,
15
+ "rstrip": true,
16
+ "single_word": false,
17
+ "special": false
18
+ },
19
+ "31": {
20
+ "content": "<s>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "32": {
28
+ "content": "</s>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ }
35
+ },
36
+ "bos_token": "<s>",
37
+ "clean_up_tokenization_spaces": false,
38
+ "do_lower_case": false,
39
+ "eos_token": "</s>",
40
+ "model_max_length": 1000000000000000019884624838656,
41
+ "pad_token": "<pad>",
42
+ "processor_class": "Wav2Vec2Processor",
43
+ "replace_word_delimiter_char": " ",
44
+ "target_lang": null,
45
+ "tokenizer_class": "Wav2Vec2CTCTokenizer",
46
+ "unk_token": "<unk>",
47
+ "word_delimiter_token": "|"
48
+ }
training_config.json ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "code_git_commit": "70c74ec04f113a8aab9376ee0e05f62f83f0c4b3",
3
+ "code_git_dirty": "unknown",
4
+ "condition": "language_pooled",
5
+ "cuda_visible_devices": "0",
6
+ "dataset_version": "dataset_v1",
7
+ "dev_corpus": "",
8
+ "dev_hours": 2.024895,
9
+ "dev_language": "saisiyat",
10
+ "dev_rows": 1190,
11
+ "dev_scope": "language_pooled",
12
+ "device": "cuda",
13
+ "effective_eval_every_steps": 7105,
14
+ "effective_max_steps": 35524,
15
+ "eval_batch_size": 8,
16
+ "eval_corpus": "",
17
+ "eval_every_steps": 7105,
18
+ "eval_language": "saisiyat",
19
+ "eval_scope": "language_pooled",
20
+ "generated_at": "2026-06-23T04:18:52+00:00",
21
+ "hostname": "g018",
22
+ "max_steps": 1000,
23
+ "model_family": "xlsr53",
24
+ "model_id": "facebook/wav2vec2-large-xlsr-53",
25
+ "model_revision": "c3f9d884181a224a6ac87bf8885c84d1cff3384f",
26
+ "normalization_version": "formosan_safe_v1",
27
+ "package_freeze": [
28
+ "absl-py==2.4.0",
29
+ "accelerate==1.1.1",
30
+ "aiohappyeyeballs==2.6.2",
31
+ "aiohttp==3.14.1",
32
+ "aiosignal==1.4.0",
33
+ "async-timeout==5.0.1",
34
+ "attrs==26.1.0",
35
+ "audioread==3.1.0",
36
+ "certifi==2026.6.17",
37
+ "cffi==2.0.0",
38
+ "charset-normalizer==3.4.7",
39
+ "click==8.4.1",
40
+ "datasets==3.1.0",
41
+ "decorator==5.3.1",
42
+ "dill==0.3.8",
43
+ "evaluate==0.4.3",
44
+ "filelock==3.29.0",
45
+ "frozenlist==1.8.0",
46
+ "fsspec==2024.9.0",
47
+ "grpcio==1.81.1",
48
+ "hf-xet==1.5.1",
49
+ "huggingface_hub==0.36.2",
50
+ "idna==3.18",
51
+ "Jinja2==3.1.6",
52
+ "jiwer==3.0.5",
53
+ "joblib==1.5.3",
54
+ "lazy-loader==0.5",
55
+ "librosa==0.10.2.post1",
56
+ "llvmlite==0.47.0",
57
+ "Markdown==3.10.2",
58
+ "MarkupSafe==3.0.3",
59
+ "mpmath==1.3.0",
60
+ "msgpack==1.2.1",
61
+ "multidict==6.7.1",
62
+ "multiprocess==0.70.16",
63
+ "networkx==3.4.2",
64
+ "numba==0.65.1",
65
+ "numpy==2.2.6",
66
+ "nvidia-cublas-cu12==12.4.5.8",
67
+ "nvidia-cuda-cupti-cu12==12.4.127",
68
+ "nvidia-cuda-nvrtc-cu12==12.4.127",
69
+ "nvidia-cuda-runtime-cu12==12.4.127",
70
+ "nvidia-cudnn-cu12==9.1.0.70",
71
+ "nvidia-cufft-cu12==11.2.1.3",
72
+ "nvidia-curand-cu12==10.3.5.147",
73
+ "nvidia-cusolver-cu12==11.6.1.9",
74
+ "nvidia-cusparse-cu12==12.3.1.170",
75
+ "nvidia-nccl-cu12==2.21.5",
76
+ "nvidia-nvjitlink-cu12==12.4.127",
77
+ "nvidia-nvtx-cu12==12.4.127",
78
+ "packaging @ file:///home/conda/feedstock_root/build_artifacts/bld/rattler-build_packaging_1777103621/work",
79
+ "pandas==2.3.3",
80
+ "platformdirs==4.10.0",
81
+ "pooch==1.9.0",
82
+ "propcache==0.5.2",
83
+ "protobuf==7.35.1",
84
+ "psutil==7.2.2",
85
+ "pyarrow==24.0.0",
86
+ "pycparser==3.0",
87
+ "python-dateutil==2.9.0.post0",
88
+ "pytz==2026.2",
89
+ "PyYAML==6.0.3",
90
+ "RapidFuzz==3.14.5",
91
+ "regex==2026.5.9",
92
+ "requests==2.34.2",
93
+ "safetensors==0.8.0",
94
+ "scikit-learn==1.7.2",
95
+ "scipy==1.15.3",
96
+ "sentencepiece==0.2.0",
97
+ "six==1.17.0",
98
+ "soundfile==0.12.1",
99
+ "soxr==1.1.0",
100
+ "sympy==1.13.1",
101
+ "tensorboard==2.18.0",
102
+ "tensorboard-data-server==0.7.2",
103
+ "threadpoolctl==3.6.0",
104
+ "tokenizers==0.20.3",
105
+ "torch==2.5.1+cu124",
106
+ "torchaudio==2.5.1+cu124",
107
+ "tqdm==4.68.3",
108
+ "transformers==4.46.3",
109
+ "triton==3.1.0",
110
+ "typing_extensions==4.15.0",
111
+ "tzdata==2026.2",
112
+ "urllib3==2.7.0",
113
+ "Werkzeug==3.1.8",
114
+ "xxhash==3.7.0",
115
+ "yarl==1.24.2"
116
+ ],
117
+ "package_freeze_count": 88,
118
+ "python_argv": [
119
+ "/projects/prudlab/tacl_formosan_asr/code/tacl_pipeline/src/tacl_formosan_asr/train_ctc_asr.py",
120
+ "--source-root",
121
+ "/projects/prudlab/hunter_formosan_audio",
122
+ "--run-dir",
123
+ "/projects/prudlab/tacl_formosan_asr/experiments/manifests/gate4_xlsr_supervised_matrix/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
124
+ "--vocab-json",
125
+ "/projects/prudlab/tacl_formosan_asr/vocabularies/ctc_dataset_v1_split_v2_formosan_safe_v1/languages/saisiyat/vocab.json",
126
+ "--out-dir",
127
+ "/scratch/scheppat/projects/tacl_formosan_asr/runs_xlsr_final_v2/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
128
+ "--run-id",
129
+ "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
130
+ "--model-id",
131
+ "facebook/wav2vec2-large-xlsr-53",
132
+ "--model-revision",
133
+ "c3f9d884181a224a6ac87bf8885c84d1cff3384f",
134
+ "--seed",
135
+ "13",
136
+ "--max-steps",
137
+ "1000",
138
+ "--train-epochs",
139
+ "30",
140
+ "--train-batch-size",
141
+ "8",
142
+ "--eval-batch-size",
143
+ "8",
144
+ "--learning-rate",
145
+ "1e-4",
146
+ "--eval-every-steps",
147
+ "0",
148
+ "--max-eval-batches",
149
+ "0",
150
+ "--max-train-rows",
151
+ "0",
152
+ "--max-dev-rows",
153
+ "0",
154
+ "--max-test-rows",
155
+ "0",
156
+ "--save-best-model"
157
+ ],
158
+ "python_executable": "/scratch/scheppat/projects/tacl_formosan_asr/conda/tacl_asr_py310/bin/python",
159
+ "python_version": "3.10.20 | packaged by conda-forge | (main, Jun 11 2026, 03:31:56) [GCC 14.3.0]",
160
+ "requested_eval_every_steps": 0,
161
+ "run_dir": "/projects/prudlab/tacl_formosan_asr/experiments/manifests/gate4_xlsr_supervised_matrix/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
162
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
163
+ "seed": 13,
164
+ "slurm_job_id": "2630081",
165
+ "slurm_job_name": "tacl_ctc_registry_array",
166
+ "split_version": "split_v2",
167
+ "status": "planned",
168
+ "tacl_code_version_file": "70c74ec04f113a8aab9376ee0e05f62f83f0c4b3",
169
+ "test_hours": 2.024643,
170
+ "test_rows": 1189,
171
+ "train_batch_size": 8,
172
+ "train_corpus": "",
173
+ "train_corpus_counts": {
174
+ "ILRDF": 4870,
175
+ "NTU": 826,
176
+ "ePark1": 594,
177
+ "ePark2": 838,
178
+ "ePark3": 2345
179
+ },
180
+ "train_epochs": 30.0,
181
+ "train_hours": 16.209974,
182
+ "train_language": "saisiyat",
183
+ "train_rows": 9473,
184
+ "train_scope": "language_pooled",
185
+ "vocab_json": "/projects/prudlab/tacl_formosan_asr/vocabularies/ctc_dataset_v1_split_v2_formosan_safe_v1/languages/saisiyat/vocab.json",
186
+ "vocab_scope": "language"
187
+ }
training_summary.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_dev_loss": 0.4840303489675858,
3
+ "best_selection_cer": 0.09279681756460974,
4
+ "best_selection_metrics": {
5
+ "dev_cells": 5,
6
+ "dev_languages": 1,
7
+ "dev_rows": 1190,
8
+ "macro_cell_cer": 0.09279681756460974,
9
+ "macro_cell_wer": 0.2676440207226045,
10
+ "macro_language_cer": 0.07790196078431373,
11
+ "macro_language_wer": 0.23627118644067796,
12
+ "micro_cer": 0.07790196078431373,
13
+ "micro_wer": 0.23627118644067796,
14
+ "selection_cer": 0.09279681756460974,
15
+ "selection_metric": "decoded_dev_normalized_cer",
16
+ "selection_scope": "macro_cell",
17
+ "selection_wer": 0.2676440207226045
18
+ },
19
+ "best_selection_wer": 0.2676440207226045,
20
+ "best_step": 14210,
21
+ "checkpoint_path": "/scratch/scheppat/projects/tacl_formosan_asr/runs_xlsr_final_v2/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13/best_model",
22
+ "end_train_loss": 0.033548079431056976,
23
+ "generated_at": "2026-06-23T08:17:48+00:00",
24
+ "max_steps": 1000,
25
+ "out_dir": "/scratch/scheppat/projects/tacl_formosan_asr/runs_xlsr_final_v2/xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
26
+ "prediction_rows": 1189,
27
+ "run_id": "xlsr53_language_pooled_train-saisiyat_eval-saisiyat-all-corpora_dataset_v1_split_v2_formosan_safe_v1_seed13",
28
+ "start_train_loss": 21.27985954284668,
29
+ "steps": 35524,
30
+ "train_epochs": 30.0
31
+ }
vocab.json ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "'": 0,
3
+ "-": 1,
4
+ ":": 2,
5
+ "<pad>": 30,
6
+ "<unk>": 29,
7
+ "^": 3,
8
+ "a": 4,
9
+ "b": 5,
10
+ "c": 6,
11
+ "d": 7,
12
+ "e": 8,
13
+ "f": 9,
14
+ "g": 10,
15
+ "h": 11,
16
+ "i": 12,
17
+ "k": 13,
18
+ "l": 14,
19
+ "m": 15,
20
+ "n": 16,
21
+ "o": 17,
22
+ "p": 18,
23
+ "q": 19,
24
+ "r": 20,
25
+ "s": 21,
26
+ "t": 22,
27
+ "u": 23,
28
+ "w": 24,
29
+ "x": 25,
30
+ "y": 26,
31
+ "z": 27,
32
+ "|": 28
33
+ }