Pytorch学习笔记13----LSTM+CRF模型的CRF层原理与代码理解
1.LSTM+CRF概述
對(duì)于命名實(shí)體識(shí)別來(lái)講,目前比較流行的方法是基于神經(jīng)網(wǎng)絡(luò),例如,論文[1]提出了基于BiLSTM-CRF的命名實(shí)體識(shí)別模型,該模型采用word embedding和character embedding(在英文中,word embedding對(duì)應(yīng)于單詞嵌入式表達(dá),character embedding對(duì)應(yīng)于字母嵌入式表達(dá);在中文中,word embedding對(duì)應(yīng)于詞嵌入式表達(dá),character embedding對(duì)應(yīng)于字嵌入式表達(dá);接下來(lái)的示例中我們都假設(shè)是英文的場(chǎng)景),我將用該模型作為示例來(lái)解釋CRF層的工作原理。
1.1 參數(shù)定義
假設(shè),我們的數(shù)據(jù)集中有兩種實(shí)體類型:人名和機(jī)構(gòu)名,因此,在我們的數(shù)據(jù)集中有5種實(shí)體標(biāo)簽:
B-Person
I- Person
B-Organization
I-Organization
O
假設(shè)x是一個(gè)句子,該句子由5個(gè)單詞組成:w0,w1,w2,w3,w4,而且在句子x中,[w0,w1]組成一個(gè)人名,[w2,w3?]為一個(gè)機(jī)構(gòu)名,其他單詞標(biāo)簽都是"O"。
1.2 BiLSTM-CRF模型
接下來(lái),簡(jiǎn)明介紹一下該模型。
示意圖如下所示:
首先,句子x中的每個(gè)單詞表達(dá)成一個(gè)向量,該向量包含了上述的word embedding和character embedding,其中character embedding隨機(jī)初始化,word embedding通常采用預(yù)訓(xùn)練模型初始化。所有的embeddings 將在訓(xùn)練過程中進(jìn)行微調(diào)。
其次,BiLSTM-CRF模型的的輸入是上述的embeddings,輸出是該句子xxx中每個(gè)單詞的預(yù)測(cè)標(biāo)簽。
從上圖可以看出,BiLSTM層的輸出是每個(gè)標(biāo)簽的得分,如單詞w0,BiLSTM的輸出為1.5(B-Person),0.9(I-Person),0.1(B-Organization), 0.08 (I-Organization) and 0.05 (O),
這些得分就是CRF層的輸入。
將BiLSTM層預(yù)測(cè)的得分喂進(jìn)CRF層,具有最高得分的標(biāo)簽序列將是模型預(yù)測(cè)的最好結(jié)果。
1.3 如果沒有CRF層將如何
根據(jù)上文,能夠發(fā)現(xiàn),如果沒有CRF層,即我們用下圖所示訓(xùn)練BiLSTM命名實(shí)體識(shí)別模型:
因?yàn)锽iLSTM針對(duì)每個(gè)單詞的輸出是標(biāo)簽得分,對(duì)于每個(gè)單詞,我們可以選擇最高得分的標(biāo)簽作為預(yù)測(cè)結(jié)果。
例如,對(duì)于w0,“B-Person"得分最高(1.5),因此我們可以選擇“B-Person”最為其預(yù)測(cè)標(biāo)簽;同樣的,w1的標(biāo)簽為"I-Person”,w2w_2w2?的為"O",w3w_3w3?的標(biāo)簽為"B-Organization",w4w_4w4?的標(biāo)簽為"O"。
按照上述方法,對(duì)于x雖然我們得到了正確的標(biāo)簽,但是大多數(shù)情況下是不能獲得正確標(biāo)簽的,例如下圖的例子:
顯然,輸出標(biāo)簽“I-Organization I-Person” 和 “B-Organization I-Person”是不對(duì)的。
1.4 CRF能夠從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)到約束條件
CRF層可以對(duì)最終的約束標(biāo)簽添加一些約束條件,從而保證預(yù)測(cè)標(biāo)簽的有效性。而這些約束條件是CRF層自動(dòng)從訓(xùn)練數(shù)據(jù)中學(xué)到。
約束可能是:
一句話中第一個(gè)單詞的標(biāo)簽應(yīng)該是“B-“ or “O”,而不能是"I-";
“B-label1 I-label2 I-label3 I-…”中,label1, label2, label3 …應(yīng)該是相同的命名實(shí)體標(biāo)簽。如“B-Person I-Person”是有效的,而“B-Person I-Organization” 是無(wú)效的;
“O I-label” 是無(wú)效的。一個(gè)命名實(shí)體的第一個(gè)標(biāo)簽應(yīng)該以 “B-“ 開頭,而不能以“I-“開頭,換句話說(shuō), 應(yīng)該是“O B-label”這種模式;
…
有了這些約束條件,無(wú)效的預(yù)測(cè)標(biāo)簽序列將急劇減少。
2.CRF層
在CRF層的損失函數(shù)中,有兩種類型的得分,這兩種類型的得分是CRF層的關(guān)鍵概念。
2.1 發(fā)射得分
第一個(gè)得分為發(fā)射得分,該得分可以從BiLSTM層獲得。如圖2.1所示,w0?標(biāo)記為B-Person的得分是1.5。
為了后續(xù)敘述方便,我們將給每個(gè)標(biāo)簽一個(gè)索引,如下表所示:
| Label | Index |
|---|---|
| B-Person | 0 |
| I-Person | 1 |
| B-Organization | 2 |
| I-Organization | 3 |
| O | 4 |
我們采用xi,yj來(lái)表達(dá)發(fā)射矩陣,其中i表示第i單詞,yj表示標(biāo)簽索引。例如,根據(jù)圖2.1,
該表達(dá)式的意思是將w1w_1w1?標(biāo)記為 B-Organization的概率為0.1。
2.2 轉(zhuǎn)移得分
我們采用xi,yj表示轉(zhuǎn)移得分,例如,tB−Person,I−Person=0.9t_{B-Person,I-Person}=0.9tB−Person,I−Person?=0.9表示標(biāo)簽B-Person轉(zhuǎn)移到I-Person的得分為0.9,因此,我們將獲得一個(gè)轉(zhuǎn)移得分矩陣,該矩陣存儲(chǔ)著所有標(biāo)簽相互轉(zhuǎn)移之間的得分。
為了使轉(zhuǎn)移得分矩陣的魯棒性更好,我們將額外再加兩個(gè)標(biāo)簽:START和END,START表示一句話的開始,注意這不是指該句話的第一個(gè)單詞,START后才是第一個(gè)單詞,同樣的,END代表著這句話的結(jié)束。
下表就是一個(gè)轉(zhuǎn)移得分矩陣的示例,該示例包含了START和END標(biāo)簽。
| START | B-Person | I-Person | B-Organization | I-Organization | O | END | |
|---|---|---|---|---|---|---|---|
| START | 0 | 0.8 | 0.007 | 0.7 | 0.0008 | 0.9 | 0.08 |
| B-Person | 0 | 0.6 | 0.9 | 0.2 | 0.0006 | 0.6 | 0.009 |
| I-Person | -1 | 0.5 | 0.53 | 0.55 | 0.0003 | 0.85 | 0.008 |
| B-Organization | 0.9 | 0.5 | 0.0003 | 0.25 | 0.8 | 0.77 | 0.006 |
| I-Organization | -0.9 | 0.45 | 0.007 | 0.7 | 0.65 | 0.76 | 0.2 |
| O | 0 | 0.65 | 0.0007 | 0.7 | 0.0008 | 0.9 | 0.08 |
| END | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
如上表所示,我們能夠發(fā)現(xiàn)轉(zhuǎn)移矩陣已經(jīng)學(xué)習(xí)到了某些有用的約束條件。
句子中第一個(gè)單詞的標(biāo)簽應(yīng)該是以“B-”或者"O"開頭,而不能以"I-"開頭(轉(zhuǎn)移得分中,從START到I-Person 和 I-Organization的得分都很低);
模式“B-label1 I-label2 I-label3 I-…”中,label1, label2, label3 … 應(yīng)該是相同的命名實(shí)體,例如“B-Person I-Person”是有效的,而 “B-Person I-Organization”是無(wú)效的。(該性質(zhì)在轉(zhuǎn)移得分矩陣中的表現(xiàn)為,從B-Organization到I-Person的得分僅有0.0003);
“O I-label”是無(wú)效的,命名實(shí)體的第一個(gè)標(biāo)簽應(yīng)該是以“B-“ 開頭的而不該是以“I-“開頭的,換而言之,有效的標(biāo)簽?zāi)J綉?yīng)該是“O B-label” (該性質(zhì)在轉(zhuǎn)移得分矩陣中的表現(xiàn)是,得分tO,I−Persont_{O,I-Person}tO,I−Person?是很低的。)
…
現(xiàn)在,你可能比較關(guān)心的問題是:怎么得到該轉(zhuǎn)移矩陣?
其實(shí),該矩陣是BiLSTM-CRF模型的一個(gè)參數(shù),在訓(xùn)練模型之前,可以隨機(jī)初始化該轉(zhuǎn)移得分矩陣,在訓(xùn)練過程中,這個(gè)矩陣中的所有隨機(jī)得分將得到更新,換而言之,CRF層可以自己學(xué)習(xí)這些約束條件,而無(wú)需人為構(gòu)建該矩陣。隨著不斷的訓(xùn)練,這些得分會(huì)越來(lái)越合理。
3.CRF的損失函數(shù)
假設(shè)我們的標(biāo)簽一共有tag_size個(gè),那么BiLSTM的輸出維度就是tag_size,表示的是每個(gè)詞wi?映射到tag的發(fā)射概率值(feats),設(shè)BiLSTM的輸出矩陣為P,其中Pi,j代表詞wi映射到tag_j的非歸一化概率。對(duì)于CRF來(lái)說(shuō),我們假定存在一個(gè)轉(zhuǎn)移矩陣A,則A_{i,j}代表代表代表tag_i轉(zhuǎn)移到轉(zhuǎn)移到轉(zhuǎn)移到tag_j的轉(zhuǎn)移概率。
對(duì)于輸入序列X對(duì)應(yīng)的輸出tagtagtag序列y,定義分?jǐn)?shù)為:
利用softmax函數(shù),我們?yōu)槊恳粋€(gè)正確的tag序列y定義一個(gè)概率值
在訓(xùn)練中,我們的目標(biāo)就是最大化概率p(y│X) ,怎么最大化呢,用對(duì)數(shù)似然(因?yàn)閜(y│X)中存在指數(shù)和除法,對(duì)數(shù)似然可以化簡(jiǎn)這些運(yùn)算)
對(duì)數(shù)似然形式如下:
所以我們將損失函數(shù)Loss定義為-log(p(y|X)),就可以利用梯度下降法來(lái)進(jìn)行網(wǎng)絡(luò)的學(xué)習(xí)了。
參考博客:
https://blog.csdn.net/Suan2014/article/details/89419283
https://www.cnblogs.com/Nobody0426/p/10712835.html(損失函數(shù)講解的好)
https://blog.csdn.net/qq_39526294/article/details/104055944(實(shí)例不錯(cuò))
總結(jié)
以上是生活随笔為你收集整理的Pytorch学习笔记13----LSTM+CRF模型的CRF层原理与代码理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红白喜事赞句
- 下一篇: 写一副墓联,不知有毛病没有。“青龙腾湖映