劉 旭, 楊 航, 張嘯成, 張永剛
(吉林大學 計算機科學與技術學院, 符號計算與知識工程教育部重點實驗室, 長春 130012)
關系三元組抽取是自然語言處理中的一項重要工作, 它的目標是從無結構的文本中聯合提取出實體和關系, 為下游知識圖譜的自動構建奠定基礎. 以往的研究[1]通常將關系三元組抽取任務視為兩個子任務: 實體識別[2-3]和關系分類[4-6], 并且兩個子任務獨立完成. 盡管這種三元組的抽取方法很靈活, 但忽略了實體與關系之間的交互性和關聯性, 且無法避免錯誤傳播問題. 近期提出的一系列實體和關系聯合抽取方法[7-12], 能利用實體與關系之間的交互性和關聯性, 有效緩解錯誤傳播問題產生的影響. 這類方法是通過序列標注實現的, 目前已取得了許多成果. 但這類方法也存在一定的問題, 它們通常對關系集合中每種關系都進行實體標注[7-8,11], 從而產生冗余關系問題, 而冗余關系會對最終的三元組抽取結果產生不利影響. 此外, 序列標注的方法也不能有效解決各種實體重疊情況, 例如文獻[7]并未考慮任何實體重疊的情況, 文獻[8]雖然能解決單實體重疊和實體對重疊的情況, 但不能解決實體嵌套的情況. 表1列出了不同的實體重疊情形.

表1 不同的實體重疊情形Table 1 Different entity overlapping scenarios
為有效解決上述兩個問題, 本文提出基于關系過濾器的二維實體對標注方案(RF2DTagging). 該方案由兩部分組成: 1) 關系過濾器, 解決冗余關系問題; 2) 二維實體對標注器, 解決實體重疊問題. 在3個公開的中文數據集上進行驗證實驗, 實驗結果表明, 本文模型比對比模型性能更好.
對于一個句子S={w1,w2,…,wN}和一個預定義的關系集合R={r1,r2,…,rK}, 本文目的是識別出其中蘊含的所有關系三元組.關系三元組可形式化為(s,r,o), 其中s表示主實體,o表示客實體,r表示關系集合中的某個關系.需要注意的是主實體和客實體都是給定句子中的連續子序列.關系三元組提取任務可定義為根據預定義的關系集合R從給定句子S中識別出所有關系三元組的集合TS={(s,r,o)i|r∈R, 1≤i≤M}, 其中M表示從S中提取出的關系三元組總數.
RF2DTagging模型的整體結構如圖1所示. 由圖1可見, RF2DTagging模型宏觀上由三部分組成: 文本編碼器、 關系過濾器和二維實體對標注器.

圖1 RF2DTagging模型的整體結構Fig.1 Overall framework of RF2DTagging model
近年來, 深度學習模型在圖像處理領域取得突破性進展, 因此, 相關研究者開始嘗試將深度學習模型用于自然語言處理, 首先用于自然語言的編碼. 在預訓練語言模型提出前, 文本編碼最常用的深度學習模型是長短期記憶網絡(LSTM), 它是循環神經網絡(RNN)的一種變形, 通過引入門控機制解決了RNN的長期依賴問題. 由于BERT模型[13]的提出, 使得先預訓練再微調的兩階段訓練方式成為自然語言處理的通用范式. 為捕獲句子中每個字的上下文特征, 本文使用BERT作為編碼器. BERT是一個基于多層雙向Transformer的語言表示模型, 它能學習句子中每個字的特征信息:
H=BERT(x1,x2,…,xN)=(h1,h2,…,hN),
(1)
其中:N表示句子長度, 即該句子中的字數;xi表示第i個字的輸入向量, 是第i個字wi的詞嵌入與位置嵌入的拼接;hi∈dh表示第i個字的隱藏態向量.
對于關系三元組抽取任務, 常存在冗余關系問題.即每個句子中所包含的關系數遠小于預定義的關系總數, 如果根據關系集中的所有關系進行三元組抽取, 則會產生與輸入句子不適應的關系, 即冗余關系, 這不但對計算機資源是一種浪費, 而且也會對最終的抽取結果產生消極影響.因此本文提出用關系過濾器過濾冗余關系.運算過程如下.
1) 通過線性層獲得文本關于關系的向量表示:

(2)

2) 通過池化操作獲得文本關于關系的全局向量表示:

(3)
其中:hglobal∈drel是文本關于關系的全局向量表示;N表示句子長度; Pooling(·)表示池化操作, 本文使用的具體池化操作是平均池化.
3) 通過線性層和非線性激活函數獲得關系的概率分布:
Prel=Sigmoid(WPhglobal+bP),
(4)
其中:Prel∈K是關系對輸入文本的概率分布,K表示關系總數; Sigmoid(·)是非線性激活函數, 可將任意一個實數映射為0~1的值, 即其值域為(0, 1);WP∈K×drel表示可訓練的權重;brel∈K表示偏置項.
4) 設定關系過濾閾值, 過濾冗余關系. 本文設關系過濾閾值為μ, 如果某一關系的概率小于μ, 則認為該關系為冗余關系, 并將其舍棄; 如果某一個關系的概率大于等于μ, 則認為該關系為輸入文本的置信關系, 將根據置信關系進行實體對標注. 例如通過設置閾值μ, 圖1中的句子“大興區位于中國的首都——北京?!笨色@得置信關系“位于”和“首都”, 本文將根據這兩個置信關系進行實體對標注.
對于實體識別, 最經典的方法是seq2seq的標注方案. 該方案或者在一個序列中同時標注出主實體和客實體[7], 或者在兩個序列中分別標注出主實體和客實體[8]. 無論是前者還是后者都需要主實體和客實體的匹配, 這通常會導致錯誤傳播問題, 且這種方案也不能有效解決實體重疊問題. 本文的二維實體對標注方案是一個seq2table的標注方法, 該方法可以直接提取出實體對, 而不用主客實體的匹配, 且這種二維標注方法可有效解決各種實體重疊問題. 二維實體對標注方案示例如圖2所示.
2.3.1 二維實體對標注方案
對于一個長度為N的句子, 為其每個置信關系維護一個表TN×N.為便于描述, 本文用T(i,j)表示某一置信關系下字對(i,j)的標簽, 這里的(i,j)是由句子中的第i個字和第j個字組成的字對.
本文的二維實體對標注方案為每個字對預定義3個標簽: B,I,O.如果句子中第i個字和第j個字分別是主實體和客實體的第一個字, 則將字對(i,j)標注為B, 即T(i,j)=B, 如圖2(A)中的字對(“第”,“北”)和(“第”,“中”), 它們分別是相應主實體和客實體的第一個字, 本文的二維標注方案將其標注為B; 如果句子中的第i個字是主實體的第一個字, 第j個字是客實體中除第一個字外的其他字, 或者第j個字是客實體的第一個字, 第i個字是主實體中除第一個字外的其他字, 則將字對(i,j)標注為I, 即T(i,j)=I, 如圖2(A)中的字對(“第”,“京”)和(“奧”,“北”), 其標簽為I; 如果字對(i,j)不屬于上述兩種情況, 則將其標注為O.
本文的二維實體對標注方案可解決各種實體重疊的情況.對于單實體重疊(SEO)的情形, 如圖2(A)所示, 本文二維標注方案可在同一個表中標注出兩個實體對; 對于實體對重疊(EPO)的情形, 如圖2(B)和(D)所示, 可分別在兩個表中標注出這兩個實體對; 對于實體嵌套(SOO)的情形, 如圖2(C)所示, 二維標注方案也可以在一個表中明確標注出該實體對.
2.3.2 標注器的實現
本文認為文本對于主實體和客實體的特征信息會對實體對的提取有積極作用, 即對于一個置信關系, 字對的標注結果與主實體和客實體的特征信息有關. 基于此, 本文使用兩個線性層分別獲得每個字關于主實體和客實體的向量表示:

Dozat等[14]提出了Biaffine-attention機制, 其核心計算公式為
Biaffine(x,y)=xTU1y+U2(x⊕y)+b,
(7)


(8)
因為在標注過程中使用了3個標簽, 所以s(i,j)∈3.通過Softmax函數預測字對(i,j)標簽的概率分布為

(9)

2.3.3 二維實體對標注器解碼算法
本文將一個批次的二維實體對標注矩陣按下列算法進行解碼, 最后獲得該批次中每個樣本所提取的三元組集合組成的列表.
算法1二維實體對標注器解碼算法.
輸入: 文本長度seq_len; 一個批次的置信關系列表rel_list∈batch_size_expand; 置信關系對應的樣本序號列表sample_idxs∈batch_size_expand; 置信關系和樣本對應的二維實體對標注矩陣M∈batch_size_expand×seq_len×seq_len;
輸出: 該批次中每個樣本所提取三元組集合的列表triple_set_list;
//初始化三元組集合列表, 用于存放一個批次中每個樣本對應的三元組集合
triple_set_list←[ ];
pre_sample_idx←0;
triple_set←{ };
if sample_idx>pre_sample_idx:
//開始提取下一個樣本中的關系三元組, 重新初始化其對應的triple_set
triple_set_list.append(triple_set);
triple_set←{ };
end if;
//根據關系索引獲得關系名
rel_name←id2rel_name(rel);
從式(2)-式(4)、式(6)、式(7)、式(9)、式(10)知ψ、ψ9、ψ、ψ、ψ、μ、μ9由常數mb、ma、mc和變量φ決定,都無量綱。
//獲取矩陣中被標注為“B”的索引
sub_heads,obj_heads←where(one_M=“B”);
//獲得主實體和客實體首位置
for sub_head,obj_head in zip(sub_heads,obj_heads):
sub_index←sub_head+1;
//獲得主實體尾位置
while sub_index sub_index←sub_index+1; end while; //根據主實體的首尾位置獲得實體名 sub←pos2entity(sub_head,sub_index); obj_index←obj_head+1; //獲得客實體尾位置 while obj_index obj_index←obj_index+1; end while; //根據客實體的首尾位置獲得實體名 obj←pos2entity(obj_head,obj_index); //主實體、 關系和客實體組成三元組 triple←(sub,rel_name,obj); //將獲得的三元組添加至當前樣本對應的三元組集合 triple_set.add(triple); end for; end for; return triple_set_list. 為聯合訓練RF2DTagging模型, 本文構建聯合目標函數, 其由兩部分組成: 1) 關于關系的目標函數為 (10) 2) 關于實體對的目標函數為 (11) 其中N表示輸入文本的長度. 本文的聯合目標函數是上述兩部分的加權和: Ljoint=αLrel+βLEP, (12) 其中α和β是超參數. 為測試RF2DTagging模型的性能, 本文在如下3個開放的中文關系提取數據集上進行實驗: CCKS2019-Task3,CMeIE,DuIE2.0. 數據集CCKS2019-Task3是2019年全國知識圖譜與語義計算大會(CCKS)發布的任務三數據集, CCKS2019的任務三旨在從中文文本中提取出人物關系, 在本文中將其數據集記為CCKS2019-Task3; CMeIE是CHIP2020會議發布的開源數據集, 其所對應的任務是中文醫學文本實體關系提取; DuIE2.0是2020語言與智能技術競賽的數據集, 該數據集專門用于關系抽取任務. 最初的3個數據集都只含有訓練集和驗證集而不包含測試集, 本文按照8∶2從訓練集中隨機選擇樣本組成測試集, 3個數據集的統計信息列于表2. 表2 各數據集的統計信息Table 2 Statistical information of each dataset 實驗使用準確率(P)、 召回率(R)和F1值作為模型的評估標準, 三者有如下關系: F1=(2×P×R)/(P+R). 對于模型預測出的關系三元組, 當且僅當主實體、 客實體以及關系全都正確時, 才認為該關系三元組是正確的; 對于實體, 當且僅當其與測試樣例的標簽完全匹配時才認為是正確的. 本文在驗證集上調節超參數, 訓練出的最優模型所對應的重要超參數列于表3. 主要包括優化器相關、 模型相關以及訓練相關. 對于模型中的可訓練參數, 根據標準正態分布對其進行初始化. 本文使用AdamW算法作為優化算法訓練模型, 因為它的warmup機制可加速收斂. 對于每個數據集都在其上運行5次, 并且取5次結果的平均值作為最終結果, 每次運行都會從訓練集中隨機生成測試集. 表3 模型超參數Table 3 Hyperparameters of model 為驗證RF2DTagging模型的性能, 本文選擇3個模型作為對比模型: NovelTagging[7],CasRel[8],TPlinker[11]. 其中NovelTagging模型使用BiLSTM作為文本編碼器, 而CasRel和TPLinker模型使用預訓練模型BERT作為文本編碼器, 為公平比較, 將NovelTagging模型的文本編碼器替換為BERT. 在運行對比模型時, 超參數和官方源碼保持一致, 而數據的預處理參照本文模型的預處理, 即按8∶2劃分訓練集和測試集, 并且每次運行都從訓練集中隨機生成測試集. 實驗的總體結果列于表4. 由表4可見, RF2DTagging模型除在數據集DuIE2.0的P評估標準上取得了次優結果外, 其余結果全部最優. 對于F1, RF2DTagging模型在數據集CCKS2019-Task3,CMeIE和DuIE2.0上比TPlinker模型分別提升了0.6,2.2,0.4, 證明了本文模型對中文關系三元組抽取任務的有效性. 相比數據集CCKS2019-Task3和DuIE2.0, 數據集CMeIE上的實驗結果性能較差, 其可能原因有兩個: 1) 相比數據集CCKS2019-Task3和DuIE2.0, 數據集CMeIE的訓練集較小, 數據集CCKS2019-Task3和DuIE2.0的訓練集分別是CMeIE的11.9倍和12.1倍; 2) 相比數據集CCKS2019-Task3和DuIE2.0, 數據集CMeIE的專業性較強, 其中包含很多專業術語和特殊符號, 在這些特殊符號中, 有些是醫學專用符號, 有些是創建數據時由于格式處理產生的符號, 這給模型對文本的語義理解帶來了困難. 表4 總體實驗結果Table 4 Overall experimental results 為驗證RF2DTagging模型在解決實體重疊問題時的效果, 本文在數據集CCKS2019-Task3和DuIE2.0上進行了進一步實驗, 即根據不同重疊情形將兩個數據集的測試集劃分為不同的子集: Normal,EPO,SEO和SOO, 在這4個子數據集上分別進行實驗, 實驗結果列于表5. 由表5可見, RF2DTagging模型在EPO,SEO和SOO三種情況下都獲得了最優結果, 證明了該模型能有效解決實體重疊問題. RF2DTagging模型在Normal情況下的性能有所下降, 這可能是由于錯誤傳播導致的, 即一旦關系過濾器提取的置信關系是錯誤的, 則相對應的實體對標注也是錯誤的. 綜上所述, 針對冗余關系和各種實體重疊的問題, 本文提出了一個基于關系過濾器的二維標注方案, 并將其命名為RF2DTagging. 分別設計了一個關系過濾器和一個二維實體對標注器, 二者共同構成了RF2DTagging模型. 在3個開放的中文關系抽取數據集上進行實驗, 總體的實驗結果證明本文模型在中文關系三元組抽取任務上比對比模型性能更好, 不同重疊模式上的實驗結果也證明了本文模型確實能有效解決冗余關系問題和實體重疊問題.2.4 目標函數



3 實 驗
3.1 數據集和評估標準

3.2 實驗設置

3.3 對比模型
3.4 總體實驗結果

3.5 不同實體重疊情形的實驗結果