筆記轉(zhuǎn)載于GitHub項目:https://github.com/NLP-LOVE/Introduction-NLP
5. 感知機分類與序列標(biāo)注
第4章我們利用隱馬爾可夫模型實現(xiàn)了第一個基于序列標(biāo)注的中文分詞器熙兔,然而效果并不理想社牲。事實上埋市,隱馬爾可夫模型假設(shè)人們說的話僅僅取決于一個隱藏的{B.M,E,S序列结榄,這個假設(shè)太單純了,不符合語言規(guī)律梢莽。語言不是由這么簡單的標(biāo)簽序列生成萧豆,語言含有更多特征,而隱馬彌可夫模型沒有捕捉到昏名。隱馬彌可夫模型能捕捉的特征僅限于兩種: 其一涮雷,前一個標(biāo)簽是什么;其二轻局,當(dāng)前字符是什么洪鸭。
為了利用更多的特征,線性模型( linear model )應(yīng)運而生仑扑。線性模型由兩部分構(gòu)成: 一系列用來提取特征的特征函數(shù) φ览爵,以及相應(yīng)的權(quán)重向量 w。
本章將深人講解感知機算法的原理夫壁,以及在分類和序列標(biāo)注上的應(yīng)用拾枣。在序列標(biāo)注應(yīng)用部分沃疮,我們將實現(xiàn)基于感知機的中文分詞器盒让。由于感知機序列標(biāo)注基于分類梅肤,并且分類問題更簡單,所以我們先學(xué)習(xí)分類問題邑茄。
5.1 分類問題
-
定義
分類指的是預(yù)測樣本所屬類別的一類問題姨蝴。二分類也可以解決任意類別數(shù)的多分類問題(one vs rest)。
將類型class1看作正樣本肺缕,其他類型全部看作負(fù)樣本左医,然后我們就可以得到樣本標(biāo)記類型為該類型的概率 p1。
然后再將另外類型class2看作正樣本同木,其他類型全部看作負(fù)樣本浮梢,同理得到 p2。
以此循環(huán)彤路,我們可以得到該待預(yù)測樣本的標(biāo)記類型分別為類型 class i 時的概率 pi秕硝,最后我們?nèi)?pi 中最大的那個概率對應(yīng)的樣本標(biāo)記類型作為我們的待預(yù)測樣本類型。
總之還是以二分類來依次劃分洲尊,并求出最大概率結(jié)果远豺。
image
-
應(yīng)用
在NLP領(lǐng)域,絕大多數(shù)任務(wù)可以用分類來解決坞嘀。文本分類天然就是一個分類問題躯护。關(guān)鍵詞提取時,對文章中的每個單詞判斷是否屬于關(guān)鍵詞丽涩,于是轉(zhuǎn)化為二分類問題棺滞。在指代消解問題中,對每個代詞和每個實體判斷是否存在指代關(guān)系矢渊,又是一個二分類問題检眯。在語言模型中,將詞表中每個單詞作為一種類別昆淡,給定上文預(yù)測接下來要出現(xiàn)的單詞锰瘸。
5.2 線性分類模型
線性模型是傳統(tǒng)機器學(xué)習(xí)方法中最簡單最常用的分類模型,用一條線性的直線或高維平面將數(shù)據(jù)一分為二昂灵。
直線將平面分割為兩部分避凝,分別對應(yīng)男女。對于任何姓名眨补,計算它落入哪個區(qū)域管削,就能預(yù)測它的性別。這樣的區(qū)域稱為決策區(qū)域撑螺,它們的邊界稱為決策邊界含思。二維空間中,如果決策邊界是直線,則稱為線性分類模型: Y = Wx + b含潘。
如果是任意維度空間中的線性決策邊界統(tǒng)稱為分離超平面
推廣到 D 維空間饲做,分離超平面的方程為:
其中,w 是權(quán)重遏弱,b 偏置(截距)盆均,可以寫成向量的形式:
5.3 感知機算法
找出這個分離超平面其實就是感知機算法。感知機算法則是一種迭代式的算法:在訓(xùn)練集上運行多個迭代漱逸,每次讀入一個樣本泪姨,執(zhí)行預(yù)測,將預(yù)測結(jié)果與正確答案進行對比饰抒,計算誤差肮砾,根據(jù)誤差更新模型參數(shù),再次進行訓(xùn)練袋坑,直到誤差最小為止唇敞。
- 損失函數(shù): 從數(shù)值優(yōu)化的角度來講,迭代式機器學(xué)習(xí)算法都在優(yōu)化(減小)一個損失函數(shù)( loss function )咒彤。損失函數(shù) J(w) 用來衡量模型在訓(xùn)練集上的錯誤程度疆柔,自變量是模型參數(shù) w,因變量是一個標(biāo)量镶柱,表示模型在訓(xùn)練集上的損失的大小旷档。
- 梯度下降: 給定樣本,其特征向量 x 只是常數(shù)歇拆,對 J(w) 求導(dǎo)鞋屈,得到一個梯度向量 Δw,它的反方向一定是當(dāng)前位置損失函數(shù)減小速度最快的方向故觅。如果參數(shù)點 w 反方向移動就會使損失函數(shù)減小厂庇,叫梯度下降。
- 學(xué)習(xí)率: 梯度下降的步長叫做學(xué)習(xí)率输吏。
- 隨機梯度下降(SGD): 如果算法每次迭代隨機選取部分樣本計算損失函數(shù)的梯度权旷,則稱為隨機梯度下降。
這時候問題來了贯溅,假如數(shù)據(jù)本身線性不可分拄氯,感知機損失函數(shù)不會收斂,每次迭代分離超平面都會劇烈振蕩它浅。這時可以對感知機算法打補丁译柏,使用投票感知機或平均感知機。
-
投票感知機和平均感知機
投票感知機:每次迭代的模型都保留姐霍,準(zhǔn)確率也保留鄙麦,預(yù)測時典唇,每個模型都給出自己的結(jié)果,乘以它的準(zhǔn)確率加權(quán)平均值作為最終結(jié)果胯府。
投票感知機要求存儲多個模型及加權(quán)介衔,計算開銷較大,更實際的做法是取多個模型的權(quán)重的平均盟劫,這就是平均感知機。
5.4 基于感知機的人名性別分類
解決人名性別分類的監(jiān)督學(xué)習(xí)流程:
- 標(biāo)注人名分類語料庫
- 利用感知機算法訓(xùn)練線性模型
- 利用線性模型給人名分類与纽,評估準(zhǔn)確率侣签。
-
人名性別語料庫
筆者整理了一份人名性別語料庫 cnname
運行下面代碼后會自動下載。
預(yù)料格式為逗號分隔的 .csv急迂,第一列為姓名影所,第二列為性別:
趙伏琴,女 錢沐楊,男 孫竹珍,女 李潮陽,男
-
訓(xùn)練
代碼詳見:classify_name.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch05/classify_name.py
運行結(jié)果如下:
下載 http://file.hankcs.com/corpus/cnname.zip 到 /usr/local/lib/python3.7/site-packages/pyhanlp/static/data/test/cnname.zip 100.00%, 1 MB, 256 KB/s, 還有 0 分 0 秒 =====樸素感知機算法===== 訓(xùn)練集準(zhǔn)確率: P=85.44 R=85.06 F1=85.25 特征數(shù)量: 9089 趙建軍=男 沈雁冰=男 陸雪琪=女 李冰冰=女 測試集準(zhǔn)確率: P=82.85 R=82.90 F1=82.88 =====平均感知機算法===== 訓(xùn)練集準(zhǔn)確率: P=93.62 R=83.06 F1=88.02 特征數(shù)量: 9089 趙建軍=男 沈雁冰=男 陸雪琪=女 李冰冰=女 測試集準(zhǔn)確率: P=90.92 R=80.39 F1=85.33
5.5 結(jié)構(gòu)化預(yù)測問題
自然語言處理問題大致可分為兩類,一種是分類問題僚碎,另一種就是結(jié)構(gòu)化預(yù)測問題猴娩,序列標(biāo)注只是結(jié)構(gòu)化預(yù)測的一個特例,對感知機稍作拓展勺阐,分類器就能支持結(jié)構(gòu)化預(yù)測卷中。
-
定義
信息的層次結(jié)構(gòu)特點稱作結(jié)構(gòu)化。那么結(jié)構(gòu)化預(yù)測(structhre渊抽,prediction)則是預(yù)測對象結(jié)構(gòu)的一類監(jiān)督學(xué)習(xí)問題蟆豫。相應(yīng)的模型訓(xùn)練過程稱作結(jié)構(gòu)化學(xué)習(xí)(stutured laming )。分類問題的預(yù)測結(jié)果是一個決策邊界懒闷, 回歸問題的預(yù)測結(jié)果是一個實數(shù)標(biāo)量十减,而結(jié)構(gòu)化預(yù)測的結(jié)果則是一個完整的結(jié)構(gòu)。
自然語言處理中有許多任務(wù)是結(jié)構(gòu)化預(yù)測愤估,比如序列標(biāo)注預(yù)測結(jié)構(gòu)是一整個序列帮辟,句法分析預(yù)測結(jié)構(gòu)是一棵句法樹,機器翻譯預(yù)測結(jié)構(gòu)是一段完整的譯文玩焰。這些結(jié)構(gòu)由許多部分構(gòu)成由驹,最小的部分雖然也是分類問題(比如中文分詞時每個字符分類為{B,M,E,S} ),但必須考慮結(jié)構(gòu)整體的合理程度。
-
結(jié)構(gòu)化預(yù)測與學(xué)習(xí)流程
結(jié)構(gòu)化預(yù)測的過程就是給定一個模型 λ 及打分函數(shù) score昔园,利用打分函數(shù)給一些備選結(jié)構(gòu)打分荔棉,選擇分?jǐn)?shù)最高的結(jié)構(gòu)作為預(yù)測輸出,公式如下:
其中蒿赢,Y 是備選結(jié)構(gòu)的集合润樱。既然結(jié)構(gòu)化預(yù)測就是搜索得分最高的結(jié)構(gòu) y,那么結(jié)構(gòu)化學(xué)習(xí)的目標(biāo)就是想方設(shè)法讓正確答案 y 的得分最高羡棵。不同的模型有不同的算法壹若,對于線性模型,訓(xùn)練算法為結(jié)構(gòu)化感知機。
5.6 線性模型的結(jié)構(gòu)化感知機算法
-
結(jié)構(gòu)化感知機算法
要讓線性模型支持結(jié)構(gòu)化預(yù)測店展,必須先設(shè)計打分函數(shù)养篓。打分函數(shù)的輸入有兩個缺一不可的參數(shù): 特征 x 和結(jié)構(gòu) y。但之前介紹的線性模型的“打分函數(shù)”只接受一個自變量 x赂蕴。
做法是定義新的特征函數(shù) ?(x,y)柳弄,把結(jié)構(gòu) y 也作為一種特征,輸出新的“結(jié)構(gòu)化特征向量”概说。新特征向量與權(quán)重向量做點積后碧注,就得到一個標(biāo)量,將其作為分?jǐn)?shù):
打分函數(shù)有了糖赔,取分值最大的結(jié)構(gòu)作為預(yù)測結(jié)果萍丐,得到結(jié)構(gòu)化預(yù)測函數(shù):
預(yù)測函數(shù)與線性分類器的決策函數(shù)很像,都是權(quán)重向量點積特征向量放典。那么感知機算法也可以拓展復(fù)用逝变,得到線性模型的結(jié)構(gòu)化學(xué)習(xí)算法。讀入樣本 (x,y)奋构,進行結(jié)構(gòu)化預(yù)測
-
與正確答案相比壳影,若不相等,則更新參數(shù): 獎勵正確答案觸發(fā)的特征函數(shù)的權(quán)重弥臼,否則進行懲罰:
-
還可以調(diào)整學(xué)習(xí)率:
-
與感知機算法比較
- 結(jié)構(gòu)化感知機修改了特征向量态贤。
- 結(jié)構(gòu)化感知機的參數(shù)更新賞罰分明。
-
結(jié)構(gòu)化感知機與序列標(biāo)注
上面已經(jīng)講了結(jié)構(gòu)化感知機的模型公式醋火,看如何運用到序列標(biāo)注上悠汽,我們知道序列標(biāo)注最大的結(jié)構(gòu)特點就是標(biāo)簽相互之間的依賴性,這種依賴性利用初始狀態(tài)概率想倆狗和狀態(tài)轉(zhuǎn)移概率矩陣體系那芥驳,那么對于結(jié)構(gòu)化感知機柿冲,就可以使用轉(zhuǎn)移特征來表示:
其中,Yt 為序列第 t 個標(biāo)簽兆旬,Si 為標(biāo)注集第 i 種標(biāo)簽假抄,N 為標(biāo)注集大小。狀態(tài)特征如下丽猬,類似于隱馬爾可夫模型的發(fā)射概率矩陣宿饱,狀態(tài)特征只與當(dāng)前的狀態(tài)有關(guān),與之前的狀態(tài)無關(guān):
于是脚祟,結(jié)構(gòu)化感知機的特征函數(shù)就是轉(zhuǎn)移特征和狀態(tài)特征的合集:
基于以上公式谬以,我們統(tǒng)一用打分函數(shù)來表示:
有了打分公式,就可以利用維特比算法求解得分最高的序列由桌。
5.7 基于結(jié)構(gòu)化感知機的中文分詞
代碼詳見(注釋寫得很清楚): perceptron_cws.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch05/perceptron_cws.py
運行以上代碼結(jié)果如下:
P:96.68 R:96.51 F1:96.59 OOV-R:71.54 IV-R:97.18
[王思斌, 为黎,, 男, 邮丰,, 1949年10月, 生, 。]
[山東, 桓臺縣, 起鳳鎮(zhèn), 穆寨村, 婦女, 穆玲英]
[現(xiàn), 為, 中國藝術(shù)研究院中國文化研究所, 研究員, 铭乾。]
[我們, 的, 父母, 重, 男, 輕, 女]
[北京輸氣管道, 工程]
準(zhǔn)確性與性能的比較
算法 | P | R | F1 | R(oov) | R(IV) |
---|---|---|---|---|---|
最長匹配 | 89.41 | 94.64 | 91.95 | 2.58 | 97.14 |
二元語法 | 92.38 | 96.70 | 94.49 | 2.58 | 99.26 |
一階HHM | 78.49 | 80.38 | 79.42 | 41.11 | 81.44 |
二階HHM | 78.34 | 80.01 | 79.16 | 42.06 | 81.04 |
平均感知機 | 96.69 | 96.45 | 96.57 | 70.34 | 97.16 |
結(jié)構(gòu)化感知機 | 96.67 | 96.64 | 96.65 | 70.52 | 97.35 |
對比各項指標(biāo)剪廉,我們終于將 OOV 提高到了 70% 以上,并且綜合 F1 也提高了 96.7%炕檩,感知機是截止到這章最好用的算法斗蒋,完全達(dá)到了實用水平,在實際項目中笛质,無非還需要掛載一些領(lǐng)域詞庫泉沾。
5.8 GitHub
HanLP何晗--《自然語言處理入門》筆記:
https://github.com/NLP-LOVE/Introduction-NLP
項目持續(xù)更新中......
目錄
章節(jié) |
---|
第 1 章:新手上路 |
第 2 章:詞典分詞 |
第 3 章:二元語法與中文分詞 |
第 4 章:隱馬爾可夫模型與序列標(biāo)注 |
第 5 章:感知機分類與序列標(biāo)注 |
第 6 章:條件隨機場與序列標(biāo)注 |
第 7 章:詞性標(biāo)注 |
第 8 章:命名實體識別 |
第 9 章:信息抽取 |
第 10 章:文本聚類 |
第 11 章:文本分類 |
第 12 章:依存句法分析 |
第 13 章:深度學(xué)習(xí)與自然語言處理 |