NLP(三)_統計語言模型

概念

統計語言模型:是描述天然語言內在的規律的數學模型。普遍應用於各類天然語言處理問題,如語音識別、機器翻譯、分詞、詞性標註,等等。簡單地說,語言模型就是用來計算一個句子的機率的模型
即P(W1,W2,W3....WK)。利用語言模型,能夠肯定哪一個詞序列的可能性更大,或者給定若干個詞,能夠預測下一個最可能出現的詞語。算法

N_gram語言模型

  • 簡述
    NLP中,人們基於必定的語料庫,能夠利用Ngram來預計或者評估一個句子是否合理。另一方面,Ngram能夠用來評估兩個字符串之間的差別程度,這是模糊匹配中經常使用的一種手段。並且普遍應用於機器翻譯、語音識別、印刷體和手寫體識別、拼寫糾錯、漢字輸入和文獻查詢。
  • 引入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

  1. 一個是使所有的Ngram機率之和爲1;
  2. 二是使所有的Ngram機率都不爲0。

其主要策略是把在訓練樣本中出現過的事件的機率適當減少,而後把減少獲得的機率密度分配給訓練語料中沒有出現過的事件。
(數據平滑技術略)方法

N_gram模型應用(簡述)
  • 基於Ngram模型定義的字符串距離

模糊匹配的關鍵在於如何衡量兩個長得很像的單詞(或字符串)之間的「差別」,這種差別一般又稱爲「距離」。除了能夠定義兩個字符串之間的編輯距離(一般利用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(「什麼」|「在」,「如今」)

隱馬爾科夫模型

待續

相關文章
相關標籤/搜索