楊澤森,田秀霞,趙紅成
(上海電力大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 200090)
從電子教材中抽取知識(shí)點(diǎn)及它們之間的關(guān)系(三元組數(shù)據(jù))是構(gòu)建學(xué)科領(lǐng)域知識(shí)圖譜的核心步驟之一[1,2],可為在線教學(xué)、自適應(yīng)學(xué)習(xí)等場(chǎng)景提供可靠支持與應(yīng)用[3]。然而,由于中文教材文本語(yǔ)義復(fù)雜,抽取難度較大,國(guó)內(nèi)面向?qū)W科知識(shí)的智能抽取系統(tǒng)研究成果較少,因此,如何利用信息抽取技術(shù)實(shí)現(xiàn)知識(shí)信息的自動(dòng)抽取成為互聯(lián)網(wǎng)時(shí)代教育產(chǎn)業(yè)研究中亟待解決的問(wèn)題[4,5]。
針對(duì)不同科目的知識(shí)文本,研究者提出了幾種基于機(jī)器學(xué)習(xí)的分類(lèi)方法。侯霞[6]等人嘗試?yán)枚嘈B?lián)合人工標(biāo)注的方法建立C++知識(shí)點(diǎn)的前驅(qū)和后繼關(guān)系,但需要消耗大量人力和時(shí)間;韓萌[7]等人提出了一種基于特征增強(qiáng)的三元組抽取方法來(lái)獲取學(xué)科中知識(shí)點(diǎn)之間的關(guān)系;吳呈等人[8]根據(jù)中文表達(dá)的特點(diǎn),在預(yù)處理步驟引入文本化簡(jiǎn)理念,解決因語(yǔ)句過(guò)長(zhǎng)導(dǎo)致的抽取效果降低的問(wèn)題。然而,上述模型無(wú)法捕獲重疊分布的知識(shí)間的深層邏輯。
經(jīng)調(diào)研分析發(fā)現(xiàn),C++學(xué)科具有專(zhuān)業(yè)性強(qiáng),知識(shí)分布嵌套重疊的特點(diǎn),如圖1所示的三種重疊類(lèi)型,現(xiàn)有模型無(wú)法處理SEO與EPO重疊類(lèi)型的語(yǔ)句,而且該學(xué)科無(wú)高置信度的數(shù)據(jù)集供模型訓(xùn)練。
圖1 三元組在文本中的重疊類(lèi)型
針對(duì)上述挑戰(zhàn),本文以C++學(xué)科為例,設(shè)計(jì)基于遠(yuǎn)程監(jiān)督方法的數(shù)據(jù)集構(gòu)建流程,將簡(jiǎn)單數(shù)據(jù)增強(qiáng)(EDA)算法對(duì)數(shù)量少的關(guān)系樣本進(jìn)行數(shù)據(jù)擴(kuò)展,得到較高置信度的數(shù)據(jù)集,并針對(duì)知識(shí)點(diǎn)重疊問(wèn)題提出了一種基于實(shí)體映射的三元組抽取系統(tǒng)EPM(Entity Pair Mapping)。該模型分為兩個(gè)子任務(wù),首先借助改進(jìn)的指針網(wǎng)絡(luò)標(biāo)注框架對(duì)句中知識(shí)點(diǎn)進(jìn)行標(biāo)記,再結(jié)合雙通道注意力機(jī)制為每對(duì)實(shí)體分配一個(gè)或多個(gè)關(guān)系類(lèi)型。
從百度百科、維基百科及書(shū)籍類(lèi)網(wǎng)站爬取21016句詞條文本以及38本C++學(xué)科經(jīng)典電子教材,經(jīng)過(guò)分句分詞以及遠(yuǎn)程監(jiān)督的對(duì)齊匹配初步獲得了大量樣本。電子教材文本偏重于對(duì)基本概念和專(zhuān)業(yè)詞匯的縱向描述,實(shí)體多為“指針”、“strcat()函數(shù)”和“double數(shù)據(jù)類(lèi)型”等名詞,知識(shí)層次明顯;通過(guò)百科詞條獲取到的文本偏重于對(duì)知識(shí)點(diǎn)的橫向擴(kuò)展,實(shí)體多為“環(huán)境變量”、“數(shù)據(jù)庫(kù)”和“Dev-C++”等邊沿知識(shí)。由于C++學(xué)科的實(shí)體關(guān)系標(biāo)注任務(wù)涉及到對(duì)整個(gè)C++知識(shí)體系的掌控,與數(shù)位C++學(xué)科教師進(jìn)行了深入交流,考慮知識(shí)的廣度與深度,設(shè)計(jì)了如表1與表2所示17種實(shí)體類(lèi)型及7種關(guān)系類(lèi)型。并完成對(duì)上述標(biāo)注樣本的人工標(biāo)記。
表1 實(shí)體類(lèi)型設(shè)計(jì)
表2 關(guān)系類(lèi)型設(shè)計(jì)
2.2.1 詞庫(kù)設(shè)計(jì)
整合百度輸入法與搜狗輸入法官網(wǎng)提供的C++領(lǐng)域?qū)I(yè)詞集,在Gowild科技開(kāi)源的8000萬(wàn)條百科三元組中進(jìn)行遍歷查詢,擴(kuò)充知識(shí)詞匯??紤]到C++體系中包含的大量函數(shù)名詞難以在百科知識(shí)中查詢得到,本文在C++函數(shù)官方介紹文檔設(shè)計(jì)了基于規(guī)則的爬取方法,獲得2546個(gè)C++函數(shù)實(shí)體。整合后得到包含5372個(gè)詞匯的C++專(zhuān)業(yè)詞庫(kù)。
2.2.2 實(shí)體歸一化
從不同來(lái)源獲取到的數(shù)據(jù)對(duì)同一實(shí)體的描述可能有不同的名稱,例如“C++”與“C++程序設(shè)計(jì)語(yǔ)言”含義幾乎一致,知識(shí)的統(tǒng)一表述對(duì)于模型理解文本含義具有重要意義。針對(duì)C++電子教材,首先借助Jieba工具完成語(yǔ)句分詞,再根據(jù)式1完成所有信息含量的計(jì)算
(1)
sumnodes表示層次結(jié)構(gòu)的總節(jié)點(diǎn)個(gè)數(shù),hypo(C)表示概念C的所有下位詞數(shù)量,deep為層次結(jié)構(gòu)最大深度,deep(C)為概念在所有結(jié)點(diǎn)層次的深度。
以兩個(gè)概念的信息含量為自變量,計(jì)算概念間的語(yǔ)義距離:
Dis(C1,C2)=IC(C1)+IC(C2)-2IC(LCA(C1,C2))
(2)
LCA(C1,C2)表示兩個(gè)概念的最近公共父節(jié)點(diǎn),計(jì)算距離越小,兩個(gè)詞匯所含信息越相近,以C++專(zhuān)業(yè)詞庫(kù)中的詞為基準(zhǔn),合并同義詞的詞向量,使數(shù)據(jù)樣本的表述規(guī)范化。最終完成了對(duì)423個(gè)同義詞的歸一化。
2.2.3 數(shù)據(jù)增強(qiáng)
數(shù)據(jù)集關(guān)系類(lèi)型發(fā)現(xiàn),class6與class7類(lèi)型所對(duì)應(yīng)的語(yǔ)料極少,模型對(duì)于此類(lèi)關(guān)系的學(xué)習(xí)能力差。為了擴(kuò)展樣本,首次將Wei等人[9]提出的數(shù)據(jù)增強(qiáng)(EDA)技術(shù)應(yīng)用于C++學(xué)科。EDA技術(shù)在以下四個(gè)步驟中完成數(shù)據(jù)增強(qiáng):
1)同義詞替換(SR):從句中隨機(jī)選擇n個(gè)不是停用詞的詞。用隨機(jī)選擇的同義詞之一替換這些單詞中的每一個(gè)。
2)隨機(jī)插入(RI):在句子中隨機(jī)找一個(gè)不是停用詞的隨機(jī)詞的同義詞。將該同義詞插入句子中的隨機(jī)位置。重復(fù)n次。
3)隨機(jī)交換(RS):隨機(jī)選擇句子中的兩個(gè)單詞并交換它們的位置。重復(fù)n次。
4)隨機(jī)刪除(RD):以概率p隨機(jī)刪除句子中的每個(gè)詞。
上述步驟均為基于詞匯的增刪換改,在具體實(shí)現(xiàn)過(guò)程中,通過(guò)引入C++專(zhuān)業(yè)詞庫(kù),避開(kāi)對(duì)相關(guān)實(shí)體進(jìn)行操作。
通過(guò)該方法,將 class6 擴(kuò)展了 3 倍,將 class7 擴(kuò)展了 2 倍。結(jié)果顯示,在大多數(shù)情況下,EDA增強(qiáng)的句子與原句表達(dá)語(yǔ)義不變。
此系統(tǒng)的目的是抽取給定句x中的所有知識(shí)三元組,其中可能存在大量重疊或嵌套三元組。圖2顯示了模型的整體架構(gòu),包括編碼層,映射層和關(guān)系分類(lèi)層。
圖2 EPM系統(tǒng)架構(gòu)圖
定義目標(biāo)函數(shù)
P((e1,r,e2)|x)=P((e1,e2)|x)P(r|e1,e2,x)
(3)
其中,N為句子長(zhǎng)度,X是句x包含的所有字集合。通過(guò)該轉(zhuǎn)換可將三元組的抽取拆分為兩個(gè)子任務(wù):第一個(gè)子任務(wù)是實(shí)體映射。本文認(rèn)為,句中每個(gè)字都有可能是尾實(shí)體e2的位置,為了充分利用位置信息,為句中每個(gè)字構(gòu)建一個(gè)標(biāo)記器fe2(x)=e1,分別識(shí)別給定句中與當(dāng)前e2匹配的e1。如果輸出為None,意味著當(dāng)前位置不是e2,或者無(wú)相應(yīng)e1與之匹配。若有輸出,則必以實(shí)體對(duì)的形式輸出。第二個(gè)子任務(wù)是關(guān)系分類(lèi),模型引入雙通道注意機(jī)制充分學(xué)習(xí)語(yǔ)義信息。通過(guò)關(guān)系分類(lèi)器f(e1,e2)=r為每對(duì)實(shí)體分配若干關(guān)系類(lèi)型。
2.3.1 BERT編碼層
BERT(Bidirectional Encoder Representation from Transformers)由N個(gè)相同的Transformer塊堆疊而成[10-12]。將Transformer塊表示為T(mén)rans(x),其中x代表輸入向量。在本模型中,BERT編碼層提取句子級(jí)特征信息xj。
h0=SWS+WP
(4)
hα=Trans(hα-1),α∈[1,A]
(5)
其中WS是詞匯嵌入權(quán)重矩陣,Wp是位置嵌入權(quán)重矩陣,S是輸入語(yǔ)句中詞索引的一元向量矩陣,p表示輸入序列中的位置索引,hα是隱藏狀態(tài)向量,即第α層輸入句子的上下文表示,A為T(mén)ransformer塊的數(shù)量。
2.3.2 映射層
映射層為基于Vinyals等人[13]提出的指針網(wǎng)絡(luò)(Pointer-Network)標(biāo)記方案。在該方法中,句子中實(shí)體的開(kāi)始和結(jié)束位置被標(biāo)記為1,其它位置被標(biāo)記為0。1之間的內(nèi)容是實(shí)體所占據(jù)的位置。與序列標(biāo)注方法相比,減少了指針網(wǎng)絡(luò)方法的計(jì)算量。此外,由于指針網(wǎng)絡(luò)使用先驗(yàn)信息,因此當(dāng)輸出嚴(yán)重依賴輸入時(shí),它可以提高模型的準(zhǔn)確性。每個(gè)指針標(biāo)記器的定義如下
(6)
(7)
為了使用盡可能少的標(biāo)簽來(lái)表達(dá)更多信息,構(gòu)造了一套映射坐標(biāo)系來(lái)解決上述問(wèn)題。具體而言,它將實(shí)體提取問(wèn)題視為確定二維坐標(biāo)點(diǎn)位置的問(wèn)題。如圖2中的映射層所示,水平軸表示句x的編碼,用于預(yù)測(cè)頭實(shí)體的開(kāi)始和結(jié)束位置;縱軸表示尾實(shí)體在x中的位置映射,為每個(gè)字分別構(gòu)建一個(gè)開(kāi)始位置標(biāo)記器和結(jié)束位置標(biāo)記器。例如,在1號(hào)實(shí)體對(duì)的預(yù)測(cè)過(guò)程中,將起始位置坐標(biāo)系中的(1,4)位置標(biāo)記為1,即將句子中的第1個(gè)字“C”標(biāo)記為頭實(shí)體e1的起始位置,第4個(gè)字“編”被標(biāo)記為尾實(shí)體e2的起始位置;同時(shí)在結(jié)束位置坐標(biāo)系執(zhí)行同樣的標(biāo)注過(guò)程。最終定位實(shí)體“C++”和“編譯語(yǔ)言”此方法彌補(bǔ)了以下缺點(diǎn):傳統(tǒng)的序列標(biāo)記方案只能分配唯一的標(biāo)簽。為了實(shí)現(xiàn)實(shí)體對(duì)的映射的任務(wù),修改等式(6)-(7)如下所示:
(8)
(9)
pθ((e1,r,e2)|x)=
(10)
2.3.3 關(guān)系分類(lèi)層
將映射層抽取到的實(shí)體對(duì)以加和平均的方式嵌入句子編碼中,形成關(guān)系分類(lèi)層的輸入。
(11)
考慮到C++學(xué)科知識(shí)點(diǎn)眾多,語(yǔ)義復(fù)雜,模型難以全面學(xué)習(xí)到句子表達(dá)的信息。為了擴(kuò)展模型對(duì)句中各成份信息的學(xué)習(xí)能力,引入了雙通道注意力機(jī)制應(yīng)用于關(guān)系分類(lèi)步驟。
雙通道自注意力機(jī)制[14]使用兩個(gè)通道來(lái)學(xué)習(xí)句子的不同組成部分。模型將在整個(gè)訓(xùn)練過(guò)程中充分學(xué)習(xí)編碼層句級(jí)別語(yǔ)義信息,快速完成對(duì)參數(shù)空間的搜索,最后,模型輸出二維權(quán)重矩陣。
(12)
(13)
(14)
2.3.4 損失函數(shù)
采用多個(gè)二分類(lèi)交叉熵?fù)p失函數(shù)訓(xùn)練模型,并將兩個(gè)子任務(wù)損失相加得到模型的聯(lián)合損失,通過(guò)最小化聯(lián)合損失以學(xué)習(xí)模型中的參數(shù)。
(15)
在本次實(shí)驗(yàn)中的數(shù)據(jù)采用上文構(gòu)建的C++知識(shí)數(shù)據(jù)集,以 8:2 的比例劃分為訓(xùn)練集和測(cè)試集。編碼層使用Keras-Bert模型進(jìn)行微調(diào)。主要參數(shù)配置如下:CPU:Intel Core i9-9900K,內(nèi)存:32G,操作系統(tǒng):windows 10。
本文選取文獻(xiàn)[15],文獻(xiàn)[16]與文獻(xiàn)[17]三個(gè)同樣基于指針網(wǎng)絡(luò)框架的方法作為本實(shí)驗(yàn)的基準(zhǔn)模型。為了規(guī)避BERT編碼器的引入對(duì)模型的貢獻(xiàn),對(duì)Bi-LSTM版本的模型也進(jìn)行了實(shí)驗(yàn)。
3.3.1 整體結(jié)果
表3展示了本文模型與參照模型的對(duì)比實(shí)驗(yàn)。EPM的性能在F1分?jǐn)?shù)和精度方面優(yōu)于其它模型,獲得了F1值高于基線模型1.2個(gè)百分點(diǎn)的提升。實(shí)體映射方法重視實(shí)體的位置信息,同時(shí)預(yù)測(cè)首尾實(shí)體使實(shí)體的依賴關(guān)系更加緊密,彌補(bǔ)了傳統(tǒng)的指針標(biāo)記方法過(guò)于稀疏的弊端,且避免了匹配實(shí)體造成的誤差。
表3 EPM在C++知識(shí)數(shù)據(jù)集上的對(duì)比實(shí)驗(yàn)
為了進(jìn)一步驗(yàn)證系統(tǒng)各部分的影響,通過(guò)改變訓(xùn)練的獨(dú)立性和注意力機(jī)制通道數(shù)量,形成不同版本的模型。每個(gè)版本模型實(shí)驗(yàn)結(jié)果如表4所示。
表4 EPM在C++知識(shí)數(shù)據(jù)集上的消融實(shí)驗(yàn)
聯(lián)合訓(xùn)練的方法對(duì)該模型起到了顯著的增益作用,比獨(dú)立訓(xùn)練版本提高了3.92個(gè)百分點(diǎn)。表明實(shí)體識(shí)別和關(guān)系分類(lèi)能夠通過(guò)共享編碼層及損失聯(lián)合優(yōu)化的方法達(dá)到共同學(xué)習(xí)、相互促進(jìn)的目的。雙通道注意機(jī)制在所有通道數(shù)的注意力機(jī)制中效果最好,驗(yàn)證了適量通道數(shù)有助于模型學(xué)習(xí)到更豐富的知識(shí)信息,但過(guò)多通道數(shù)易使模型學(xué)習(xí)到冗余信息,對(duì)測(cè)試造成干擾。
3.3.2 實(shí)體關(guān)系抽取模型訓(xùn)練結(jié)果
在關(guān)系類(lèi)型的預(yù)測(cè)中,不同關(guān)系類(lèi)型展現(xiàn)出了不同分類(lèi)效果,如表5所示,在所有7種關(guān)系類(lèi)別中,預(yù)測(cè)效果最好的關(guān)系類(lèi)別為先驗(yàn)知識(shí)(class 2)與后置知識(shí)(class 3),其F1值分別為0.873與0.874。其共同特點(diǎn)為上下位邏輯性強(qiáng),標(biāo)注樣本條目多,驗(yàn)證了本文模型更善于處理上下位邏輯的關(guān)系類(lèi)別。但是,同樣屬于邏輯關(guān)系且訓(xùn)練樣本數(shù)量充足的包含(class 1)類(lèi)別與并列知識(shí)(class 4)類(lèi)別抽取性能極為有限,F1值僅為0.587與0.32。通過(guò)對(duì)錯(cuò)誤樣本進(jìn)行分析發(fā)現(xiàn),模型無(wú)法準(zhǔn)確區(qū)分句中“包含”關(guān)系與“并列知識(shí)”關(guān)系,例如表2中class 1與class 4展示的相關(guān)例句,其句型均為“A和B是C”句式,且實(shí)體類(lèi)型均屬于基礎(chǔ)概念,前者突出A與B為C的子集,后者突出AB之間的并列關(guān)系,兩種關(guān)系類(lèi)型相似的表達(dá)方法使得模型無(wú)法學(xué)習(xí)到足夠多的特征信息進(jìn)行有效區(qū)分。
表5 實(shí)體關(guān)系抽取模型訓(xùn)練結(jié)果
此外,對(duì)于別稱(class 5)類(lèi)別,其句式特點(diǎn)鮮明,如表2中class 5例句所示,常伴隨括號(hào)出現(xiàn),因此分類(lèi)性能較高;實(shí)例(class 6)與操作(class 7)為經(jīng)EDA數(shù)據(jù)擴(kuò)充后的結(jié)果,其F1分?jǐn)?shù)分別提升了3.77%與2.58%,驗(yàn)證了此數(shù)據(jù)增強(qiáng)方法對(duì)于促進(jìn)模型的充分學(xué)習(xí)是十分有效的。
3.3.3 知識(shí)重疊對(duì)模型性能的影響
如圖3所示,在所有三種類(lèi)型的重疊三元組中,本文模型最擅于處理SEO類(lèi)別,F1分?jǐn)?shù)實(shí)現(xiàn)了5.17個(gè)百分點(diǎn)的提升。但處理EPO類(lèi)的優(yōu)勢(shì)不明顯,原因是對(duì)于兩個(gè)實(shí)體都發(fā)生重疊時(shí)標(biāo)注指針也會(huì)發(fā)生重疊,模型僅依靠設(shè)定閾值來(lái)為每對(duì)實(shí)體分配若干關(guān)系不足以使模型學(xué)習(xí)到句子的深層含義。
圖3 實(shí)體重疊抽取對(duì)比試驗(yàn)
圖4 基于InteractiveGraph的數(shù)據(jù)可視化
3.3.4 基于InteractiveGraph的數(shù)據(jù)可視化
利用EPM系統(tǒng)對(duì)菜鳥(niǎo)教程等教程網(wǎng)站文本展開(kāi)知識(shí)抽取,經(jīng)過(guò)人工修正后,同本文構(gòu)建的數(shù)據(jù)集合并構(gòu)成C++知識(shí)網(wǎng)絡(luò)源數(shù)據(jù)。借助InteractiveGraph工具實(shí)現(xiàn)知識(shí)網(wǎng)絡(luò)的可視化。
本文以C++學(xué)科為例詳述了一種知識(shí)數(shù)據(jù)集的構(gòu)建方法,引入EDA理念進(jìn)行數(shù)據(jù)增強(qiáng),并針對(duì)數(shù)據(jù)特點(diǎn)提出一種有效解決實(shí)體重疊問(wèn)題的三元組提取系統(tǒng)EPM,該系統(tǒng)使用實(shí)體映射方法來(lái)提取實(shí)體對(duì),在關(guān)系分類(lèi)組件中嵌入雙通道的注意力機(jī)制,仿真結(jié)果驗(yàn)證了該模型的有效性,對(duì)于讀者設(shè)計(jì)其它學(xué)科知識(shí)圖譜有一定參考意義。下一步將開(kāi)展自適應(yīng)學(xué)習(xí)、智能推薦等工作的研究。