劉 旭, 楊 航, 張嘯成, 張永剛
(吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 符號(hào)計(jì)算與知識(shí)工程教育部重點(diǎn)實(shí)驗(yàn)室, 長(zhǎng)春 130012)
關(guān)系三元組抽取是自然語(yǔ)言處理中的一項(xiàng)重要工作, 它的目標(biāo)是從無(wú)結(jié)構(gòu)的文本中聯(lián)合提取出實(shí)體和關(guān)系, 為下游知識(shí)圖譜的自動(dòng)構(gòu)建奠定基礎(chǔ). 以往的研究[1]通常將關(guān)系三元組抽取任務(wù)視為兩個(gè)子任務(wù): 實(shí)體識(shí)別[2-3]和關(guān)系分類[4-6], 并且兩個(gè)子任務(wù)獨(dú)立完成. 盡管這種三元組的抽取方法很靈活, 但忽略了實(shí)體與關(guān)系之間的交互性和關(guān)聯(lián)性, 且無(wú)法避免錯(cuò)誤傳播問(wèn)題. 近期提出的一系列實(shí)體和關(guān)系聯(lián)合抽取方法[7-12], 能利用實(shí)體與關(guān)系之間的交互性和關(guān)聯(lián)性, 有效緩解錯(cuò)誤傳播問(wèn)題產(chǎn)生的影響. 這類方法是通過(guò)序列標(biāo)注實(shí)現(xiàn)的, 目前已取得了許多成果. 但這類方法也存在一定的問(wèn)題, 它們通常對(duì)關(guān)系集合中每種關(guān)系都進(jìn)行實(shí)體標(biāo)注[7-8,11], 從而產(chǎn)生冗余關(guān)系問(wèn)題, 而冗余關(guān)系會(huì)對(duì)最終的三元組抽取結(jié)果產(chǎn)生不利影響. 此外, 序列標(biāo)注的方法也不能有效解決各種實(shí)體重疊情況, 例如文獻(xiàn)[7]并未考慮任何實(shí)體重疊的情況, 文獻(xiàn)[8]雖然能解決單實(shí)體重疊和實(shí)體對(duì)重疊的情況, 但不能解決實(shí)體嵌套的情況. 表1列出了不同的實(shí)體重疊情形.
表1 不同的實(shí)體重疊情形Table 1 Different entity overlapping scenarios
為有效解決上述兩個(gè)問(wèn)題, 本文提出基于關(guān)系過(guò)濾器的二維實(shí)體對(duì)標(biāo)注方案(RF2DTagging). 該方案由兩部分組成: 1) 關(guān)系過(guò)濾器, 解決冗余關(guān)系問(wèn)題; 2) 二維實(shí)體對(duì)標(biāo)注器, 解決實(shí)體重疊問(wèn)題. 在3個(gè)公開(kāi)的中文數(shù)據(jù)集上進(jìn)行驗(yàn)證實(shí)驗(yàn), 實(shí)驗(yàn)結(jié)果表明, 本文模型比對(duì)比模型性能更好.
對(duì)于一個(gè)句子S={w1,w2,…,wN}和一個(gè)預(yù)定義的關(guān)系集合R={r1,r2,…,rK}, 本文目的是識(shí)別出其中蘊(yùn)含的所有關(guān)系三元組.關(guān)系三元組可形式化為(s,r,o), 其中s表示主實(shí)體,o表示客實(shí)體,r表示關(guān)系集合中的某個(gè)關(guān)系.需要注意的是主實(shí)體和客實(shí)體都是給定句子中的連續(xù)子序列.關(guān)系三元組提取任務(wù)可定義為根據(jù)預(yù)定義的關(guān)系集合R從給定句子S中識(shí)別出所有關(guān)系三元組的集合TS={(s,r,o)i|r∈R, 1≤i≤M}, 其中M表示從S中提取出的關(guān)系三元組總數(shù).
RF2DTagging模型的整體結(jié)構(gòu)如圖1所示. 由圖1可見(jiàn), RF2DTagging模型宏觀上由三部分組成: 文本編碼器、 關(guān)系過(guò)濾器和二維實(shí)體對(duì)標(biāo)注器.
圖1 RF2DTagging模型的整體結(jié)構(gòu)Fig.1 Overall framework of RF2DTagging model
近年來(lái), 深度學(xué)習(xí)模型在圖像處理領(lǐng)域取得突破性進(jìn)展, 因此, 相關(guān)研究者開(kāi)始嘗試將深度學(xué)習(xí)模型用于自然語(yǔ)言處理, 首先用于自然語(yǔ)言的編碼. 在預(yù)訓(xùn)練語(yǔ)言模型提出前, 文本編碼最常用的深度學(xué)習(xí)模型是長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM), 它是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變形, 通過(guò)引入門控機(jī)制解決了RNN的長(zhǎng)期依賴問(wèn)題. 由于BERT模型[13]的提出, 使得先預(yù)訓(xùn)練再微調(diào)的兩階段訓(xùn)練方式成為自然語(yǔ)言處理的通用范式. 為捕獲句子中每個(gè)字的上下文特征, 本文使用BERT作為編碼器. BERT是一個(gè)基于多層雙向Transformer的語(yǔ)言表示模型, 它能學(xué)習(xí)句子中每個(gè)字的特征信息:
H=BERT(x1,x2,…,xN)=(h1,h2,…,hN),
(1)
其中:N表示句子長(zhǎng)度, 即該句子中的字?jǐn)?shù);xi表示第i個(gè)字的輸入向量, 是第i個(gè)字wi的詞嵌入與位置嵌入的拼接;hi∈dh表示第i個(gè)字的隱藏態(tài)向量.
對(duì)于關(guān)系三元組抽取任務(wù), 常存在冗余關(guān)系問(wèn)題.即每個(gè)句子中所包含的關(guān)系數(shù)遠(yuǎn)小于預(yù)定義的關(guān)系總數(shù), 如果根據(jù)關(guān)系集中的所有關(guān)系進(jìn)行三元組抽取, 則會(huì)產(chǎn)生與輸入句子不適應(yīng)的關(guān)系, 即冗余關(guān)系, 這不但對(duì)計(jì)算機(jī)資源是一種浪費(fèi), 而且也會(huì)對(duì)最終的抽取結(jié)果產(chǎn)生消極影響.因此本文提出用關(guān)系過(guò)濾器過(guò)濾冗余關(guān)系.運(yùn)算過(guò)程如下.
1) 通過(guò)線性層獲得文本關(guān)于關(guān)系的向量表示:
(2)
2) 通過(guò)池化操作獲得文本關(guān)于關(guān)系的全局向量表示:
(3)
其中:hglobal∈drel是文本關(guān)于關(guān)系的全局向量表示;N表示句子長(zhǎng)度; Pooling(·)表示池化操作, 本文使用的具體池化操作是平均池化.
3) 通過(guò)線性層和非線性激活函數(shù)獲得關(guān)系的概率分布:
Prel=Sigmoid(WPhglobal+bP),
(4)
其中:Prel∈K是關(guān)系對(duì)輸入文本的概率分布,K表示關(guān)系總數(shù); Sigmoid(·)是非線性激活函數(shù), 可將任意一個(gè)實(shí)數(shù)映射為0~1的值, 即其值域?yàn)?0, 1);WP∈K×drel表示可訓(xùn)練的權(quán)重;brel∈K表示偏置項(xiàng).
4) 設(shè)定關(guān)系過(guò)濾閾值, 過(guò)濾冗余關(guān)系. 本文設(shè)關(guān)系過(guò)濾閾值為μ, 如果某一關(guān)系的概率小于μ, 則認(rèn)為該關(guān)系為冗余關(guān)系, 并將其舍棄; 如果某一個(gè)關(guān)系的概率大于等于μ, 則認(rèn)為該關(guān)系為輸入文本的置信關(guān)系, 將根據(jù)置信關(guān)系進(jìn)行實(shí)體對(duì)標(biāo)注. 例如通過(guò)設(shè)置閾值μ, 圖1中的句子“大興區(qū)位于中國(guó)的首都——北京?!笨色@得置信關(guān)系“位于”和“首都”, 本文將根據(jù)這兩個(gè)置信關(guān)系進(jìn)行實(shí)體對(duì)標(biāo)注.
對(duì)于實(shí)體識(shí)別, 最經(jīng)典的方法是seq2seq的標(biāo)注方案. 該方案或者在一個(gè)序列中同時(shí)標(biāo)注出主實(shí)體和客實(shí)體[7], 或者在兩個(gè)序列中分別標(biāo)注出主實(shí)體和客實(shí)體[8]. 無(wú)論是前者還是后者都需要主實(shí)體和客實(shí)體的匹配, 這通常會(huì)導(dǎo)致錯(cuò)誤傳播問(wèn)題, 且這種方案也不能有效解決實(shí)體重疊問(wèn)題. 本文的二維實(shí)體對(duì)標(biāo)注方案是一個(gè)seq2table的標(biāo)注方法, 該方法可以直接提取出實(shí)體對(duì), 而不用主客實(shí)體的匹配, 且這種二維標(biāo)注方法可有效解決各種實(shí)體重疊問(wèn)題. 二維實(shí)體對(duì)標(biāo)注方案示例如圖2所示.
2.3.1 二維實(shí)體對(duì)標(biāo)注方案
對(duì)于一個(gè)長(zhǎng)度為N的句子, 為其每個(gè)置信關(guān)系維護(hù)一個(gè)表TN×N.為便于描述, 本文用T(i,j)表示某一置信關(guān)系下字對(duì)(i,j)的標(biāo)簽, 這里的(i,j)是由句子中的第i個(gè)字和第j個(gè)字組成的字對(duì).
本文的二維實(shí)體對(duì)標(biāo)注方案為每個(gè)字對(duì)預(yù)定義3個(gè)標(biāo)簽: B,I,O.如果句子中第i個(gè)字和第j個(gè)字分別是主實(shí)體和客實(shí)體的第一個(gè)字, 則將字對(duì)(i,j)標(biāo)注為B, 即T(i,j)=B, 如圖2(A)中的字對(duì)(“第”,“北”)和(“第”,“中”), 它們分別是相應(yīng)主實(shí)體和客實(shí)體的第一個(gè)字, 本文的二維標(biāo)注方案將其標(biāo)注為B; 如果句子中的第i個(gè)字是主實(shí)體的第一個(gè)字, 第j個(gè)字是客實(shí)體中除第一個(gè)字外的其他字, 或者第j個(gè)字是客實(shí)體的第一個(gè)字, 第i個(gè)字是主實(shí)體中除第一個(gè)字外的其他字, 則將字對(duì)(i,j)標(biāo)注為I, 即T(i,j)=I, 如圖2(A)中的字對(duì)(“第”,“京”)和(“奧”,“北”), 其標(biāo)簽為I; 如果字對(duì)(i,j)不屬于上述兩種情況, 則將其標(biāo)注為O.
本文的二維實(shí)體對(duì)標(biāo)注方案可解決各種實(shí)體重疊的情況.對(duì)于單實(shí)體重疊(SEO)的情形, 如圖2(A)所示, 本文二維標(biāo)注方案可在同一個(gè)表中標(biāo)注出兩個(gè)實(shí)體對(duì); 對(duì)于實(shí)體對(duì)重疊(EPO)的情形, 如圖2(B)和(D)所示, 可分別在兩個(gè)表中標(biāo)注出這兩個(gè)實(shí)體對(duì); 對(duì)于實(shí)體嵌套(SOO)的情形, 如圖2(C)所示, 二維標(biāo)注方案也可以在一個(gè)表中明確標(biāo)注出該實(shí)體對(duì).
2.3.2 標(biāo)注器的實(shí)現(xiàn)
本文認(rèn)為文本對(duì)于主實(shí)體和客實(shí)體的特征信息會(huì)對(duì)實(shí)體對(duì)的提取有積極作用, 即對(duì)于一個(gè)置信關(guān)系, 字對(duì)的標(biāo)注結(jié)果與主實(shí)體和客實(shí)體的特征信息有關(guān). 基于此, 本文使用兩個(gè)線性層分別獲得每個(gè)字關(guān)于主實(shí)體和客實(shí)體的向量表示:
Dozat等[14]提出了Biaffine-attention機(jī)制, 其核心計(jì)算公式為
Biaffine(x,y)=xTU1y+U2(x⊕y)+b,
(7)
(8)
因?yàn)樵跇?biāo)注過(guò)程中使用了3個(gè)標(biāo)簽, 所以s(i,j)∈3.通過(guò)Softmax函數(shù)預(yù)測(cè)字對(duì)(i,j)標(biāo)簽的概率分布為
(9)
2.3.3 二維實(shí)體對(duì)標(biāo)注器解碼算法
本文將一個(gè)批次的二維實(shí)體對(duì)標(biāo)注矩陣按下列算法進(jìn)行解碼, 最后獲得該批次中每個(gè)樣本所提取的三元組集合組成的列表.
算法1二維實(shí)體對(duì)標(biāo)注器解碼算法.
輸入: 文本長(zhǎng)度seq_len; 一個(gè)批次的置信關(guān)系列表rel_list∈batch_size_expand; 置信關(guān)系對(duì)應(yīng)的樣本序號(hào)列表sample_idxs∈batch_size_expand; 置信關(guān)系和樣本對(duì)應(yīng)的二維實(shí)體對(duì)標(biāo)注矩陣M∈batch_size_expand×seq_len×seq_len;
輸出: 該批次中每個(gè)樣本所提取三元組集合的列表triple_set_list;
//初始化三元組集合列表, 用于存放一個(gè)批次中每個(gè)樣本對(duì)應(yīng)的三元組集合
triple_set_list←[ ];
pre_sample_idx←0;
triple_set←{ };
if sample_idx>pre_sample_idx:
//開(kāi)始提取下一個(gè)樣本中的關(guān)系三元組, 重新初始化其對(duì)應(yīng)的triple_set
triple_set_list.append(triple_set);
triple_set←{ };
end if;
//根據(jù)關(guān)系索引獲得關(guān)系名
rel_name←id2rel_name(rel);
從式(2)-式(4)、式(6)、式(7)、式(9)、式(10)知ψ、ψ9、ψ、ψ、ψ、μ、μ9由常數(shù)mb、ma、mc和變量φ決定,都無(wú)量綱。
//獲取矩陣中被標(biāo)注為“B”的索引
sub_heads,obj_heads←where(one_M=“B”);
//獲得主實(shí)體和客實(shí)體首位置
for sub_head,obj_head in zip(sub_heads,obj_heads):
sub_index←sub_head+1;
//獲得主實(shí)體尾位置
while sub_index sub_index←sub_index+1; end while; //根據(jù)主實(shí)體的首尾位置獲得實(shí)體名 sub←pos2entity(sub_head,sub_index); obj_index←obj_head+1; //獲得客實(shí)體尾位置 while obj_index obj_index←obj_index+1; end while; //根據(jù)客實(shí)體的首尾位置獲得實(shí)體名 obj←pos2entity(obj_head,obj_index); //主實(shí)體、 關(guān)系和客實(shí)體組成三元組 triple←(sub,rel_name,obj); //將獲得的三元組添加至當(dāng)前樣本對(duì)應(yīng)的三元組集合 triple_set.add(triple); end for; end for; return triple_set_list. 為聯(lián)合訓(xùn)練RF2DTagging模型, 本文構(gòu)建聯(lián)合目標(biāo)函數(shù), 其由兩部分組成: 1) 關(guān)于關(guān)系的目標(biāo)函數(shù)為 (10) 2) 關(guān)于實(shí)體對(duì)的目標(biāo)函數(shù)為 (11) 其中N表示輸入文本的長(zhǎng)度. 本文的聯(lián)合目標(biāo)函數(shù)是上述兩部分的加權(quán)和: Ljoint=αLrel+βLEP, (12) 其中α和β是超參數(shù). 為測(cè)試RF2DTagging模型的性能, 本文在如下3個(gè)開(kāi)放的中文關(guān)系提取數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn): CCKS2019-Task3,CMeIE,DuIE2.0. 數(shù)據(jù)集CCKS2019-Task3是2019年全國(guó)知識(shí)圖譜與語(yǔ)義計(jì)算大會(huì)(CCKS)發(fā)布的任務(wù)三數(shù)據(jù)集, CCKS2019的任務(wù)三旨在從中文文本中提取出人物關(guān)系, 在本文中將其數(shù)據(jù)集記為CCKS2019-Task3; CMeIE是CHIP2020會(huì)議發(fā)布的開(kāi)源數(shù)據(jù)集, 其所對(duì)應(yīng)的任務(wù)是中文醫(yī)學(xué)文本實(shí)體關(guān)系提取; DuIE2.0是2020語(yǔ)言與智能技術(shù)競(jìng)賽的數(shù)據(jù)集, 該數(shù)據(jù)集專門用于關(guān)系抽取任務(wù). 最初的3個(gè)數(shù)據(jù)集都只含有訓(xùn)練集和驗(yàn)證集而不包含測(cè)試集, 本文按照8∶2從訓(xùn)練集中隨機(jī)選擇樣本組成測(cè)試集, 3個(gè)數(shù)據(jù)集的統(tǒng)計(jì)信息列于表2. 表2 各數(shù)據(jù)集的統(tǒng)計(jì)信息Table 2 Statistical information of each dataset 實(shí)驗(yàn)使用準(zhǔn)確率(P)、 召回率(R)和F1值作為模型的評(píng)估標(biāo)準(zhǔn), 三者有如下關(guān)系: F1=(2×P×R)/(P+R). 對(duì)于模型預(yù)測(cè)出的關(guān)系三元組, 當(dāng)且僅當(dāng)主實(shí)體、 客實(shí)體以及關(guān)系全都正確時(shí), 才認(rèn)為該關(guān)系三元組是正確的; 對(duì)于實(shí)體, 當(dāng)且僅當(dāng)其與測(cè)試樣例的標(biāo)簽完全匹配時(shí)才認(rèn)為是正確的. 本文在驗(yàn)證集上調(diào)節(jié)超參數(shù), 訓(xùn)練出的最優(yōu)模型所對(duì)應(yīng)的重要超參數(shù)列于表3. 主要包括優(yōu)化器相關(guān)、 模型相關(guān)以及訓(xùn)練相關(guān). 對(duì)于模型中的可訓(xùn)練參數(shù), 根據(jù)標(biāo)準(zhǔn)正態(tài)分布對(duì)其進(jìn)行初始化. 本文使用AdamW算法作為優(yōu)化算法訓(xùn)練模型, 因?yàn)樗膚armup機(jī)制可加速收斂. 對(duì)于每個(gè)數(shù)據(jù)集都在其上運(yùn)行5次, 并且取5次結(jié)果的平均值作為最終結(jié)果, 每次運(yùn)行都會(huì)從訓(xùn)練集中隨機(jī)生成測(cè)試集. 表3 模型超參數(shù)Table 3 Hyperparameters of model 為驗(yàn)證RF2DTagging模型的性能, 本文選擇3個(gè)模型作為對(duì)比模型: NovelTagging[7],CasRel[8],TPlinker[11]. 其中NovelTagging模型使用BiLSTM作為文本編碼器, 而CasRel和TPLinker模型使用預(yù)訓(xùn)練模型BERT作為文本編碼器, 為公平比較, 將NovelTagging模型的文本編碼器替換為BERT. 在運(yùn)行對(duì)比模型時(shí), 超參數(shù)和官方源碼保持一致, 而數(shù)據(jù)的預(yù)處理參照本文模型的預(yù)處理, 即按8∶2劃分訓(xùn)練集和測(cè)試集, 并且每次運(yùn)行都從訓(xùn)練集中隨機(jī)生成測(cè)試集. 實(shí)驗(yàn)的總體結(jié)果列于表4. 由表4可見(jiàn), RF2DTagging模型除在數(shù)據(jù)集DuIE2.0的P評(píng)估標(biāo)準(zhǔn)上取得了次優(yōu)結(jié)果外, 其余結(jié)果全部最優(yōu). 對(duì)于F1, RF2DTagging模型在數(shù)據(jù)集CCKS2019-Task3,CMeIE和DuIE2.0上比TPlinker模型分別提升了0.6,2.2,0.4, 證明了本文模型對(duì)中文關(guān)系三元組抽取任務(wù)的有效性. 相比數(shù)據(jù)集CCKS2019-Task3和DuIE2.0, 數(shù)據(jù)集CMeIE上的實(shí)驗(yàn)結(jié)果性能較差, 其可能原因有兩個(gè): 1) 相比數(shù)據(jù)集CCKS2019-Task3和DuIE2.0, 數(shù)據(jù)集CMeIE的訓(xùn)練集較小, 數(shù)據(jù)集CCKS2019-Task3和DuIE2.0的訓(xùn)練集分別是CMeIE的11.9倍和12.1倍; 2) 相比數(shù)據(jù)集CCKS2019-Task3和DuIE2.0, 數(shù)據(jù)集CMeIE的專業(yè)性較強(qiáng), 其中包含很多專業(yè)術(shù)語(yǔ)和特殊符號(hào), 在這些特殊符號(hào)中, 有些是醫(yī)學(xué)專用符號(hào), 有些是創(chuàng)建數(shù)據(jù)時(shí)由于格式處理產(chǎn)生的符號(hào), 這給模型對(duì)文本的語(yǔ)義理解帶來(lái)了困難. 表4 總體實(shí)驗(yàn)結(jié)果Table 4 Overall experimental results 為驗(yàn)證RF2DTagging模型在解決實(shí)體重疊問(wèn)題時(shí)的效果, 本文在數(shù)據(jù)集CCKS2019-Task3和DuIE2.0上進(jìn)行了進(jìn)一步實(shí)驗(yàn), 即根據(jù)不同重疊情形將兩個(gè)數(shù)據(jù)集的測(cè)試集劃分為不同的子集: Normal,EPO,SEO和SOO, 在這4個(gè)子數(shù)據(jù)集上分別進(jìn)行實(shí)驗(yàn), 實(shí)驗(yàn)結(jié)果列于表5. 由表5可見(jiàn), RF2DTagging模型在EPO,SEO和SOO三種情況下都獲得了最優(yōu)結(jié)果, 證明了該模型能有效解決實(shí)體重疊問(wèn)題. RF2DTagging模型在Normal情況下的性能有所下降, 這可能是由于錯(cuò)誤傳播導(dǎo)致的, 即一旦關(guān)系過(guò)濾器提取的置信關(guān)系是錯(cuò)誤的, 則相對(duì)應(yīng)的實(shí)體對(duì)標(biāo)注也是錯(cuò)誤的. 綜上所述, 針對(duì)冗余關(guān)系和各種實(shí)體重疊的問(wèn)題, 本文提出了一個(gè)基于關(guān)系過(guò)濾器的二維標(biāo)注方案, 并將其命名為RF2DTagging. 分別設(shè)計(jì)了一個(gè)關(guān)系過(guò)濾器和一個(gè)二維實(shí)體對(duì)標(biāo)注器, 二者共同構(gòu)成了RF2DTagging模型. 在3個(gè)開(kāi)放的中文關(guān)系抽取數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn), 總體的實(shí)驗(yàn)結(jié)果證明本文模型在中文關(guān)系三元組抽取任務(wù)上比對(duì)比模型性能更好, 不同重疊模式上的實(shí)驗(yàn)結(jié)果也證明了本文模型確實(shí)能有效解決冗余關(guān)系問(wèn)題和實(shí)體重疊問(wèn)題.2.4 目標(biāo)函數(shù)
3 實(shí) 驗(yàn)
3.1 數(shù)據(jù)集和評(píng)估標(biāo)準(zhǔn)
3.2 實(shí)驗(yàn)設(shè)置
3.3 對(duì)比模型
3.4 總體實(shí)驗(yàn)結(jié)果
3.5 不同實(shí)體重疊情形的實(shí)驗(yàn)結(jié)果