
先承認一件事。我其實沒有很會講台語。但我現在正在做一套台語發音檢測系統。聽起來是不是哪裡怪怪ㄉ?一個台語沒有很溜的人,為什麼會想做台語發音檢測?而且,真的做得出來嗎?
這個專題,我其實已經做了快一年。從剛上大三開始,我一路把原本存在腦中的想法,慢慢修正成現在的畢專。中間換過幾次方向,也申請過國科會大專生研究計畫。這也是我第一次參加 iThome 鐵人賽。
做了一年之後,我才發現,這個專題累積的東西比想像中多很多。我原本一直覺得自己的進度很慢,但回頭一看,我其實已經有資料、程式、模型、實驗結果,還有一大堆當初為什麼會這樣做的紀錄。只是這些東西全都散在不同的地方。資訊和紀錄一堆散落各地,卻一直沒有真正聚成知識的結晶。所以我想趁這 30 天,把這個專題從頭到現在重新整理一次。看看我在過去這一年裡,到底做了什麼、學到了什麼;也重新整理接下來還有哪些問題,以及這個專案要怎麼繼續往前走。
這個專案是怎麼想到的呢?
那時候我正準備升上大三,看到身邊有朋友成功通過國科會計畫,也讓我開始想著,自己是不是也可以試著做一個真正屬於自己的研究題目。
這時,我注意到了我的表妹。她從出生起和阿嬤住在一起,六年了,幾乎天天都在接觸台語,但還是不太會講台語。沒想到,她的英文補習班已經搭上科技的梯子,推出了一款英語發音檢測 App。(我小時候都沒這種東西)
她可以錄下自己的聲音,再由系統協助判斷發音。我便開始想為什麼英文學習有發音檢測,台語卻很少看到類似的工具?如果英文學習可以透過系統練習發音,那台語學習是不是也可以?(這樣做出來就能給我表妹用了,還有我自己)
這個問題後來慢慢變成一個專題方向。
和指導老師討論後,他也認為這是一個值得探索的主題。於是,我開始閱讀論文、整理資料,也開始嘗試把這個想法寫成研究計畫。那時候的我,還以為只要找到適合的模型,就能逐步把系統做出來了。後來才發現,我錯的好離譜。難怪老師說假如我真的做出來我就可以寫碩論了,還問我要不要讀五年一貫。
CAPT,也就是 Computer-Assisted Pronunciation Training,可以簡單理解成讓電腦協助學習者練習發音。[1]
最基本的概念其實很直覺:
錄下你的聲音 → 和目標發音比較 → 告訴你哪裡可能有問題
我查下去才發現,讓電腦幫忙檢測發音的歷史其實並不短,已經差不多有50幾年了。
早期的發音評估,常使用 HMM 等統計模型,透過 forced alignment 將語音強制對齊到音素,再使用 Goodness of Pronunciation,直譯是發音良好度也就是 GoP,評估學習者的發音與目標發音之間的差異。[2]
隨著深度學習與現代語音模型發展,研究者開始能從模型輸出與語音表示中取得更多資訊,例如時間對齊、機率分布與聲學/語音表示。[3]
但我在讀這些研究時,也發現了一個很重要的問題:
要讓電腦判斷一個人的發音好不好,沒有想像中那麼簡單。
如果只是做語音辨識,系統主要需要回答他說了什麼?
但發音評估真正想回答的是他是怎麼說的?
假設一個學習者念了一個 k,系統辨識出的結果也是 k,這能不能代表他的 k 發得正確?
不一定。
因為念成什麼和怎麼念之間,還有很大的差別。發音可能在聲母、韻母或韻尾上出現問題,也可能在聲調、語流或其他聲學特徵上和目標發音不同。如果只看最後辨識出的文字,很可能看不見這些差異。
我也讀到 Chao 等人提出的 3M 模型,從不同面向、不同粒度與不同語音特徵來看發音評估,不只關注音位,也把聲調與語流納入考量。[4]
讀到這裡,我才更明確地意識到發音檢測真正困難的地方,不只是能不能把聲音辨識出來,而是辨識之後,究竟要拿什麼證據判斷這個人的發音。
我的目標一直都是台語發音檢測,而不是單純建立一個台語 ASR。
只是台語屬於低資源語言。如果要從零開始建立完整的語音分析能力,還要面對語料不足、模型資源不足,以及標註方式不一致等問題。
所以我當時開始思考另一條路,既然 ASR 已經能從語音中取得一些資訊,能不能把它當成基礎,再從它的輸出與原始語音中取得更多發音資訊?
例如:
能不能把這些資訊結合起來,用來分析學習者的發音?
這個想法後來成為我研究計畫裡很重要的一部分,也是我後來遇到最多問題的地方。
當時的我還不知道,能不能利用 ASR 取得更多發音資訊這個想法,後來會讓我一路碰到資料、標籤、模型、CTC、聲學分析,甚至開始懷疑一開始的企劃到底行不行得通。(決定這個主題根本是在跳火坑)
後來,這份計畫送出去審查了。結果沒有通過。
不過現在回頭看,我覺得真正有價值的,不是通過或沒通過,而是審查意見讓我看見了當時沒有處理好的問題。我在其他地方看到的審查回饋都只會評ABC三個等次。但審查員寫好好長一段的回饋給我。🥹
第一個是技術問題。
雖然我在計畫裡提出要利用 ASR 的轉寫與時間資訊,再搭配聲學與語音學特徵進行發音診斷,但這樣的關聯仍然需要更多證據支持。
ASR 到底能提供多少足以支撐發音診斷的資訊?哪些資訊可靠?哪些只是模型自己的錯誤?
第二個是研究設計問題。
如果我要把它做成一套學習輔助系統,要怎麼證明它真的能幫助學習者?要找哪些人測試?要怎麼設計實驗?又要用什麼方式衡量學習成效?
我不得不承認,當時的計畫確實把目標想的不夠透徹。雖然已經在企劃書上刪了很多目標。但我保留了發音診斷、做回饋系統,甚至想討論學習成效,但我沒發現光是這些資料和實驗設計還不足以支撐這麼大的問題。
這份沒有通過的計畫,後來反而讓我重新審查自己的專題。
我開始把建立發音分析系統和驗證學習成效分開看。
前者是我目前正在做的事情;後者則是未來還需要另外設計的研究,甚至可以晚一點設計。
我沒有照著原本的計畫書一路做下去。從開始動手做之後,我就知道自己做的東西已經超出當初寫下來的範圍了。
原本計畫裡想的是利用 ASR 作為基礎,再進一步做發音診斷。
但真的開始做之後,我才發現,在走到那一步之前,還有很多問題根本沒有被解決:
這些問題一個接著一個冒出來。也沒有想像中的簡單。
於是我也開始做一些原本沒有寫在計畫書裡的事情。
我開始透過 ODS metadata 對應實際 WAV,整理音節語料庫,處理台羅標籤與 Unicode NFC/NFD,實作連讀變調規則,建立 Wav2Vec2/CTC 訓練流程,再把 ASR 錯誤拆成聲母、韻母、韻尾與聲調。
後來,我又開始分析 CTC frame、F0、RMS、voicing ratio 和頻譜特徵。
在 v7 資料重建時,我甚至加入 SHA-256 去重、F0 篩選、固定 random seed、train/test manifest,以及改名失敗後的復原流程。(好累🫠)
這些事情表面上看起來只是許多零散的 Python script,但它們其實都在處理同一件事:如何讓一套語音 AI 系統使用可信的資料,產生可以被分析的結果。有些東西是為了解決眼前的問題,有些則是做完之後發現還有另一個問題,只好繼續往下挖。所以如果要問我這一年到底是怎麼做這個專題的,我大概沒辦法拿出一張從 Day 1 就規劃好的路線圖。
比較像是走一步,遇到問題,再走下一步。
這 30 天,我想把這個專題重新整理一次。
不過,我不想把接下來的文章預先寫成一張完全固定的施工藍圖。因為實際做 AI 專題時,常常是先遇到問題,才知道下一步需要補什麼。有時候需要回頭檢查資料,有時候需要重新理解模型,也有時候必須承認,原本以為可行的方法,實際上還缺少足夠證據。
所以後面的文章會圍繞幾個主要問題展開:
過程中可能會談到資料整理、Unicode、連讀變調、Wav2Vec2、CTC、F0、聲學特徵與錯誤分析,但每一個主題都會從實際遇到的問題出發,而不是先假設一切都已經規劃完成。
我希望這個系列呈現的,不是一個專業工程師已經包裝完成的產品,而是一個普普大學生實際做 AI 專題時,如何從問題定義、技術背景、資料處理與模型實驗,一步步理解自己到底正在做什麼。
Day 2 我想分享台語的 AI 科技,目前究竟發展到哪裡了?
那今天的分享就到這裡。
希望前輩們不要被我這個菜鳥學生雷到,也歡迎前輩們留言。
我是微微,感謝大家的閱讀,明天見!
[1] Witt, S. M., & Young, S. J. (2000). Phone-level pronunciation scoring and assessment for non-native language learners. Speech Communication.
[2] Sudhakara, S., Ramanathi, M. K., Yarra, C., & Ghosh, P. K. (2019). An Improved Goodness of Pronunciation Measure with DNN-HMM System. Interspeech 2019.
[3] Baevski, A., Zhou, H., Mohamed, A., & Auli, M. (2020). wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations.
[4] Chao, F.-A., Lo, T.-H., Wu, T.-I., Sung, Y.-T., & Chen, B. (2022). 3M: An Effective Multi-View, Multi-Granularity, and Multi-Aspect Modeling Approach to English Pronunciation Assessment.