劉 偉,陳鴻昶,黃瑞陽
(國家數字交換系統工程研究中心,河南 鄭州 450000)
隨著深度學習在人工智能領域取得突破性的進展,科技工作者們越來越相信以數據為驅動的方法能夠在智能化研究的道路上大展鴻圖。文本作為信息量最密集的數據形態之一,其優秀的處理方法也越來越受到重視。深度學習的方法自被引入到自然語言處理任務中來,在本領域的多項任務中均取得了相當可觀的效果。特別是做實體關系抽取任務時,在引入了CNN和LSTM后,關系抽取效果有了明顯提升。采用深度學習的方法相比傳統方法有明顯的不同: 傳統方法更加注重分析語句和句法的結構,從而對關系進行判斷分類,而基于深度學習的方法則更加注重詞義及其表示。本文嘗試通過在神經網絡架構中引入句法遞歸結構,使得句法結構信息更有效地參與到關系抽取任務中,從而提高抽取效果。
實體(Entity),即真實世界存在的特定的事實信息。關系抽取(Relation Extraction,RE),是通過計算機手段自動尋找文本中所描述的特定的實體關系。例如,“吳恩達成為百度首席科學家”中就包含一個雇傭關系,可以用三元組(吳恩達,雇員,百度)表示,也可以根據需求將關系更加具體化,用三元組(吳恩達,首席科學家,百度)表示。
當前實體關系抽取的主流系統一般采用有監督的學習方法。這類方法往往需要大量的人工標注數據,而人工標注數據的獲得往往需要消耗大量的人力物力資源。2007年Auer等建立了DBpedia[1],Suchanek等建立了YAGO[2],2008年Bollacker等建立了Freebase[3]等語義數據集,被廣泛應用在自然語言處理的各項任務中。盡管這些數據集中包含了大量的關系實例,但對于同一關系實例的數據往往不足以訓練成熟的關系模型。2009年,Mintz等提出了遠程監督的關系抽取算法[4],能夠自動關聯遠程數據庫中相應的訓練數據。該算法假設如果兩個實體E1、E2存在特定關系R,那么關系R將在所有包含實體E1、E2的文本材料中體現。這個假設在很多情況下是成立的,但并不絕對。例如,“吳恩達表示,現在全世界范圍內,百度在使用超級計算機發展人工智能的公司中是最優秀的”。這句話中雖然也同樣包含“吳恩達”、“百度”兩個實體,但并不能體現“雇員”這層關系,不過該模型仍然會將其標注為該關系的支持語料。針對上述錯誤標注問題,2010年Riedel等[5]、2011年Hoffman等[6]、2012年Surdeanu等[7]基于自然語言處理的相關工具提出了多示例學習的方法及改進方法。
近年來,深度學習方法被應用到關系抽取的工作中。2012年Socher等在句子級的人工標注數據上搭建了深度神經網絡分類器[8],但由于數據不易獲得因而難以應用在大規模數據集上。因此,2015年Zeng等[9]將遠程監督數據的思想應用到神經網絡的訓練中,取得了突破性進展。這種方法假設在包含兩個實體的所有語句中,至少有一個語句可以表達它們之間的關系。然后,選擇最能表達該關系的語句進行訓練和預測。這個過程可以有效地排除那些對關系表達毫無作用的語句,但同時也放棄了可能包含重要信息的語句。為了能夠抗干擾,同時更充分地利用有效語句,2016年Lin等[10]將注意力模型與CNN結合來處理關系抽取任務。這種方法可以將選出的幾個有用關系的語句信息進行加權組合,提煉出對于關系抽取更準確的信息,有效地提高了關系抽取的準確率。由于該方法在語句編碼階段仍然對句法信息表達不足,故本文設計了一種基于句法樹的CNN網絡,來提高對句法信息的利用。
本文主要工作是在句子級的水平上基于注意力機制的遠程關系抽取中的注意力模型進行了優化。如圖1所示,本文利用CNN方法構建句子的語義信息。為了更準確地構建注意力機制模型,通過兩層相關性分析將語義信息投影在抽取關系上,又通過利用來自《紐約時報》的實際數據對模型進行訓練和測試。實驗表明,本文所提出的方法可以有效提升關系抽取的效果及運算效率。

圖1 算法結構框圖
關系抽取是自然語言處理領域最重要的任務之一。 遠程監督關系抽取由于其基于遠程數據庫關聯的特點,是近年來熱門的研究方法。但是遠程監督關系抽取常常伴隨著錯誤標注的問題。為了解決這個問題,科研人員做出了不懈地努力。2010年Riedel等提出了解決多示例單標簽問題的遠程監督模型[5];隨后,Hoffmann[6]和Surdeanu[7]等在多示例多標簽遠程監督模型上提出了各自的方法。
自2009年以來,深度學習已經在包括計算機視覺、語音識別等領域取得了突破性的進展,在自然語處理領域也是如此。2013年Socher等的句法分析是深度學習在自然語言處理領域的成功應用。深度學習應用在關系抽取工作中是從Schoer等將句法分析樹結點表示為向量開始的。Zeng等在2014年將端對端卷積神經網絡應用到關系抽取中[9],Lin等在2016年將注意力模型應用在卷積神經網絡之上,提高了關系抽取的準確率[10]。
但是,難以獲得充足的人工標注訓練數據,一直是關系抽取任務的困難之一。因而2015年Zeng等嘗試用遠程監督數據訓練了多示例關系抽取的神經網絡模型[9]。但是該模型假定只有一條語句可以表達實體對所對應的關系,大量有用信息被應用丟失。2016年Lin等利用注意力模型對其進行了改進,以充分利用所有語料信息。該模型認為通過這種方法可以充分利用所有的語料信息,從而有效地進行關系抽取[10]。在遠程監督關系抽取時無法避免地會引入各種各樣的噪聲,注意力模型具有一定的抗噪聲能力,我們希望能夠提高這種能力。并且,我們希望將更多的信息應用到關系抽取中,除了語料本身的信息之外,其語言環境、社會環境信息是不可以忽略的,我們嘗試將這部分信息應用到關系抽取中。
2014年,Mou等[11]使用樹形結構的卷積神經網絡(Convolutional Neural Network,CNN)對程序語言進行了分析處理,取得了很好的效果。但程序語言有嚴格固定且相對簡單的語法結構,因而并不能直接應用在自然語言上。2016年,Dligach等[12]使用CNN和LSTM在病例語料上嘗試了短時關系抽取,發現CNN可以取得更好的效果。我們希望在此基礎上更進一步,通過對自然語言的時態等進行預處理后,在自然語言的句法樹上建立可控深度的CNN迭代模型,并將其和一般CNN和LSTM進行比較,取得了良好效果。
給定包含指定實體對(e1,e2)的語句s及關系集Re={r1,r2,…,rm-1,NA},其中NA表示沒有關系或其它關系。本文所提出模型最終將給出(e1,e2)在語句s中存在關系r的概率P(ri)=Pe1,e2(ri|s),其中1≤i≤m,rm=NA,ri∈Re。模型主要由以下兩個部分組成。
(1) 語句編碼: 給定標出目標實體對(e1,e2)的原始文本語句s,模型利用基于樹形結構的卷積神經網絡(Tree-Based CNN)將文本語句s表達為與(e1,e2)相關的分布式向量s,該過程記為s=Encoder(s)。
(2) 注意力機制: 利用已經表示好的句向量進行自適應加權,與關系向量進行匹配。
如圖2所示,在對文本語句進行向量編碼時,我們將CNN在句法樹上進行逐級應用。即每級CNN只對語句中的一部分短語進行編碼,然后再將短語的編碼代入到CNN中,按照句法樹對語句進行逐級編碼,直到整個語句被編碼為一個單一的向量為止。
對于每一層短句的編碼方法則如圖3所示,我們利用前級輸出的向量(或詞向量)及該向量在本短語中的相對位置表示向量作為輸入,然后采用一層卷積神經網絡對其進行編碼,經過卷積層、最大池層及非線性層,最終得到該短語的向量表示。

圖3 短句編碼示意圖
2.1.1 輸入向量表示
對于每個詞或短語,我們通過向量庫查詢的方法找到其對應的向量表示,同時在其基礎上嵌入位置表示。每個詞的表示向量由兩部分嵌入組成: 詞義嵌入和位置嵌入。詞義嵌入是為了捕捉詞的詞義信息,位置嵌入的作用是捕捉詞相對實體的位置信息。
(1) 詞義嵌入: 若查詢矩陣為Q,Q∈Rlw×|V|,其中lw表示詞義嵌入的長度,V表示所有詞的集合,則每個詞的詞義嵌入可以通過該矩陣進行編碼。在圖3中,詞義嵌入對應詞表示的word embedding部分。
(2) 位置嵌入: 為了跟蹤詞與目標實體的位置關系,詞的位置信息需要嵌入到詞的表示中去。若位置嵌入函數為pe(·),則對于相對兩實體位置分別為p1,p2,位置嵌入表示為pe(p1,p2)。其嵌入編碼只與詞與目標實體的相對位置有關。在圖3中位置嵌入對應詞表示的position embedding部分。
這種詞表示的方法在實體關系抽取任務中可以有效地同時捕捉詞的詞義信息和位置信息。該方法2014年曾被Zeng使用[9],2016年被YanKai Lin延用[10]。
2.1.2 短語向量表示
我們認為短語的向量表示和詞的向量表示在向量結構上并沒有差異,即詞向量與短語向量具有相同的維度。這樣,當我們通過詞向量表示整個句子的時候,可以按照句子結構通過對短語向量進行迭代分析,從而有效關注到句子的結構信息和詞義信息。
本文對于短語的編碼方法,采用基于門卷積的CNN方法。對于給定的一個短語,若其每個詞的向量表示分別為w1,w2,…,wn,其中n表示短語的長度,每個詞向量表示的長度為l=lw+lp,lw和lp分別為詞義嵌入和位置嵌入的長度。卷積核為W,W∈Rl×c,其中c表示卷積核的寬度。那么在圖3中卷積層(convolutional layer)的計算過程如式(1)所示。
p=W*[0…0w1w2…wn0…0]
(1)
其中[0…0w1w2…wn0…0]為詞表示向量按序排列并在前后分別補(c-1)個零向量后組成的矩陣,其大小為l×(2c+n-2),表示矩陣間的卷積運算,p為行向量。
為了保證短語向量與詞向量在維度上兼容,對每條語句,我們取l個卷積核進行卷積運算。于是我們得到l個行向量,如式(2)所示。
pi=Wi*[0…0w1w2…wn0…0]+bi
(2)
若經過最大池層的輸出的向量為v,v∈Rl,則v的第i個元素可以表示為式(3)。
vi=max(pi)
(3)
其中max(pi)表示求pi中值最大的元素。
最后經過非線性層,若非線函數取雙曲正切函數,最后輸出的短語表示向量為x,x∈Rl,則x的第i個元素可以表示為式(4)。
xi=tanh(vi)
(4)
這個表示過程可以用圖3表示,最后我們得到一個與詞向量同維度的短語表示向量,進而可以將每條短語和詞代入同一個語句表示過程進行一并計算。
2.1.3 語句向量表示
語句向量表示是按照語句結構對短語向量表示過程的一個迭代運算。給定任意一條語句,可以分為m條短語,若對于每條短語都已經得到一個向量表示則整個語句可以看作一條短語,進而用短語的向量表示方法將其表示為一個向量。若上節的短語向量表示方法用encode_phrase(·)表示,語句為x1,x2,…,xm,則整個語句的表示向量s可以表示為式(5)。
s=encodephrase(x1,x2,…,xm)
(5)
這個表示過程的迭代過程可以用圖2表示,通過該方法,每條語句將被表示為一個長度固定為l的向量。
此外為了防止其過度迭代而破壞語句的基本結構,因而設置迭代深度控制參數γ。當迭代器迭代到指定深度時,直接將現有短語表示序列按照CNN的方法表示為一個向量。當γ=1時,本實驗中所提的方法將退化到基于普通CNN的關系抽取方法。
針對同一對實體(head,tail),若被n條語句s1,s2,…,sn提及,且假定在這個n條語句中的實體對有相同的關系r,r∈Re,Re為已知的關系集合。
首先,我們對這n條語句進行加權融合,如式(6)所示。
(6)
其中αi為關注系數。
由于并不是所有的語句s都能準確地對目標關系r進行描述,因此對于不同的語句應有不同的權重。關注系數αi可由式(7)獲得
(7)
其中r為關系向量,A為參數矩陣。
最后我們將得到的融合語句向量s送入全連接層,輸出向量y可表示為式(8)。
y=Ms+b
(8)
其中b為偏置向量。于是我們可以對神經網絡的輸出得用softmax分類器進行分類,從而找出該實體對最可能存在的關系r的概率為式(9)。
(9)
其中yi,yj分別為y的第i,j維的值。
此處我們延用2015年Zeng等提出的假設,即在給定的語句中至少有一條語句可以反應出給定實體對存在的關系。經過該式的計算,對于融合向量s中蘊含的關系,該式會趨向于1。而對于其他不能描述該關系的語句,該式將趨向于0。
我們采用交叉熵作為該算法的損失函數,其定義如式(10)所示。
J(A,M,b)=-∑ilog[P(ri|Si,A,M,b)]
(10)
其中A,M,b分別對應式(7)和式(8)中的同字母參數,是需要訓練的神經網絡參數。
為確定模型中的參數,我們需要用標注數據對其進行訓練。為了加速訓練,訓練方法采用隨機梯度下降法(SGD)。每次隨機選擇數據對其進行訓練,直到收斂。
另外,每次在訓練數據時需要對數據進行小的隨機變動,以防止過擬合。
本文實驗中將在廣泛采用的來自《紐約時報》(NYT)的數據集進行測試,并和基于CNN和LSTM的典型方法以準確率和召回率作為評價指標進行對比。
本文采用一個在實體關系抽取領域廣泛采用《紐約時報》(NYT)的公開數據集。該數據集曾在2010年被Ridel等[5]、在2011年被Hoffmann等[6]、在2012年被Surdeanu等[7]、在2016年被Yankai Lin等引用[10]。該數據集是結合《紐約時報》中的語料和Freebase中的實體集和關系集,利用斯坦福的命名實體識別工具,匹配結合而成。這個數據集被分為兩部分,一部分是2005~2006年的語料,包含522 611條語句和281 270對實體,存在18 252種關系實例。另一部分是2007年的語料,包含172 252條語句,96 678對實體,存在1 950種關系實例。本文實驗中,將用前一部分語料進行訓練,并用后一部分語料進行測試。與過去的評測關系抽取結果的方法相同,本實驗中我們采用準確率和召回率進行評價。
為了更好地驗證提升效果,我們將分別對基于Tree-based CNN方法和基于普通CNN的方法和基于LSTM的方法進行實驗,并在準確率和召回率兩個指標下進行比較。
算法中存在一些經驗參數設置,本實驗中對于所有方法(Tree-based CNN /CNN/LSTM)的優化參數設置相同。根據以往的實驗經驗,同時借鑒Yankai Lin等[10]的參數值設置,我們手動確定了一些可調參數。它們分別為SGD學習率λ=0.01,詞句表示維度lw=50,位置嵌入維度lp=5。此外,基于CNN的和Tree-based CNN方法中卷積核的寬度都為c=3,且Tree-based CNN的迭代深度控制參數γ=3。事實上,與其他模型相比,這樣的參數設置在實驗中也的確使模型表現出了不錯的效果。
另外,為了剔除一些不必要的詞語信息干擾,我們除去了語料中包含出現次數少于100次的單詞的語句。同時我們按照所提的標準,對語句進行了統一規范化的處理。
本文提出的算法,首先對語句進行了語法解析,其解析工具來源于斯坦福的自然語言處理工具[注]https: //github.com/stanfordnlp/CoreNLP。而對于詞向量,我們則應用谷歌的Word2Vec[注]https: //code.google.com/p/word2vec工具對經過預處理后的NYT語料進行了訓練。
為了方便比較不同的方法對關系抽取的效果,我們分別利用CNN、LSTM和本文應用的Tree-based CNN方法在同一數據集上進行訓練和測試。
表1記錄了分別利用CNN、LSTM和本文應用的Tree-based CNN方法時,召回率分別為0.2、0.3和0.4時的準確率。必然的,當提高準確率時,三種方法的準確率都會有所下降,但是可以看出在這三個召回率下,本文所應用的方法都明顯優于傳統的CNN和LSTM算法。TBCNN相對LSTM,當召回率設置為0.2時,準確率提高最大,為0.054;TBCNN相對于CNN,當召回率設置為0.4時,準確率提高最大,為0.036。

表1 不同算法準確率(Precise)對照表
圖4中,我們以準確率和召回率為橫縱坐標畫出了precise-recall曲線。從該圖我們可以看出,Tree-based CNN整體優于一般的CNN和LSTM方法: 一般的CNN方法,在提高召回率的同時,會伴隨準確率的急劇下降,而LSTM在要求高準確率的情況下,召回率則明顯不足;而應用Tree-based CNN處理時,則兼顧了準確率和召回率。無論是在準確率還是在召回率水平上,Tree-based CNN方法都能夠發揮其優勢。并在召回率為0.3時,Tree-based CNN相對于CNN和LSTM明顯占優,其準確率相對于CNN和LSTM分別提高了約3%和5%。

圖4 precise-recall曲線
圖5和圖6分別展示了三種方法的F1值和F0.5值曲線。可以看出,無論是F1值還是F0.5值在所有相同召回率控制條件下,Tree-based CNN處理結果都不低于CNN和LSTM的處理結果。且當召回率控制在0.3~0.45之間時,Tree-based CNN的處理結果有明顯優勢。

圖5 F1-recall曲線

圖6 F0.5-recall曲線
基于Tree-based CNN的關系抽取方法是從基于CNN的關系抽取方法發展而來,其本質上是對CNN方法按照句法樹的遞歸調用。當迭代深度控制參數γ=1時,Tree-based CNN方法將退化到CNN方法。因而當召回率控制較低時,Tree-based CNN與CNN在性能上表現出了相似性。但隨著召回率的增加,其能夠融合更多句法信息的優勢則體現了出來,因而可以達到更高的準確率。
并且其遞歸調用的方法,將原來層狀結構的神經網絡變為了樹狀結構。由于其遞歸調用的方法,可以使得其對更長距離的文本信息進行融合提煉,在一定程度上講,其與LSTM有一定的相似性。因而在控制高召回率時,Tree-based CNN和LSTM在性能上表現出了相似性。當召回率控制較低時,Tree-based CNN在關系抽取方面繼承了CNN的優勢,因而可以在準確率上相對LSTM達到更高。
本文在句子級水平上針對句子的句法樹結構提出了利用Tree-based CNN對語句進行編碼,并在關系抽取任務中,提高了3%~5%的精度。Tree-based CNN是一種兼容CNN的遞歸神經網絡,通過控制迭代深度可以退化到一般CNN模型。通過實驗結果分析可知,基于Tree-based CNN的編碼方式,可以在實體關系抽取任務中兼具CNN和LSTM的優勢。
下一步,我們將繼續發展Tree-based CNN的動態結構優勢,并希望其在自然語言的其他任務中發揮優勢。