1.LSTM+CRF概述
對於命名實體識別來講,目前比較流行的方法是基於神經網絡,例如,論文[1]提出了基於BiLSTM-CRF的命名實體識別模型,該模型采用word embedding和character embedding(在英文中,word embedding對應於單詞嵌入式表達,character embedding對應於字母嵌入式表達;在中文中,word embedding對應於詞嵌入式表達,character embedding對應於字嵌入式表達;接下來的示例中我們都假設是英文的場景),我將用該模型作為示例來解釋CRF層的工作原理。
1.1 參數定義
假設,我們的數據集中有兩種實體類型:人名和機構名,因此,在我們的數據集中有5種實體標簽:
- B-Person
- I- Person
- B-Organization
- I-Organization
- O
假設x是一個句子,該句子由5個單詞組成:w0,w1,w2,w3,w4,而且在句子x中,[w0,w1]組成一個人名,[w2,w3]為一個機構名,其他單詞標簽都是"O"。
1.2 BiLSTM-CRF模型
接下來,簡明介紹一下該模型。
示意圖如下所示:
- 首先,句子x中的每個單詞表達成一個向量,該向量包含了上述的word embedding和character embedding,其中character embedding隨機初始化,word embedding通常采用預訓練模型初始化。所有的embeddings 將在訓練過程中進行微調。
- 其次,BiLSTM-CRF模型的的輸入是上述的embeddings,輸出是該句子xxx中每個單詞的預測標簽。
從上圖可以看出,BiLSTM層的輸出是每個標簽的得分,如單詞w0,BiLSTM的輸出為1.5(B-Person),0.9(I-Person),0.1(B-Organization), 0.08 (I-Organization) and 0.05 (O),
這些得分就是CRF層的輸入。
將BiLSTM層預測的得分喂進CRF層,具有最高得分的標簽序列將是模型預測的最好結果。
1.3 如果沒有CRF層將如何
根據上文,能夠發現,如果沒有CRF層,即我們用下圖所示訓練BiLSTM命名實體識別模型:
因為BiLSTM針對每個單詞的輸出是標簽得分,對於每個單詞,我們可以選擇最高得分的標簽作為預測結果。
例如,對於w0,“B-Person"得分最高(1.5),因此我們可以選擇“B-Person”最為其預測標簽;同樣的,w1的標簽為"I-Person”,w2w_2w2的為"O", w3w_3w3的標簽為"B-Organization",w4w_4w4的標簽為"O"。
按照上述方法,對於x雖然我們得到了正確的標簽,但是大多數情況下是不能獲得正確標簽的,例如下圖的例子:
顯然,輸出標簽“I-Organization I-Person” 和 “B-Organization I-Person”是不對的。
1.4 CRF能夠從訓練數據中學習到約束條件
CRF層可以對最終的約束標簽添加一些約束條件,從而保證預測標簽的有效性。而這些約束條件是CRF層自動從訓練數據中學到。
約束可能是:
- 一句話中第一個單詞的標簽應該是“B-“ or “O”,而不能是"I-";
- “B-label1 I-label2 I-label3 I-…”中,label1, label2, label3 …應該是相同的命名實體標簽。如“B-Person I-Person”是有效的,而“B-Person I-Organization” 是無效的;
- “O I-label” 是無效的。一個命名實體的第一個標簽應該以 “B-“ 開頭,而不能以“I-“開頭,換句話說, 應該是“O B-label”這種模式;
- …
有了這些約束條件,無效的預測標簽序列將急劇減少。
2.CRF層
在CRF層的損失函數中,有兩種類型的得分,這兩種類型的得分是CRF層的關鍵概念。
2.1 發射得分
第一個得分為發射得分,該得分可以從BiLSTM層獲得。如圖2.1所示,w0標記為B-Person的得分是1.5。
為了后續敘述方便,我們將給每個標簽一個索引,如下表所示:
Label | Index |
---|---|
B-Person | 0 |
I-Person | 1 |
B-Organization | 2 |
I-Organization | 3 |
O | 4 |
我們采用xi,yj來表達發射矩陣,其中i表示第i單詞,yj表示標簽索引。例如,根據圖2.1,
該表達式的意思是將w1w_1w1標記為 B-Organization的概率為0.1。
2.2 轉移得分
我們采用xi,yj表示轉移得分,例如,tB−Person,I−Person=0.9t_{B-Person,I-Person}=0.9tB−Person,I−Person=0.9表示標簽B-Person轉移到I-Person的得分為0.9,因此,我們將獲得一個轉移得分矩陣,該矩陣存儲着所有標簽相互轉移之間的得分。
為了使轉移得分矩陣的魯棒性更好,我們將額外再加兩個標簽:START和END,START表示一句話的開始,注意這不是指該句話的第一個單詞,START后才是第一個單詞,同樣的,END代表着這句話的結束。
下表就是一個轉移得分矩陣的示例,該示例包含了START和END標簽。
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 |
如上表所示,我們能夠發現轉移矩陣已經學習到了某些有用的約束條件。
- 句子中第一個單詞的標簽應該是以“B-”或者"O"開頭,而不能以"I-"開頭(轉移得分中,從START到I-Person 和 I-Organization的得分都很低);
- 模式“B-label1 I-label2 I-label3 I-…”中,label1, label2, label3 … 應該是相同的命名實體,例如“B-Person I-Person”是有效的,而 “B-Person I-Organization”是無效的。(該性質在轉移得分矩陣中的表現為,從B-Organization到I-Person的得分僅有0.0003);
- “O I-label”是無效的,命名實體的第一個標簽應該是以“B-“ 開頭的而不該是以“I-“開頭的,換而言之,有效的標簽模式應該是“O B-label” (該性質在轉移得分矩陣中的表現是,得分tO,I−Persont_{O,I-Person}tO,I−Person是很低的。)
- …
現在,你可能比較關心的問題是:怎么得到該轉移矩陣?
其實,該矩陣是BiLSTM-CRF模型的一個參數,在訓練模型之前,可以隨機初始化該轉移得分矩陣,在訓練過程中,這個矩陣中的所有隨機得分將得到更新,換而言之,CRF層可以自己學習這些約束條件,而無需人為構建該矩陣。隨着不斷的訓練,這些得分會越來越合理。
3.CRF的損失函數
假設我們的標簽一共有tag_size個,那么BiLSTM的輸出維度就是tag_size,表示的是每個詞wi映射到tag的發射概率值(feats),設BiLSTM的輸出矩陣為P,其中Pi,j代表詞wi映射到tag_j的非歸一化概率。對於CRF來說,我們假定存在一個轉移矩陣A,則A_{i,j}代表代表代表tag_i轉移到轉移到轉移到tag_j的轉移概率。
對於輸入序列X對應的輸出tagtagtag序列y,定義分數為:
利用softmax函數,我們為每一個正確的tag序列y定義一個概率值
在訓練中,我們的目標就是最大化概率p(y│X) ,怎么最大化呢,用對數似然(因為p(y│X)中存在指數和除法,對數似然可以化簡這些運算)
對數似然形式如下:
所以我們將損失函數Loss定義為-log(p(y|X)),就可以利用梯度下降法來進行網絡的學習了。
參考博客:
https://blog.csdn.net/Suan2014/article/details/89419283
https://www.cnblogs.com/Nobody0426/p/10712835.html(損失函數講解的好)
https://blog.csdn.net/qq_39526294/article/details/104055944(實例不錯)