Sphinx語音識別學習記錄 (二)-自然語言處理原理研究


CMUSphinx系列目錄
http://www.cnblogs.com/yin52133/archive/2012/06/21/2557219.html - (一)基本運行測試

http://www.cnblogs.com/yin52133/archive/2012/07/12/2587282.html - (二)自然語言處理原理研究

http://www.cnblogs.com/yin52133/archive/2012/07/12/2587419.html - (三)小范圍語音英文識別

http://www.cnblogs.com/yin52133/archive/2012/07/12/2588201.html - (四)小范圍語音中文識別

http://www.cnblogs.com/yin52133/archive/2012/06/22/2558806.html - (五)錯誤調試

http://www.cnblogs.com/yin52133/archive/2012/07/12/2588418.html - (六)我的目標和幾個想像的方案(閑置中)

 

這幾天忙完了一陣子,打算繼續研究下語音識別

文中都是根據自己的簡單測試得到的結論,可能有很多錯誤,發現問題,歡迎一起討論

 

先說一下一般的語音識別流程;以下內容很多都是看自吳軍博士的《數學之美》這本書

 

sphinx語音識別其實是基於統計語言模型的
它主要靠language model(lm),Hidden Markov Model(hmm)模型識別語音。

其中lm模型是統計語料得到的模型,語料就是用於訓練的文本庫,Dic里面保存的就是訓練用的語料庫里出現過的語料和對應的發音
而lm模型里存的是語料的組合概率,
先設p(w1)是word w1在文章中出現的概率

//很顯然有數據的情況下這個很好統計,遍歷就行了

P(w1,w2)w1.w2是連續出現的概率
P(w2|w1)是已知W1已出現的情況下w2

假設識別sentence的概率用P(S)表示

P(S)=P(w1,w2,...wn) 表示單詞集w1,w2,。。。wn連續出現並生成S的概率

使用條件概率公式S 把整個公式替換成

P(sentence) = P(w1)*P(w2|w1)*P(w3|w2)。。。P(wn|w1,w2.。。wn-1)

再用馬爾科夫假設精簡成

P(sentence) = P(w1)*P(w2|w1)*P(w3|w2)。。。P(wn|wn-1)的問題

P(wi|wi-1) = P(wi-1,wi) / P(wi)

然后P(wi,|wi-1)和p(wi)都可以從語料統計出來

最終就能得到P(sentence)。而lm模型存儲的就是這些p(wi-1,wi)這些概率統計值

實際識別就是算出Max{P(sentence)}的過程

 

然后是hmm 隱馬爾科夫模型
這個模型先不說具體原理,你就知道是聲音信號到文字之間映射統計表
因為同樣發音下可能也有很多類似的單詞,這時候就靠聲音的組合來判斷識別的顆粒度和識別了。
用hmm識別的時候肯定會調用lm模型,因為最終的識別就是聲音道文字,先靠hmm模型的統計值計算出最可能出現的一些集合,
再根據lm模型在這些集合之間計算出概率最高的集合,而那個集合就是輸出的語句了。

 

有興趣的可以去看《數學之美》或者其他相關書籍

 

然后再回到pocketSphinx上,我們可以知道識別一條語音至少需要

*.dic *.lm(或者*.DMP) 還有hmm模型

其中 *.dic是整個語料庫,包含了改系統能支持的所有單詞和對應的發音

*.lm就是統計語言模型

hmm是隱馬爾科夫模型、信號到實際數據的識別  這先不要管

我認為的識別流程應該是這樣的

hmm依賴lm和dic

lm和dic是靠txt生成的

然后hmm對我們錄制的音頻流,再使用dic和lm識別

而訓練需要的分別是wav和語料庫

 大量的wav用於使系統更准確的弄出
實際音頻到理論音頻數據的(也就是訓練hmm)

而大量的語料庫是用於訓練lm
建立統計模型(訓練語言模型) 

 

舉個例子

整句和單詞舉個例子就是

dic里面

open 發音

close 發音

door 發音

button 發音

這樣的話

識別單詞是

識別出來close;door;button;open什么的就靠dic發音映射表,對照判斷

而你要識別連續的單詞、如open door ,close button就需要靠大量數據或者手動的修改語言模型

 

還是open close door button這例子

你在lm里把句首 open close 出現的概率提高(接近100%)

然后 door button在句首出現的概率降低到 (接近 0%)

然后在第二個位置的概率弄反

這樣的話、他的語法結構就能接近 (open|close) (door|button)

這種形式,可以變相提高整句的識別能力

 

就是說一句話一個語音流輸入它的庫可能會把它分離成小的單詞流

采樣后和語音庫(*.dic)匹配

 

然后第一個有幾個備選,再給這些備選+第二個(第二個又是概率里面拿)

得到模糊的串經過語言統計模型然后返回總體可能性最大的。

 

所以我們最關鍵就是准確的單詞發音映射表還有統計語言模型(*.lm)

而統計語言模型這需要大量的樣例數據獲得更為准確的概率,也能進一步獲取更為准確的結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM