1.N-Gram的介紹
N-Gram是基於一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關(這也是隱馬爾可夫當中的假設)。整個句子出現的概率就等於各個詞出現的概率乘積。各個詞的概率可以通過語料中統計計算得到。通常N-Gram取自文本或語料庫。
N=1時稱為unigram,N=2稱為bigram,N=3稱為trigram,假設下一個詞的出現依賴它前面的一個詞,即 bigram,假設下一個詞的出現依賴它前面的兩個詞,即 trigram,以此類推。
舉例中文:“你今天休假了嗎”,它的bigram依次為:
你今,今天,天休,休假,假了,了嗎
理論上,n 越大越好,經驗上,trigram 用的最多,盡管如此,原則上,能用 bigram 解決,絕不使用 trigram。
假設句子T是有詞序列w1,w2,w3...wn組成,用公式表示N-Gram語言模型如下:
P(T)=P(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)** *p(wn|w1w2w3...)
p(T) 就是語言模型,即用來計算一個句子 T 概率的模型。
以上公式難以實際應用。此時出現馬爾可夫模型,該模型認為,一個詞的出現僅僅依賴於它前面出現的幾個詞。這就大大簡化了上述公式。
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)
一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分別用公式表示如下:
Bi-Gram: P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)
Tri-Gram: P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn| wn-1,wn-2)
注意上面概率的計算方法:P(w1|begin)=以w1為開頭的所有句子/句 子總數;p(w2|w1)=w1,w2同時出現的次數/w1出現的次數。以此類推
2.一個經典的二元語言模型例子
語料庫中一些單詞的詞頻,統計出各個單詞與其他單詞的前后聯系的頻次,組成一個7*7的二維矩陣,如下圖
那么語句 “I want to eat Chinese food” 的二元語言模型概率計算過程如下
3.構建 N-Gram 語言模型
通常,通過計算最大似然估計(Maximum Likelihood Estimate)構造語言模型,這是對訓練數據的最佳估計,如 bigram 公式如下:
p(wi|wi−1)=fraccount(wi−1,wi)count(wi−1)——條件概率
如給定句子集“<s> I am Sam </s>
<s> Sam I am </s>
<s> I do not like green eggs and ham </s>”
部分 bigram 語言模型如下所示
count(wi) 如下:
count(wi−1,wi) 如下:
則 bigram 為:
那么,句子“<s> I want chinese food </s>”的概率為:
p(<s>Iwantchinesefood</s>) =p(I|<s>)P(want|I)p(chinese|want)p(food|chinese)p(</s>|food)=.000031