【NLP基礎】信息抽取(Information Extraction:NER(命名實體識別),關係抽取)

機器學習算法與自然語言處理出品

@公眾號原創專欄作者 劉浪

單位 | 快商通科技股份有限公司 自然語言處理實習生

信息抽取的定義為:從自然語言文本中抽取指定類型的實體、關係、事件等事實信息,並形成結構化數據輸出的文本處理技術

信息抽取是從文本數據中抽取特定信息的一種技術。文本數據是由一些具體的單位構成的,例如句子、段落、篇章,文本信息正是由一些小的具體的單位構成的,例如字、詞、詞組、句子、段落或是這些具體的單位的組合。抽取文本數據中的名詞短語、人名、地名等都是文本信息抽取,當然,文本信息抽取技術所抽取的信息可以是各種類型的信息。

本文介紹從文本中提取有限種類語義內容的技術。此信息提取過程(IE)將嵌入文本中的非結構化信息轉換為結構化數據,例如用於填充關係數據庫以支持進一步處理。

命名實體識別(NER)的任務是找到文本中提到的每個命名實體,並標記其類型。構成命名實體類型的是特定於任務的;人員、地點和組織是常見的。一旦提取了文本中的所有命名實體,就可以將它們鏈接到與實際實體相對應的集合中。

關係抽取:發現和分類文本實體之間的語義關係。這些關係通常是二元關係,如子女關係、就業關係、部分-整體關係和地理空間關係。

命名實體識別(NER)

信息提取的第一步是檢測文本中的實體。一個命名實體,粗略地說,是任何可以用一個專有名稱引用的東西:一個人、一個位置、一個組織。這個術語通常被擴展為包含本身不是實體的東西,包括日期、時間和其他類型的時態表達式,甚至像價格這樣的數字表達式。下面是前面介紹的示例文本,其中標有命名實體:

文本包含13個提到的命名實體,包括5個組織、4個地點、2次、1個人和1個提到錢的實體。除了用於提取事件和參與者之間的關係之外,命名實體對於許多其他語言處理任務也很有用。在情緒分析中,我們可能想知道消費者對特定實體的情緒。實體是回答問題或將文本鏈接到結構化知識資源(如Wikipedia)中的信息的有用的第一階段。下圖顯示了典型的通用命名實體類型。許多應用程序還需要使用特定的實體類型,如蛋白質、基因、商業產品或藝術品。

命名實體識別是指查找構成專有名稱的文本範圍,然後對實體的類型進行分類。識別困難的原因之一是分割的模糊性,我們需要決定什麼是實體,什麼不是,界限在哪裡。另一個困難是類型模糊。JFK可以指一個人、紐約的機場、美國各地的學校、橋樑和街道。下圖給出了這種交叉類型混淆的一些例子:

NER作為序列標記

命名實體識別的標準算法是一個逐詞的序列標記任務,其中指定的標記同時捕獲邊界和類型。序列分類器(如MEMM/CRF或bi-LSTM)被訓練為在文本中使用標記來標記標記,這些標記表示特定類型的命名實體的存在。考慮下面來自運行示例的簡化摘錄。

看一下最常用的兩種 sequence labeling 的編碼方式,IO encoding簡單的為每個 token 標註,如果不是 NE 就標為 O(other),所以一共需要 C+1 個類別(label)。而IOB encoding需要 2C+1 個類別(label),因為它標了 NE boundary,B 代表 begining,NE 開始的位置,I 代表 continue,承接上一個 NE,如果連續出現兩個 B,自然就表示上一個 B 已經結束了。

一個基於特徵的NER算法

基於特徵的NER系統的典型特徵

第一種方法是提取特徵並訓練詞性標記類型的MEMM或CRF序列模型。而這種思路在NER中更為普遍和有效。NER任務中,最常見的特徵包括形態、本地(local)詞彙和句法信息,形態特徵有如詞形、大小寫、前後綴等。本地詞彙特徵有如前後提示詞、窗口詞、連接詞等。最近,通過未登錄詞和非常規詞的識別來提高NER的效果,也得到了嘗試。句法特徵有詞性、淺層句法結構等。由於漢語的特殊性,除了詞彙層面的特徵外,漢字層面的特徵也被充分地用來輔助提高NER的效果,如提示單字、常用尾字等。同時,由於漢語分詞和NER的密切聯繫,有研究發現分詞結果可以有效地提高漢語NER的效果。

為了提高識別的效果,各種全局(global)信息也作為特徵被廣泛地應用在NER中,尤其是遠距離依存和上下文同指等。與此同時,各種外部知識如未標註文本旦、人名詞典、地名詞典等也被普遍使用來提高NER模型的性能。有研究表明,在模型不變的情況下,全局信息和外部知識確實可以顯着地提高識別的效果。值得注意的是,維基百科知識是最常見且有效的外部知識,而在漢語NER中,知網作為一個漢語特有的詞彙語義知識庫,也被充分地應用在NER研究中。

例如,命名實體令牌L 'Occitane將生成以下非零值特徵值:

地名表是地名的列表,通常為數百萬個地點提供詳細的地理和政治信息。一種相關的資源是姓名列表;美國人口普查局(United States Census Bureau)還提供了大量的姓氏和名字列表,這些名字都來自於其在美國進行的十年一次人口普查類似的公司、商業產品以及各種生物和礦物的清單也可從各種來源獲得。地名表和名稱特性通常作為每個名稱列表的二進制特性實現。不幸的是,這樣的列表很難創建和維護,而且它們的有用性差別很大。雖然地名表可能非常有效,但個人和組織的列表並不總是有用的

特徵的有效性取決於應用程序、類型、媒體和語言。例如,形狀特徵對於英語新聞專線文本來說至關重要,但對於自動語音識別抄本、其他未經編輯或非正式的來源,或者像漢語這樣不使用正字法大小寫的語言,形狀特徵幾乎沒有什麼用處。下圖說明了在前面的示例中添加詞性標記、語法基短語塊標記和一些形狀信息的結果。給定這樣一個訓練集,就可以訓練像MEMM這樣的序列分類器來標記新的句子。圖17.7說明了這樣一個序列標記器在token Corp.接下來被標記的地方的操作。如果我們假設一個上下文窗口包含前兩個和後兩個單詞,那麼分類器可用的特徵就是框內區域中顯示的特徵。

NER的逐詞特性編碼。

名實體識別作為序列標記。分類器在訓練和分類時可用的特徵是在框區域內的特徵。

一種用於NER的神經算法

NER的標準神經算法是基於bi-LSTM。回想一下,在這個模型中,輸入單詞wi的單詞和字符嵌入。這些通過左到右的LSTM和右向左LSTM,其輸出被連接(或其他組合)在位置上生成一個單一的輸出層。在最簡單的方法中,這個層可以直接傳遞到一個softmax上,它在所有標籤上創建一個概率分佈,最可能的標記被選擇為

。對於被命名為標記這種貪婪的解碼方法的實體來說,解碼是不夠的,因為它不允許我們強加相鄰標籤的強大約束。,標籤I-PER必須遵循另一個i / b / b / b。相反,CRF層通常在雙lstm輸出的頂部使用,Viterbi解碼算法被用來解碼。圖17.8顯示了算法的草圖

字符嵌入和單詞放在一起是一個bi-LSTM序列模型。

基於規則的NER

雖然機器學習(神經或MEMM/CRF)序列模型是學術研究的規範,但NER的商業方法通常基於列表和規則的實用組合,還有少量的監督機器學習。例如IBM系統T是一個文本理解結構,在這種結構中,一個用戶指定複雜聲明標記任務的約束在一個正式的查詢語言,包括正則表達式、字典、語義約束,NLP運營商,和表結構,所有這些系統編譯成一個高效提取器,一個常見的方法是使重複的基於規則的通過一個文本,允許一個通過影響下的結果。這些階段通常首先涉及使用具有極高精確度但召回率較低的規則。後續階段採用更容易出錯的統計方法,將第一次傳遞的輸出考慮在內。

學術界基本上以純統計序列模型為主,但工業界上處理命名體識別的方法還是會更加實際一點,監督學習加上一些規則,最為常用的方法就是通過序列,將上一個序列的結果作為輸入到下一個序列中。

  1. 第一步,用高精準度的規則去標記模稜兩可的命名實體。
  2. 第二步,尋找之前找到的名字的子串。
  3. 第三步,將特定領域的詞語列表與之前識別出的命名實體進行對比。
  4. 第四步,應用概率序列標註模型將之前的標籤作為特徵。

關係抽取

關係抽取需要從文本中抽取兩個或多個實體之間的語義關係,主要方法有下面幾類:

  • 基於模板的方法(hand-written patterns)
    • 基於觸發詞/字符串
    • 基於依存句法
  • 監督學習(supervised machine learning)
    • 機器學習
    • 深度學習(Pipeline vs Joint Model)
  • 半監督/無監督學習(semi-supervised and unsupervised)
    • Bootstrapping
    • Distant supervision
    • Unsupervised learning from the web

這種模式可以用圖數據庫去做

基於模板的方法

關係提取最早也是最常見的算法是詞彙句法模式,考慮下面這句話:

Agar is a substance prepared from a mixture of red algae, such as Gelidium,  for laboratory or industrial use.  多數人並不知道什麼是凝膠體,但他們很容易推斷出它是一種(一種下胚層)紅藻,不管它是什麼。她提出了以下詞彙句法模式  

包含以下語義:

的下位詞,讓我們可以推斷:下義詞(石花菜;紅藻)

但是手寫模型雖然有高精準度,可以專門適合於某種模型,但是另一方面來說,基本上它們都是低回歸率的,需要花很多時間去做。

監督學習去做關係提取的過程如下:首先特定的關係和命名實體已經選擇了,訓練集語料手動去標註關係和命名實體,接着就是注釋的語料就是用來去訓練分類器去標註沒有見過的訓練集。

最直接的方法有3步:

  • 第一步,找尋一對命名實體。通常在一句話中。
  • 第二步,二元分類器的作用是用來判斷兩個命名實體之間是否有關係
  • 第三步,分類器將用來去標記命名實體之間的關係

偽代碼可以這樣描述:

查找和分類文本中實體之間的關係。

對於命名體識別,在這個過程中最重要的步驟就是去辨認有用的接口特徵

基於依存句法

通常可以以動詞為起點構建規則,對節點上的詞性和邊上的依存關係進行限定。流程為:

監督學習-深度學習

深度學習方法又分為兩大類,pipeline 和 joint model

  • Pipeline 把實體識別和關係分類作為兩個完全獨立的過程,不會相互影響,關係的識別依賴於實體識別的效果
  • Joint Model 實體識別和關係分類的過程共同優化

深度學習用到的特徵通常有:

  • Position embeddings
  • Word embeddings
  • Knowledge embeddings

模型通常有 CNN/RNN + attention,損失函數 ranking loss 要優於交叉熵。

Pipeline

CR-CNN

https://arxiv.org/pdf/1504.06580.pdf

輸入層 word embedding + position embedding,用 6 個卷積核 + max pooling 生成句子向量表示,與關係(類別)向量做點積求相似度,作為關係分類的結果。

損失函數用的是 pairwise ranking loss function

訓練時每個樣本有兩個標籤,正確標籤 y+ 和錯誤標籤 c-,m+ 和 m- 對應了兩個 margin,γ用來縮放,希望

越大越好,

越小越好。

另外還有一些 tips:

  • 負樣本選擇

最大的標籤,便於更好地將比較類似的兩種 label 分開

  • 加了一個 Artifical Class,表示兩個實體沒有任何關係,可以理解為 Other/拒識,訓練時不考慮這一類,損失函數的第一項直接置 0,預測時如果其他 actual classes 的分數都為負,那麼就分為 Other,對於整體的 performance 有提升
  • position feature 是每個 word 與兩個 entity 的相對距離,強調了兩個實體的作用,認為距離實體近的單詞更重要,PE 對效果的提升明顯,但實際上只用兩個實體間的 word embedding 作為輸入代替整個句子的 word embedding+position embedding,也有相近效果,且輸入更少實現更簡單。