0. 寫在前面
回頭看了一遍之前的博客,好些介紹的論文主要是屬於關係分類的領域,於是就把前幾篇的標題給修改了一下哈哈。關係分類和之前的文本分類,基於目標詞的情感識別還都挺像的,baseline模型也都差不多。首先對之前的關係分類算法做個總結,然後進入今天的關係抽取(relation extraction)部分。
關係分類總結
- 輸入層標配:word embedding + position embedding
- 特徵提取層可以選取: CNN/RNN/LSTM/Attention等,效果最好的是加上attention層的模型疊加
- 損失函數:實驗證明針對該任務margin-based ranking loss比傳統多分類softmax + cross entropy表現要好
- 可以改進的方向:單純從神經網絡的結構出發,改進的餘地很小了,因爲這個數據集很封閉, 可以利用的信息僅僅是這些sentence 以及 標註的word entity。 在上述的基礎上可能可以考慮的方向,從兩個target word與relation的關係上加約束。
1. A glance at Distant Supervision(DS)
因爲後面的文章中會設計遠程監督的內容,所以就單獨拎出來說明一下。
遠程監督提出來的初衷是爲了解決標註數據量太小的問題,以SemEval 2010 Task 8數據集爲例,訓練數據8000條,測試數據2717條,對於深度學習網絡來說確實有點小。那麼遠程監督是怎麼來做這個增加數據量的工作的呢?第一個將遠程監督運用到關係抽取任務中的是Distant supervision for relation extraction without labeled data
If two entities have a relationship in a known knowledge base, then all sentences that mention these two entities will express that relationship in some way.
基本假設: 如果兩個實體在知識庫中存在某種關係,則包含該兩個實體的非結構化句子均能表示出這種關係。
具體步驟:(1)從知識庫中抽取存在關係的實體對;(2)從非結構化文本中抽取含有實體對的句子作爲訓練樣例,然後提取特徵訓練分類器。
存在問題:假設太強會引入噪音數據,包含兩個實體的句子不一定和數據庫中的關係一致,如下,右側非結構化文本中第一句成立,但是第二句不成立。
改進方法: 提出多示例學習(Multi Instance Learning)的方法
多示例學習可以被描述爲:假設訓練數據集中的每個數據是一個包(Bag),每個包都是一個示例(instance)的集合,每個包都有一個訓練標記,而包中的示例是沒有標記的;如果包中至少存在一個正標記的示例,則包被賦予正標記;而對於一個有負標記的包,其中所有的示例均爲負標記。(這裏說包中的示例沒有標記,而後面又說包中至少存在一個正標記的示例時包爲正標記包,是相對訓練而言的,也就是說訓練的時候是沒有給示例標記的,只是給了包的標記,但是示例的標記是確實存在的,存在正負示例來判斷正負類別)。通過定義可以看出,與監督學習相比,多示例學習數據集中的樣本示例的標記是未知的,而監督學習的訓練樣本集中,每個示例都有一個一已知的標記;與非監督學習相比,多示例學習僅僅只有包的標記是已知的,而非監督學習樣本所有示例均沒有標記。但是多示例學習有個特點就是它廣泛存在真實的世界中,潛在的應用前景非常大。 from http://blog.csdn.net/tkingreturn/article/details/39959931
利用遠程監督技術生成關係抽取訓練實例的噪音數據如何過濾?
2. Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks(Zeng/ EMNLP2015)
可以說是作者自己之前的那篇文章的改進版,提出了兩點現存的缺陷以及相對應的改進方式:
- 遠程監督標註數據的噪音很大,使用多示例學習的方式;
- 原始方法大都是基於詞法、句法特徵來處理, 無法自動提取特徵。而且句法樹等特徵在句子長度邊長的話,正確率很顯著下降。提出改進的Piecewise Convolutional Neural Networks (PCNNs)
論文提出的整體模型框架如下, 主要包括四個部分:
- Vector Representation,
- Convolution,
- Piecewise Max Pooling
- Softmax Output
網絡的設計就是很簡單的embedding+cnn+pooling。需要提一下的是這裏對pooling層進行了改進,不再使用整個channel的唯一max,而是對卷積後得到的輸出劃分成三塊,分別是兩個實體部分和一個不包含實體的部分,這樣對這三塊做piecewise max pooling,得到三個向量。最終將三個卷積核的輸出做一樣的操作拼接起來後做softmax分類,最終得到輸出向量o。
Multi-instance Learning
首先給出幾個定義:
- bag:數據中包含兩個entity的所有句子稱爲一個bag
- :表示訓練數據中的T個bags,每個bag都有一個relation標籤
- :表示第i個bag中有個instance,也就是句子,假設每個instance是獨立的
- 便是給定的網絡模型的輸出(未經過softmax),其中表示第r個relation的score
這樣,經過softmax就可以計算每一個類別的概率:
模型的目的是得到每個bag的標籤,所以損失函數是基於bag定義的,這裏採用了“at-least-once assumption”,即假設每個bag內都肯至少有一個標註正確的句子,那麼就找出bag中得分最高的句子來求損失函數:其中
算法步驟總結如下:
3. Neural Relation Extraction with Selective Attention over Instances(Lin/ACL2016)
在上一節的CNN基礎上引入句子級別的Attention機制。也是針對遠程監督過程會引入錯誤標籤的問題,指出在Zeng 2015年的CNN模型中只考慮了每一個bag中置信度最高的instance,這樣做會忽略bag中的其他句子丟失很多的信息。因此提出對一個bag中的所有句子經過CNN處理後再進行Attention操作分配權重,可以充分利用樣本信息。模型整體框架如下:
其中最底層的輸入是某一個bag中的句子,接着對每一個句子都做同樣的CNN操作(這一部分與前一節PCNN相同),最終得到每個句子的表示。然後爲了更好地利用bag內的句子信息,對所有的instance衡量對該bag對應的標籤的權重:
其中alpha爲權重係數,文中給出兩種計算方式:
- Average: ,直接做平均,錯誤樣本的噪聲很大;
- Selective Attention: 就是一般的key-query-value的attention計算。
其中表示attention score,用於計算某個句子與該bag對應的relation之間的匹配程度。
在經過attention就得到了每個bag中所有句子的表示。最後輸出首先將這個向量與relation matrix做一個相似度計算後送入softmax歸一化成概率:
【注意】 在模型的test階段,由於bag並沒有給出的標籤,因此在attention計算過程與train階段不一樣。處理方式爲:對每一個relation,都做一遍上述的Selective Attention操作得到每個relation的得分,最後預測的結果就是取max就好啦。
試驗分析
數據集選取的是NYT,評價指標使用P@N
CODE HERE
4. Relation Extraction with Multi-instance Multi-label Convolutional Neural Networks(Jiang/Coling 2016)
這篇文章主要是先分析了PCNN模型的缺陷,然後提出了幾點改進方案:
- at-least-once assumption假設太強,僅僅選取每個bag中的一個句子會丟失很多信息;解決方案是對bag內所有的sentence之間做max-pooling操作,可以提取出instance之間的隱藏關聯;
- single-label learning problem:在數據集中有大約18.3%的樣本包含多種relation信息,設計了一種多標籤損失函數,即使用sigmoid計算每一個類別的概率,然後判斷該bag是否可能包含該類別。
基於以上兩點提出了multi-instance multi-label convolutional neural network (MIMLCNN), 模型整體框架如下
從上圖可以看出,整個模型主要包括三塊:
Sentence-level Feature Extraction
目的就是將bag中的所有instance表示成向量形式,這裏採取的就是第2節的PCNN模型,一模一樣。
Cross-sentence Max-pooling
這一部分的設計就是爲了解決“at-least-one assumption”,文中提出另一種假設:
A relation holding between two entities can be either expressed explicitly or inferred
implicitly from all sentences that mention these two entities.
做法也很直觀,直接對所有instance的向量每一個維度取最大值:文中還提出可以使用average-pooling的方式,但是相比max-pooling,ave-pooling會增大錯誤標籤的噪音,效果不如max-pooling。
Multi-label Relation Modeling
上述過程得到的向量經過一個全連接層計算每一個relation的score:由於是多個標籤預測,這裏不再採用softmax,而是對於每一個relation做sigmoid,如果結果超過某個閾值(這裏是0.5),則認爲該instance包含該種relation:接着設計了兩種不同的損失函數作了對比:
試驗分析
實驗數據集選取的是NYT10,評測標準選取了PR-曲線和P@N矩陣
5. Distant Supervision for Relation Extraction with Sentence-Level Attention and Entity Descriptions(Ji/AAAI2017)
論文的主打的主要有兩點:
- 第一點依然是針對Zeng的文章中提出的“at-least-one assumption”提出改進方案,採取的措施是對句子級別進行attention操作;
- 第二點是認爲在知識庫中對實體的描述也能反映很多的信息,建議將Entity Descriptions加入到模型中
模型的整體框架如下
APCNN Module
這一部分跟 Neural Relation Extraction with Selective Attention over Instances的工作非常像,唯一不同的地方在做attention時對query的選擇不同。【Selective Attention】選擇的是bag的真實標籤,這樣在訓練時是沒有問題的,不過在inference階段由於樣本bag沒有標籤,所以需要計算所有relation的得分選取最高的那一類,這樣的話再test過程的計算量會很大。本文【Sentence-level Attention】採用的則是受word embedding特性的啓發,認爲relation的表示可以通過兩個實體之間的運算得到:
Entity Descriptions
到目前爲止可以說沒什麼創新點,在這部分作者提出了將Entity Descriptions的信息融入模型,可以更好的幫助最後的relation判斷。其實現也很簡單,
- 輸入爲entity的word embedding,通過一層簡單的CNN+max-pooling得到description的向量表示
- 文中提出的一個約束是:儘可能使得前面得到的entity的word embedding 與 這裏得到的 entity 的 description embedding 接近,這樣的動機很簡單,就是將entity的描述信息融入到模型中,這部分的LOSS直接使用二範距離
Loss Function
APCNN階段的損失函數爲:
Entity Dscriptions階段的損失函數爲:
所以最終整體的損失函數爲:
試驗分析及小結
數據集和評價指標還是那些
- 在attention過程對relation embedding的處理採用了TransE的思路,可以說非常具有說服力
- 另外加入的實體描述建模也可以更有效地爲模型融入更多信息,同時還會加強entity向量表示的準確性。
以上~
2019.05.10