知識圖譜入門——知識抽取與挖掘(I)
文章首發於部落格du_ok’s Notes,本文連結為知識圖譜入門——知識抽取與挖掘(I)
本文主要介紹了面向非結構化資料、半結構化資料和結構化資料的知識抽取。
知識抽取任務定義
對於知識圖譜來說,我們需要從不同來源、不同結構的資料中進行抽取,形成知識存入到知識圖譜。
知識抽取的技術與難點:
- 從結構化資料庫中獲取知識:D2R
- 難點:複雜表資料的處理
- 從連結資料中獲取知識:圖對映
- 難點:資料對齊
- 從半結構化(網站)資料中獲取知識:使用包裝器
- 難點:方便的包裝器定義方法,包裝器自動生成、更新與維護
- 從文字中獲取知識:資訊抽取
- 難點:結果的準確率與覆蓋率
知識抽取的子任務
- 命名實體識別
- 檢測:西瓜書的作者是周志華。→[西瓜書]:實體
- 分類:西瓜書的作者是周志華。→[西瓜書]:書籍
- 術語抽取
- 從語料中發現多個單片語成的相關術語。
- 關係抽取
- 抽取出實體、屬性等之間的關係。
例子:王思聰是萬達集團董事長王健林的獨子。→[王健林] <父子關係> [王思聰]
- 抽取出實體、屬性等之間的關係。
- 事件抽取
- 相當於多元關係抽取
例子:
- 相當於多元關係抽取
- 共指消解
例子:
非結構化資料的知識抽取
實體抽取
實體抽取的任務是抽取文字中的原子資訊元素,包括人名、組織/機構名、地理位置、時間/日期、字元值、金額值等(原子根據場景來定義)。
例子:
非結構化資料的實體抽取可以認為是一個序列標註問題,於是我們可以使用序列標註的方法,例如使用HMM、CRF等方法,也可以使用LSTM+CRF的方法,幾種方法通過F1值的比較如下:
實體識別與連結
識別非結構化資料(文字)中的實體,並將它們連結到知識庫中,是讓機器理解自然語言的第一步,也是至關重要的一步。實體識別出來的實體名可能是有歧義的,可能有多個實體都對應著某個實體名,也可能摸個實體對應著多個實體名,如china可能是中國也可能是瓷器,此時我們需要對實體進行消歧與連結。
實體連結的流程如下:
實體連結的例子:
關係抽取
關係抽取是從文字中抽取出兩個或者多個實體之間的語義關係。關係抽取主要有基於模板的方法、監督學習方法和弱監督學習方法。
基於模板的方法
基於觸發詞的Pattern
首先確定一個觸發詞(trigger word),然後根據觸發詞做pattern的匹配及抽取,然後做一個對映。
例子:
基於依存句法分析的Pattern
文字一般具有一些句法結構,如主謂結構、動賓結構、從句結構、這些結構可以是跨多個詞所產生的。最常見的情況是動賓短語,所以我通常以動詞為起點,構建規則,對節點上的詞性和邊上的依存關係進行限定(可以理解為泛化的正則表示式)。具體的流程如下:
例子:董卿現身國家博物館看展優雅端莊大方。
依存分析:
上圖中,我們可以看出這個例子中的依存關係路徑中“-1”代表謂語,同時可以看出“董卿”這個詞依存關係路徑為1,說明此處的董卿是和詞順序為“1”的現身關聯,於是可以得到“董卿,現身”;接著看“國家博物館”也是和“現身”所關聯,所以可以得出一個動賓關係“現身,國家博物館”。
抽取結果:
(董卿, 現身, 國家博物館)→位於(董卿, 國家博物館)
監督學習的方法
確定實體對的情況下,根據句子上下文對實體關係進行預測,構建一個監督學習應該怎麼做?
- 預先定義好關係的類別
- 人工標註一些資料
- 設計特徵表示
- 選擇一個分類方法 (SVM、NN、Naive Bayes)
- 評估結果
上述步驟主要需要考慮特徵的選擇,特徵的選擇往往使用如下做法:
常規做法
- 輕量級特徵
- 實體前後的詞
- 實體的型別
- 實體之間的距離(也就是實體之間的相似度)
- 中等量級特徵
- Chunk序列:如片語
- 重量級特徵
- 實體間的依存關係路徑
- 實體間樹結構的距離
- 特定的結構資訊
深度學習方法——Pipeline
識別實體和關係分類是完全分離的兩個過程,不會相互影響,關係的識別依賴於實體識別的效果
-
CR-CNN模型
- 僅使用詞向量和位置向量作為輸入
- F1值84.1,超過現有的非深度學習方法 -
Att-CNN模型
- 應用注意力機制(表現為不同的詞對上下文來說有不同的權重)
- 目前最好的方法(F1值88.0) -
Att-BLSTM模型
存在的問題:存在錯誤傳遞
深度學習方法——Joint Model
實體識別和關係分類的過程是共同優化的。同時整合前面的兩個任務,是全域性最優化,效果一般情況下優於Pipeline,但是引數空間會提高。
- LSTM-RNNs模型
該模型將依存關係使用Bi-TreeLSTM的樹型模型表示。
監督學習的方法小結
- 優點:準確率高,標註資料越多越準確
- 缺點:標註資料成本太高;不能擴充套件新的關係
弱監督學習的方法
當我們的標註資料不足或資料量又特別大的情況下,關係的抽取可以採用弱監督學習方法。
遠端監督方法
知識庫與非結構化文字對齊來自動構建大量訓練資料,減少模型對人工標註資料的依賴,增強模型跨領域適應能力。
若兩個實體在知識庫中存在某種關係,則包含該兩個實體的非結構化句子均能表示出這種關係。
例子:
在某知識庫中存在: 創始人 (喬布斯, 蘋果公司)
則可構建訓練正例:喬布斯是蘋果公司的聯合創始人和CEO
具體的步驟:
- 從知識庫中抽取存在關係的實體對
- 從非結構化文字中抽取含有實體對的句子作為訓練樣例
這裡需要有標註的資料給定一些關係,這些資料該如何得到是其中的一個問題。可以通過已有的知識庫的三元組出發,將實體進行實體連結或實體發現,也就是使用現有的知識庫去標註資料。但是這些標註資料不一定都滿足我們需要的關係(即可能含有噪聲),於是我們需要訓練處一個抗噪模型。
缺點: 假設過於肯定,引入大量噪聲,存在語義漂移現象;很難發現新的關係。
Bootstrapping
在前面的方法是基於手工書寫的模板(如基於dependency的模板)來做的,在Bootstrapping中,我們使用並需要自己定義模板,而是是去學習模板。
整體步驟如下:
假設給定了一個種子集合,種子詞一般都是實體對,如:<姚明,葉莉>
- 從文件中抽取出包含種子實體詞的新聞;
如圖,將原來的種子詞替換成一個置位詞(如圖中的X, Y),同時可以利用網際網路的冗餘性對每個學到的pattern進行計數並算出頻率,由於會有許多相似的pattern,可以對這樣的pattern做聚類來學出一個更加抽象的pattern。
- 將抽取出來的Pattern與文件集中匹配;
- 根據Pattern抽取出的新文件如種子庫,迭代多輪直到不符合條件。
優點: 構建成本低,適合大規模構建;可以發現新的關係 (隱含的)。
缺點: 對初始給定的種子集敏感;存在語義漂移問題;結果準確率較低;缺乏對每一個結果的置信度的計算。
事件抽取
事件抽取的概念
從自然語言中抽取出使用者感興趣的事件資訊,並以結構化的形式呈現出來,例如事件發生的時間、地點、發生原因、參與著等。
事件抽取的相關術語:
- 事件描述 (Event Mention):描述事件的片語或句子
- 事件觸發 (Event Trigger):表明事件出現的主要詞彙
- 事件元素 (Event Argument):事件的重要資訊
- 元素角色 (Argument Role):元素在句子中的語義角色
事件是可以巢狀的,可以做事件的檢測與跟蹤:
事件抽取的任務:
- 事件抽取任務最基礎的部分包括:
- 識別事件觸發詞及事件型別
- 抽取事件元素同時判斷其角色
- 抽出描述事件的片語或句子
- 此外,事件抽取任務還包括:
- 事件屬性標註
- 事件共指消解
事件抽取的Pipeline方法
有監督的事件抽取方法的標準流程一種pipeline的方法,將事件抽取任務轉化為多階段的分類問題,需要的分類器包括:
- 事件觸發次分類器(Trigger Classifier)
- 用於判斷詞彙是否是是事件觸發詞,以及事件的類別
- 元素分類器(Argument Classifier)
- 判別片語是否是事件的元素
- 元素角色分類器(Role Classifier)
- 判定元素的角色類別
- 屬性分類器(attribute classifier)
- 判定事件的屬性
- 可報告性分類器(Reportable-Event Classifier)
- 判定是否存在值得報告的事件例項
分類器模型可以是機器學習方法中的各種分類器模型,比如MaxEnt、SVM等。
典型的分類特徵:
存在的問題:
- 誤差從前面的環節傳播到後面的環節,使得效能急劇衰減
- 各個環節的預測任務是獨立的,之間沒有互動
- 無法處理全域性的依賴關係
事件抽取的聯合方法
Joint Inference(聯合推理方法):
是一種整合學習的方法,構建n個模型,最後對n個模型的結果進行求和等方法來預測。
可以基於以下方法:
- Constrained Conditional Models
- ILP Re-ranking (整形規劃重排序)
- Dual decomposition
Joint Modeling:
實際上是一種多工學習,在不同任務中共享一些隱層特徵,如word特徵、embedding特徵、句法特徵等。
可以基於如下方法:
- Probabilistic Graphical Models
- Markov logic networks
Joint Modeling with Structured Prediction:
- 使用一個模型同時抽取出所有的資訊的聯合。
- 將問題建模成結構預測問題,使用搜索方法進行求解。
- 避免了誤差傳播導致的效能下降。
- 全域性特徵可以從整體的結構中學習得到,從而使用全域性的資訊來提升區域性的預測。
基於深度學習的事件抽取方法
基於動態多池化卷積神經網路的事件抽取方法:
動態多池化層:
- 傳統的神經網路利用最大池化層
- 事件抽取中,一個句子可能包含多個事件
結構化資料的知識抽取
結構化資料即行資料,儲存在資料庫裡,可以用二維表結構來邏輯表達實現的資料,如關係資料庫。如下將左邊的結構化ER模型轉換成右邊的結構化模型就是從結構化資料中進行知識抽取的例子。
Direct Mapping
通過明確在關係模式中編碼的語義,將關係資料轉換為RDF。如下按照一些簡單的規則建立uri:Map
- table to class
- column to property
- row to resource
- cell to literal value
- in addition cell to URI
- if there is a foreign key constraint
例子:
R2RML
R2RML: RDB to RDF Mapping Language
對映的任務是將邏輯表作為輸入,然後依據規則“triples map”將其轉換成三元組的集合。
邏輯表:
- a database table
- a database view, or
- an SQL query
Triples Maps:
triples are produced by:
- subject maps
- predicate maps
- object maps.
例子:
- The subject IRI is generated from the empno column by the template(http://data.example.com/employee/{empno})
- The predicate IRI is the constant ex:name
- The object is the literal "SMITH”, that is copied from the ENAME column
半結構化資料的知識抽取
百科類知識抽取
接下來以從維基百科抽取圖靈獎獲得者Tim Berners-Lee來介紹。
抽取出Label,將短摘要(第一段)作為comment,長摘要作為abstract;
通過Wikimedia Commons抽取出影象資訊作為depiction;
將infobox的資料轉換成一些property;
接下來還包括抽取內鏈、類別、歧義以及重定向等。
WEB網頁資料抽取:包裝器
網際網路中的資料往往也具有一定的結構,我們可以通過包裝器等方法進行知識的抽取。
包裝器是一個能夠將資料從HTML網頁中抽取出來,並且將它們還原為結構化的資料的軟體程式。包裝器抽取流程如下:
對於包裝器的生成我們可以使用手工方法、包裝器歸納方法和自動抽取的方法。
包裝器生成:手工方法
手工方法需要檢視網頁結構和程式碼,通過人工分析,手工寫出適合這個網站的表示式,這個表示式的形式可以是XPath表示式,也可以是CSS選擇器的表示式等。
包裝器生成:包裝器歸納
包裝器歸納是基於有監督學習的,他從標註好的訓練樣例集合中學習資料抽取規則,用於從其他用相同標記或相同網頁模板抽取目標資料。
- 網頁清洗
有些網頁結構不規範,例如前後標籤不對成,沒有結束標籤符。不規範的網頁結構容易在抽取的過程中產生噪聲。清洗可以用Tidy來完成。 - 網頁標註
網頁標註是在網頁上標註你需要抽取資料的過程。標註的過程可以是給網頁中的某個位置打上特殊的標籤表明這是需要抽取的資料。例如我們要抽取上面舉例的“華為P10”搜尋頁面的商品資訊和價格資訊,就可以在通過在他們所在的標籤裡打上一個特殊的標記作為標註。 - 包裝器空間的生成
對標註的資料生成XPath集合空間,對生成的集合進行歸納,形成若干個子集。歸納的規則是在子集中的XPath能夠覆蓋多個標註的資料項,具有一定的泛化能力。 - 包裝器評估
評估規則一:準確率。將篩選出來的包裝器對原先訓練的網頁進行標註,統計與人工標註的相同項的數量,除以當前標註的總數量。準確率越高評分越高。
評估規則二:召回率。將篩選出來的包裝器對原先訓練的網頁進行標註,統計與人工標註的相同項的數量,除以人工標註的總數量。召回率越高評分越高。 - 包裝器歸納結果
經過前面一系列的工作之後,得到“華為P10”搜尋結果頁面最後價格資訊的XPath的路徑。
例子:
包裝器生成:自動抽取
網站中的資料通常是用很少的一些模板來編碼的,通過挖掘多個數據記錄中的重複模式來尋找這些模板是可能的。
- 包裝器訓練
自動抽取網頁中的資訊不需要任何的先驗知識和人工資料的標註。將一組網頁通過聚類將相似的網頁分成若干個組,每組相似的網頁將獲得不同的包裝器。 - 包裝器應用
將需要抽取的網頁與之前生成包裝器的網頁進行比較,在某個分類下則使用該分類下的包裝器來獲取網頁中的資訊。
例子:
三種方法比較:
WEB TABLE 抽取
為了解釋Web table中隱含的語義,一些工作將其中的內容標註為RDF三元組。這種標註的第一步就是實體連結 (entity linking ), 即將表格中各單元格的字串對映到給定知識庫的實體上。
表格實體連結步驟:
- 候選生成
針對表格單元格中的每個字串,從給定的知識庫中識別候選實體。(token匹配 ,字串匹配,同義詞匹配……)
例子:
- 實體消岐
從給定字串所對應的實體集中選擇唯一的一個實體作為連結實體。
例子:
位於相同行或者列的字串可能相關,換句話說,出現在同一表格中的任意兩個字串都存在某種潛在的關聯。
構建實體消岐圖:
對每張給定的表格建立一個實體消岐圖每個圖由如下的元素構成:
- 字串節點, 實體節點
- 字串-實體 邊: 字串與候選實體間的無向邊,
- 實體-實體 邊: 實體間的無向邊。
例子:
計算實體連結影響因子:
兩類實體連結影響因子:
- 每個字串的初始重要性(importance of each mention);
- 不同節點間的語義相關度(semantic relatedness between different nodes)。
實體消岐演算法—PageRank:PageRank演算法 (Iterative probability propagation) 用來整合不同的實體連結影響因子從而做出最終的實體連結決定.
生成三元組: