【NLP】關係提取簡述

  • 2019 年 12 月 23 日
  • 筆記

來自:AINLP

作者:太子長琴(NLP演算法工程師)

之前整理過一篇關於資訊提取的筆記,也是基於大名鼎鼎的 SLP 第 18 章的內容,最近在做一個 chatbot 的 NLMLayer 時涉及到了不少知識圖譜有關的技術,由於 NLMLayer 默認的輸入是 NLU 的 output,所以實體識別(包括實體和類別)已經自動完成了。接下來最重要的就是實體屬性和關係提取了,所以這裡就針對這塊內容做一個整理。

屬性一般的形式是(實體,屬性,屬性值),關係的一般形式是(實體,關係,實體)。簡單來區分的話,關係涉及到兩個實體,而屬性只有一個實體。屬性提取的文章比較少,關係提取方面倒是比較成熟,不過這兩者之間其實可以借鑒的。具體的一些方法其實這裡已經提到不少了,這裡單獨提出來再梳理一遍。

關係提取方法

基於模板

這種方法比較簡單,一般都是根據先驗知識設計一些模式,然後在語料中匹配這些模式。舉幾個例子:

  • 馬雲作為企業家,對應的模式是:XX (?:作為|是) YY
  • 劉強東是京東的創始人,對應的模式是:XX (?:作為|是) YY 的? ZZ

這裡的 XX YY 和 ZZ 自然就是前一步識別出來的實體了。

相關資源包括:

  • 100 Best GitHub: Expert System | Meta-Guide.com

基於句法分析

主要是找到主謂賓,一般都是在句法分析的基礎上進行的。舉幾個例子:

  • 感冒是一種病,對應的句法結構為:感冒(SBV),是(Root),病(VOB)。
  • 王思聰是王健林的兒子,對應的句法結構為:王思聰(SBV),是(Root),王健林(ATT),兒子(VOB)

其中,SBV 是主謂關係,VOB 是動賓關係,ATT 是定中關係。

相關資源包括:

  • lemonhu/open-entity-relation-extraction: Knowledge triples extraction and knowledge base construction based on dependency syntax for open domain text.
  • aoldoni/tetre: TETRE: a Toolkit for Exploring Text for Relation Extraction
  • gabrielStanovsky/template-oie: Extract templated Open Information Extraction

基於機器學習

使用基本步驟如下:

  • (通常在一個句子中)尋找實體對
  • 判斷實體對之間是否存在關係
  • 送到分類器判斷關係的類別(預先定義好的)是什麼

標準流程:

  • 預先定義好類別集合
  • 選擇相關實體集合
  • 標註
  • 設計特徵
  • 訓練分類器
  • 評估結果

特徵:

  • 詞相關
  • 詞法相關
  • 句法相關
  • 實體相關

之前那篇筆記里涉及的比較全面,而且現在幾乎都是結合深度學習模型做了,這塊就不再贅述了。

相關資源:

  • machinalis/iepy: Information Extraction in Python
  • marcolagi/quantulum: Python library for information extraction of quantities from unstructured text

基於深度學習

一般包括兩種做法:Pipeline 和 Joint model,前者就是把實體識別和關係分類分開;後者一起做。

特徵一般是基於 Word embedding,Position embedding,POS,NER,WordNet;模型一般都是基於 CNN,RNN。

  • 端到端目前最好的是基於 Bert 的,在此之前,最好的是 Wang et al. 2016 的 Multi-Attention CNN。
  • 關係分類最好的是 (Cai et al., 2016) 的 BRCNN(Bidirectional Recurrent Convolutional Neural Network)。

從論文的趨勢看,端到端相對主流一些,不過對於我們的需求來說,關係分類更適合些。更多相關論文和模型可以進一步閱讀 NLP-progress/relationship_extraction,這裡就不貼那些論文的東西了。

基於半監督

半監督是利用少量高精度的 pattern 種子或種子 tuple 來 bootstrap 一個分類器。具體而言,在大規模語料中查找包含已有 pattern 實體對的句子,然後提取和歸納實體的上下文來學習新的 pattern。

還是舉個栗子,比如我們有一個種子 tuple:(Queen,創作了,波西米亞狂想曲),然後可能找到了這些句子:

  • 波西米亞狂想曲是由 Queen 演唱的歌曲。
  • 波西米亞狂想曲是 Queen 最偉大的作品之一。
  • Queen 這首將近 6 分鐘的波西米亞狂想曲包括四個部分。

進而可以提取出類似這樣的一些 pattern:

  • (藝人,演唱,歌曲)
  • (歌曲,是,藝人,作品)
  • (藝人,作品,包括)

這些 pattern 又可以進一步尋找新的 pattern(把藝人和歌曲替換掉)。最終演算法如下:

function BOOTSTRAP(Relation R) returns new relation tuples  	tuples←Gather a set of seed tuples that have relation R  	iterate  		sentences←find sentences that contain entities in tuples  		patterns←generalize the context between and around entities in sentences  		newpairs←use patterns to grep for more tuples  		newpairs←newpairs with high confidence  		tuples←tuples + newpairs  	return tuples

Bootstrapping 系統會給新的 pattern 一個置信度以避免語義飄移。比如 「在演唱會現場粉絲的要求下,周杰倫不得不演唱了一首網路歌曲《學貓叫》」,(周杰倫,演唱,學貓叫)顯然不是我們想要的。關於置信度的計算可以參考上面提到的筆記,對一個 pattern 主要考量兩方面因素:pattern 在現有 tuple 上的 hits 和在整個 Documents 上的 finds。

基於遠程監督

遠程監督從大規模資料庫中獲取的大量種子中產生出許多帶雜訊的 pattern features,然後用一個分類器組合這些 pattern。

舉個栗子,比如要學習 「出生地-出生日期」 關係,半監督的方法中,我們可能只有少量幾個啟動的種子,但是現在我們可以在 Wikipedia-based 資料庫(比如 DBPedia 或 Freebase) 中獲取大量包含 「出生地-出生日期」 的 tuple,比如(<Albert Einstein, Ulm>, <Hubble, Marshfield> 等等)。然後用命名實體工具提取包含兩個實體並 match 給定 tuple 的句子:

  • Hubble 出生於 Marshfield
  • Einstein,生於 1879,Ulm
  • Hubble 的出生地是 Marshfield

可以從中提取訓練集,一個訓練實例對應一個(關係,實體1,實體2)。

  • <出生地, Edwin Hubble, Marshfield>
  • <出生地, Albert Einstein, Ulm>
  • <出生日期, Albert Einstein, 1879>

接下來可以用基於特徵的分類器或直接使用神經網路分類器(不需要構建特徵)。對於前者,可以從多個方面構建特徵,比如實體 label,實體間單詞、路徑,相鄰詞等。每個 tuple 包括多個訓練實例的特徵,每個實例又可以從多個句子中獲取詞法和句法特徵。最終的演算法如下:

function DISTANT SUPERVISION(Database D, Text T) returns relation classifier C  	foreach relation R  		foreach tuple (e1,e2) of entities with relation R in D  			sentences←Sentences in T that contain e1 and e2  			f←Frequent features in sentences  			observations←observations + new training tuple (e1, e2, f, R)  	C←Train supervised classifier on observations  	return C

最終的分類器將會根據特徵發現關係。

基於無監督

無監督關係提取的目的就是在沒有標註數據,甚至沒有任何關係列表的情況下從 Web 或大規模語料中提取關係。這個任務一般叫 open information extraction 或 Open IE,關係通常都是幾個單詞(常以動詞開頭)。

ReVerb 系統從一個句子中提取關係一般包括四步:

  • 在句子上進行 POS 和實體識別。
  • 對句中每個動詞,找到以動詞開頭並滿足句法和辭彙約束(合併相鄰匹配項)的最長單詞序列 w。
  • 對每個短語 w,找到最左邊的名詞短語 x(不是相對代詞,wh-單詞或 「there」),在右邊找到最近的名詞短語 y。
  • 使用置信度分類器(一個邏輯回歸分類器)給關係 r=x, w, y) 一個置信度。

分類器是在 1000 個隨機選擇的句子上訓練所得,首先提取關係,然後人工標註是否正確,最後訓練分類器。使用到的一些特徵如下(將提取到的關係及周圍的詞作為特徵):

(x,r,y) covers all words in s  the last preposition in r is for  the last preposition in r is on  len(s) ≤ 10  there is a coordinating conjunction to the left of r in s  r matches a lone V in the syntactic constraints  there is preposition to the left of x in s  there is an NP to the right of y in s

小結

方法

優點

缺點

模板

精準高,領域內可訂製

召回低,耗時耗力

句法分析

構建簡單

召回低,與句法結果相關

機器學習

數據相關時精準較高

特徵工程較複雜,數據標註成本較高,訓練數據敏感

深度學習

數據相關時精準高,泛化能力較好

數據標註成本很高,訓練數據敏感

半監督 Bootstrapping

成本低,可以發現新關係

對初始種子敏感,語義飄移,準確率低

遠程監督

精準高,訓練數據不敏感,無語義飄移

依賴已有資料庫

無監督

成本很低,容易實現

需轉為權威格式存儲,動詞為中心的局限性

比賽

比賽最有名的大概就是 SemEval 2018 Task 10 和 SemEval-2010 Task 8 了。前者是一個二分類任務,目的是識別給定屬性能否區分兩個給定的概念。

ATTRIBUTE

CONCEPT1

CONCEPT2

LABEL

bookcase

fridge

wood

1

bucket

mug

round

0

angle

curve

sharp

1

pelican

turtle

water

0

wire

coil

metal

0

後者是關係分類任務,給定兩個標記的 nominals,預測它們的關係和關係的方向。

There were apples, pears and oranges in the bowl.

(content-container, pears, bowl)

數據集

除了上面的兩個比賽的數據集,還有以下一些數據集:

  • FewRel: A Large-Scale Supervised Few-shot Relation Classification Dataset with State-of-the-Art Evaluation
    • 70K sentences
    • 100 relations
    • Wikipedia corpus
  • The New York Times Annotated Corpus – Linguistic Data Consortium
    • Stanford NER 提取實體
    • 自動與 Freebase knowledge base 中的實體關聯
    • 關係也是基於 Freebase knowledge base 中的事實
  • Stanford TACRED Homepage
    • 106,264 examples
    • newswire and web text from TAC KBP Comprehensive English Source Corpora 2009-2014 – Linguistic Data Consortium
    • 41 relation types as used in the TAC KBP challenges

評價方法

評價指標還是以 F1 為主:

  • 屬性判別是二分類任務,直接用 F1 評估。
  • 關係分類使用 Macro-averaged F1(9 個關係,不包括 OTHER,考慮關係方向)。
  • FewRel 主要是在 5-way-1-shot,5-way-5-shot,10-way-1-shot 和 10-way-5-shot 幾個任務上的準確率。
  • NYT 主要使用 N 個結果的精準率或 PR 圖。
  • TACRED 使用 Micro-averaged F1(不包括 no_relation type)。

更多資源

CrowdTruth Corpus 相關:

  • CrowdTruth/CrowdTruth-core: CrowdTruth framework for crowdsourcing ground truth for training & evaluation of AI systems
  • CrowdTruth/Open-Domain-Relation-Extraction: Crowdsourced data for open domain relation classification from sentences
  • CrowdTruth/Medical-Relation-Extraction: Crowdsourced ground truth for medical relation extraction.

其他資源:

  • roomylee/awesome-relation-extraction: ? A curated list of awesome resources dedicated to Relation Extraction, one of the most important tasks in Natural Language Processing (NLP).
  • NLP-progress/relationship_extraction.md at master · sebastianruder/NLP-progress

參考資料:

  • 知識抽取-實體及關係抽取 – 知乎
  • 知識圖譜入門 (三) 知識抽取 – pelhans 的部落格