袁 滿(mǎn), 張維罡, 李明軒
(東北石油大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院, 黑龍江 大慶 163318)
目前, 同一領(lǐng)域知識(shí)分散存儲(chǔ)在不同地點(diǎn), 且以不同的數(shù)據(jù)類(lèi)型進(jìn)行存儲(chǔ), 導(dǎo)致該領(lǐng)域用戶(hù)獲取領(lǐng)域知識(shí)困難, 且很難實(shí)現(xiàn)共享。因此需要構(gòu)建一個(gè)知識(shí)圖譜將其結(jié)構(gòu)化。由于領(lǐng)域內(nèi)用戶(hù)的數(shù)量十分龐大, 而遇到的問(wèn)題大部分都是重復(fù)的, 在用戶(hù)對(duì)員工進(jìn)行培養(yǎng)時(shí), 大量重復(fù)的問(wèn)題會(huì)耽誤用戶(hù)培養(yǎng)員工的時(shí)間, 并且效率低下。因此需要構(gòu)建問(wèn)答系統(tǒng), 將員工提出的問(wèn)題進(jìn)行整合、 分析, 利用機(jī)器學(xué)習(xí), 深度學(xué)習(xí)等算法對(duì)模型進(jìn)行訓(xùn)練, 使其自動(dòng)解答員工的疑問(wèn), 從而減少技術(shù)指導(dǎo)的工作量。
Bordes等[1]首次提出使用基于向量嵌入的方法編碼問(wèn)句和答案, 根據(jù)方法編碼問(wèn)句和答案之間的相似度進(jìn)行算法排序, 之后人們又提出了子圖向量[2]、 記憶網(wǎng)絡(luò)[3]等方法。最近又有很多先進(jìn)的神經(jīng)網(wǎng)絡(luò)模型被提出用于編碼句子[4-6], 包括卷積網(wǎng)絡(luò)和循環(huán)網(wǎng)絡(luò)等。這些方法只需要簡(jiǎn)單地查詢(xún)知識(shí)庫(kù), 并且隱式地完成了候選答案的搜索和排序功能。
筆者采用認(rèn)知圖譜模型構(gòu)建問(wèn)答系統(tǒng)解決員工疑問(wèn), 提高培養(yǎng)員工效率。認(rèn)知圖譜問(wèn)答模型不同于基于信息檢索的問(wèn)答模型, Tang等[7]把認(rèn)知圖譜定義為一種推理與計(jì)算的方法。該方法的目的是對(duì)知識(shí)圖譜中的知識(shí)進(jìn)行推理和表示, 并且把認(rèn)知圖譜分為系統(tǒng)1和系統(tǒng)2, 系統(tǒng)1用于處理簡(jiǎn)單問(wèn)題, 系統(tǒng)2用于處理復(fù)雜問(wèn)題。Ding等[8]對(duì)認(rèn)知圖譜的定義是動(dòng)態(tài)的, 是根據(jù)最原始數(shù)據(jù)構(gòu)建知識(shí)圖譜的。
筆者利用認(rèn)知圖譜, 當(dāng)有未知的實(shí)體出現(xiàn)時(shí), 該問(wèn)答系統(tǒng)在數(shù)據(jù)中找出相關(guān)的三元組進(jìn)行動(dòng)態(tài)添加。當(dāng)新問(wèn)題輸入時(shí), 根據(jù)新問(wèn)題的實(shí)體, 選取最有可能為答案的節(jié)點(diǎn)。若實(shí)體不存在, 則添加為新的節(jié)點(diǎn)并尋找答案。從而減少當(dāng)有新的報(bào)告等添加后, 重新構(gòu)建圖譜的人工成本。最終通過(guò)實(shí)驗(yàn), 效果優(yōu)于其他算法。
對(duì)知識(shí)圖譜的擴(kuò)充是認(rèn)知圖譜的本質(zhì), 在知識(shí)圖譜的基礎(chǔ)上建立動(dòng)態(tài)的知識(shí)補(bǔ)全機(jī)制以及對(duì)知識(shí)圖譜中需要人類(lèi)思維的部分進(jìn)行推理。其思想源于雙過(guò)程理論[9], 即人類(lèi)的認(rèn)知分為系統(tǒng)1與系統(tǒng)2, 系統(tǒng)1替人類(lèi)完成簡(jiǎn)單的, 直覺(jué)的思考, 系統(tǒng)2則替人類(lèi)完成復(fù)雜的, 基于經(jīng)驗(yàn)的邏輯推理。認(rèn)知圖譜問(wèn)答模型通過(guò)NLP(Natural Language Processing)算法對(duì)用戶(hù)的問(wèn)題進(jìn)行理解, 通過(guò)多步構(gòu)建擴(kuò)展知識(shí)庫(kù), 并且可以運(yùn)用圖神經(jīng)網(wǎng)絡(luò)等模型進(jìn)行關(guān)系推理。
圖1 模型架構(gòu)Fig.1 Model architecture
認(rèn)知圖譜包含了兩個(gè)子系統(tǒng), 兩個(gè)子系統(tǒng)又包括了3個(gè)模塊: 知識(shí)圖譜構(gòu)建、 知識(shí)補(bǔ)全和答案搜索。其中系統(tǒng)1包括知識(shí)圖譜構(gòu)建, 知識(shí)補(bǔ)全模塊。系統(tǒng)2則是答案搜索模塊。其中, 知識(shí)圖譜構(gòu)建模塊需要本體構(gòu)建, 知識(shí)補(bǔ)全模塊需要實(shí)體識(shí)別, 答案搜索模塊涉及了統(tǒng)一單跳問(wèn)題搜索、 鏈?zhǔn)絾?wèn)題搜索和多實(shí)體問(wèn)題搜索3個(gè)部分。圖1給出筆者模型各部分內(nèi)容之間的架構(gòu)圖。
知識(shí)圖譜構(gòu)建模塊首先構(gòu)建知識(shí)圖譜本體, 其目的是將碎片化知識(shí)組織起來(lái)方便問(wèn)答系統(tǒng)查詢(xún)。筆者以石油領(lǐng)域井下作業(yè)項(xiàng)目為背景, 利用知識(shí)圖譜與事件圖譜融合的本體對(duì)油田數(shù)據(jù)中的實(shí)體和關(guān)系進(jìn)行抽取及本體融合, 通過(guò)新加入的數(shù)據(jù)不斷完善知識(shí)圖譜, 最后存儲(chǔ)于neo4j數(shù)據(jù)庫(kù)中, 有較高的準(zhǔn)確性。
本體中包含了實(shí)體、 概念和屬性。其中實(shí)體表示客觀世界存在的具體實(shí)例, 概念是指客觀世界中泛指的概念, 包括定義實(shí)體和概念的類(lèi)別, 以及實(shí)體和概念具體的屬性與屬性值。為描述概念的屬性, 實(shí)體以及他們之間的關(guān)系, 需要定義一套知識(shí)圖譜, 用于引入外部知識(shí), 即當(dāng)用戶(hù)輸入的信息在知識(shí)圖譜中不存在時(shí), 根據(jù)該知識(shí)圖譜對(duì)其進(jìn)行對(duì)齊。
為了使在不同語(yǔ)義下的知識(shí)組織體系更加完善, 用統(tǒng)一的靈活的知識(shí)組織方式對(duì)本體進(jìn)行構(gòu)建, 通過(guò)引用本體標(biāo)準(zhǔn)詞匯表對(duì)本體進(jìn)行規(guī)范, 構(gòu)建的本體如圖2所示。
圖2 本體構(gòu)建Fig.2 Ontology construction
對(duì)知識(shí)補(bǔ)全模塊, 其目的有兩個(gè): 1) 根據(jù)新添加的報(bào)告對(duì)知識(shí)圖譜進(jìn)行維護(hù), 即更新知識(shí)圖譜; 2) 當(dāng)用戶(hù)搜索的句子經(jīng)過(guò)分詞后, 將其與知識(shí)圖譜中的節(jié)點(diǎn)對(duì)應(yīng), 從而獲得相應(yīng)的知識(shí)。由于知識(shí)圖譜不一定能覆蓋全部的節(jié)點(diǎn), 會(huì)導(dǎo)致在特殊的情況下只有一些三元組能鏈接到知識(shí)圖譜中的節(jié)點(diǎn), 從而使屬性關(guān)系并不完整。并且即使可以鏈接到三元組, 相同的三元組也會(huì)具有不同的類(lèi)型, 因此需要?jiǎng)討B(tài)的知識(shí)補(bǔ)全。魯強(qiáng)等[10]提出一種提升專(zhuān)業(yè)領(lǐng)域的語(yǔ)義匹配準(zhǔn)確率的模型。Zhang等[11]提出了一個(gè)加權(quán)關(guān)系對(duì)抗網(wǎng)絡(luò)的通用框架, 從而在資源豐富的關(guān)系中學(xué)到特征, 以關(guān)聯(lián)低資源關(guān)系。筆者運(yùn)用詞義消歧, 指體識(shí)別等方法將用戶(hù)輸入的文本與認(rèn)知圖譜相關(guān)聯(lián), 從而對(duì)認(rèn)知圖譜進(jìn)行動(dòng)態(tài)補(bǔ)全。
首先, 針對(duì)高細(xì)粒度知識(shí)圖譜很難進(jìn)行實(shí)體識(shí)別與實(shí)體鏈接的問(wèn)題, 筆者采用創(chuàng)建初級(jí)知識(shí)圖譜與高細(xì)粒度本體融合的方法解決該問(wèn)題。知識(shí)圖譜本體結(jié)構(gòu)包含了比較完整的分類(lèi)法并融合了大量的外部實(shí)體, 事件實(shí)體、 概念和屬性關(guān)系, 其目的是結(jié)構(gòu)化得到大規(guī)模的用戶(hù)輸入的問(wèn)題中包含的實(shí)體或概念, 將這些實(shí)體或概念所包含的三元組鏈接到知識(shí)圖譜本體中成為節(jié)點(diǎn), 稱(chēng)作實(shí)體連接[12]。但這需要解決3個(gè)難題: 如何進(jìn)行實(shí)體識(shí)別; 如何進(jìn)行分詞; 如何進(jìn)行三元組抽取。
1.2.1 實(shí)體識(shí)別
在實(shí)體識(shí)別中筆者通過(guò)CRF(Conditional Random Field)[13]對(duì)標(biāo)簽進(jìn)行約束, 運(yùn)用雙向長(zhǎng)短期記憶網(wǎng)絡(luò)即BiLSTM算法與BERT(Bidirectional Encoder Representations from Transformers)[14]語(yǔ)言框架結(jié)合預(yù)測(cè)每個(gè)字符的標(biāo)簽, 在得到字符的表示過(guò)程中, 首先通過(guò)BERT語(yǔ)言框架, 獲得每個(gè)字符的embedding, 然后使用BiLSTM網(wǎng)絡(luò)獲得embedding兩側(cè)的語(yǔ)義關(guān)系結(jié)構(gòu), 最后運(yùn)用CRF模型確保結(jié)果是合法標(biāo)簽。圖3為模型結(jié)構(gòu)圖。
圖3 BERT模型結(jié)構(gòu)Fig.3 Structure of BERT model
Embedding是一個(gè)將離散變量轉(zhuǎn)為連續(xù)向量表示的一個(gè)方式。而Transformers模型是一個(gè)多層雙向的語(yǔ)言框架。模型的矩陣向量由分段矩陣, 詞矩陣和位置矩陣組合而成, 即將這3種矩陣拼接成一個(gè)大的輸入矩陣。并且Transformers模型框架會(huì)將兩個(gè)特殊的符號(hào)[CLS]和[SEP]分別放在輸入的句子的開(kāi)頭與結(jié)尾, 這些符號(hào)的作用是分隔與區(qū)別輸入的句子。經(jīng)過(guò)BERT框架后, 輸出矩陣為擁有上下文信息的語(yǔ)義, 即融合了兩側(cè)信息的embedding。而多層Transformers模型經(jīng)過(guò)融合就形成了BERT模型。
筆者BERT模型框架的實(shí)體識(shí)別分為兩個(gè)模塊: 第1個(gè)模塊是通過(guò)對(duì)詞匯進(jìn)行funturn操作對(duì)原有BERT預(yù)訓(xùn)練好的詞向量進(jìn)行微調(diào), 從而使其可以對(duì)新增報(bào)告進(jìn)行本體標(biāo)簽的識(shí)別; 第2個(gè)模塊則是對(duì)用戶(hù)輸入的問(wèn)句進(jìn)行指體識(shí)別, 即運(yùn)用標(biāo)簽標(biāo)明句子中可能為實(shí)體的詞匯, 為其與知識(shí)庫(kù)中知識(shí)進(jìn)行實(shí)體鏈接做準(zhǔn)備。
1.2.2 分詞
用戶(hù)輸入信息運(yùn)用HANLP(Han Language Processing)進(jìn)行分詞, 在分詞后對(duì)每個(gè)分出的詞匯與圖譜中節(jié)點(diǎn)的詞匯進(jìn)行匹配, 如果相同則將該實(shí)體與節(jié)點(diǎn)劃等號(hào), 并將實(shí)體識(shí)別結(jié)果放入相應(yīng)模式層。
在三元組抽取的過(guò)程中, 同樣需要對(duì)句子進(jìn)行分詞, 從而訓(xùn)練分詞后token的詞向量。抽取三元組后, 將三元組的元組鏈接到本體的標(biāo)簽上, 從而獲得相應(yīng)的知識(shí)體系, 但在鏈接的過(guò)程中有可能出現(xiàn)兩種問(wèn)題: 1) 三元組中節(jié)點(diǎn)不在本體的標(biāo)簽之中的情況; 2) 三元組中存在一詞多義的問(wèn)題, 例如封隔器既可能是指封隔器工具, 也可能指封隔器本身的概念。針對(duì)上述問(wèn)題, 筆者采取基于詞典的最大正向匹配及前綴匹配算法, 其目的是為了準(zhǔn)確地將輸入語(yǔ)句鏈接到本體詞匯庫(kù)的詞匯以及事理圖譜上。具體為: 將連續(xù)字符進(jìn)行從左到右的遍歷, 將其與詞表進(jìn)行匹配, 如果匹配上, 就進(jìn)行詞的切分。并且, 掃描時(shí), 匹配出的詞必須保證下一個(gè)遍歷的字符并不是詞表中的詞或詞的前綴才能結(jié)束。
1.2.3 三元組抽取
識(shí)別出本體的模式層后, 通過(guò)對(duì)模式層的關(guān)系的收集, 對(duì)語(yǔ)料進(jìn)行三元組抽取[15], 將涉及到該節(jié)點(diǎn)和模式層關(guān)系的三元組加入知識(shí)圖譜。最后更新詞匯表。
在抽取三元組的過(guò)程中, 筆者首先運(yùn)用HANLP進(jìn)行分詞, 將句子分解成字, 然后通過(guò)embedding層得到字的矩陣向量。接著對(duì)文本分詞, 通過(guò)一個(gè)預(yù)訓(xùn)練好的BERT模型對(duì)詞向量進(jìn)行提取。整個(gè)過(guò)程如圖4所示。
圖4 詞向量提取樣例Fig.4 Examples of word vector extraction
在該模塊中, 將問(wèn)題分為簡(jiǎn)單問(wèn)題、 事件問(wèn)題和復(fù)雜問(wèn)題。
針對(duì)簡(jiǎn)單問(wèn)題, 筆者運(yùn)用模板匹配的方法將簡(jiǎn)單問(wèn)題分為3類(lèi), 即主、 謂、 賓分類(lèi)。主、 謂、 賓分類(lèi)指答案在三元組中, 是頭節(jié)點(diǎn), 中間節(jié)點(diǎn), 尾節(jié)點(diǎn)中的其中一個(gè), 即答案存在于主語(yǔ), 謂語(yǔ), 賓語(yǔ)之間。將單跳問(wèn)題的數(shù)據(jù)分別劃分成主、 謂、 賓3類(lèi), 標(biāo)簽分別設(shè)為 0、1、2, 然后訓(xùn)練一個(gè)三分類(lèi)模型。
針對(duì)事件問(wèn)題, 筆者運(yùn)用模版匹配的方式, 將下屬事件類(lèi)的事件流程全部作為答案輸出。
針對(duì)需要復(fù)雜推理的問(wèn)題, 筆者運(yùn)用Node2vec(Node to vector)[16]的迭代算法從確定實(shí)體開(kāi)始遍歷, 重新構(gòu)建子圖。運(yùn)用GCN(Graph Convolutional Network)[17]算法形成子圖的embedding, 將其作為特征輸入到匹配的模板中, 輸出最大可能為答案的節(jié)點(diǎn)。其中, 不同系統(tǒng)運(yùn)用不同遍歷方式。生成子圖后, 通過(guò)neo4j對(duì)子圖形成關(guān)系與邊兩個(gè)文本, 然后通過(guò)使用GCN算法對(duì)子圖中隱含的關(guān)系進(jìn)行推理, 圖卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)不同, 傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)是將周?chē)従庸?jié)點(diǎn)的信息匯集到自身節(jié)點(diǎn), 在l+1層, 信息匯集公式為
(1)
基于借助圖譜的理論實(shí)現(xiàn)拓?fù)鋱D上的卷積操作, 用于提取空間特征。利用卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)共享技術(shù), 可以在存有大量實(shí)體節(jié)點(diǎn)的知識(shí)圖譜推理中減少特征學(xué)習(xí)所需要的參數(shù), 使參數(shù)在稀有關(guān)系和頻繁關(guān)系之間共享, 有效緩解稀有關(guān)系的過(guò)度擬合問(wèn)題。
而GCN是將所有鄰居點(diǎn)的消息去做集成, 如下所示
Hl+1=ρ(D′-1/2A′D′-1/2Hlθl)
(2)
其中D為頂點(diǎn)的度矩陣(對(duì)角矩陣),D′-1/2與D′-1/2相乘相當(dāng)于乘以D′-1, 而D′-1為度矩陣, 即對(duì)角矩陣, 所以相當(dāng)于是normalization,Hl相當(dāng)于輸入的矩陣, 即當(dāng)前層的矩陣。
在此基礎(chǔ)上, 筆者設(shè)置3層GCN網(wǎng)絡(luò)對(duì)鄰居節(jié)點(diǎn)語(yǔ)義信息進(jìn)行收集, 即一個(gè)節(jié)點(diǎn)包含3跳節(jié)點(diǎn)和邊的信息, 公式為
(3)
將式(2)代入式(3)中, 得到A′, 然后經(jīng)過(guò)第1層fRelu激活函數(shù), 得到第1層的embedding, 將得到的結(jié)果作為輸入, 再經(jīng)過(guò)一層fRelu激活函數(shù), 得到子圖節(jié)點(diǎn)的embedding。
最后將子圖的embedding作為特征輸入到模板中, 找出最有可能為答案的節(jié)點(diǎn)。
筆者利用某油田數(shù)據(jù), 抽取大修報(bào)告中的井下作業(yè)問(wèn)題, “用途”是每個(gè)工具都擁有的相關(guān)屬性和其對(duì)應(yīng)的屬性值, 利用數(shù)據(jù)分析的方法, 抽取數(shù)據(jù)中的問(wèn)題主體及其相關(guān)屬性和屬性值。利用2.2節(jié)中的知識(shí)圖譜構(gòu)建方法, 構(gòu)建知識(shí)圖譜, 并運(yùn)用人工設(shè)置規(guī)則的方法將問(wèn)題與正確關(guān)系的三元組一一對(duì)應(yīng), 組合成的數(shù)據(jù)集如表1所示。
表1 模型訓(xùn)練數(shù)據(jù)樣式
利用機(jī)器學(xué)習(xí)中較為傳統(tǒng)的二八定律法則劃分?jǐn)?shù)據(jù)集, 將訓(xùn)練集和測(cè)試集按照4 ∶1的比率劃分, 訓(xùn)練集中有1 000個(gè)問(wèn)題和12 000個(gè)三元組, 測(cè)試集有300個(gè)問(wèn)題和4 000個(gè)三元組, 若干個(gè)候選三元組, 其中候選三元組包括1個(gè)正確答案, 其余為錯(cuò)誤答案, 用于負(fù)采樣。文中共有400種工具, 600種事件, 每個(gè)工具或事件占有大約10~15個(gè)三元組。
認(rèn)知圖譜問(wèn)答模型中, 定義訓(xùn)練集批處理量train_batchsize為64, 測(cè)試集批處理test_batchsize為32, GCN卷積層為3, 實(shí)體維度為300。全連接層采用dropout為0.3, 激活函數(shù)選用relu, learning_rate為0.8, 衰減因子為0.9, 優(yōu)化器選用Adam。
2.2.1 實(shí)體識(shí)別
對(duì)實(shí)體識(shí)別模塊, 筆者分別對(duì)BiLSTM+CRF與BERT+BiLSTM+CRF共同進(jìn)行實(shí)驗(yàn), 發(fā)現(xiàn)進(jìn)行大量標(biāo)注后的BERT算法準(zhǔn)確率達(dá)到了0.87, 而傳統(tǒng)的BiLSTM+CRF與RNN(Recurrent Neural Networks)和LSTM(Long-Short Term Memory)在石油領(lǐng)域只能達(dá)到0.8左右, 所以在問(wèn)答模塊, 該系統(tǒng)選擇運(yùn)用傳統(tǒng)BERT算法進(jìn)行指體識(shí)別, 如圖5所示。
圖5 模型訓(xùn)練數(shù)據(jù)Fig.5 Model training data
2.2.2 問(wèn)答結(jié)果
筆者的問(wèn)答系統(tǒng)考慮到子模型的性能, 并沒(méi)有將中文問(wèn)題單獨(dú)劃分成單跳和多跳進(jìn)行處理, 而是對(duì)所有問(wèn)題統(tǒng)一做了一遍單跳搜索, 以提高系統(tǒng)的性能。由于單跳問(wèn)題也有可能含有多個(gè)實(shí)體的情況, 所以該系統(tǒng)以是否鏈?zhǔn)脚袛鄦?wèn)句是鏈?zhǔn)絾?wèn)題還是多實(shí)體問(wèn)題。另外, 發(fā)現(xiàn)部分問(wèn)句被分類(lèi)為鏈?zhǔn)絾?wèn)題, 但不是多跳問(wèn)題, 所以對(duì)鏈?zhǔn)絾?wèn)題加了一層約束判斷, 以減少因?yàn)槟P头诸?lèi)錯(cuò)誤帶來(lái)的影響。 各個(gè)模塊性能結(jié)果如表2所示。
表2 模型訓(xùn)練準(zhǔn)確率
筆者基于關(guān)聯(lián)理論, 人的認(rèn)知心理模型, 雙過(guò)程理論提出認(rèn)知圖譜推理模型, 運(yùn)用BERT與CRF模型進(jìn)行實(shí)體識(shí)別, 并用Nod2vec的遍歷算法進(jìn)行節(jié)點(diǎn)的遍歷, 最后運(yùn)用GCN進(jìn)行推理, 并且計(jì)算問(wèn)題特征和答案之間的相似度, 進(jìn)而使該框架可以完成各項(xiàng)任務(wù), 在實(shí)驗(yàn)中通過(guò)與其他模型對(duì)比, 效果優(yōu)于其他深度學(xué)習(xí)模型。