聲學模型是對聲學、語音學、環境的變數、說話人性別、 口音等的差異的知識表示,
語言模型是對一組字序列構成的知識表示。
語言模型表示某一字序列發生的概率,一般採用鏈式法則,把乙個句子的概率拆解成器中的每個詞的概率之積。設w是由w1, w2,...,wn組成的,則p(w)可以拆成(由條件概率公式和乘法公式):
p(w) = p(w1)p(w2/w1)p(w3/w1,w2)...p(wn/w1,w2,..wn-1), 每一項都是在之前所有詞的概率條件下,當前詞的概率。
由馬爾卡夫模型的思想,最常見的做法就是用n-元文法,即假定某乙個字的輸出只與前面n-1個字出現的概率有關係, 這種語言模型叫做 n-gram模型(一般n取3, 即t rigram), 這時候我們就可以這麼表示:
p(w) = p(w1)p(w2|w1)p(w3|w1,w2)p(w4| w1,w2,w3)...p(wn/wn-1,wn-2,...,w1) #條件太長的時候,概率就不好估計了,三元文法只取前兩個詞
= p(w1)p(w2|w1)p(w3|w1,w2)p(w4| w2,w3)...p(wn/wn-1,wn-2)
對於其中的每一項條件概率都可以用貝葉斯公式求出, 在所有的語料中統計出相鄰的字發生的概率,再統計出單個字出現的概率, 代入即可。
聲學模型的任務是計算p(x/w), 即給定文字之後發出這段語音的概率(最後利用貝葉斯,求p(x/w)是使用)。 首先第一問題: 怎麼才能知道每個單詞發什麼音呢? 這就需要另外乙個模組,叫做詞典,看eesen的原始碼在資料準備階段就是先求出詞對應音素的dict, 它的作用就是把單詞串轉化成音素串,然後再求的語言模型和 訓練聲學模型(用lstm+ctc 訓練聲學模型).
有了dict的幫助,聲學模型就知道給定的文字串該依次發哪些音了。不過為了計算語音跟音素串的匹配程度,還需要知道每個音素的起止時間。 這是利用動歸來進行的,可以高效的找到音素的分界點,使得沒一段語音與音素的匹配程度(用概率表示)之積最大。實際使用的演算法稱為viterbi演算法,它不僅僅考慮了每一段語音和音素的匹配程度,還考慮了各個音素之間轉換的概率**換概率通過hmm估計) 實際中使用的比音素更小的單位,原理一樣(不是很確定,值得是一幀資料(25ms)嗎,一幀不到不到乙個音素的長度?)
asr是自動語音識別技術,首先要聽到,這就是聲學模型,其次要寫下來,就是語言模型。就是這麼個大致原理吧。求文字串、計算語言模型概率、求音素串、求音素分界點、計算聲學模型概率幾個步驟似乎是依次進行的。其實不然,在實際編碼過程中,因為文字串、音素分界點都有非常多種可能,列舉是不現實的。實際中,這幾個步驟同時進行並互相制約,隨時砍掉不夠優的可能,最終在可接受的時間內求出最優解。
語音識別 聲學模型(GMM HMM)
本文主要講解一下gmm hmm演算法聲學模型的大概思路!聲學模型的目的是將經mfcc提取的所有幀的特徵向量轉化為有序的音素輸出。概述如下 我們都知道hmm模型裡面有隱含狀態概念。我們需要弄明白音素hmm模型的隱含狀態與乙個音素之間的關係,通常乙個音素含有3到5個狀態,如果乙個包含代表乙個音素的hmm...
語音識別中的聲學模型(AM)和語言模型 LM
本文主要受參考自 以及 最近看essen原始碼,感覺對於asr 的一下之前的比較基礎的演算法很生疏,在知乎上看到這個鏈結,感覺講的比較通俗易懂,拿來再理解一下。decoder是根據字典,聲學模型和語音模型,將輸入的語音特徵失量序列轉化為字串行。聲學模型是對聲學 語音學 環境的變數 說話人性別 口音等...
語音識別之HTK入門(四)訓練模型
生成proto和vfloors hcompv c config config color f 0.01 m s config train.scp m hmm0 config proto生成macros perl scripts makemacros hmm0 vfloors hmm0 macros生...