基於隱馬爾科夫模型的中文分詞方法

本文主要講述隱馬爾科夫模及其在中文分詞中的應用。 基於中文分詞語料庫,建立中文分詞的隱馬爾科夫模型,最後用維特比方法進行求解。

一、隱馬爾科夫模型介紹

隱馬爾科夫模型中包括兩個序列,其中一個是觀測序列,另一個是隱藏序列。模型要解決的一個問題是,給定觀測序列, 求其對應的隱藏序列。比如對於語音識別,這裏的觀測序列是語音的每一個序列,隱藏序列是這一串語音對應的文字。 或者對於機器翻譯,觀測序列是待翻譯的語言,而隱藏序列則是目標語言。在解決這類問題時,我們的已知條件是, 第一,隱藏序列中某一個元素到觀測序列中某一個元素之間的映射關係。第二是隱藏序列中每個元素轉變到另一個元素之間的關係。 並且會有兩個假設,第一是每個隱藏元素中的元素,只依賴於它前面一個元素。第二是每一個隱藏元素能夠直接確定另一個觀測元素。 其中以上兩個已知條件可以分別表示爲兩個矩陣,這個矩陣可以通過分詞語料庫,根據統計的方法求得。

從數學上理解,給定觀測序列求解隱藏序列。一個觀測序列可能對應無數個隱藏序列,而我們的目標隱藏序列就是, 概率最大的那一個隱藏序列,也就是說最有可能的那個序列。即求給定隱藏序列這個條件下觀測序列概率最大的那個序列的條件概率問題。

雖然隱馬爾科夫模型中做了比較強的假設,這裏比較強的意思是,現實生活中,可能根本無法滿足這種假設條件, 但是它的應用範圍卻是比較廣泛,能夠非常簡單有效的解決複雜的問題。這個也是統計學方法的一個特點, 基於大量的數據,使用簡單的方法便可以解決複雜的問題。這可能是大數據的一種威力吧,如果我們有足夠多的數據, 那麼我們的模型可以做簡化。而如果我們只有少量的數據,則我們必須用非常精確的模型,纔可以得到我們想要的結果。 數據模型以及數據量也是一種此消彼長的關係。

下圖爲隱馬爾科夫模型的概率圖,其中 \(x\) 代表隱藏序列, \(y\) 代表觀察序列。

其中這裏的隱藏序列,又稱爲一個馬爾科夫鏈。馬爾科夫鏈的定義是,序列中每一個元素,只依賴於他前面的一個元素而與其他所有元素不相關。

爲了使用隱馬爾科夫模型,我們必須知道兩個矩陣。第一個矩陣式表示隱藏序列中, 一個元素轉變到另一個元素的概率. 如果總的序列的元素數目爲n,則這個是一個n乘n的矩陣。 第二個矩陣表示隱藏序列中某個元素轉變到觀測序列中某個元素的概率. 如果隱藏序列中元素個數爲n,觀測序列中元素的數目爲m, 則這個矩陣的維數爲n乘m。 這兩個矩陣都可以通過大量的統計數據來求得。

第二、中文分詞的隱馬爾科夫模型

中文分詞要解決的問題是,給定一段中文文字,將其劃分爲一個個單獨的詞或者單字。中文分詞是所有後續自然語言處理的基礎。 如果將連續的中文文字看作是觀測序列,將每個文字所對應的分詞狀態看作是隱藏序列,每個字的分子狀態可能有兩個值, 一個表示這個字是某一個詞的詞尾,用字母E表示。另一個表示這個字不是某一個詞的詞尾,用字母B表示。 則中文分詞問題可以看作是一個標準的隱馬爾科夫模型。實際中將每個字的分子狀態表示爲四個可選的值。 詞的開始,詞的中間,詞的結尾,單字成詞。分別用bmes表示。

第三、中文分詞語料庫

在網上可以免費下載,北京大學和香港大學提供的中文分詞語料庫。這個語料庫實際上是一個txt的文檔, 文檔中每個單獨的詞用兩個空格隔開。 根據分詞語料庫,我們可以求得隱馬爾科夫模型中的兩個參數矩陣. 根據大數定理,概率等於次數的比值。因此爲了模型的準確性, 我們必須有大量的語料數據來計算模型的參數。

第四、使用維特比算法進行求解

給定馬爾科夫模型中的兩個參數以及一個觀測序列,求解隱藏序列的問題,可以看作是一個類似於圖論中的最短路徑問題.

維特比算法使用動態規劃的方法進行求解。動態規劃的子問題是,對於第 \(i\) 列的每一個元素 \(A_j\), 以這個元素爲最後一個節點的最短路徑。如果知道第 \(i\) 列的每一個元素的最短路徑,那麼第 \(i+1\) 列的每個元素的最短路徑變可求得.

最終的結果就是第 \(n\) 列中每一個元素的最短路徑中值最小的那一個元素所對應的最短路徑。

第五、代碼實現

nlp-word-segmentation

a = 1
# print(a)
def foo(a):
  return a+1
print("bbbb cccc ")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章