統計語言模型、HMM與中文分詞

序言

  • 深感自然語言處理領域知識之廣博,而自己才疏學淺,深感任重而道遠。深夜寫篇博文,以便溫故而知新。
  • 中文分詞是中文自然語言處理的一個基礎工作,它的好壞直接決定後續結果的好壞,目前分詞算法已經比較成熟,市面上也有很多好用的分詞工具可以直接使用,比如大家熟悉的結巴分詞(jieba)。但它並不是完美的,同時分詞的內部原理你知道嗎?

中文分詞的起步階段-- 基於詞典的匹配

  • 首先你要有一箇中文詞典,世面上有很多開源的可以下載,你也可以自己爬取整理。
  • 基本算法包括 前向最大匹配、後向最大匹配、雙向最大匹配。就是在句子上滑動,去詞典裏匹配看是否能匹配到。裏面還有很多細節,實現起來很簡單,就不細說了。
  • 還有一個常用的算法是對句子做全分隔,然後構建有向無環圖的做法,得到最佳的分詞結果。
  • 這種分詞方法,能夠解決80%左右的問題,但它顯然不是完美的,對於詞的歧義性、分詞顆粒度大小等問題無法解決。

發展階段 – 基於統計模型

  • 首先介紹下統計語言模型,- 我們知道,自然語言是一種上下文相關的信息表達方式。想讓計算機處理自然語言,一個基本問題就是爲自然語言這種上下文相關的特性建立數學模型。這個數學模型就是統計語言模型。從工程的角度來解釋,你首先要有一個儘可能大的語料庫,然後統計每個詞的頻率(近似等於概率),以及任意一組詞的頻率。這樣做的目的是,可以就可以估計出任意一個句子出現的概率。
    如果讓機器去判斷一個文字序列是否能構成一個人類能理解的句子,怎麼去做。如果按照人類的思想,可能會判斷這個文字序列是否合乎文法,含義是否正確。以前人們也確實這樣做的,但幾十年的時間證明,這條路走不通。但一個簡單的統計模型搞定了它。可以這麼思考,一個句子是否合理,就看看它的可能性大小如何,
    如果 S 表示一連串特定順序排列的詞 w1w_1w2w_2,…, wnw_n
    目前,機器對語言的識別從某種角度來說,就是想知道S在文本中出現的可能性,也就是數學上所說的S 的概率用 P(S) 來表示。用公式展開如下:
    P(S)= p(w1w_1w2w_2,…, wnw_n) = P(w1w_1).P(w2w_2|w1w_1).P(w3w_3|w1,w2w_1,w_2). …P(wnw1,...,wn1w_n|w_1,...,w_{n-1})
    其中 P (w1w_1) 表示第一個詞w1 出現的概率;P (w2|w1) 是在已知第一個詞的前提下,第二個詞出現的概率;以次類推。不難看出,到了詞wn,它的出現概率取決於它前面所有詞。從計算上來看,各種可能性太多,無法實現。因此我們假定任意一個詞wi的出現概率只同它前面的詞 wi-1 有關(即齊次馬爾可夫假設),於是問題就變得很簡單了。現在,S 出現的概率就變爲:

  • P(S)=P(w1)P(w2w1)P(w3w2)P(wiwi1)P(S) = P(w_1)P(w_2|w_1)P(w_3|w_2)…P(w_i|w_{i-1})…
    接下來的問題就是如何估計 P(wiwi1)P(w_i|w_{i-1}))。現在有了大量機讀文本後,這個問題變得很簡單,只要數一數這對詞(wi-1,wi) 在統計的文本中出現了多少次,以及 wi-1 本身在同樣的文本中前後相鄰出現了多少次,然後用兩個數一除就可以了,P(wiwi1)=P(wi1,wi)/P(wi1)P(w_i|w_{i-1}) = P(w_{i-1},w_i)/ P (w_{i-1})。這就是通過統計大量中文句子語料庫,結合貝葉斯公式得出P(wiwi1)P(w_i|w_{i-1})
    事實證明,統計語言模型比任何已知的藉助某種規則的解決方法都有效。

  • 知道了什麼是語言模型,那怎麼藉助它來分詞呢?比如一個句子,可以有以下三種分法:A1,A2,,,An / B1,B2,,,,Bk / C1,C2,,,Cm 那麼哪種分法好呢,有了上面的知識,我們可以把三種分詞序列輸入到語言模型,概率最高的顯然是最好的分詞方法。

  • HMM也就是隱馬爾可夫模型,做中文分詞達到了很好的效果。那麼什麼是馬爾科夫模型呢?

深度學習階段 – 基於 Bi-LSTM + CRF

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章