Micheal Collins nlp課程筆記(二)Tagging Problems and Hidden Markov Models

一、The Tagging Problem

典型的標籤問題有兩種:POS(Part Of Speech)和NER(Named Entity Recognition),兩者基本一致,POS是給句子的單詞打上詞性的標籤,NER是給句子的單詞打上類別的標籤(實體或者非實體?實體的話是什麼實體等等)

二、生成模型

在Tagging Problem中,我們目標是給定一個句子,能夠得到相應的標籤序列。因此我們需要訓練一個函數f,能夠將輸入x,映射到輸出標籤y上。

假設有訓練樣本x(i), y(i) for i = 1 . . . m. 要找到一個函數f(x)映射到標籤,

其中:

但是P(y|x)不好求,因此我們進行一系列數學推到:

       首先從有乘法公式P(x,y) = P(x|y)*P(y) = P(y|x)*P(x)

       可得 :

       原來的f(x)轉爲求解使上面這個式子最大值的y。再經過觀察發現P(x)與y無關,於是式子進一步簡化:

       

至此我們有了函數f(x)了。它主要由兩項構成:P(y)和P(x|y)。

先看P(y),如果拋開句子,只看標籤序列,那麼問題就和上講的language Modeling 問題很類似了。就是一個算序列y的概率問題。

根據上講,假設標籤只與前兩個標籤有關,那麼P(y)值就是:

接下來看P(x|y),在這裏我們再次進行了一個大膽的假設,即:x的標籤只與本身有關,與其他單詞無關,因此P(x|y)值如下:

由此得:

我們的目標就是找到使上式最大的y序列。這個式子也叫做Trigram HMM,Trigram是因爲對於式子前半部分我們用了Trigram模型,HMM是因爲y序列是隱藏的,我們觀察不到,我們只能看到x序列,同時我們又對y進行了馬爾科夫假設,因此叫做HMM。

對於上式前半部分,我們可以用Language Modeling中的線性插值法求解q(yi|yi-2,yi-1)。

對於後半部分,最簡單粗暴的方法是c(xi,yi)/c(yi),c表示數量。即用yi標籤中是單詞xi的次數除以yi標籤的次數。

這樣做有一個非常嚴重的問題,即:對於訓練集中未出現的x,那麼它的這一項將始終爲0,由此它的p(x,y)將始終爲0。概率一直未0還怎麼給它標籤???所以我們需要改進做法。

改進方法有很多,課程中提到的方法就是,將詞分爲高頻和低頻詞兩類。對於低頻詞(譬如出現次數小於5的詞),將它們映射到一些有限的詞類中,然後以詞類代表這個詞。一個例子如下:

至此模型是差不多了。

三、Viterbi算法

由模型可知,我們的核心問題是給定x1...xn求y序列:

一種最簡單的方法當然就是蠻力法,算出所有可能的y序列對應的p(x,y)。可能的y序列將有|S|^n個,代價太大。

因此我們使用Viterbi算法,這個算法的精髓在於遞歸。

π可以遞歸定義:

直觀理解就是當前位置k最可能的結果是k-1最可能的結果的基礎上當前位置各個標籤的概率的最大值。

有了遞歸定義,意味着可以節省很多計算了,只要找到k-1的最大值,那麼k的最大值在k-1基礎上做就行。

但是,別忘了我們可不是單純爲了求最大值,我們的目標是爲了求出y序列,因此,我們還需要一個反向指針記錄路徑

完整的Viterbi算法如下:

Viterbi的時間複雜度:第一個for循環n,第二個for循環找u、v是|S|^2,for循環裏w又是|S|,因此時間複雜度O(n*|S|^3)

四、優缺點

模型簡單、表現優良,但是對於e(xi|yi),如果單詞複雜,則處理也很複雜,有時可能需要人工干預。

 

 

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