關於打分使用的算法
目前工業界採用的主流的跟讀口語評分方法主要是基於隱馬爾可夫模型(Hidden Markov Model) 的語音識別引擎,
利用其似然分數值 (likelihood score) 以及其他相關的信息做爲評分依據。
其中,最經典的GOP (Goodness of Pronunciation) 方法是由麻省理工大學的Silke Witt在他的博士論文中提出。
之後的評分方法大都與GOP算法相似,或者是由它衍生出來。流利說使用的打分算法也正是以GOP算法爲基礎的。
GOP算法:Witt的論文。
不同於語音識別
此類方法都基於語音識別,但是和語音識別任務有很大區別的。
- 在語音識別任務中,一段語音對應的文字(內容)是事先不知道的,需要由語音識別系統“猜”出來;
- 而在打分系統中,一段語音對應的文字是事先知道的,系統需要做的是對這段語音做一個發音上的評價。
GOP算法的基本思想正是利用了事先知道的文字信息,
(1) 把語音和它對應的文字做一次強制對齊 (force alignment),
(2) 並把強制對齊得到的似然分數值與在不知道對應文字情況下得到的似然分數值做一個比較,
(3) 利用這個似然比(likelihood ratio)做爲發音好壞的評價。
直觀的來說,這類算法計算的是輸入語音對應於已知文字的可能性,如果可能性越高,說明發音越標準。
這種可能性的計算是基於語音識別中的聲學模型(acoutisc model) 的,而聲學模型往往是通過大量的母語發音人的錄音訓練而成。
這裏涉及到了[語料庫]。
關於《英語流利說》的GOP算法:
(1) 英語流利說使用了http://cmusphinx.sourceforge.net/提供的PocketSphinx來實現語音識別,
(2) 評分的算法使用了動態規劃算法,求最大順序公共子串的問題;
(3) 還有一個關鍵點在於語音識別數據模型的生成,貌似英語流利說實現的不是離線的語音識別,可能是在線的
評測指標
評測系統輸出的錯誤讀音粒度可以是音素(phoneme)、音節(syllable)、詞(word)中的一種,一般情況下采用音素這個level進行輸出。
發音評測是通過對比參考讀音和用戶讀音來檢測錯誤的。
下文中我們將介紹如何基於語音識別技術對發音進行建模,以及如何基於本文要介紹的GOP評測算法對每個音素的讀音進行打分。
[信號分析、特徵提取、語音識別等技術]
音素
有了參考文本,評測系統就可以查閱發音詞典得到該文本對應的音素序列[q1, …, qn],
後續工作就是要檢測這裏的每個音素qi是否被正確讀出。
語音特徵
麥克風採集的語音音頻是wav格式的PCM數據(若是mp3等壓縮格式則需要先解碼爲PCM),
這種raw數據是無法直接處理的。
和大多數機器學習系統一樣,我們需要先從raw音頻中提取語音特徵。
在語音識別領域,最常用的就是梅爾頻率倒譜系數-MFCC。
(1) 提取這個特徵時要先對raw音頻進行短時傅里葉變換(STFT)得到聲譜圖,
(2) 然後在梅爾域進行倒譜系數計算。
[原理再研究]
完成語音特徵提取後,原始的發音音頻被轉換爲一個語音特徵序列,這個序列由幀組成,每幀爲一個39維的向量。
基於HMM的語音識別框架
爲什麼能用HMM?
那麼HMM在語音識別中如何應用呢?在語音識別中,我們認爲每個音素的發音過程是由發聲器官的形變產生的,發聲器官的每種形狀對應HMM模型的一個隱含狀態(就是上例中的天氣,在語音識別中一般採用3~5個隱含狀態建模),發聲器官在每種形狀(隱含狀態)下,會以一定概率產生具體的聲音(在語音識別中就是語音特徵,對應上例中的行蹤)。我們無法直接觀測到發聲器官的形狀(隱含狀態),但我們能夠看到具體的語音特徵(觀測值)。因此當HMM模型參數已知時(即線下爲每個音素訓練好HMM模型),就可以根據語音特徵序列來計算最可能的音素狀態序列。此外,HMM模型可以串聯(由其模型特點決定,在此不詳細解釋),即當前音素的結束狀態可以跳轉到下一個音素的起始狀態,因此我們可以將一個已知音素序列(例如Hello World[hɛlo wɝld])中8個音素的HMM模型串聯起來形成一個大的HMM模型,這個大的HMM模型就描述了Hello World整句話的發音過程。根據觀測到的整個語音特徵序列和這個HMM的模型參數,我們就可以計算在Hello World這個HMM模型下當前語音最可能的音素狀態序列,即每一幀語音屬於哪個音素,該幀對應此音素的哪個狀態,以及公式 1中定義的條件概率。
評測流程
強制對齊與自由識別
第一步,我們要將Hello World這個文本和用戶的發音音頻進行對齊,這一步通常叫做“強制對齊”(forced alignment)。
強制對齊怎麼做呢?
首先,我們知道Hello World對應的音素序列爲[hɛlo wɝld]。
然後我們將這8個音素的HMM模型串接起來形成一個大的HMM模型。
根據上文介紹,基於這個模型,以及從用戶音頻中提取得到的語音特徵序列,就能夠計算最可能的音素狀態序列,也就是每一幀語音屬於[hɛlo wɝld]中的哪個音素,以及該音素的哪個狀態。這樣就實現了音頻幀和音素狀態的對應,強制對齊這個名稱就來源於此。強制對齊後就知道了每個音素(用qi表示)對應的語音幀區間範圍。
- 如果用戶的發音正確,那麼強制對齊後就會準確定位到每個音素對應的語音幀區間。[也就是對齊了]
- 如果用戶發音錯誤,例如某個音素qi被錯讀了,那麼對齊後qi的語音幀區間實際上發的並不是qi這個音。那麼:自由識別。不考慮參考文本,也就是不限制音素序列爲[hɛlo wɝld],直接用語音識別把最可能的音素狀態序列計算出來(參看上文對HMM的介紹),那其實就相當於從所有音素列表中選出了最符合用戶發音的音素序列。
GOP評測
完成強制對齊和自由識別後,我們就知道參考文本中每個音素對應語音中的哪一段,而且用戶的這一段語音實際發了什麼音。
有了這些信息,用什麼樣的打分方法來衡量參考文本每個音素的讀音準確程度呢?----> GOP
之前介紹過,強制對齊後,參考文本中每個音素q對應的那段語音[fs~fe]就確定了。
有了這個信息,GOP的定義如下:在觀察到這段語音的前提下,其對應參考文本音素q的概率值,用公式表示就是:略。
其中,qi是參考文本中當前要打分的音素,O是強制對齊後qi對應的[fs~fe]這段語音。
NF(O)是這段語音的幀數,在這裏起一個歸一化的作用。
可以看到,GOP打分其實就是一個條件概率,它衡量了“在觀測到用戶語音O的情況下,這段語音對應音素qi的概率”。
這個概率越高,說明發音越準確,這個概率越低,說明發音越差,從物理意義上來理解,是一個合適的打分度量標準。
這個式子求解複雜,因此GOP做了以下假設:GOP計算公式近似
自由識別時的計算公式
至此,我們已經完成了對GOP的介紹。如上文所述,根據GOP公式我們就可以對參考文本中每個音素的發音情況進行打分,同時,根據強制對齊的結果也可以知道這個音素對應的語音幀區間,這樣就可以得到發音錯誤的位置。更重要的是,我們可以根據自由識別的結果,知道用戶真正的讀音是什麼,這些信息也可以作爲結果返回給用戶。