【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 的部落格