何儒漢 萬(wàn)方名 胡新榮 劉軍平
1(武漢紡織大學(xué)數(shù)學(xué)與計(jì)算機(jī)學(xué)院 湖北 武漢 430200)
2(武漢紡織大學(xué)湖北省服裝信息化工程技術(shù)研究中心 湖北 武漢 430200)
近年來(lái),隨著人工智能領(lǐng)域的高速發(fā)展,知識(shí)圖譜成為了計(jì)算機(jī)科學(xué)領(lǐng)域的研究熱點(diǎn)。知識(shí)圖譜通過(guò)資源描述框架,高效地組織非結(jié)構(gòu)化語(yǔ)料中的結(jié)構(gòu)化信息,其特點(diǎn)是數(shù)據(jù)均以三元組的形式保存。比較成熟的英文知識(shí)圖譜有Freebase[1]、DBpedia[2]和YAGO[3]等,中文知識(shí)圖譜有Zhishi.me[4]、CN-DBpedia[5]等。知識(shí)譜圖被廣泛應(yīng)用于工業(yè)界,例如,知識(shí)庫(kù)問(wèn)答(KBQA)是知識(shí)圖譜結(jié)合自然語(yǔ)言處理技術(shù),實(shí)現(xiàn)自動(dòng)問(wèn)答的任務(wù),該任務(wù)通過(guò)自然語(yǔ)言處理技術(shù)獲取問(wèn)句的語(yǔ)義信息,結(jié)合實(shí)體檢測(cè)、識(shí)別和關(guān)系抽取,最后在知識(shí)庫(kù)中檢索,得到最終答案。
目前知識(shí)庫(kù)問(wèn)答研究方法主要分為兩條路線。第一條路線旨在圍繞通過(guò)語(yǔ)義解析尋找一種中間表達(dá),再將其轉(zhuǎn)化為查詢語(yǔ)句如SPARQL在知識(shí)庫(kù)搜索實(shí)體得到最終答案[6-7];第二種思路去除了這種中間表達(dá),致力于使用深度學(xué)習(xí)的方法直接進(jìn)行問(wèn)句與三元組的匹配,這種方法是近幾年比較常見(jiàn)的做法[8-11]。而這類KBQA方法大多基于APA(Alignment-Prediction-Answering)框架。該框架把問(wèn)答任務(wù)分解為實(shí)體識(shí)別、實(shí)體鏈指、關(guān)系檢測(cè)等子任務(wù),每個(gè)子任務(wù)負(fù)責(zé)獨(dú)立的任務(wù),但在現(xiàn)有的這兩種思路中,都沒(méi)有考慮到未登錄詞(Out-Of-Vocabulary,OOV)。
現(xiàn)有的智能問(wèn)答工作大多基于一個(gè)叫作Glove的詞向量庫(kù)[12],這是一個(gè)由40 000個(gè)長(zhǎng)度為300的向量組成的詞表,每個(gè)單詞對(duì)應(yīng)一個(gè)向量,在進(jìn)行實(shí)體鏈接等流程之前需要將問(wèn)題和關(guān)系中的單詞轉(zhuǎn)化為對(duì)應(yīng)的向量,但因詞表大小限制等原因,在詞庫(kù)中匹配不到的詞就是未登錄詞。根據(jù)檢測(cè),現(xiàn)在常見(jiàn)的KBQA系統(tǒng)中未登錄詞的比例高達(dá)38%以上[10,13]。
目前針對(duì)未登錄詞的研究主要有基于規(guī)則的方法和基于統(tǒng)計(jì)的方法?;谝?guī)則的方法綜合未登錄詞的詞性、前綴詞素以及后綴詞素等信息來(lái)為未登錄詞分配最可能的標(biāo)簽[14],這種方法的準(zhǔn)確率一般較低;基于統(tǒng)計(jì)的方法是統(tǒng)計(jì)大量語(yǔ)料中的未登錄詞并將其表示放入一個(gè)詞表中,然后在其他語(yǔ)料中遇到該詞就使用這些未登錄詞在詞表中的表示[15],這種方法的缺點(diǎn)是時(shí)間成本高,并且還是解決不了層出不窮的新詞;在其他領(lǐng)域如機(jī)器翻譯還有使用同義詞來(lái)代替未登錄詞等方法,但這些方法都沒(méi)有解決建表成本高等問(wèn)題。
未登錄詞很難完全避免,原因有兩點(diǎn):① 命名實(shí)體包含重要信息,但很多命名實(shí)體也是低頻詞,通常不能包含在詞匯表中;② 網(wǎng)絡(luò)新詞層出不窮,舊詞表無(wú)法及時(shí)更新,特別是在當(dāng)前模型越來(lái)越大的情況下,添加新單詞后對(duì)模型再次訓(xùn)練的成本非常高昂。為了解決上述問(wèn)題,本文提出了一種基于動(dòng)態(tài)規(guī)劃和流形排序的問(wèn)答模型DPQA(Dynamic Programming-based Question Answering),首先在維基百科上抓取了大量英文文本并對(duì)其進(jìn)行分析得到126 136個(gè)單詞,通過(guò)詞語(yǔ)出現(xiàn)的頻次進(jìn)行排序,然后根據(jù)奇夫定律對(duì)其生成一個(gè)代價(jià)詞典,根據(jù)代價(jià)詞典使用動(dòng)態(tài)規(guī)劃的方法找到最優(yōu)子串序列,最后使用一種簡(jiǎn)易但有效的基于流形排序的重排序算法[16]定位最終子串,使用子串表示代替關(guān)系和問(wèn)句中的隨機(jī)向量。通過(guò)實(shí)驗(yàn)驗(yàn)證了DPQA在多個(gè)問(wèn)答數(shù)據(jù)集上均具有良好的表現(xiàn),在單關(guān)系數(shù)據(jù)集上效果尤為突出,進(jìn)一步提升了知識(shí)庫(kù)問(wèn)答任務(wù)的準(zhǔn)確度。
本文提出的方法基于英文知識(shí)庫(kù)Freebase[1],對(duì)其實(shí)體和關(guān)系進(jìn)行匹配搜索。Freebase知識(shí)庫(kù)中每個(gè)條目通過(guò)(subject,relation,object)的形式表示。SimpleQuestion和WebQuestion分別為Facebook公司公開(kāi)的單關(guān)系與多關(guān)系的知識(shí)庫(kù)問(wèn)答數(shù)據(jù)集,其中的數(shù)據(jù)均為人工標(biāo)注,并且數(shù)據(jù)集中的每個(gè)問(wèn)句與Freebase知識(shí)庫(kù)中的一個(gè)條目相對(duì)應(yīng)。
給定一個(gè)問(wèn)題,它的實(shí)體和關(guān)系在知識(shí)庫(kù)中,問(wèn)題、關(guān)系使用Glove詞向量庫(kù)表示,詞表中沒(méi)有的單詞即未登錄詞使用隨機(jī)向量表示。知識(shí)庫(kù)問(wèn)答模型的目標(biāo)是找到連接主題實(shí)體和知識(shí)庫(kù)中指向答案的關(guān)系。對(duì)于候選關(guān)系集中的每個(gè)關(guān)系,模型計(jì)算與問(wèn)題的語(yǔ)義相似度,并選擇得分最高的關(guān)系路徑作為答案路徑[13]。
本文對(duì)模型中會(huì)用到的單元有如下定義:
(1) 問(wèn)題集定義為Q={q1,q2,…,qq_n},其中每個(gè)單元qi(i∈{1,2,…,q_n})都是問(wèn)題集中的一個(gè)問(wèn)題,q_n為問(wèn)題集中所有問(wèn)題的數(shù)量。
(2) 關(guān)系集R={r1,r2,…,rr_n},其中每個(gè)單元r都是關(guān)系集中的一個(gè)關(guān)系,r_n為關(guān)系集中所有關(guān)系的數(shù)量行。
該方法主要解決知識(shí)庫(kù)問(wèn)答中的未登錄詞問(wèn)題,模型中實(shí)體檢測(cè)部分結(jié)合了[10,13,17]的注意力機(jī)制模塊(撰寫本文時(shí)準(zhǔn)確率最高的模型)和MOYU的BiLSTM模塊[10]。引入未登錄詞處理模塊后模型如圖1所示。
圖1 加入了未登錄詞模塊的知識(shí)庫(kù)問(wèn)答模型
本節(jié)描述DPQA的未登錄詞檢測(cè)層,該層由三個(gè)部分組成,結(jié)構(gòu)如圖2所示。
圖2 未登錄詞檢測(cè)模塊
本文利用奇夫定律(Zipf’s law)為詞表構(gòu)建代價(jià)詞典。其思想是在自然語(yǔ)言文本集中,單詞出現(xiàn)的頻率與該文本集中所有單詞的頻率排名成反比,定律具體為頻率排名第一的單詞出現(xiàn)的頻率大約是排名第二位單詞的兩倍,而排名第二位的單詞則是出現(xiàn)排名第四單詞的兩倍,其公式為:
(1)
式中:P(r)表示排名為r的單詞頻率;r表示一個(gè)單詞出現(xiàn)頻率的排名,單詞頻率分布中C約等于0.1,α約等于1。
本文在維基百科上爬取大量英文語(yǔ)料并做了清洗與分析,得到一個(gè)長(zhǎng)度為126 136的詞表,并根據(jù)詞頻進(jìn)行排序,詞表如表1所示。
表1 維基百科詞頻分布
根據(jù)奇夫定律與詞表,構(gòu)建了代價(jià)詞典。首先有詞表W={w1,w2,…,wn},n為詞表的長(zhǎng)度,wi是詞表W中的詞頻排第i位的詞,則有:
Costi=log((i+1)×log(n))
(2)
代價(jià)詞典Cost={Cost1,Cost2,…,Cost126136},部分?jǐn)?shù)據(jù)如表2所示。
表2 代價(jià)詞典
生成代價(jià)詞典后,本文使用動(dòng)態(tài)規(guī)劃的方法為未登錄詞生成子詞序列。以未登錄詞“whitecoffee”為例。
首先計(jì)算該詞的代價(jià)數(shù)組C_array,置代價(jià)數(shù)組第一位C_array[0]為0,然后計(jì)算第一個(gè)字符“w”的代價(jià),并與該字符所有可能的字符串的代價(jià)相比較,取最小的放入代價(jià)數(shù)組,例如“w”只有一種情況,所以C_array[1]為Cost[w]=9.227 322 4,第二個(gè)字符“h”的代價(jià)因?yàn)橛袃蓚€(gè)字符串的情況“w”+“h”和“wh”,Cost[w]+Cost[h]=9.227 322 4+8.786 002 7=18.013 325 1,而Cost[wh]=13.096 018 351,取其中最小值13.096 018 351,以此類推可得到未登錄詞“whitecoffee”的代價(jià)數(shù)組:[[0,9.227 322 400 521 313,13.096 018 351 828 421,19.670 329 707 960 61,13.599 631 067 643 815,8.262 530 146 419 405,15.902 117 370 952 112,17.530 582 158 440 907,19.058 702 043 470 937,24.217 757 342 685 466,29.297 030 357 217 277,18.529 402 695 330 45]]。
然后回溯恢復(fù)代價(jià)最低的字符串,可獲得“whitecoffee”的C_space為:[(37.167 639 620 636 27,1),(36.000 389 611 532 61,2),(30.252 829 901 108 456,3),(inf,4),(inf,5),(18.529 402 695 330 45,6),(inf,7),(inf,8),(inf,9),(inf,10),(inf,11)],inf代表詞表中無(wú)該詞,所以代價(jià)為無(wú)限大,最后取代價(jià)最小的值(18.529 402 695 330 45,6)為分隔處,可獲得第一個(gè)子詞“coffee”,以此類推得到最優(yōu)子詞序列[white,coffee]。動(dòng)態(tài)規(guī)劃的流程如圖3所示。
圖3 動(dòng)態(tài)規(guī)劃流程
獲取了最優(yōu)特征詞序列后,使用一種基于流行排序方法對(duì)特征詞進(jìn)行排序[18]。流形排序[19-20]是一種基于樣本數(shù)據(jù)集的流形分布假設(shè)的排序算法,該算法是一個(gè)半監(jiān)督學(xué)習(xí)的方法,即對(duì)于一個(gè)圖模型,給定一些種子節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)之間的內(nèi)在流行結(jié)構(gòu)對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行排序,得到每個(gè)節(jié)點(diǎn)的最終排序得分。流形排序方法根據(jù)多個(gè)語(yǔ)料之間的流形結(jié)構(gòu)對(duì)單詞之間的相似度進(jìn)行計(jì)算,首先根據(jù)語(yǔ)料庫(kù)的結(jié)構(gòu),對(duì)流行結(jié)構(gòu)圖中的各節(jié)點(diǎn)做相似度排序。相似性排序的主要思想是對(duì)每個(gè)節(jié)點(diǎn)計(jì)算該節(jié)點(diǎn)與其他節(jié)點(diǎn)的相似度,此過(guò)程實(shí)質(zhì)上是一種圖學(xué)習(xí)的過(guò)程。流形排序算法用上述過(guò)程計(jì)算相似度最后進(jìn)行排序,主要由圖初始化及相似度計(jì)算與排序兩個(gè)模塊組成。基于流形排序是目前效果較好的特征詞排序算法[18-19]。
本文根據(jù)流形排序方法,綜合考慮統(tǒng)和語(yǔ)義結(jié)構(gòu)兩個(gè)維度的信息,為多個(gè)候選詞進(jìn)行重要度排序。該方法具體步驟,如下所示:
1) 各候選詞的重要度基于詞頻進(jìn)行初始化。已有研究發(fā)現(xiàn),相比于如IG、CHI等傳統(tǒng)監(jiān)督學(xué)習(xí)方法,詞頻排序的特征詞選擇方法的效果反而更加突出。本方法根據(jù)統(tǒng)計(jì)維基百科語(yǔ)料的詞頻給候選詞進(jìn)行初始化,有:
y=[y1,y2,…,yn]
(3)
式中:yi表示語(yǔ)料c中第i個(gè)單詞在c中的詞頻;n表示語(yǔ)料中所有單詞的數(shù)量。
2) 本方法通過(guò)結(jié)合語(yǔ)料中候選詞的語(yǔ)義信息與位置信息構(gòu)建語(yǔ)料網(wǎng)絡(luò)圖G=(V,E),其中V表示語(yǔ)料d的單詞列表,其中每個(gè)單詞表示語(yǔ)料圖G中的一個(gè)節(jié)點(diǎn)v;E表示各個(gè)邊e的集合,每條邊e連接各個(gè)節(jié)點(diǎn)v,兩個(gè)節(jié)點(diǎn)之間是否存在邊取決于以下兩點(diǎn):① 在原語(yǔ)料某一段落中是否有同時(shí)出現(xiàn)兩個(gè)節(jié)點(diǎn)對(duì)應(yīng)的特征詞的情況出現(xiàn);② 比較兩個(gè)節(jié)點(diǎn)條件共現(xiàn)度是否超過(guò)算法提前設(shè)定的閾值。條件共現(xiàn)度矩陣方法是魏偉等[21]于2019年提出的一種詞共現(xiàn)表示方法。相比于傳統(tǒng)的詞共現(xiàn)表示,條件共現(xiàn)度矩陣方法增加了對(duì)語(yǔ)料語(yǔ)義粒度信息和事實(shí)在相同段落中的相關(guān)詞表示等因素的考量,也就是它保存了更多的語(yǔ)義結(jié)構(gòu)信息,使得穩(wěn)定性和效果都得到了比較明顯的提升。條件共現(xiàn)度矩陣方法在傳統(tǒng)方法的框架上計(jì)算候選詞相對(duì)語(yǔ)料特征空間的條件概率。使用矩陣W=(ccodmij)n×n表示語(yǔ)料c,第i個(gè)候選詞A與第j個(gè)候選詞B的條件共現(xiàn)度ccodmij計(jì)算方法如下:
(4)
式中:p(B|A)表示候選詞A與候選詞B的共現(xiàn)概率,p(A)為候選詞A在語(yǔ)料c里出現(xiàn)的概率,使用comij表示語(yǔ)料c中第i與第j個(gè)單詞的共現(xiàn)次數(shù),即:
(5)
式中:S為語(yǔ)料c中的所有段落;fsj為語(yǔ)料中第j個(gè)單詞在第s個(gè)段落中的出現(xiàn)頻次;n表示候選詞列表的長(zhǎng)度。由此可知條件共現(xiàn)度矩陣為不對(duì)稱矩陣:ccodmij≠ccodmji。此外,設(shè)定ccodmij=0。
二次排序的本質(zhì)是轉(zhuǎn)移了語(yǔ)料圖結(jié)構(gòu)中候選詞的權(quán)值。候選詞以一定的概率將該詞的重要度傳遞給與該詞有邊相連的多個(gè)候選詞。使用詞頻來(lái)為語(yǔ)料中單詞重要度進(jìn)行初始化:y=[y1,y2,…,yn]。后續(xù)各候選詞權(quán)重排序過(guò)程為:
f(t+1)=αNf(t)+(1-α)y
(6)
式中:α的值域?yàn)閇0,1]。候選詞列表最初通過(guò)詞頻排序,在之后的每次計(jì)算中根據(jù)α計(jì)算重要度然后傳遞給鄰接的所有單詞。根據(jù)以上方法不斷迭代,直到算法收斂,收斂結(jié)果為:
(7)
流形排序算法的優(yōu)化函數(shù)定義為:
(8)
該函數(shù)的核心思想是使語(yǔ)料中距離相近的單詞相似度更高。μ是算法的正則化參數(shù),其值域?yàn)?0,∞)。
算法1基于流形排序的子詞排序算法
輸入:子詞序列、語(yǔ)料詞頻。
輸出:子詞重要性排序。
step1計(jì)算序列中所有特征詞詞頻,并將詞頻序列作為特征詞初始重要性排序y。
step4結(jié)合相似度矩陣N以及在step1中初始化的排序y,根據(jù)函數(shù)f(t+1)=αNf(t)+(1-α)y不斷迭代計(jì)算出最終子詞重要性排序。
end
本節(jié)通過(guò)實(shí)驗(yàn)證明了DPQA模型的穩(wěn)定性及有效性。首先介紹了本文方法所使用的知識(shí)庫(kù)等數(shù)據(jù),然后對(duì)評(píng)測(cè)指標(biāo)以及算法的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行闡述,最后對(duì)實(shí)驗(yàn)結(jié)果做進(jìn)一步的分析與解釋。
本方法使用了Facebook在2016年發(fā)布的KBQA數(shù)據(jù)集SimpleQuestion(單關(guān)系,后文中用“SQ”表示),包含75 909條訓(xùn)練數(shù)據(jù),108 445條驗(yàn)證數(shù)據(jù)及216 884條測(cè)試數(shù)據(jù)。在多關(guān)系問(wèn)題上,本文采用了WebQuestion數(shù)據(jù)集(后文中使用“WQ”表示),WQ包含6 642個(gè)問(wèn)答對(duì)。
該方法采用兩種方法作為評(píng)測(cè)指標(biāo),第一種是未登錄詞的比例,即所有的問(wèn)題與關(guān)系中包含的未登錄詞數(shù)量和問(wèn)題、關(guān)系總詞數(shù)的比值;第二種采用關(guān)系檢測(cè)的準(zhǔn)確率。
本文研究對(duì)比了通過(guò)動(dòng)態(tài)規(guī)劃和流形排序后得到的詞向量與隨機(jī)向量的向量差異度,具體方法使用的對(duì)比兩向量的夾角。首先找出在原詞向量庫(kù)中沒(méi)有但在另一個(gè)含有219萬(wàn)個(gè)詞向量的詞向量庫(kù)glove840中包含的單詞OOV,通過(guò)本文提出的方法得出最終子詞s,取該子詞在glove840中的向量Vs與該未登錄詞(相對(duì)于原詞向量庫(kù))在glove840中的向量Voov做夾角計(jì)算,結(jié)果如表3所示。
表3 未登錄詞與其子詞的向量夾角對(duì)比
可以觀察到通過(guò)本文研究得出的向量相比之前的隨機(jī)向量與OOV的相似度更高,獲取到了以前模型沒(méi)有的信息。
如表4所示,本文研究把SQ中的未登錄詞比例降低了20.4百分點(diǎn),將WQ中的未登錄詞比例降低了12.47百分點(diǎn),可以看出本文研究對(duì)未登錄詞的檢測(cè)及補(bǔ)齊有很明顯的效果。經(jīng)過(guò)分析,DPQA對(duì)WQ的未登錄詞效果沒(méi)有SQ明顯的原因首先是WQ中的未登錄詞本身較少,其次與兩個(gè)數(shù)據(jù)集中的詞語(yǔ)分布有關(guān)。
表4 SQ和WQ數(shù)據(jù)集上未登錄詞比例(%)
最終模型對(duì)關(guān)系檢測(cè)的準(zhǔn)確率如表5所示,針對(duì)單關(guān)系數(shù)據(jù)集DPQA有比較好的提升,達(dá)到了93.84%,超過(guò)了其他幾種比較編碼框架的學(xué)習(xí)方法,證明了DPQA模型良好的建模效果,具體表現(xiàn)為未登錄詞比例降低了20.4百分點(diǎn),在不依賴更大詞庫(kù)的情況下大幅減小了未登錄詞信息丟失對(duì)整個(gè)模型的影響,其次表現(xiàn)在最終的關(guān)系檢測(cè)中準(zhǔn)確率獲得了目前最優(yōu)成績(jī)。在多關(guān)系數(shù)據(jù)集WebQuestion上,DPQA比Bi-LSTM、HR-Bi-LSTM等模型效果都要好,并且訓(xùn)練時(shí)間有明顯的減少。
表5 關(guān)系抽取準(zhǔn)確率(%)
因?yàn)榇蠓鶞p少未登錄詞,所以在對(duì)單詞做向量化的時(shí)候可以減少大量無(wú)用的稀疏表示,所以DPQA在訓(xùn)練時(shí)間上有了不錯(cuò)的優(yōu)化,相比于用時(shí)最少的BiCNN,在相同超參數(shù)的情況下,DPQA在SQ和WQ數(shù)據(jù)集上分別有5.4 s(12.3%)和5.9 s(14.2%)的提升,具體如表6所示。
表6 關(guān)系抽取時(shí)間 單位:s
根據(jù)對(duì)實(shí)驗(yàn)數(shù)據(jù)的詳細(xì)分析,對(duì)DPQA的優(yōu)點(diǎn)有如下總結(jié):(1) DPQA可以在同詞庫(kù)的情況下,顯著降低未登錄詞對(duì)整個(gè)問(wèn)答系統(tǒng)的負(fù)面影響,最大限度地利用了問(wèn)題和關(guān)系中的信息;(2) 由于未登錄詞的減少,數(shù)據(jù)預(yù)處理時(shí)的稀疏向量隨之減少,使模型訓(xùn)練時(shí)間大幅下降;(3) 隨著社會(huì)的進(jìn)步,在新詞層出不窮、未登錄詞越來(lái)越多的情況下,DPQA相比于其他沒(méi)有未登錄詞檢測(cè)層的模型,會(huì)具有越來(lái)越明顯的優(yōu)勢(shì)。
近年來(lái)的KBQA算法大多集中在關(guān)系檢測(cè)和實(shí)體檢測(cè)上,較少有關(guān)注問(wèn)題與關(guān)系中的未登錄詞問(wèn)題,所以問(wèn)答準(zhǔn)確率不可避免地會(huì)碰到瓶頸。本文為知識(shí)庫(kù)問(wèn)答領(lǐng)域提出了基于動(dòng)態(tài)規(guī)劃與流形排序的新方法,為智能問(wèn)答的解決方案提供了新的思路。通過(guò)實(shí)驗(yàn),DPQA在單關(guān)系和多關(guān)系問(wèn)答集上都表現(xiàn)良好,特別是在單關(guān)系問(wèn)題上表現(xiàn)突出,為解決通用知識(shí)庫(kù)問(wèn)答系統(tǒng)中的未登錄詞問(wèn)題提供了簡(jiǎn)單可行的方案。