(4)語(yǔ)言模型訓練:
語(yǔ)言模型是用來(lái)計算一個(gè)句子出現概率的概率模型。它主要用于決定哪個(gè)詞序列的可能性更大,或者在出現了幾個(gè)詞的情況下預測下一個(gè)即將出現的詞語(yǔ)的內容。換一個(gè)說(shuō)法說(shuō),語(yǔ)言模型是用來(lái)約束單詞搜索的。它定義了哪些詞能跟在上一個(gè)已經(jīng)識別的詞的后面(匹配是一個(gè)順序的處理過(guò)程),這樣就可以為匹配過(guò)程排除一些不可能的單詞。
語(yǔ)言建模能夠有效的結合漢語(yǔ)語(yǔ)法和語(yǔ)義的知識,描述詞之間的內在關(guān)系,從而提高識別率,減少搜索范圍。語(yǔ)言模型分為三個(gè)層次:字典知識,語(yǔ)法知識,句法知識。
對訓練文本數據庫進(jìn)行語(yǔ)法、語(yǔ)義分析,經(jīng)過(guò)基于統計模型訓練得到語(yǔ)言模型。語(yǔ)言建模方法主要有基于規則模型和基于統計模型兩種方法。統計語(yǔ)言模型是用概率統計的方法來(lái)揭示語(yǔ)言單位內在的統計規律,其中N-Gram模型簡(jiǎn)單有效,被廣泛使用。它包含了單詞序列的統計。
N-Gram模型基于這樣一種假設,第n個(gè)詞的出現只與前面N-1個(gè)詞相關(guān),而與其它任何詞都不相關(guān),整句的概率就是各個(gè)詞出現概率的乘積。這些概率可以通過(guò)直接從語(yǔ)料中統計N個(gè)詞同時(shí)出現的次數得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
Sphinx中是采用二元語(yǔ)法和三元語(yǔ)法的統計語(yǔ)言概率模型,也就是通過(guò)前一個(gè)或兩個(gè)單詞來(lái)判定當前單詞出現的概率P(w2| w1),P(w3| w2, w1)。
(5)語(yǔ)音解碼和搜索算法:
解碼器:即指語(yǔ)音技術(shù)中的識別過(guò)程。針對輸入的語(yǔ)音信號,根據己經(jīng)訓練好的HMM聲學(xué)模型、語(yǔ)言模型及字典建立一個(gè)識別網(wǎng)絡(luò ),根據搜索算法在該網(wǎng)絡(luò )中尋找最佳的一條路徑,這個(gè)路徑就是能夠以最大概率輸出該語(yǔ)音信號的詞串,這樣就確定這個(gè)語(yǔ)音樣本所包含的文字了。所以解碼操作即指搜索算法:是指在解碼端通過(guò)搜索技術(shù)尋找最優(yōu)詞串的方法。
連續語(yǔ)音識別中的搜索,就是尋找一個(gè)詞模型序列以描述輸入語(yǔ)音信號,從而得到詞解碼序列。搜索所依據的是對公式中的聲學(xué)模型打分和語(yǔ)言模型打分。在實(shí)際使用中,往往要依據經(jīng)驗給語(yǔ)言模型加上一個(gè)高權重,并設置一個(gè)長(cháng)詞懲罰分數。當今的主流解碼技術(shù)都是基于Viterbi搜索算法的,Sphinx也是。
基于動(dòng)態(tài)規劃的Viterbi算法[url=]在每個(gè)時(shí)間點(diǎn)上的各個(gè)狀態(tài),計算解碼狀態(tài)序列對觀(guān)察序列的后驗概率,保留概率最大的路徑[/url],并在每個(gè)節點(diǎn)記錄下相應的狀態(tài)信息以便最后反向獲取詞解碼序列。Viterbi算法本質(zhì)上是一種動(dòng)態(tài)規劃算法,該算法遍歷HMM狀態(tài)網(wǎng)絡(luò )并保留每一幀語(yǔ)音在某個(gè)狀態(tài)的最優(yōu)路徑得分。
連續語(yǔ)音識別系統的識別結果是一個(gè)詞序列。解碼實(shí)際上是對詞表的所有詞反復搜索。詞表中詞的排列方式會(huì )影響搜索的速度,而詞的排列方式就是字典的表示形式。Sphinx系統中采用音素作為聲學(xué)訓練單元,通常字典就用來(lái)記錄每個(gè)單詞由哪些個(gè)音素組成,也可以理解為對每個(gè)詞的發(fā)音進(jìn)行標注。
N-best搜索和多遍搜索:為在搜索中利用各種知識源,通常要進(jìn)行多遍搜索,第一遍使用代價(jià)低的知識源(如聲學(xué)模型、語(yǔ)言模型和音標詞典),產(chǎn)生一個(gè)候選列表或詞候選網(wǎng)格,在此基礎上進(jìn)行使用代價(jià)高的知識源(如4階或5階的N-Gram、4階或更高的上下文相關(guān)模型)的第二遍搜索得到最佳路徑。
對于語(yǔ)音識別過(guò)程個(gè)人的理解:
例如我對電腦說(shuō):“幫我打開(kāi)“我的電腦”!”然后電腦得理解我說(shuō)了什么,然后再執行打開(kāi)“我的電腦”的操作,那怎么實(shí)現呢?
這個(gè)得預先有一個(gè)工作,就是電腦得先學(xué)會(huì )“幫我打開(kāi)“我的電腦”!”這句語(yǔ)音(實(shí)際上是一個(gè)波形)所代表的文字就是“幫我打開(kāi)“我的電腦”!”這句詞串。那么如何讓它學(xué)會(huì )呢?
如果以音節(對漢語(yǔ)來(lái)說(shuō)就是一個(gè)字的發(fā)音)為語(yǔ)音基元的話(huà),那么電腦就是一個(gè)字一個(gè)字地學(xué)習,例如“幫”字、“我”字等等,那么“幫”字怎么學(xué)習呢?也就是說(shuō)電腦接收到一個(gè)“幫”字的語(yǔ)音波形,怎么分析理解才知道它代表的是“幫”字呢?首先我們需要建立一個(gè)數學(xué)模型來(lái)表示這個(gè)語(yǔ)音。因為語(yǔ)音是連續的不平穩的信號,但是在短的時(shí)間內可以認為是平穩的,所以我們需要分割語(yǔ)音信號為一幀一幀,假如大概25ms一幀,然后為了讓每一幀平穩過(guò)渡,我們就讓每幀見(jiàn)存在重疊,假如重疊10ms。這樣每幀的語(yǔ)言信號就是平穩的了,再從每幀語(yǔ)音信號中提取反映語(yǔ)音本質(zhì)特征的信息(去除語(yǔ)音信號中對于語(yǔ)音識別無(wú)用的冗余信息,同時(shí)達到降維)。那么采用什么特征最能表達每一幀的語(yǔ)音呢?MFCC是用的比較多的一種,這里不介紹了。然后我們就提取每一幀語(yǔ)音的MFCC特征,得到了是一系列的系數,大概四五十個(gè)這樣,sphinx中是39個(gè)數字,組成了特征向量。好,那么我們就通過(guò)39個(gè)數字來(lái)描述每一幀的語(yǔ)音了,那不同的語(yǔ)音幀就會(huì )有不同的39個(gè)數字的組合,那我們用什么數學(xué)模型去描述這39個(gè)數字的分布情況呢?這里我們可以用一個(gè)混合高斯模型來(lái)表示著(zhù)39個(gè)數字的分布,而混合高斯模型就存在著(zhù)兩個(gè)參數:均值和方差;那么實(shí)際上每一幀的語(yǔ)音就對應著(zhù)這么一組均值和方差的參數了。呵呵,挺啰嗦的啊。
好了,這樣“幫”字的語(yǔ)音波形中的一幀就對應了一組均值和方差(HMM模型中的觀(guān)察序列),那么我們只需要確定“幫”字(HMM模型中的隱含序列)也對應于這一組均值和方差就可以了。那么后者是怎么對應的呢?這就是訓練的作用了!我們知道描述一個(gè)HMM模型需要三個(gè)參數:初始狀態(tài)概率分布π、隱含狀態(tài)序列的轉移矩陣A(就是某個(gè)狀態(tài)轉移到另一個(gè)狀態(tài)的概率觀(guān)察序列中的這個(gè)均值或者方差的概率)和某個(gè)隱含狀態(tài)下輸出觀(guān)察值的概率分布B(也就是某個(gè)隱含狀態(tài)下對應于);而聲學(xué)模型可以用HMM模型來(lái)建模,也就是對于每一個(gè)建模的語(yǔ)音單元,我們需要找到一組HMM模型參數(π,A,B)就可以代表這個(gè)語(yǔ)音單元了。那么這三個(gè)參數怎么確定呢?訓練!我們給出一個(gè)語(yǔ)音的數據庫,指明說(shuō)這個(gè)語(yǔ)音代表這個(gè)詞,然后讓電腦去學(xué)習,也就是對數據庫進(jìn)行統計,得到(π,A,B)這三個(gè)參數。
好了,一個(gè)字(建模單元)的聲學(xué)模型建立了。那漢語(yǔ)是不是有很多個(gè)字啊,那我們就得對每一個(gè)建立聲學(xué)模型了。假設就有幾千個(gè)模型,然后每個(gè)模型就有了三個(gè)或者5個(gè)HMM狀態(tài),那么如果你說(shuō)的句子有10個(gè)字,那我們就得搜索這所有可能的模型去匹配你的語(yǔ)音,那是多么大的搜索空間了,這非常耗時(shí)。那我們就需要采用一個(gè)比較優(yōu)的搜索算法了(這里是Viterbi-Beam算法),它每搜索到一個(gè)狀態(tài)點(diǎn),就保留概率最大的,然后舍棄之前的狀態(tài)點(diǎn),這樣就裁剪了很多的搜索路徑,但因為忽略了之前的路徑,所以它就只能得到一個(gè)局部的最優(yōu)解。
那假如出現以下情況呢?例如,It’s a nice day,從語(yǔ)音上可能會(huì )被識別為:It sun niced A,或者是It son ice day。從聲學(xué)模型來(lái)看它是無(wú)法區別這些結果,因為其不同之處只是在于每個(gè)單詞的邊界劃分位置不同造成的。這時(shí)候語(yǔ)言模型就該閃亮登場(chǎng)了,從語(yǔ)義上判斷那個(gè)結果出現的概率最大,即為搜索結果。語(yǔ)言模型N-Gram基于這樣一種假設,第n個(gè)詞的出現只與前面N-1個(gè)詞相關(guān),而與其它任何詞都不相關(guān),整句的概率就是各個(gè)詞出現概率的乘積。這些概率可以通過(guò)直接從語(yǔ)料中統計N個(gè)詞同時(shí)出現的次數得到。這樣就可以約束搜索,增加識別的準確率了。