1. 程式人生 > >NLP(三)_統計語言模型

NLP(三)_統計語言模型

完全 概念 精度 馬爾科夫 編輯距離 一定的 角度 等於 nsh

概念

統計語言模型:是描述自然語言內在的規律的數學模型。廣泛應用於各種自然語言處理問題,如語音識別、機器翻譯、分詞、詞性標註,等等。簡單地說,語言模型就是用來計算一個句子的概率的模型
即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)

可是這樣的方法存在兩個致命的缺陷:

參數空間過大:條件概率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個詞有關。而這些概率參數都是可以通過大規模語料庫來計算,高於四元的用的非常少,由於訓練它須要更龐大的語料,並且數據稀疏嚴重,時間復雜度高,精度卻提高的不多。

  • 數據平滑
    對語言而言,由於數據稀疏的存在,極大似然法不是一種很好的參數估計辦法。這時的解決辦法,我們稱之為“平滑技術”。(《數學之美》)

數據平滑的目的有兩個:

  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(“什麽”|“在”,“現在”)

隱馬爾科夫模型

待續

NLP(三)_統計語言模型