前幾天把前面的錯誤揪出來之後,模型終於開始有比較明顯的進展。今天終於要來整理我的模型訓練紀錄啦。
先介紹兩個名詞 base model 和 pretrained model。
Pretrained model 是我在進行微調前用的模型。 Base model 是 pretrained model 微調前的 model,有點像 pre-pretrained model。
我的 pretrained model 在前面幾篇有提過了。先來介紹 base model。
Meta 在 2021 年發表的跨語言語音表示模型,建立在 wav2vec 2.0 架構上,共有約 3 億個參數。
它最大的特色之一是跨語言。XLS-R 使用來自 128 種語言、約 43.6 萬小時的未標註語音資料進行自監督預訓練,讓模型不需要每一種語言都從零開始學習,而是先從大量不同語言的語音中學習通用的語音表示。
另一個優點是不需要大量人工標註資料才能進行預訓練。XLS-R 使用 wav2vec 2.0 的自監督學習方式,先從沒有文字標籤的語音中學習語音特徵,之後再透過 Fine-tuning 將模型應用到語音辨識、語音翻譯或語音分類等下游任務。
此外,XLS-R 在論文中的多項語音任務上都展現了良好的跨語言能力。在語音辨識實驗中,相較於當時的既有方法,XLS-R 在 BABEL、Multilingual LibriSpeech、Common Voice 與 VoxPopuli 等資料集上都有明顯的錯誤率改善。
這是由 Eleanor M. Lin 針對台語進行微調的 Wav2Vec2 模型。她在 Columbia College 就讀 Linguistics。她的研究主要探討如何利用免費、公開的資料與模型來建立語言技術,最終開發出一套台語到英語的語音翻譯系統。
ASR 的訓練資料共有 10,949 筆,總長度約 9.57 小時,其中 69.4% 的語音資料來自 Common Voice,其餘資料則來自 TAT、SuiSiann 和 Taiwanese Southern Min Corpus D。
她選擇台羅作為 ASR 的輸出格式,是因為台羅是教育部推廣的台語羅馬字系統,而且相較於漢字,台羅能直接表現台語中具有區辨性的語音資訊,例如聲調、清濁與送氣。
最終,她透過模型錯誤分析指出,錯誤很大一部分來自台羅的連字號位置錯誤,以及鼻音、鼻化與聲調等問題,因此不能只用 WER 判斷模型的實際轉寫能力。
我目前就是在 Pretrained model 上使用教育部字典進行微調。
前期我叫他摸索期,機器學習先備知識幾乎等於零。這個慘狀,大家從前面幾篇就應該看得到了。
我用目前建立的 239 筆沒經過訓練的 mini 驗證集測出了結果。

驗證集詞彙長度以二字為主,這個分布看起來滿有問題的。但是字典裡的資料很多,我前期完全不知道要保留什麼,就直接拿去訓練了。 但是在未來呢,我可能會找一個非字典的測試集來測。一想到,我就開始擔心了。就算有了清洗資料的流程,但是人工審查的流程真的很累阿。
然後就開始一路亂試。
下面是我的訓練設定,是我讓 AI 直接給出一個比較保守的設定來的。(畢竟沒經驗)
batch_size = 16
gradient_accumulation = 2
learning_rate = 1e-4
warmup_steps = 200
epochs = 4
seed = default
| 版本 | 訓練路徑 | 訓練資料 | mini 驗證集結果 |
|---|---|---|---|
| v1 | pretrained → v1 | 按照台語音節分類的 5,014 筆單音節 | 3.77% |
| v2 | v1 → v2 | 沒有變調的多音節資料 18,137 筆 | 未驗證 |
| v3 | v1 → v3 | 變調錯誤版本1的多音節資料 9,792 筆 | 7.95% |
| v4 | v1 → v4 | 變調錯誤版本2的多音節資料 9,792 筆 | 60.25% |
| v5 | v1 → v5 | 變調錯誤版本3的多音節資料 9,792 筆 | 58.16% |
| v6 | v1 → v6 | 變調錯誤版本4的多音節資料 9,784 筆 | 77.82% |
接下來我就拿 v1 當基礎,開始測不同的訓練資料。
v2 因為放在雲端上,所以沒有測。
這段時間大概是對機器學習處於一個半生不熟的階段了。(其實現在也還是半斤八兩)
至少我為了保護我的電腦,開始只敢拿幾百筆的資料去訓練了。
而且我的模型也開始有分支路線了。
只不過這個人工修正資料的過程,真的還是很苦啊。

| 版本 | 訓練路徑 | 訓練資料 | mini 驗證集結果 |
|---|---|---|---|
| v7 | v6 → v7 | 仍有些微錯誤的多音節資料 1,642 筆 | 76.57% |
| v8 | v1 → v8 | 仍有少許錯誤的多音節資料 334 筆 | 8.79% |
| v9 | v7 → v9 | 仍有少許錯誤的多音節資料 334 筆 | 79.50% |
| v10 | v7 → v10 | 仍有少許錯誤的多音節資料 200 筆 | 81.59% |
| v11 | v9 → v11 | 仍有少許錯誤的多音節資料 200 筆 | 80.33% |
| v12 | v10 → v12 | 來自 5,014 單音節裡的聲調,每個聲調各 50 個,共 350 個 | 81.17% |
| v13 | v12 → v13 | 仍有少許錯誤的多音節資料 334 筆 | 81.17% |
| v14 | v6 → v14 | 目前沒有發現標註錯誤的多音節資料 200 筆 | 81.59% |
| v15 | v14 → v15 | 目前沒有發現標註錯誤的多音節資料 333 筆 | 80.33% |
| v16 | v13 → v16 | 來自 5,014 單音節裡的聲調,每個聲調各 50 個,共 350 個 | 82.85% |
中間我也是做過不少資料分析,但是成效不太滿意,之後有機會再講。
不過我也是對未來下一步有了初步想法。
但首先我要把我目前的版本修理乾淨。現在版本到 v32 了,我留到明天講到底怎麼生出這麼多版本了。
還要慢慢找出合適的新非字典資料集當測試集,只要過完資料清洗的痛苦難關。還要真的把整理準確度大幅提升。
希望我的下一步計畫真的能實現。
今天先講到這裡,我是微微,明天見。