天天看點

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

一、前言

關系抽取作為知識圖譜三元組抽取任務中最最重要的算法,一直受到工業界和學術界的廣泛研究。關系抽取任務要做的是識别文本中的實體,并對相應的實體詞預測正确的關系。其主要可以歸納為兩種主要的技術架構:

1. pipeline方式的抽取:即先抽取實體,在預測已抽取實體之間存在的關系

2. joint方式的抽取:即實體和關系的聯合抽取模式

由于pipeline抽取方法存在的誤差積累、備援實體計算、實體關系抽取任務互動缺失等問題,近些年來的SOTA模型的關注點都在于各類joint模型的改造,如共享參數的聯合抽取模型、聯合解碼的聯合抽取模型等。

二、簡介

今天的這篇文章一改之前關系抽取任務的刻闆印象,而是采用了pipeline抽取的方式,這篇SOTA的主要貢獻和結論如下:

  1. 設計了一種非常簡單的end2end關系抽取方法,即采取2個獨立的編碼器分别用于實體抽取和關系識别,使用相同的預訓練模型就超越了之前所有的joint模型~
  2. 分别學習實體和關系的不同上下文表示,比聯合學習它們更有效~
  3. 在關系模型的輸入層融合實體類别資訊十分重要~
  4. 提出了一種新穎并且有效的近似方法,在精度下降很小的情況下,就實作8-16倍的推斷提速~

三、模型細節

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

文章提出的方法的架構如上圖。下面分别介紹pipeline中的每一個子模型。

1. 實體抽取模型

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

采用span-level的NER方式,即找出所有可能的所有片段的排列,通過softmax函數對實體進行類型判斷。采用span-level的好處是可以解決嵌套實體的問題,缺點是計算的複雜度會很高(對于含n個token的文本,理論上共有 

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

 種片段排列),是以通常會通過限制span的長度來解決。

2. 關系分類模型

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記
  • 如上圖所示,對所有的實體pair進行關系分類。其中最重要的一點改進,就是将實體邊界和類型作為辨別符加入到實體Span前後,然後作為關系模型的input。例如,對于實體pair(Subject和Object)可分别在其對應的實體前後插入以下辨別符:
    • <S:Md>和</S:Md>:代表實體類型為Method的Subject,S是實體span的第一個token,/S是最後一個token;
    • <O:Md>和</O:Md>:代表實體類型為Method的Object,O是實體span的第一個token,/O是最後一個token;

對于關系模型,對每個實體pair中第一個token的編碼進行concatenate,然後進行SoftMax分類。

需要特别指出的是,上述實體模型和關系模型采取的兩個獨立的預訓練模型進行編碼(不共享參數)。

對于這種關系模型,我們不難發現:對每個實體pair都要輪流進行關系分類,也就是同一文本要進行多次編碼,不是one-pass的關系抽取,計算開銷必然會很大。

3. 近似模型

為解決這一問題,提出了一種加速的近似模型(如下圖所示):可将實體邊界和類型的辨別符拼接到到文本之後,然後與原文對應實體共享位置向量。上圖中相同的顔色代表共享相同的位置向量。具體地,在attention層中,文本token隻去attend文本token、不去attend辨別符token,而辨別符token可以attend原文token。綜上,通過這種「近似模型」可以實作一次編碼文本就可以判斷所有實體pair間的關系。

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

此外,由于跨句資訊可用于幫助預測實體類型和關系(尤其是在代詞性提及中),是以還通過簡單方式引入了跨句資訊,即文本輸入的左右上下文中分别滑動( − )/2(W−n)/2個words, n為文本長度, W 為固定視窗大小。

四、實驗結果

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

上圖給出了各個關系抽取榜單的對比結果(梅花圖示代表引入了跨句資訊,Rel+為嚴格名額),可以看出:

  1. 不使用跨句資訊(單句設定)就超越了ACE04/ACE05曾經的SOTA(使用同一預訓練模型),使用跨句資訊更是了不得啊。
  2. 使用跨句資訊登頂了SciERC(文檔級)的SOTA;
關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

而上圖也給出了加速版「近似模型」的效果,可以看出:

  1. 在單句設定中,ACE05和SciERC分别提速11.9倍和8.7倍,而名額僅僅下降0.5%和1.0%。
  2. 「近似模型」加速明顯(劃重點):我們先不要考慮是不是SOTA的事情,這個「近似模型」one-pass編碼的的方式就足夠讓我們眼前一亮,這種方式與預訓練模型相容的恰到好處,權衡性能和準确性,相信在實際應用中具有重要意義!

以上就是這篇paper的模型介紹

五、總結與分析

pipeline為何如此強悍,是哪些因素讓它可以“秒殺”衆多joint模型?論文對關系模型其關鍵作用的因素做了探究。

首先分析了不同實體表征方式的影響,文中設計了6中實體表征的方式:

  • TEXT:直接提取原始文本中,實體span所對應的編碼表示。
  • TEXTETYPE:在TEXT的基礎上,concatenate實體類别向量。
  • MARKERS:将辨別符S、/S、O、/O插入到原始文本中,但是辨別符沒有實體類别資訊。
  • MARKERSETYPE:在MARKERS的基礎上,concatenate實體類别向量,這是一種隐式的融入實體類别的方法。
  • MARKERSELOSS:在關系模型中,建構判别實體類别的輔助loss。
  • TYPEDMARKERS:就是本文所采取的方法,實體類别“顯式”地插入到文本input中,如<S:Md> 和</S:Md>、<O:Md>和</O:Md>。
關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

如上圖所示(關系模型的實體是gold輸入),我們可以發現:

  1. 本文采取的TYPEDMARKERS,即實體類别資訊“顯示”地插入到文本中的實體表征方式,秒殺其餘方式;
  2. 實體類别資訊對關系模型很重要,“顯式”地編碼實體類别資訊好于隐式編碼;在構造辨別符時,不僅要區分span邊界、更要顯示融入實體類别資訊。
  3. MARKERSETYPE比MARKERSELOSS好,說明直接引入實體類型特征好于輔助loss的設計。

實體邊界辨別符加入到文本中來強化實體表征的這一idea,在之前Google的工作中《Matching the Blanks: Distributional Similarity for Relation Learning》就有所展現。

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

隻是Google這個工作沒有引入實體類型資訊進行辨別。這更能證明了實體類别資訊對于關系模型很重要。

另外這篇文章并沒有基于參數共享編碼的joint模型來模組化實體和關系的互動、促進彼此,而是實體抽取和關系分類任務采取了兩個獨立的編碼器老建構實體模型和關系模型。論文也做了相關的對比實驗

關系抽取新SOTA: 《A Frustratingly Easy Approach for Joint Entity and Relation Extraction》論文筆記

可以看出共享編碼反而使實體和關系的F1都下降了,文中也解釋道:這是由于兩個任務各自是不同的輸入形式,并且需要不同的特征去進行實體和關系預測,也就是說:使用單獨的編碼器确實可以學習更好的特定任務特征。對于實體和關系确實需要特定的特征編碼,在建構joint模型時如果隻是簡單的強行共享編碼,真的可能會适得其反。

最近EMNLP20的一篇《Two are Better than One:Joint Entity and Relation Extraction with Table-Sequence Encoders》(這篇SOTA之前的SOTA)也認為:大多數joint模型都是共享同一個編碼,但這種方式存在一個問題:針對一項任務提取的特征可能與針對另一項任務提取的特征一緻或沖突,進而使學習模型混亂。于是乎,作者設計了2種不同的編碼器(表格編碼器和序列編碼器),以在表示學習過程中互相幫助,最後通過實驗表明使用2個編碼器好于隻使用1個編碼。

還有一點就是對于pipeline模型的誤差傳播問題。關系模型在訓練的時候,輸入的是gold實體進行關系判斷,這會導緻訓練和推斷時候的差異(暴露偏差)。那是不是在訓練的時候輸入預測的實體進行關系判斷,會在推斷時效果變好呢?于是論文采用10-way jackknifing方式(一種交叉驗證)做了相關實驗,發現訓練時輸入預測實體反而降低了F1值,畢竟這種方式會在訓練的時候引入噪音。

采取pipeline進行推斷時,如果有些gold實體在實體模型中沒有被抽取出來,那麼關系模型也就不會預測與該實體相關聯的任何關系了。那有沒有可能通過召回更多的實體,來減輕這種誤差傳播呢?論文也嘗試召回更多的實體進行了實驗,發現并沒有提升F1值。

對于pipeline模式的誤差傳播問題,COLING2020的一篇paper為了緩解這個問題,提出了一種單階段的聯合提取模型 TPLinker ,其不包含任何互相依賴的抽取步驟,是以避免了在訓練時依賴于gold的情況,進而實作了訓練和測試的一緻性。

六、思考

通過這篇論文的工作,我們可以得到一些關系抽取模型的trick:

  • 引入實體類别資訊會讓你的關系模型有提升~
  • 對于實體關系抽取,2個獨立的編碼器也許會更好~

當然還有一些需要我們進一步思考或解決的問題:

  • 怎麼減輕/避免誤差傳播呢?
  • pipeline是不是推斷效率還是慢?比如,還是會存在備援實體的計算?
  • 落地場景中,是不是pipeline更容易疊代優化呢?

參考:

https://zhuanlan.zhihu.com/p/274938894

繼續閱讀