详解BILSTM-CRF模型结构进行命名实体识别
命名實(shí)體識(shí)別(NER)是什么?
識(shí)別出文本中具有特定意義的實(shí)體字符串邊界,并歸類到預(yù)定義類別,傳統(tǒng)識(shí)別時(shí)間、機(jī)構(gòu)名、地點(diǎn)等,但隨著應(yīng)用發(fā)展為識(shí)別特殊預(yù)定義類別。
命名實(shí)體識(shí)別發(fā)展歷程
早期使用基于規(guī)則和字典的方法進(jìn)行命名實(shí)體識(shí)別,后來(lái)使用機(jī)器學(xué)習(xí)方法(如:HMM、CRF等),后來(lái)使用深度學(xué)習(xí)的方法(如BILSTM-CRF、Lattice-LSTM-CRF、CNN-CRF等),近期流行使用注意力學(xué)習(xí)機(jī)制、遷移學(xué)習(xí)、半監(jiān)督學(xué)習(xí)進(jìn)行命名實(shí)體識(shí)別任務(wù)。本節(jié)主要講述使用BILSTM-CRF進(jìn)行命名實(shí)體識(shí)別。文章基于百度研究院發(fā)布的論文《Bidirectional LSTM-CRF Models for Sequence Tagging》進(jìn)行介紹。
BILSTM-CRF模型結(jié)構(gòu)
這是一個(gè)BILSTM-CRF模型結(jié)構(gòu)圖,具體每步可理解為:
 1.句子轉(zhuǎn)化為字詞向量序列,字詞向量可以在事先訓(xùn)練好或隨機(jī)初始化,在模型訓(xùn)練時(shí)還可以再訓(xùn)練。
 2.經(jīng)由BILSTM特征提取,輸出是每個(gè)單詞對(duì)應(yīng)的預(yù)測(cè)標(biāo)簽。
 3.經(jīng)CRF層約束,會(huì)對(duì)輸出的分?jǐn)?shù)進(jìn)行校正,輸出是最優(yōu)標(biāo)簽序列。
 
Step1:Word Embedding
定義:
Word Embedding是一個(gè)基于分布式假設(shè)的預(yù)訓(xùn)練模型。它假設(shè)兩個(gè)語(yǔ)義相近的詞在高維空間中距離更近。
方法流程:
1.將一個(gè)含有n個(gè)詞的句子記作:x = (x1,x2,…xn)。
 2.利用預(yù)訓(xùn)練的embedding矩陣將每個(gè)字映射為低維稠密的向量。
重點(diǎn)理解:
預(yù)訓(xùn)練詞向量為何可以提高模型泛化能力?
 因?yàn)樯疃葘W(xué)習(xí)能把我們現(xiàn)實(shí)事物表示的好,它本身是一種表示學(xué)習(xí),而Word Embedding能把字詞表示得很好,用到深度學(xué)習(xí)模型中就可以提高模型的泛化。舉個(gè)例子理解一下,安徽在NER中被識(shí)別為地名,那么跟安徽類似的比如江蘇出現(xiàn)在文本中,因?yàn)槲覀円呀?jīng)訓(xùn)練了安徽的embedding它很容易被識(shí)別成location,那么江蘇的embedding跟安徽的embedding比較相近,那么經(jīng)過(guò)相同的前向傳播,江蘇為location的概率比較大。因此,在訓(xùn)練集中你只見到了安徽,在測(cè)試集中就可以泛化到江蘇了。因此預(yù)訓(xùn)練詞向量可以提高模型泛化能力。
Step2:BILSTM提取文本特征
方法流程:
1.將一個(gè)句子各個(gè)字的embedding序列作為雙向LSTM各個(gè)時(shí)間步的輸入。
 2.將正反向輸出的隱狀態(tài)進(jìn)行拼接,得到完整的隱狀態(tài)序列。
RNN
RNN不同于DNN,CNN網(wǎng)絡(luò)之處在于它賦予了網(wǎng)絡(luò)對(duì)于前面內(nèi)容的"記憶能力",NER任務(wù)的起初,是使用RNN計(jì)算預(yù)測(cè)標(biāo)簽序列之間的依賴關(guān)系并完成標(biāo)注任務(wù)。
 如圖所示:在t時(shí)刻隱藏層和輸出層的如公式(1)和(2)所示:
 St = f(Uxt + WSt-1) (1)
 Ot = g(VSt) (2)
 Ot = g(VSt) = g(V(f(Uxt + WSt-1)) = g(V f(Uxt + Wf(Uxt-1 + WSt-2)))) =…(3)
 由公式(3)可知,網(wǎng)絡(luò)越深,越容易出現(xiàn)梯度消失和梯度爆炸問(wèn)題。展開之后,梯度更新,也就是回傳的時(shí)候,可能第100個(gè)梯度就影響不到第0個(gè)了。也就是,這種累乘的結(jié)構(gòu),有著天然的缺陷。于是后面提出了LSTM,解決RNN梯度消失和梯度爆炸問(wèn)題。
 
LSTM
LSTM引入了門記憶機(jī)制,使用記憶細(xì)胞來(lái)捕獲長(zhǎng)距離依賴。LSTM在每個(gè)時(shí)刻都選擇性地改變記憶,從而有效解決RNN的長(zhǎng)距離依賴。總的來(lái)說(shuō),LSTM通過(guò)訓(xùn)練過(guò)程可以學(xué)到記憶哪些信息和遺忘哪些信息。
 
 ft是遺忘門,it是輸入門,ot是輸出門,他們都是來(lái)源于當(dāng)前的輸入xt,以及上一步的隱狀態(tài)ht-1,b是偏置,他們都通過(guò)非線性的sigmoid函數(shù)得到一個(gè)-1~1之間值的向量。
 ct波浪線是t時(shí)刻臨時(shí)的cell,它來(lái)源于當(dāng)前的輸入xt,以及上一步的隱狀態(tài)ht-1,b是偏置,xt和ht-1都有對(duì)應(yīng)的權(quán)重,然后通過(guò)一個(gè)非線性tanch的函數(shù),得到一個(gè)-1-1之間數(shù)值向量。
 ct是當(dāng)前cell要存儲(chǔ)的信息。它是通過(guò)遺忘門和輸入門來(lái)進(jìn)行控制的。遺忘門ft控制之前的要遺忘掉多少,輸入門cell控制當(dāng)前的臨時(shí)cell有多少要記到這條主線上來(lái),經(jīng)過(guò)非線性的sigmoid函數(shù)得到一個(gè)-1-1之間值的向量,該向量與輸出門得到的判斷條件相乘就得到了最終該RNN單元的輸出。舉個(gè)例子:比如有一個(gè)筆記本,看到一本書我們就把好的內(nèi)容記進(jìn)筆記本,但是筆記本容量有限,讀著讀著我們發(fā)現(xiàn)有比之前筆記本里內(nèi)容更重要的內(nèi)容,于是就把之前的遺忘掉,然后寫入新的內(nèi)容。
 LSTM把累乘變成了加法表示,減緩了梯度消失和梯度爆炸問(wèn)題,緩解了RNN的長(zhǎng)距離依賴問(wèn)題。
從LSTM到BILSTM
綜上所知,LSTM通過(guò)記憶元件來(lái)解決長(zhǎng)距離依賴問(wèn)題,但LSTM是一種前向傳播算法,因此對(duì)命名實(shí)體識(shí)別而言,需要綜合反向的LSTM進(jìn)行學(xué)習(xí),即BILSTM。
 1.一個(gè)LSTM網(wǎng)絡(luò)計(jì)算前向的隱特征(從左到右)。
 2.另一個(gè)LSTM網(wǎng)絡(luò)計(jì)算后向的隱特征(從右到左)。
 3.我們把這兩個(gè)LSTM輸出的結(jié)果進(jìn)行拼接,就得到雙向LSTM網(wǎng)絡(luò),用于特征提取。
 雙向LSTM的好處是什么呢?
 它可以高效的表示出這個(gè)單詞在上下文中的含義,在標(biāo)準(zhǔn)Bi-LSTM中,輸出通過(guò)接入SoftMax輸出層預(yù)測(cè)結(jié)點(diǎn)間的分類標(biāo)簽。如下圖所示,前向的LSTM依次輸入"我",“愛(ài)”,“中國(guó)”,得到三個(gè)向量(hL0,hL1,hL2),后向的LSTM依次輸入"中國(guó)",“愛(ài)”,“我”,得到三個(gè)向量(hR0,hR1,hR2),最后將前向和后向的隱向量進(jìn)行拼接得到{[hL0,hR0],[hL1,hR1],[hL2,hR0]},即(h0,h1,h2)。
 
Step3:得到P矩陣
方法流程:
1.將完整的隱狀態(tài)序列接入線性層,從n維映射到k維,其中k是標(biāo)注集的標(biāo)簽數(shù)。
 2.從而得到自動(dòng)提取的句子特征,記作矩陣P=(p1,p2,…pn),注意該矩陣是非歸一化矩陣。其中pi表示該單詞對(duì)應(yīng)各個(gè)類別的分?jǐn)?shù)。
 如圖所示,雙向BILSTM輸出矩陣1.5(B-Person),0.9(L-Person),0.1(B-Organization),0.08(I-Organization),這些分?jǐn)?shù)將是CRF層的輸入(圖中黃色部分即為P矩陣)。
 
發(fā)射分?jǐn)?shù)
發(fā)射分?jǐn)?shù),來(lái)自BILSTM的輸出。用xi,yj代表發(fā)射分?jǐn)?shù),i是單詞的位置索引,yj是類別的索引。如計(jì)算xi=1,yj=2 = xw1,B-Organization = 0.1。是不是通過(guò)P矩陣找到每一個(gè)詞對(duì)應(yīng)的發(fā)射分?jǐn)?shù)最大的值,我們就可以得到當(dāng)前詞所對(duì)應(yīng)的標(biāo)簽。即,w0的標(biāo)簽為B-Person,w1的標(biāo)簽為I-Person…,這樣就可以得到標(biāo)簽了。
為何還要加CRF來(lái)做NER呢?
因?yàn)槲覀兣翨ILSTM學(xué)到的發(fā)射分?jǐn)?shù)會(huì)與實(shí)際有偏差,于是我們需要引入CRF對(duì)其進(jìn)行優(yōu)化。
 
 左圖可以看出,在BIO模式下,每一步對(duì)應(yīng)的標(biāo)簽是B-Person,I-Person,O,B-Organization,O。這個(gè)P矩陣是完美的,這是模型表現(xiàn)好的時(shí)候。假設(shè)我們學(xué)到的發(fā)射分?jǐn)?shù)P矩陣不是很完美,如右圖所示,模型學(xué)到的第一步的標(biāo)簽是I-Organization,后面跟著I-Person,很明顯,這在BIO模式下是不合理的,因?yàn)镮-Person前面應(yīng)該跟著B開頭的標(biāo)簽,而不是I-Organization。正好CRF可以對(duì)標(biāo)簽之間進(jìn)行約束的,標(biāo)簽之間是有依賴的,使用CRF可以可以減少出錯(cuò)的情況。
Step4:CRF的引入
引入原因:
NER是一類特殊的任務(wù),因?yàn)楸碚鳂?biāo)簽的可解釋性序列"語(yǔ)法"強(qiáng)加了幾個(gè)硬約束,可能的約束比如:NER的開頭應(yīng)該是B-而不是I-。而CRF層能夠?qū)W習(xí)到句子的前后依賴,從而加入了一些約束來(lái)保證最終預(yù)測(cè)結(jié)果有效。
轉(zhuǎn)移分?jǐn)?shù)
轉(zhuǎn)移分?jǐn)?shù)是來(lái)自CRF層可以學(xué)到的轉(zhuǎn)移矩陣。
 轉(zhuǎn)移矩陣是BILSTM-CRF模型的一個(gè)參數(shù),可隨機(jī)初始化轉(zhuǎn)移矩陣的分?jǐn)?shù),然后在訓(xùn)練中更新。
 
讀圖可知,由B-Person轉(zhuǎn)移到I-Person的概率為0.9,但轉(zhuǎn)移到I-Organization的概率為0.0006。
Step5:最終結(jié)果的計(jì)算
CRF考慮前后標(biāo)記依賴約束,綜合使用標(biāo)記狀態(tài)轉(zhuǎn)移概率作為評(píng)分:
 
 上式意為對(duì)整個(gè)序列x,整個(gè)序列標(biāo)注的打分等于各個(gè)位置的打分之和,打分為2各部分:
 1.前者由LSTM輸出的pi決定。
 2.后者由CRF轉(zhuǎn)移矩陣A決定,其中Ayi-1,yi表示從第yi-1個(gè)標(biāo)簽到第yi個(gè)標(biāo)簽的轉(zhuǎn)移得分。
路徑分?jǐn)?shù)
Si = EmissionScore(發(fā)射分?jǐn)?shù)) + TransitionScore(轉(zhuǎn)移分?jǐn)?shù))
EmissionScore
EmissionScore = x0,start + x1,B-Person + x2,I-Person + x3,o + x4,B-Organization + x5,o + x6,END
 xindex,label表示第index個(gè)單詞被標(biāo)記為label的score。
 x1,B-Person ,x2,I-Person等均為BILSTM的輸出。
 x0,start 和 x6,END 可以看作為0。
TransitionScore
TransitionScore = tSTART->B-Person + tB-Person->I-Person + tI-Person->B-Organization + tB-Organization->o + to->END
 tlabel1->label2表示從label1到babel2的轉(zhuǎn)移概率分?jǐn)?shù),這些轉(zhuǎn)移分?jǐn)?shù)來(lái)自CRF層。
我們從所有可能的路徑中選一個(gè)作為最優(yōu)路徑。如何選呢?
 通過(guò)損失函數(shù)和維特比解碼,我將在下一篇博客為大家講解。
總結(jié)
以上是生活随笔為你收集整理的详解BILSTM-CRF模型结构进行命名实体识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Windows-Server-2012-
- 下一篇: BiLSTM-CRF模型的流程
