GPLinker:基于GlobalPointer的事件联合抽取
?PaperWeekly 原創 ·?作者 | 蘇劍林
單位 | 追一科技
研究方向 | NLP、神經網絡
大約兩年前,筆者在百度的“2020語言與智能技術競賽”中首次接觸到了事件抽取任務,并在文章《bert4keras 在手,baseline 我有:百度 LIC2020》[1] 中分享了一個轉化為 BERT+CRF 做 NER 的簡單 baseline。不過,當時的 baseline 更像是一個用來湊數的半成品,算不上一個完整的事件抽取模型。而這兩年來,關系抽取的模型層見迭出,SOTA 一個接一個,但事件抽取似乎沒有多亮眼的設計。
最近筆者重新嘗試了事件抽取任務,在之前的關系抽取模型 GPLinker 的基礎上,結合完全子圖搜索,設計一個比較簡單但相對完備的事件聯合抽取模型,依然稱之為 GPLinker,在此請大家點評一番。
任務簡介?
事件抽取是一個比較綜合的任務。一個標準的事件抽取樣本如下:
▲ 標準的事件抽取樣本(圖片來自百度DuEE的GitHub)
每個事件會有一個事件類型以及相應的觸發詞,并且配有不同角色的論元。事件類型和論元角色是在約定的有限集合(schema)中選擇,而觸發詞和論元一般情況下都是輸入句子的片段,少數情況下也是可枚舉的分類對象(百度的 DuEE-fin 出現過)。
原則上來說,事件抽取模型的設計取決于評價指標,在 LIC2020 中,我們之所以可以將事件抽取轉化為一個 NER 問題,是因為當時的評測指標只考察(事件類型,論元角色,論元)構成的三元組,因此我們可以將(事件類型, 論元角色)組合成一個大類,然后就跟 NER 對應上了。
當然,這只是針對該指標的一種取巧方式。對于真實的事件抽取場景,我們自然是希望把標準格式的事件抽取出來,也就是設計一個盡量完備的模型。下面將介紹我們用于事件抽取的 GPLinker 模型,它基本達到了簡單而完備的要求。
統一論元?
我們多次提到了“完備”這個詞,它是什么含義呢?具體來說,我們希望最終設計出來的模型,至少在理論上能適用于盡可能多情形的事件抽取任務。傳統的事件抽取模型一般分為“觸發詞檢測”、“事件/觸發詞類型識別”、“事件論元檢測”和“論元角色識別”四個子任務,也就是說要先檢測觸發詞然后基于觸發詞做進一步的處理,所以如果訓練集沒有標注出觸發詞,它就沒法做了,這說明傳統思路是不夠完備的。
為了統一有無觸發詞的場景,我們這里就觸發詞也當作事件的一個論元角色,這樣有無觸發詞就是增減一個論元而已,所以主要還是在于論元識別和事件劃分。對于論元識別,我們還是將(事件類型,論元角色)組合成一個大類,然后轉化為 NER 問題,但要注意的是,不同的實體是可能嵌套的,所以之前基于 CRF 的 NER 其實是不夠用的,這里用能識別嵌套實體的 GlobalPointer 來完成。
前面還提到,像 DuEE-fin 這樣的任務還出現了分類式的論元類型,其論元不是輸入文本的一個片段,而是有限集合中選 1 個,考慮到這種論元類型不多,所以這里也將其轉化為抽取式論元。
以 DuEE-fin 為例,其“公司上市”事件類型的“環節”論元,四個候選值為籌備上市、暫停上市、正式上市、終止上市,那么我們不將“環節”視為論元類型,而分別將籌備上市、暫停上市、正式上市、終止上市視為四種論元類型,而對應的實體則為觸發詞,這樣我們要抽取的論元不是分類式的(公司上市,環節,XX上市),而是抽取式的(公司上市,XX 上市,觸發詞),最后我們在模型后處理階段再將它們轉回來就好。
完全子圖?
至于事件劃分,一個很自然的想法就是直接把所有具有同一事件類型的論元聚合起來作為一個事件,但這也是不夠完備的,因為同一個輸入可能有多個同一類型的事件。如果加上觸發詞呢?還是不夠,多個同一類型的事件還可能公用同一個觸發詞,比如 DuEE 有一個樣本是“主要成員程杰、王紹偉被法院一審判處有期徒刑 22 年和 20 年。”,分別有兩個事件“程杰判處有期徒刑 22 年”和“王紹偉判處有期徒刑 20 年”,觸發詞都是“有期徒刑”,事件類型都是“入獄”。
所以,我們需要設計一個額外的模塊來做事件劃分。我們認為,同一事件的各個論元是有聯系的,這種聯系可以用無向圖來描述。也就是說,我們將每個論元看成是圖上的一個節點,而同一事件任意兩個論元的節點可以連上一條邊而成為相鄰節點,而如果兩個論元從未出現在同一事件中,那么對應的節點則沒有邊(不相鄰)。這樣一來,同一事件的任意兩個節點都是相鄰的,這我們稱為“完全圖(Complete Graph)”,也稱為“團(Clique)”,事件劃分轉化為圖上的完全子圖搜索。
▲ 有向圖上的完全子圖示例
那么如何構建這個無向圖呢?我們沿用 TPLinker 的做法,如果兩個論元實體有關系,那么它們的(首,首)和(尾,尾)都能匹配上,我們可以像關系抽取的 GPLinker 一樣,用 GlobalPointer 來預測它們的匹配關系。特別地,由于我們只需要構建一個無向圖,所以我們可以 mask 掉下三角部分,所有的邊都只用上三角部分描述。
搜索算法
假定我們已經有了描述論元關系的有向圖,那么我們要怎么搜索出所有的完全子圖呢?看上去跟圖分割有點相似,但不完全一樣,因為在我們的場景下,節點是可以重復使用的,這意味著同一個實體同時是多個不同事件的論元。比如上圖中的 8 個節點可以搜索出兩個完全子圖,其中節點 D 同時出現在兩個子圖中,這代表我們可以劃分出兩個事件,它們有共同的論元 D。
經過分析,筆者構思了如下的遞歸搜索算法:
枚舉圖上的所有節點對,如果所有節點對都相鄰,那么該圖本身就是完全圖,直接返回;如果有不相鄰的節點對,那么執行步驟 2;
對于每一對不相鄰的節點,分別找出與之相鄰的所有節點集(包含自身)構成子圖,然后對每個子圖集分別執行步驟 1。
還是以上圖為例,我們可以找出 、 是一對不相鄰節點,那么我們可以分別找出其相鄰集為 和 ,然后繼續找 和 的不相鄰節點對,發現找不到,所以 和 都是完全子圖。
注意這個不依賴于不相鄰節點對的順序,因為對于“所有”不相鄰節點對我們都要進行同樣的操作,比如我們又找到 、 是一對不相鄰節點,那我們同樣要找其相鄰集 和 并遞歸執行。所以,在整個過程中,我們可能會得到很多重復結果,但不會漏了某個結果,也不會搜識別順序影響,最后再去重即可。
此外,每次搜索的時候,我們只需要對同一事件類型的節點進行搜索,而多數情況下同一事件類型的論元只有個位數,所以上述算法看似復雜,實際運行速度還是很快的。
實驗結果?
現在我們的事件抽取設計已經介紹完了。總的來說,我們需要一個嵌套實體識別模型來識別論元,然后分別需要一個“首-首”匹配和“尾-尾”匹配模型來構建論元之間的關系,這些模塊跟關系抽取的 GPLinker 模型出奇一致,并且也都可以用 GlobalPointer 來完成,所以我們依然將它命名為“GPLinker”。代碼統一整理在:
Github 地址:
https://github.com/bojone/GPLinker
筆者簡單在 DuEE 和 DuEE-fin 上做了實驗,并提交到了千言排行榜,結果分別如下:
單看這兩個成績,在排行榜上排第 5,不算出彩,距離榜 1 還有點遠。不過這篇文章也不是專門去打榜,所以也沒有進一步針對比賽數據來優化,目前這個成績,也算是可圈可點了。至于沒有對比其他事件抽取模型,是因為筆者對這一領域實在不熟,簡單看了幾篇關系抽取的論文,感覺里邊的模型都異常復雜,提不起興趣去復現。
最后,代碼用的 GlobalPointer,全部都是 Efficient GlobalPointer,筆者也比較過使用標準版的 GlobalPointer,發現它前期收斂更快但最終效果會更差。這也再次肯定了 Efficient GlobalPointer 的有效性。
模型反思
GPLinker 做事件抽取,追求的是簡單和完備,實際情況下可能并不是最有效的方案。一個很明顯的問題是,它對數據的依賴比較明顯,在小樣本的情況下效果可能欠佳。這本質上也是 GPLinker 足夠完備導致的,因為完備意味著自由度相當大(可以容納足夠多的場景),模型沒有多少先驗信息,所以學習難度也會增加。
但是,GPLinker 確實有著簡單高效的特點,而且理論上也不存在 Exposure Bias 問題,所以實際情況下,如果 GPLinker 效果欠佳,那么一種可行的方案是先用其他能把效果做上去的方案(很可能效果好但效率差)做一版模型,然后蒸餾到 GPLinker 上去,這樣就可以兼顧效果與效率了。
文章小結
本文介紹了將 GPLinker 用于事件抽取的思路,先用嵌套實體抽取的方式來抽取論元,然后將事件的劃分轉化為完全子圖搜索問題,整個模型相對簡潔和完備,并且理論上不存在 Exposure Bias 問題。
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學術熱點剖析、科研心得或競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。
📝?稿件基本要求:
? 文章確系個人原創作品,未曾在公開渠道發表,如為其他平臺已發表或待發表的文章,請明確標注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發送,要求圖片清晰,無版權問題
? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創首發稿件,提供業內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
🔍
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
·
總結
以上是生活随笔為你收集整理的GPLinker:基于GlobalPointer的事件联合抽取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌克兰危机对经济全球化产生了什么影响
- 下一篇: 烟台舰停靠在烟台港怎样能上舰参观?