統計語言模型:是描述天然語言內在的規律的數學模型。普遍應用於各類天然語言處理問題,如語音識別、機器翻譯、分詞、詞性標註,等等。簡單地說,語言模型就是用來計算一個句子的機率的模型
即P(W1,W2,W3....WK)。利用語言模型,能夠肯定哪一個詞序列的可能性更大,或者給定若干個詞,能夠預測下一個最可能出現的詞語。算法
引入Ngram模型
假定S表示某個有意義的句子,由一串特定順序排列的詞w1,w2,w3,..,wn組成,n是句子的長度。想知道S在文本中(語料庫)出現的可能性,也就是數學上所說的機率P(S):翻譯
P(S)=P(w1,w2,w3,..,wn)= P(S)=P(w1,w2,w3,..,wn)=P(W1)P(W2|W1)P(W3|W1,W2)..P(Wn|W1,W2,..,Wn−1)
但是這樣的方法存在兩個致命的缺陷:code
參數空間過大:條件機率P(wn|w1,w2,..,wn-1)的可能性太多,沒法估算,不可能有用;
數據稀疏嚴重:對於很是多詞對的組合,在語料庫中都沒有出現,依據最大似然估計獲得的機率將會是0。最後的結果是,咱們的模型僅僅能算可憐兮兮的幾個句子,而大部分的句子算得的機率是0。事件
若是一個詞的出現僅依賴於它前面出現的一個詞,那麼咱們就稱之爲bigram(這時的Ngram模型的 N=2):文檔
P(S)=P(w1,w2,w3,..,wn)=P(W1)P(W2|W1)P(W3|W1,W2)..P(Wn|W1,W2,..,Wn−1)≈P(W1)P(W2|W1)P(W3|W2)..P(Wn|Wn−1)
假設一個詞的出現僅依賴於它前面出現的兩個詞,那麼咱們就稱之爲trigram(這時 N=3):字符串
P(S)=P(w1,w2,w3,..,wn) =P(W1)P(W2|W1)P(W3|W1,W2)..P(Wn|W1,W2,..,Wn−1) ≈P(W1)P(W2|W1)P(W3|W2,W1)..P(Wn|Wn−1,Wn−2)
通常來講,N元模型就是假設當前詞的出現機率只與它前面的N-1個詞有關。而這些機率參數都是能夠經過大規模語料庫來計算,高於四元的用的很是少,因爲訓練它需要更龐大的語料,而且數據稀疏嚴重,時間複雜度高,精度卻提升的很少。數學
數據平滑的目的有兩個:it
其主要策略是把在訓練樣本中出現過的事件的機率適當減少,而後把減少獲得的機率密度分配給訓練語料中沒有出現過的事件。
(數據平滑技術略)方法
模糊匹配的關鍵在於如何衡量兩個長得很像的單詞(或字符串)之間的「差別」,這種差別一般又稱爲「距離」。除了能夠定義兩個字符串之間的編輯距離(一般利用Needleman-Wunsch算法或Smith-Waterman算法),還能夠定義它們之間的Ngram距離。技術
利用Ngram模型評估語句是否合理
從統計的角度來看,天然語言中的一個句子S能夠由任何詞串構成,不過幾率P(S)有大有小。例如:
S1 = 我剛吃過晚飯 S2 = 剛我過晚飯吃
顯然,對於中文而言S1是一個通順而有意義的句子,而S2則不是,因此對於中文來講P(S1)>P(S2)。
另一個例子是,若是咱們給出了某個句子的一個節選,咱們其實能夠可以猜想後續的詞應該是什麼,例如:
她真在認真....
假設咱們如今有一個語料庫以下,其中
<s1><s2>yes no no no no yes</s2></s1> <s1><s2>no no no yes yes yes no</s2></s1>
下面咱們的任務是來評估以下這個句子的機率:
<s1><s2>yes no no yes</s2></s1>
咱們來演示利用trigram模型來計算機率的結果:
P(yes|<s1>,<s2>)=1/2, P(no|yes,no)=1/2, P(</s2>|no,yes)=1/2, P(no|<s2>,yes)=1 **P(yes|no,no)=2/5** P(</s1>|yes,</s2>)=1
因此咱們要求的機率就等於:
1/2×1×1/2×2/5×1/2×1=0.05
基於Ngram模型的文本分類器
只要根據每一個類別的語料庫訓練各自的語言模型,實質上就是每個類別都有一個機率分佈,當新來一個文本的時候,只要根據各自的語言模型,計算出每一個語言模型下這篇文本的發生機率,文本在哪一個模型的機率大,這篇文本就屬於哪一個類別了!
Ngram在語言識別中的應用
當要判斷一個新的文檔是用的什麼語言時,咱們首先要建立文檔的Ngram概要文件並算出這個新文檔概要文件與語言概要文件之間的距離。這個距離的計算根據的是兩個概要文件之間的「out-of-place measure」。選擇最短的距離,它表示此特定的文檔屬於該語言。這裏要引入一個閾值,它的做用是當出現任何超過閾值的距離時,系統就會報告這個文檔的語言不能被斷定或斷定有誤。
語音識別舉例
nixianzaizaiganshenme 你如今在幹什麼? 你西安載感什麼?
其對應的發音是徹底一致的,這時若是咱們藉助於語言模型,咱們會算出這句話的機率:
P(「你」|「<s>」,「<s>」)P(「如今」|「你」,「<s>」)P(「在」|「你」,「如今」)P(「幹什麼」|「在」,「如今」)
遠大於
P(「你」|「<s>」,「<s>」)P(「西安」|「你」,「<s>」)P(「載」|「西安」,「你」)P(「感」|「西安」,「載」)P(「什麼」|「在」,「如今」)
待續