語音識別中,聲學模型與語言模型扮演什麼角色?或者說是怎麼通過兩個模型進行語音識別的?


看起來到目前為止還沒有針對語音識別系統整體工作原理的科普,那麼我就來補上這個空缺吧。

語音識別系統的目的,是把語音轉換成文字。具體來說,是輸入一段語音信號,要找一個文字序列(由詞或字組成),使得它與語音信號的匹配程度最高。這個匹配程度,一般是用概率表示的。用X表示語音信號,W表示文字序列,則要求解的是下面這個問題:
W^* = arg max_W P(W|X)

一般認為,語音是由文字產生的(可以理解成人們先想好要說的詞,再把它們的音發出來),所以上式中條件概率的順序就比較彆扭了。沒關係,我們有貝葉斯公式,可以把條件和結論擰過來:
W^* = arg max_W frac{P(X|W) P(W)}{P(X)} = arg max_W P(X|W) P(W)
第二步省略分母是因為我們要優化的是W,而P(X)不含W,是常數。

上面這個方程,就是語音識別里最核心的公式。可以這樣形象地理解它:我們要找的W,需要使得P(W)P(X|W)都大。P(W)表示一個文字序列本身的概率,也就是這一串詞或字本身有多「像話」;P(X|W)表示給定文字後語音信號的概率,即這句話有多大的可能發成這串音。計算這兩項的值,就是語言模型聲學模型各自的任務。

====================

先說語言模型(language model)。語言模型一般利用鏈式法則,把一個句子的概率拆解成其中每個詞的概率之積。設W是由w_1, w_2, ldots, w_n組成的,則P(W)可以拆成:
P(W) = P(w_1) P(w_2|w_1) P(w_3|w_1,w_2) ldots P(w_n|w_1,w_2,ldots,w_{n-1})
每一項都是在已知之前所有詞的條件下,當前詞的概率。

不過,當條件太長的時候,概率就不好估計了,所以最常見的做法是認為每個詞的概率分布只依賴於歷史中最後的若干個詞。這樣的語言模型稱為n-gram模型,在n-gram模型中,每個詞的概率分布只依賴於前面n-1個詞。例如在bigram(bi-是2的前綴)模型中,P(W)是拆成下面這種形式的:
P(W) = P(w_1) P(w_2|w_1) P(w_3|w_2) ldots P(w_n|w_{n-1})
n-gram模型中的n越大,需要的訓練數據就越多。一般的語音識別系統可以做到trigram(n=3);Google似乎可以做到n=7。

為了利用到歷史中比較久遠的信息,人們還創造了許多種其它的語言模型,例如基於神經網路的語言模型。由於訓練數據量的限制,這些模型單獨使用時性能一般並不好,需要跟n-gram模型結合使用。

====================

再說聲學模型(acoustic model)。聲學模型的任務是計算P(X|W),即給定文字後,發出這段語音的概率。首先第一個問題就是:怎麼才能知道每個單詞應該發什麼音呢?這就需要另一個模塊,叫作詞典(lexicon),它的作用就是把單詞串轉換成音素串。詞典一般認為是跟聲學模型、語言模型並列的模塊。詞典中會遇到一詞多音的問題,但這裡就不節外生枝了。

有了詞典的幫助,聲學模型就知道給定的文字串該依次發哪些音了。不過,為了計算語音與音素串的匹配程度,還需要知道每個音素的起止時間。這是通過動態規劃演算法來進行的,利用動態規則演算法,可以高效地找到音素的分界點,使得每一段語音與音素的匹配程度(用概率表示)之積最大。實際使用的演算法稱為Viterbi演算法,它不僅僅考慮了每一段語音與音素的匹配程度,還考慮了在各個音素之間轉換的概率;後者是通過隱馬爾可夫模型(HMM)估計出來的。
(實際系統中使用的是比音素更小的單位,不過原理是一樣的,也不展開了)

在求音素分界點的過程中,以及在有了分界點後計算P(X|W)時,聲學模型都需要知道怎樣計算一個音素與一段語音信號的匹配程度。要做這件事,需要找到一種合適的表示語音信號的方法。一般是把語音信號分成許多幀,對於每一幀,通過傅里葉變換等一系列操作,把它轉換成一個特徵向量。最常用的特徵是MFCC,具體提取過程可以參見語音識別技術中提取的聲音特徵的參數具體指什麼? - 頻譜分析。從訓練數據中,我們可以提取出大量的特徵向量,以及它們對應的音素;利用這些數據,就可以訓練從特徵到音素的分類器。前些年最常用的分類器是高斯混合模型(GMM),它的大致原理是估計出每個音素的特徵向量的分布,然後在識別階段,計算每一幀的特徵向量x_t由相應音素s_i產生的概率P(x_t|s_i),把每一幀的概率相乘,就得到P(X|W)。現在,神經網路漸漸火了起來,它可以直接給出P(s_i|x_t),用貝葉斯公式可以轉換成P(x_t|s_i),再相乘得到P(X|W)

====================

從上面的敘述來看,求文字串、計算語言模型概率、求音素串、求音素分界點、計算聲學模型概率幾個步驟似乎是依次進行的。其實不然,因為文字串、音素分界點都有非常多種可能,枚舉是不現實的。實際中,這幾個步驟同時進行並互相制約,隨時砍掉不夠優的可能,最終在可接受的時間內求出最優解W^* = arg max_W P(W|X)


推薦閱讀:

現在機器視覺這麼火,那機器聽覺被人忽視了?
如何計量「火候」?
l1 相比於 l2 為什麼容易獲得稀疏解?
計算機碩士期間如何發力,畢業後能衝擊30-40w年薪的offer?
用於數據挖掘的聚類演算法有哪些,各有何優勢?

TAG:機器學習 | 模式識別 | 識別技術 | 語音 |