N-Gram模型
http://www.cnblogs.com/chaosimple/p/3376438.html
N-Gram模型時大詞匯連續語音識別中常用的一種語言模型,對中文而言,我們稱之為漢語語言模型(CLM, Chinese Language Model)。漢語語言模型利用上下文中相鄰詞間的搭配信息,在需要把連續無空格的拼音、筆畫,或代表字母或筆畫的數字,轉換成漢字串(即句子)時,可以計算出最大概率的句子,從而實現從到漢字的自動轉換,無需用戶手動選擇,避開了許多漢字對應一個相同的拼音(或筆畫串、數字串)的重碼問題。
該模型基於這樣一種假設,第n個詞的出現只與前面n-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現的概率的乘積。這些概率可以通過直接從語料中統計n個詞同時出現的次數得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
在介紹N-Gram模型之前,我們先來做個香農遊戲(Shannon Game)。我們給定一個詞,然後猜測下一個詞是什麽。當我說“艷照門”這個詞時,你想到的下一個詞時什麽?我想大家很有可能會想到“陳冠希”,基本上不會有人想到“陳誌傑”吧。N-Gram模型的主要思想就是這樣的。
對於一個句子T,我們怎麽計算它出現的概率呢?假設T是由詞序列W1, W2, …, Wn組成的,那麽P(T)=P(W1W2…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)。
但是這種方法存在兩個致命的缺陷:
一個缺陷是參數空間過大,不可能實用化;另外一個缺陷是數據稀疏嚴重。
為了解決這個問題,我們引入馬爾科夫假設:
一個詞的出現僅僅依賴於它前面出現的一個或者有限的幾個詞。
如果一個詞的出現僅僅依賴於它前面出現的一個詞,我們就稱之為Bi-Gram。即:
P(T)=P(W1W2…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)
≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)
如果一個詞的出現僅依賴於它前面出現的兩個詞,那麽我們稱之為Tri-Gram。在實踐中用的最多的就是Bi-Gram和Tri-Gram,而且效果不錯,高於四元的用的很少,因為訓練它需要更龐大的語料,而且數據稀疏嚴重,時間復雜度高,精確度卻提高的不多。
那麽我們怎麽樣才能夠得到P(Wn|W1W2…Wn-1)呢?一種簡單的估計方法就是最大似然估計。即:
P(Wn|W1W2…Wn-1)=C(W1W2…Wn)/C(W1W2…Wn-1)
剩下的工作就是在訓練語料庫中數數兒了,即統計序列W1W2…Wn出現的次數和W1W2…Wn-1出現的次數。
下面我們用Bi-Gram舉個例子,假設語料庫總詞數為13748,
這裏還有一個問題要說:那就是數據稀疏問題!假設詞表中有20000個詞,如果采用Bi-Gram模型,則可能的N-Gram就有400000000個,如果是Tri-Gram,那麽可能的N-Gram就有8000000000000個!那麽對於其中的很多詞對的組合,在語料庫中都沒有出現,根據最大似然估計得到的概率將會是0,這會造成很大的麻煩,在算句子的概率時一旦其中的某項為0,那麽整個句子的概率就會為0,最後的結果時,我們的模型只能算可憐兮兮的幾個句子,而大部分的句子算得的概率時0。因此,我們要進行數據平滑(Data Smoothing),數據平滑的目的有兩個:一個是使所有的N-Gram概率之和為1,使所有的N-Gram概率都不為0。
N-Gram模型