史上最可爱的关系抽取指南?从一条规则到十个开源项目
正文來自訂閱號:AINLP
正文作者:太子長琴(NLP算法工程師)
小夕,我來給你出個題,看看你的反應如何?
好呀好呀,你說~
“梁啟超有一個著名的兒子,叫梁思成;同時還有一個著名的學生,叫徐志摩。這兩個人有一個共同的愛人,叫林徽因。林徽因的父親是林長民,林長民不僅自己是名人,還有一個名人哥哥,叫林覺民。林徽因最后與梁思成結婚了,徐志摩娶的則是陸小曼。”
那么問題來了,梁啟超和林長民是什么關系?
親家!
哇,你怎么一口就答出來了!?
!?(・_・;?
嘻嘻,我悄悄拿我的關系抽取模型跑了一下~( ̄▽ ̄)"
啥是關系抽取?
吶,跟我來~!
信息抽取是NLP領域的一個經典任務了,如何從不同來源的自然語言文本中提取真實可用的“知識”,并保證這些“知識”通常是清楚的、事實性的信息,是當今信息抽取領域的一個難點。
信息抽取三個最重要/最受關注的子任務:
實體抽取
也就是命名實體識別,包括實體的檢測(find)和分類(classify)關系抽取
通常我們說的三元組(triple)抽取,一個謂詞(predicate)帶2個形參(argument),如 Founding-location(IBM,New York)事件抽取
相當于一種多元關系的抽取
屬性一般的形式是(實體,屬性,屬性值),關系的一般形式是(實體,關系,實體)。簡單來區分的話,關系涉及到兩個實體,而屬性只有一個實體。
不過呢,屬性和關系的提取是可以相互借鑒的。下面小夕以關系抽取為出發點,從算法、數據集、評價指標、比賽這幾個方面給大家介紹關系抽取的相關知識。文末還有一個蛋哦~~~
關系提取方法
基于模板
這種方法比較簡單,一般都是根據先驗知識設計一些模式,然后在語料中匹配這些模式。舉幾個例子:
馬云作為企業家,對應的模式是: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(把藝人和歌曲替換掉)。最終算法如下:
| 1 2 3 4 5 6 7 8 9 | function BOOTSTRAP(Relation R) returns new relation tuplestuples←Gather a set of seed tuples that have relation Riteratesentences←find sentences that contain entities in tuplespatterns←generalize the context between and around entities in sentencesnewpairs←use patterns to grep for more tuplesnewpairs←newpairs with high confidencetuples←tuples + newpairsreturn 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 包括多個訓練實例的特征,每個實例又可以從多個句子中獲取詞法和句法特征。最終的算法如下:
| 1 2 3 4 5 6 7 8 | function DISTANT SUPERVISION(Database D, Text T) returns relation classifier Cforeach relation Rforeach tuple (e1,e2) of entities with relation R in Dsentences←Sentences in T that contain e1 and e2f←Frequent features in sentencesobservations←observations + new training tuple (e1, e2, f, R)C←Train supervised classifier on observationsreturn C |
最終的分類器將會根據特征發現關系。
基于無監督
無監督關系提取的目的就是在沒有標注數據,甚至沒有任何關系列表的情況下從 Web 或大規模語料中提取關系。這個任務一般叫 open information extraction 或 Open IE,關系通常都是幾個單詞(常以動詞開頭)。
ReVerb 系統從一個句子中提取關系一般包括四步:
在句子上進行 POS 和實體識別。
對句中每個動詞,找到以動詞開頭并滿足句法和詞匯約束(合并相鄰匹配項)的最長單詞序列 w。
對每個短語 w,找到最左邊的名詞短語 x(不是相對代詞,wh-單詞或 “there”),在右邊找到最近的名詞短語 y。
使用置信度分類器(一個邏輯回歸分類器)給關系 r=x, w, y) 一個置信度。
分類器是在 1000 個隨機選擇的句子上訓練所得,首先提取關系,然后人工標注是否正確,最后訓練分類器。使用到的一些特征如下(將提取到的關系及周圍的詞作為特征):
| 1 2 3 4 5 6 7 8 | (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 了。前者是一個二分類任務,目的是識別給定屬性能否區分兩個給定的概念。
| 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 的博客
文末彩蛋
明天有「超級超級重磅」的文章放出噢!小伙伴們記得提前做好準備鴨( ̄? ̄)
總結
以上是生活随笔為你收集整理的史上最可爱的关系抽取指南?从一条规则到十个开源项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10个开源工业检测数据集汇总
- 下一篇: 谁说2021届秋招算法岗一定要灰飞烟灭啦