NLP

【自然語言處理】基於語義角色標註的事件三元組抽取實作

the chronicles of narnia book

本文介紹自然語言處理中的經典任務之一:語義角色標註,並分享開源專案「事件三元組抽取」如何利用語義角色標注的結果,以及復現心得、改良想法。

要解決的問題

  • 有類似觀點或句子出現在多篇文章,我們不想要花時間過濾重複資訊
  • 有某事件有多項影響、情緒有正有負,我們想要更快更全面更客觀的蒐集起來

因此,我們想透過語義構句的結構化,從多篇文章中萃取&合併資訊。

有可能直接從文章取出事件嗎?

自然語言處理中有一個領域名為「事件抽取」,我們先看看其定義「事件」的組成有哪些:

事件組成表

其中事件類型,在 ACE2005 事件抽取資料集中也定義了 33 種:

由此可知,假設要訓練事件抽取模型,我們需要有以下標註的資料集:

  • 事件文字邊界範圍
  • 事件要素(屬性)鍵值對:事件要素的類型,會決定這份資料集訓練出的模型可以適用於哪些領域
  • 事件類型或標籤結果

在這個領域中,資料集的標注成本非常高,最經典的則是 ACE 2005 事件抽取資料集

ACE 2005 Multilingual Training Corpus
  • ACE Projects 由 Linguistic Data Consortium (LDC) 語言數據協會主持,累積發表了數十種不同語言的文本、語音、辭典數據集
  • LDC 協會由大學,公司和政府研究實驗室組成
  • ACE 2005 提供了中文、英文、阿拉伯文的信息抽取資料集,包含實體抽取、關係抽取、事件抽取

但倘若沒有辦法成為訂閱會員 (每年 USD$2400~24000) 取得該資料,還有其他開源中文資料集可用嗎?中文的非常少,比較有名的是 Doc2EDAG 利用遠端監督標記的資料集,包含 2008-2018 年大陸上市公司公告。

Doc2EDAG 事件資料示意圖
  • 資料集概覽:

非監督式的事件標注?

有鑒於資料集的取得困難,商業場景下的應用,是否有可能利用其他 fine-tuned NLP 模型來抽取上述事件組成表中提到的項目?

後來追蹤了「老刘说NLP」公眾號,他發布了相當多知識圖譜相關模型和商業場域應用,其中 2021 年發布的一項開源專案:「主謂賓事件三元组抽取」,跟本文章要探討的目標有點類似:將文本用結構化、圖譜的方式表示。

因此本文會先呈現這項開源專案的效果,接著說明可以小改良的地方,最後解釋這項開源專案用到的重點 NLP 任務:語義角色標註、句法依存分析。

主謂賓事件三元组抽取

首先我拿一篇新聞將他的專案重現:

新聞原文連結

經過事件三元組抽取後會得到:

其結果包含:

  • 事件觸發詞
  • 事件要素中的 *施事 (Agent)、*受事/客事 (Patient)
    • 「施事」:即「主詞」,有意識的、主動的動作實施者
    • 「受事/客事」:即「受詞」,承受動作並被改變狀態者

這樣的好處是,如果有多篇文章都提到 “華爾街投銀預估,台積電今年稅後EPS至少30元”,或用類似語意,就可以達到我們的目標:將多篇文章的重複資訊整合。

而缺點有:

  • 較短的三元組語義不完整
  • 三元組間有部分重複
  • 長度較長的主詞和受詞標點缺失,影響原本語意

細部改良的結果

我針對原作進行一些小優化,使得三元組的輸出真的可用於建構知識圖譜、搜尋引擎、其他模型等。

針對語義不完整的三元組
  • 先對進行篇章級命名實體識別,利用抓出的實體辭典過濾事件三元組:「如果主詞或受詞皆不包含任何實體,則不輸出」。目的是以重要詞彙來當作篩選依據,跟某個實體相關的事件才有關注的必要
  • 修改遞迴添加詞彙的條件,篩選至少包含主詞受詞及時間、地點其中一種語義角色才輸出
針對重複的三元組
  • 若某個三元組已經在其他事件中被重複提及,僅保留事件的嵌套關係,印出事件三元組文字時,跳過重複的三元組
針對標點缺失
  • 修改原始代碼中的子節點加入條件(原本將詞性屬於標點的字元排除,現在將它改成全部加入)

接下來介紹原版三元組事件抽取使用到的 NLP 任務:語意角色標注、依存句法分析。

語義角色標註 Semantic Role Labeling (SRL)

定義

是一種淺層語義分析。給定一段文本,先找出文本中「謂詞」後,以謂詞為中心,研究文本中各個詞彙與謂詞間的關係,並用語義角色來描述之。

例如:

其中語義角色包含:

  • 核心語義角色:施事者(主詞)、受事者(受詞)
  • 附屬語義角色:地點、時間、方式、原因等
常見語義角色表

SRL 是屬於 NLP 分析技術的語義分析範疇:

SRL 的標註結果也大量被應用在資訊檢索、知識抽取、文本摘要等模型訓練中,對效果提升有幫助。

SRL 模型如何被訓練的?

從傳統 rule-based 分析方式,到目前較為流行的基於深度學習。這邊以 哈爾濱工業大學的 LTP 語言雲 為例,介紹基於深度學習的語義角色標註模型。

模型 high-level 架構

其中 LTP 使用自家推出的預訓練模型 ELECTRA-Chinese 作為 shared encoder 捕捉 fine-tune 下游任務時模型學習到的知識,並共享到其他下游任務。

LTP (Language Technology Platform) 語言技術平台

  • 開發單位:哈爾濱工業大學社會計算與信息檢索研究中心(HIT-SCIR)
  • 整合詞法分析(分詞、詞性標註、命名實體識別)、句法分析(依存句法分析)和語義分析(語義角色標註、語義依存分析)等多項自然語言處理技術
  • 句法分析、語義分析等多項關鍵技術多次在CoNLL國際評測中獲得第1名
  • 基於多任務學習框架進行統一學習,使得全部六項任務可以共享語義資訊,達到知識遷移的效果
  • 基於預訓練模型進行統一的表示 ,有效提升了各項任務的準確率
  • 基於教師退火模型蒸餾出單一的多任務模型,進一步提高系統的準確率
  • 基於 PyTorch 框架開發、基於預訓練模型 ELECTRA-Chinese 在 1/10 參數量下可達到與 BERT-base 相同效果,對套件調用提高效率減少記憶體佔用

最新版本成效:

如何利用 SRL 抽取事件三元組?

  • 觀察 srl 輸出

其中,tuple的第一項會將文本中的謂詞抓出,第二項則是與這個謂詞相關的詞彙及他們的角色標籤。


參考資料
%d 位部落客按了讚: