知识图谱入门 (三) 知识抽取
歡迎大家關注我的博客 http://pelhans.com/ ,所有文章都會第一時間發布在那里哦~
本節介紹了針對結構化數據、非結構化數據、半結構化數據的知識抽取方法。
知識抽取的概念
知識抽取,即從不同來源、不同結構的數據中進行知識提取,形成知識(結構化數據)存入到知識圖譜。大體的任務分類與對應技術如下圖所示:
知識抽取的子任務
- 命名實體識別
- 檢測: 北京是忙碌的城市。 [北京]: 實體
- 分類:北京是忙碌的城市。 [北京]: 地名
- 術語抽取
從語料中發現多個單詞組成的相關術語。 - 關系抽取
王思聰是萬達集團董事長王健林的獨子。 →? → [王健林] <父子關系> [王思聰] - 事件抽取
例如從一篇新聞報道中抽取出事件發生是觸發詞、時間、地點等信息,如圖二所示。 - 共指消解
弄清楚在一句話中的代詞的指代對象。例子如圖三所示。
面向非結構化數據的知識抽取
實體抽取
實體抽取抽取文本中的原子信息元素,通常包含任命、組織/機構名、地理位置、時間/日期、字符值等標簽,具體的標簽定義可根據任務不同而調整。如:
單純的實體抽取可作為一個序列標注問題,因此可以使用機器學習中的HMM、CRF、神經網絡等方法解決。
實體識別與鏈接
實體識別即識別出句子或文本中的實體,鏈接就是將該實體與知識庫中的對應實體進行鏈接。其中涉及到了實體的識別與消岐技術。實體識別技術剛剛介紹過,下面把重點放在實體鏈接部分。
實體鏈接的流程如下圖所示:
文字表述為,首先輸入的是非結構化的文本數據,經由命名實體識別或詞典匹配技術進行實體的指稱識別。由于剛剛識別出來的實體可能是實體的部分表示或另類表示,因此需要結束表層名字擴展、搜索引擎、構建查詢實體引用表等技術來對候選實體進行生成。經過該步驟生成的實體可能有多個候選項,因此需要對候選實體進行消岐,此處可使用基于圖的方法、基于概率生成模型、基于主題模型或基于深度學習的方法。經過實體消岐后得到的唯一實體候選后就可以與知識庫中的實體進行連接了。
舉個例子:
關系抽取
關系抽取是從文本中抽取出兩個或多個實體之間的語義關系。它是信息抽取研究領域的任務之一。如:
- 王健林談兒子王思聰:我期望他穩重一點。
- 父子 (王健林, 王思聰)
根據關系抽取方法的不同,可以將其分為:基于模板的方法(觸發詞的Pattern, 依存句法分析的Pattern)、基于監督學習的方法(機器學習方法)、弱監督學習的方法(遠程監督、Bootstrapping)。
基于模板的方法
基于模板的方法在小規模數據集上容易實現且構建簡單,缺點為難以維護、可移植性差、模板有可能需要專家構建。
基于觸發詞的Pattern
首先定義一套種子模板,如:
其中的觸發詞為老婆、妻子、配偶等。根據這些觸發詞找出夫妻關系這種關系,同時通過命名實體識別給出關系的參與方。
基于依存分析的Pattern
以動詞為起點,構建規則,對節點上的詞性和邊上的依存關系進行限定。一般情況下是形容詞+名字或動賓短語等情況,因此相當于以動詞為中心結構做的Pattern。其執行流程為:
監督學習
在給定實體對的情況下,根據句子上下文對實體關系進行預測,執行流程為:
- 預先定義好關系的類別。
- 人工標注一些數據。
- 設計特征表示。
- 選擇一個分類方法。(SVM、NN、樸素貝葉斯)
- 評估方法。
其優點為準確率高,標注的數據越多越準確。缺點為標注數據的成本太高,不能擴展新的關系。
Pipeline訓練
即識別實體和關系分類是完全分離的兩個過程,不會相互影響,關系的識別依賴于實體識別的效果,這樣的好處的各模型相互獨立,設計上較為容易,但誤差會逐層傳遞,步驟太多有可能導致后續不可用。
聯合模型
將實體識別和關系分類一起做,在一個模型中完成。
半監督學習方法
前面的監督學習效果雖好,但有標注數據集的獲取困難。因此可以借助半監督學習的方法,此處又分為遠程監督學習和Bootstrapping方法兩種。
所謂遠程監督方法就是知識庫與非結構化文本對齊來自動構建大量訓練數據,減少模型對人工標注數據的依賴,增強模型跨領域適應能力。Bootstrapping是通過在文本中匹配實體對和表達關系短語模式,尋找和發現新的潛在關系三元組。
遠程監督
該方法認為若兩個實體如果在知識庫中存在某種關系,則包含該兩個實體的非結構化句子均能表示出這種關系。如在某知識庫中存在“創始人(喬布斯,蘋果公司)”。那么就認為出現喬布斯和蘋果公司的句子就是表述創始人這項關系。因此可構建訓練正例:喬布斯是蘋果公司的聯合創始人和CEO。
遠程監督流程為:
- 從知識庫中抽取存在關系的實體對。
- 從非結構化文本中抽取含有實體對的句子作為訓練樣例。
遠程監督可以利用豐富的知識庫信息,減少一定的人工標注,但它的假設過于肯定,如喬布斯被趕出蘋果公司。這句話表達的就不是創始人的例子,因此會引入大量的噪聲,存在語義漂移現象。同時由于是在知識庫中抽取存在的實體關系對,因此很難發現新的關系。
Bootstrapping
這個方法在很多任務中都有提到,其執行流程為:
- 從文檔中抽取出包含種子實體的新聞,如:
- 姚明老婆 葉莉 簡歷身高曝光
X 老婆 Y 簡歷身高曝光 - 姚明 與妻子 葉莉 外出赴約
X 與妻子 Y 外出赴約
- 姚明老婆 葉莉 簡歷身高曝光
- 將抽取出的Pattern去文檔集中匹配
- 小豬 與妻子 伊萬 外出赴約
- 根據Pattern抽取出的新文檔如種子庫,迭代多輪直到不符合條件
該方法的優點為構建成本低,適合大規模的構建,同時還可以發現新的(隱含的)關系。缺點為對初始給定的種子集敏感,存在語義漂移現象,結果的準確率較低等。
事件抽取
從自然語言中抽取出用戶感興趣的事件信息,并以結構化的形式呈現出來,例如事件發生的時間、地點、發生原因、參與者等。如:
時間抽取任務最基礎的部分包括:
- 識別事件觸發詞及事件類型
- 抽取事件元素同時判斷其角色
- 抽出描述事件的詞組或句子
此外,事件抽取任務還包括:
- 事件屬性標注
- 事件共指消解
對于事件抽取,也可分為Pipeline方法和聯合訓練的方法。
事件抽取的pipeline方法
有監督的事件抽取方法的標準流程一種pipeline的方法,將事件抽取任務轉化為多階段的分類問題,需要的分類器包括:
- 事件觸發次分類器(Trigger Classifier)
- 用于判斷詞匯是否是是事件觸發詞,以及事件的類別
- 元素分類器(Argument Classifier)
- 判別詞組是否是事件的元素
- 元素角色分類器(Role Classifier)
- 判定元素的角色類別
- 屬性分類器(attribute classifier)
- 判定事件的屬性
- 可報告性分類器(Reportable-Event Classifier)
- 判定是否存在值得報告的事件實例
可以看到,這個流程還是蠻長的,因此Pipeline存在的誤差傳遞問題在這里格外嚴重,因此我們需要聯合訓練:
聯合訓練
基于深度學習的事件抽取方法
傳統的方法需要借助外部NLP工具,還需要人工設計特征,但深度學習可以自動提取句子特征,減少對外部NLP工具的依賴。
下圖給出一個典型的基于動態多池化卷積神經網絡的事件抽取方法:
面向結構化數據的知識抽取
所謂結構化數據就是指類似于關系庫中表格那種形式的數據,他們往往各項之間存在明確的關系名稱和對應關系。因此我們可以簡單的將其轉化為RDF或其他形式的知識庫內容。一種常用的W3C推薦的映射語言是R2RML(RDB2RDF)。一種映射結果如下圖所示:
現有的工具免費的有D2R,Virtuoso、MOrph等。
面向半結構化數據的知識抽取
半結構化數據是指類似于百科、商品列表等那種本身存在一定結構但需要進一步提取整理的數據。
百科類知識抽取
對于百科類數據我們都較為熟悉,下面著重介紹怎么從百科里抽取知識:
上圖給出從百科里抽取知識的流程介紹。(待補)
Web網頁數據抽取:包裝器生成
現在我們的目標網站是部分結構化的,如:
包裝器是一個能夠將數據從HTML網頁中抽取出來,并且將它們還原為結構化的數據的軟件程序。使用它提取信息流程為:
包裝器歸納
對于一般的有規律的頁面,我們可以使用正則表達式的方式寫出XPath和CSS選擇器表達式來提取網頁中的元素。但這樣的通用性很差,因此也可以通過包裝器歸納這種基于有監督學習的方法,自動的從標注好的訓練樣例集合中學習數據抽取規則,用于從其他相同標記或相同網頁模板抽取目標數據。其運行流程為:
自動抽取
對于監督學習我們知道標注數據是它的短板,因此我們想到自動抽取的方法。網站中的數據通常是用很少的一些模板來編碼的,通過挖掘多個數據記錄中的重復模式來尋找這些模板是可能的。自動抽取的流程如圖所示:
Cite
王昊奮知識圖譜教程
總結
以上是生活随笔為你收集整理的知识图谱入门 (三) 知识抽取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现“人工智障”三子棋
- 下一篇: chorme插件与视频下载