基於統計的語言模型比基於規則的語言模型有著天然的優勢,而(中文)分詞是自然語言處理的基礎,接下來我們將注重介紹基於統計的中文分詞及詞性標註技術。為此做以下安排:首先介紹一下中文處理涉及到基本概念,接著分析開源的一些基於統計的中文分詞原理。
中文分詞涉及的基本概念有馬爾科夫鏈,隱馬爾科夫模型(HMM),Ngram模型,最大熵馬爾科夫模型(MEMM),條件隨機場(CRF)等
1、馬爾科夫鏈
通俗講馬爾科夫鏈是指在某一狀態空間序列中,當前的狀態只與它前面n(n=1,2,……)個狀態相關。
具體定義如下:
馬爾科夫鏈指具有馬爾科夫性質的隨機變數X1, X2, X3,…序列,即將來的狀態只與當前的狀態相關,而與過去的狀態無關。
用數學公式表示如下
Pr (Xn+1=|X1=x1,X2=x2, …, Xn=xn) = Pr (Xn+1=x|Xn=xn)
Xn(n=1,2,3,…)表示所有可能取值的集合,被稱為“狀態空間”,而Xn的值則是在時間n的狀態
馬爾科夫鏈通常被描述成一個有向圖,其中狀態表示圖的頂點,狀態轉移機率表示圖的邊。1所示。
圖1-兩個狀態的馬爾科夫鏈
2、隱馬爾科夫模型
HMM定義
一個HMM是一個三元組
初始狀態機率向量
A =(aij): 狀態轉移機率;Pr(xi|xj)
B=(bij) : 混淆矩陣;Pr(yi|xj)
這其中,所有的狀態轉移機率和混淆機率在整個系統中都是一成不變的。這也是HMM中最不切實際的假設。
一個HMM模型主要是由兩類狀態和三組機率來表示的
兩類狀態:觀察狀態,隱藏狀態
三組機率:初始機率,狀態轉移機率及兩態對應機率。
舉例
我們通過一個詞性標註的例子來闡述一下HMM的原理
觀察狀態:他 是 電腦 博士
隱藏狀態:代詞,動詞,名詞 名詞
假設根據語料我們可以得到隱藏狀態兩兩狀態之間的轉換如下所示,我們也叫它狀態轉移機率矩陣。
|
代詞 |
動詞 |
名詞 |
代詞 |
0.5 |
0.25 |
0.25 |
動詞 |
0.375 |
0.125 |
0.375 |
名詞 |
0.125 |
0.625 |
0.375 |
根據語料庫,也可以得到兩態對應機率矩陣即混淆矩陣,如下所示:
|
他 |
是 |
電腦 |
博士 |
代詞 |
0.60 |
0.20 |
0.15 |
0.05 |
動詞 |
0.25 |
0.25 |
0.25 |
0.25 |
名詞 |
0.05 |
0.10 |
0.35 |
0.50 |
同時我們假定初始的機率滿足下面所示:
代詞 動詞 名詞
〔0.63 0.17 0.20〕
至此我們根據語料統計並訓練了一個詞性標註的HMM模型。
有了HMM模型,我們可以做什麼呢?
(1)、評估即根據已知的HMM找出一個觀察序列的機率。例如我們可以評估(他 是 電腦 博士)出現的機率。我們可以通過forward algorithm演算法來得到觀察狀態序列對應於一個HMM的機率。
(2)、根據觀察狀態序列找到產生這一序列的潛在的隱含狀態序列,如根據“他 是 電腦 博士”序列找到其對應的“代詞 動詞 名詞 名詞”狀態序列。我們可以通過viterbialgorithm來解決。
可以根據訓練好的隱馬爾科夫模型來做評估和解碼的問題,那麼隱馬爾科夫模型又是怎麼得到呢?
這是與HMM相關的問題中最難的,根據一個觀察序列(來自於已知的集合),以及與其有關的一個隱藏狀態集,估計一個最合適的隱馬爾科夫模型(HMM),也就是確定對已知序列描述的最合適的(,A,B)三元組。當矩陣A和B不能夠直接被(估計)測量時,前向-後向演算法(forward-backward algorithm)被用來進行學習(參數估計),這也是實際應用中常見的情況。
由於直接用前向-後向演算法(forward-backward algorithm)進行學習的準確性不是非常高,目前通用的做法是通過人工標註語料庫產生HMM。但需要注意的是人工標註語料庫工作量比較大。
隱馬爾科夫模型的缺點:
HMM模型中存在兩個假設:一是輸出觀察值之間嚴格獨立,二是狀態的轉移過程中目前狀態只與前一狀態有關(一階馬爾可夫模型)。
在下面的例子裡
觀察狀態:他 是 電腦 博士
隱藏狀態:代詞,動詞,名詞 名詞
比如在計算Pr(博士|名詞)機率時不會考慮“博士”的上下文資訊“電腦”;還有第一個“名詞”出現的機率只與前面的“動詞”出現的機率相關,這樣表示上下文資訊的能力就比較有限。