喬振浩, 車萬翔, 劉 挺
(哈爾濱工業(yè)大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 哈爾濱150001)
問答系統(tǒng)是自然語言處理的明日之星,已獲得了人工智能及其相關(guān)產(chǎn)業(yè)的廣泛關(guān)注,并已經(jīng)在互聯(lián)網(wǎng)、醫(yī)療、金融等領(lǐng)域進(jìn)行了應(yīng)用嘗試。 與目前主流資訊檢索技術(shù)相比,問答系統(tǒng)有兩點不同:首先,查詢方式為口語化的問句,使用者不需要思考該使用什么樣的問法才能得到理想的答案;其次,查詢結(jié)果為高精度的網(wǎng)頁或明確的答案字符串。
問答系統(tǒng)依賴于優(yōu)質(zhì)的知識。 依據(jù)知識的形式,問答系統(tǒng)可以分為基于文本的問答和基于知識圖譜的問答。 基于文本的問答,知識通常來源于純文本,如百科文本、社區(qū)問答以及網(wǎng)絡(luò)文檔等;基于知識圖譜的問答,知識來自以RDF 三元組格式存儲的知識。相比于文本知識,對于事實型問題(when、who、where、which、what),知識圖譜問答較文本問答更為精確和高效,同時也要求知識圖譜規(guī)模足夠大。 語義網(wǎng)絡(luò)技術(shù)和自動信息處理系統(tǒng)的發(fā)展進(jìn)步催生了大規(guī)模知識圖譜。 近些年涌現(xiàn)出了大批十億甚至更大規(guī)模的知識圖譜,包括Freebase、DBpedia 等,這些知識圖譜的出現(xiàn)使基于知識圖譜的問答系統(tǒng)變得可行。
由于深度學(xué)習(xí)技術(shù)在自然語言處理領(lǐng)域的大放異彩,目前很多知識圖譜問答系統(tǒng)都是基于各種深度學(xué)習(xí)模型進(jìn)行構(gòu)建,訓(xùn)練深度學(xué)習(xí)模型需要大量的標(biāo)注數(shù)據(jù)[1]。 然而在實際應(yīng)用中,往往只能獲取到知識圖譜而缺乏標(biāo)注數(shù)據(jù),造成這種困境的原因是相比于構(gòu)建知識圖譜,構(gòu)造標(biāo)注數(shù)據(jù)的成本更高。知識圖譜以三元組形式組織,其構(gòu)建過程并不需要數(shù)據(jù)庫專業(yè)知識,當(dāng)應(yīng)用場景明確且規(guī)模適當(dāng)時,針對特定應(yīng)用場景抽取三元組即可完成知識圖譜的構(gòu)建。 標(biāo)注數(shù)據(jù)由自然語言問句與對應(yīng)邏輯表達(dá)式構(gòu)成。 自然語言問句需要覆蓋大部分的知識庫三元組,并且要兼顧表達(dá)多樣性的需求。 問句對應(yīng)的邏輯表達(dá)式則需要具有專業(yè)知識才能寫出,需要專業(yè)人士的參與,獲取成本較高。
針對上述問題,本文提出一種基于問句生成的知識圖譜問答方法。 該方法通過模版將知識圖譜三元組轉(zhuǎn)換為問句形式,并為生成的問句建立全文索引。 當(dāng)用戶查詢時,系統(tǒng)首先通過全文檢索引擎檢索出候選集合,然后通過語義匹配模型為候選集合打分,挑選出得分最高的候選項,最后把候選項對應(yīng)的三元組作為答案返回給用戶,完成問答操作。 通過這種方式,可以在缺少標(biāo)注數(shù)據(jù)集的情況下,快速開發(fā)出可用的知識庫問答系統(tǒng)。 經(jīng)過實驗分析,在無標(biāo)注數(shù)據(jù)的情況下,本文的提出的模型相比于深度模型有更好的可用性,有助于知識圖譜問答系統(tǒng)的推廣應(yīng)用。
模版是將知識庫三元組轉(zhuǎn)換為自然語言表達(dá)的工具。 給定由三元組(實體1,關(guān)系,實體2)組成的知識圖譜,為一個關(guān)系或語義相近的一組關(guān)系編寫一套模版,模版中包含預(yù)留實體槽位的自然語言問句。 問句生成時,處理程序依次讀入三元組,將三元組解析為(實體1、關(guān)系、實體2)的形式,從模版庫中選取該關(guān)系下的全部模版,使用相應(yīng)實體替換問句中的實體槽位,生成出自然語言形式的句子,生成出的自然語言語句與三元組保持一一對應(yīng)的關(guān)系。以哈爾濱工業(yè)大學(xué)信息問答為例,以下為JSON 格式模版的實例:"創(chuàng)辦時間": {
"alias": ["創(chuàng)辦時間"],
"templates": [
" $1 是什么時候創(chuàng)辦的?",
" $1 建校時間",
" $1 成立于哪一年?",
" $1 創(chuàng)辦時間?",
" $1 建校于哪一年?",
]
}
該JSON 格式的文本中,JSON 鍵值“創(chuàng)辦時間”對應(yīng)了知識圖譜三元組中的關(guān)系。 JSON 值域中,“alias”代表共享該模版的三元組關(guān)系名,凡是包含此類關(guān)系的三元組都會通過這條模版進(jìn)行擴(kuò)展?!皌emplates”為具體的模版。 模版中$1、 $2 分別代表了實體1 和實體2。 擴(kuò)展時,程序依次讀入的三元組,將三元組解析為實體1、關(guān)系、實體2 的形式。程序從模版庫中選取該關(guān)系下的全部模版,使用相應(yīng)實體替換$1、$2 符號,生成問句。 例如:對于三元組“<哈爾濱工業(yè)大學(xué)><創(chuàng)辦時間><1920 年>”將被擴(kuò)展為“哈爾濱工業(yè)大學(xué)是什么時候創(chuàng)辦的?”、“哈爾濱工業(yè)大學(xué)建校時間”、“ 哈爾濱工業(yè)大學(xué)成立于哪一年?”、“哈爾濱工業(yè)大學(xué)創(chuàng)辦時間?”、“哈爾濱工業(yè)大學(xué)建校于哪一年?”五句語義信息完整的句子。
下面介紹兩種模版構(gòu)造的方法:
(1)從數(shù)據(jù)集中抽取模版。 公開的開放域知識庫數(shù)據(jù)集中包含了豐富的自然語言表達(dá)和對應(yīng)的邏輯表達(dá)式。 通過替換自然語言問句中的實體為特殊標(biāo)簽$1,并根據(jù)關(guān)系名稱進(jìn)行聚類,就可以獲得豐富的模版表達(dá)。
(2)手工構(gòu)造模版。 開放域知識庫問答數(shù)據(jù)集覆蓋的范圍較廣,但對具體的場景無法全面覆蓋。因此,除了從數(shù)據(jù)集中抽取模版外,還需通過手工構(gòu)造模版的方式,來提高模版精度,保證大部分的三元組數(shù)據(jù)都有較好的覆蓋,并滿足問句多樣性的要求。若知識庫問答的場景比較新穎,例如:高校信息問答、新冠肺炎知識問答,則主要依賴這種方法。
將三元組轉(zhuǎn)換為自然語言問句形式后,當(dāng)用戶輸入查詢時,只需從生成的句子中選擇出最相關(guān)的句子并返回對應(yīng)的三元組即可完成問答操作。 通過這種方式,實際上是將知識庫問答問題轉(zhuǎn)換為了FAQ 問題。 由于使用模版生成問句時存在排列組合問題,生成的自然語言問句規(guī)模比較龐大。 為了有效地檢索出與用戶問句相關(guān)的句子,首先采用基于全文檢索的檢索方法進(jìn)行粗匹配,縮小候選答案的范圍,然后使用基于語義匹配的方式進(jìn)行細(xì)匹配,在語義層面挑選出最佳答案。
本方法首先使用基于全文檢索的檢索方式來檢索得到候選關(guān)系集。 在信息檢索系統(tǒng)中,文本數(shù)據(jù)按照存儲方式可以分為結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)是指具有明確格式,定義清晰的有限長度數(shù)據(jù),如數(shù)據(jù)庫、XML 數(shù)據(jù)。 對結(jié)構(gòu)化數(shù)據(jù)檢索時,由于其數(shù)據(jù)格式定義明確,可以使用規(guī)范的查詢語句,如SQL 語句進(jìn)行查詢。 非結(jié)構(gòu)數(shù)據(jù)又稱為全文數(shù)據(jù),通常具有長度不固定,格式不統(tǒng)一的特點。對此類數(shù)據(jù)檢索最樸素的方式是順序掃描法,查找時將關(guān)鍵詞與全部文本逐個進(jìn)行對照,直至遍歷完全部文檔。 當(dāng)處理小數(shù)據(jù)量文本時,這種方法簡單而有效。 對于大量的文本順序掃描的時間復(fù)雜度非常高,需要采用更加高效的方法。 全文檢索的基本原理是從非結(jié)構(gòu)的文本中提取出關(guān)鍵信息,并按照一定規(guī)則重新排列為結(jié)構(gòu)化的形式存儲,這些提取出的結(jié)構(gòu)化信息稱之為索引。 檢索時根據(jù)這些結(jié)構(gòu)化的索引進(jìn)行檢索,從而達(dá)到加速的目的。 這種先建立結(jié)構(gòu)化信息索引,再通過索引加速搜索的過程就稱為全文檢索。 全文檢索應(yīng)用時分為建立索引和查找索引兩個部分:建立索引負(fù)責(zé)預(yù)處理待檢索的文本,根據(jù)詞法知識對待檢索文本進(jìn)行解析后創(chuàng)建索引;查找索引將用戶查詢文本進(jìn)行同樣的詞法預(yù)處理后,檢索已創(chuàng)建的索引并返回給用戶查詢結(jié)果。
建立索引時第一步是通過分詞組件將文本處理為有意義的獨立詞元(Token)。 這個過程需要將文檔分為一個個單詞的形式。 由于中文文本中字與字之間沒有分割符,需要借助外部分詞工具進(jìn)行處理,常用的中文分詞工具有LTP 平臺,THULAC 分詞等。 而對于英文文本,直接使用空格符號進(jìn)行分割即可,然后去除分詞結(jié)果中的標(biāo)點符號,通常使用正則匹配的方法即可完成,最后去除停用詞,停用詞在文本中會大量出現(xiàn)并且沒有實際的含義,會干擾正常的搜索。
第二步處理中,通過語言處理組件將第一步得到的詞元進(jìn)行自然語言相關(guān)處理。 以英文為例,處理包括:1)大小寫轉(zhuǎn)換;2)單詞縮減為詞根形式,例如:將“games”改寫為“game”;3)單詞替換為詞根形式,如:將“played”替換為“play”。 處理后得到的結(jié)果稱為詞(Term)。 經(jīng)過分詞組件處理后,使用得到的Term 創(chuàng)建倒排索引。 倒排索引由全部不重復(fù)的詞構(gòu)成,每一個詞都對應(yīng)了一個包含該詞的全部文檔列表。
使用倒排索引技術(shù)檢索出的結(jié)果從眾多文檔中篩選出了與用戶查詢有相同詞匯的候選文檔,然而這些候選項只能保證與查詢句是相關(guān)的,而無法定量地確定與問句的相關(guān)程度。 為了準(zhǔn)確地反應(yīng)出候選文檔與問句的相關(guān)程度,使用TF-IDF(Term Frequency-Inverse Document Frequency,詞頻-逆文檔頻率)對檢索出的結(jié)果項進(jìn)行相關(guān)度排序。 TF-IDF 是用來估計單詞在文檔庫中的重要程度的指標(biāo),單詞的重要程度與它在文檔中出現(xiàn)的次數(shù)成正比,但同時又會與它在整個文檔庫中出現(xiàn)的頻率成反比[2]。
詞頻代表了一個詞在某篇文檔中出現(xiàn)的頻率。在一篇文檔中,一個詞出現(xiàn)的次數(shù)越多,說明這個詞對于這篇文檔的重要程度越高,越能代表這篇文檔。然而僅憑詞數(shù)來衡量重要程度會出現(xiàn)不相關(guān)的長文檔得分遠(yuǎn)高于精煉的短文檔得分的問題。 詞頻是詞數(shù)進(jìn)行歸一化后得到指標(biāo),能夠無偏地反映詞的重要程度。 對于某一文檔m 中的詞語i, 其詞頻計算方式如式(1):
其中,ni,m是詞i 在文檔m 中出現(xiàn)的次數(shù),分母是文檔m 中全部單詞計數(shù)之和。 逆文檔頻率代表了詞的普遍性程度。 越多的文檔包含該詞,說明這個詞越普遍,不足以區(qū)分這些文檔。 對某一特定詞語i,其IDF 值由文檔總數(shù)除以包含該詞的文檔數(shù)目,再將結(jié)果取對數(shù)得到式(2):
由該公式可以看到,TF-IDF 值平衡了一個單詞在某一特定文檔和全部文檔出現(xiàn)頻率的關(guān)系,使重要的詞語得分高于常見的詞語。 計算出句子中每個詞的TF-IDF 值后,按順序排列,得到了該句子的向量。 通過計算查詢向量Vq與候選項向量Vd的余弦相似度,就可以判斷查詢與候選句之間的相似性,公式(4):
本方法在開源的全文檢索軟件庫Lucene 上進(jìn)行二次開發(fā)。 Lucene 是由Apache 軟件基金會支持的一套用于全文檢索的開源程序庫,提供了強(qiáng)大且易用的應(yīng)用程序接口。 Lucene 是目前最廣泛使用的免費(fèi)全文檢索程序庫。
通過檢索模塊召回的候選問句只保證了字符級別的重合,為了保證問答效果,需要進(jìn)一步進(jìn)行語義級別的匹配,使用預(yù)訓(xùn)練模型BERT 進(jìn)行語義匹配。預(yù)訓(xùn)練語言模型是近年來NLP 領(lǐng)域最激動人心的進(jìn)展,包括ELMo、ULMFiT 及BERT 等。 這些預(yù)訓(xùn)練模型可以顯著改善下游任務(wù)的表現(xiàn),讓NLP 領(lǐng)域進(jìn)入了預(yù)訓(xùn)練模型的“新時代”。 可以從海量無標(biāo)注數(shù)據(jù)中學(xué)習(xí)到潛在的深層語義信息,并且可以通過微調(diào)的方式將這些知識遷移到下游任務(wù)中,不再需要大量單獨標(biāo)注額外的訓(xùn)練數(shù)據(jù)。 下面介紹BERT的原理及其在語義匹配任務(wù)上的微調(diào)方法。
BERT(Biderectional Encoder Representations)是基于多層雙向Transformer 的深度雙向語言模型[3]。相較于傳統(tǒng)的RNN 類循環(huán)神經(jīng)網(wǎng)絡(luò),Transformer 有更好的并行運(yùn)算性能。 BERT 使用掩碼語言模型進(jìn)行訓(xùn)練,這種雙向預(yù)訓(xùn)練方式相比于ELMo 等使用單向的模型,可以更好地學(xué)習(xí)上下文信息。 同時,BERT 還使用了下一句預(yù)測任務(wù),模型需要根據(jù)上下文信息預(yù)測兩句是否為連續(xù)的,該任務(wù)使模型具有處理句子的能力。
具體來說,在MLM 掩碼語言模型中,BERT 會隨機(jī)將15%Token 替換為[MASK]標(biāo)簽。 模型需要根據(jù)被替換位置的隱層向量來預(yù)測該詞。 盡管這種方法可以完成雙向預(yù)訓(xùn)練模型的訓(xùn)練,然而這種方法有兩個缺點。 第一是預(yù)訓(xùn)練過程和微調(diào)過程不匹配。 在微調(diào)時,[MASK]標(biāo)簽并不會出現(xiàn)。 為了緩解這種情況,在挑選出15%Token 后,80%的情況下用[MASK]進(jìn)行替換,10%的情況隨機(jī)替換為其他詞,10%的情況下保持不變。 這樣做的目的是使模型適應(yīng)微調(diào)階段的情況;第二是在預(yù)訓(xùn)練過程中,輸入模型的一個Batch 中只預(yù)測15%的Token,會導(dǎo)致訓(xùn)練效率降低,耗費(fèi)更多時間。 不過BERT 在眾多任務(wù)上出色的指標(biāo)提升說明了雖然模型的收斂速度不如傳統(tǒng)的從左到右的語言模型,但模型帶來的性能提升遠(yuǎn)遠(yuǎn)大于增加的時間成本。
此外BERT 的訓(xùn)練還包括下句預(yù)測的二分類任務(wù),從而賦予模型處理句子級別輸入的能力。 下句分類的目標(biāo)是判斷輸入模型的兩個句子是否連續(xù),即判斷兩句是否具有相同或相近的語義表達(dá)。 該任務(wù)的輸入可以從任意的單語語料庫中生成,具體來說,挑選出句子A 后,預(yù)處理程序以50%的概率選擇句子A的下一句話作為句子B,50%的情況下從預(yù)料庫中隨機(jī)選取任意一句話作為句子B。 本文的語義匹配步驟正是依賴于BERT 模型的句對分類的能力。
由上述兩個任務(wù)可以很自然地推測出BERT 的輸入為單個句子或是句子對。 對于文本中的每一個詞,其輸入表示為詞嵌入、段嵌入和位置向量的和。詞嵌入使用了WordPiece 技術(shù),將一個單詞拆分為更小的單位,這樣同一詞根不同形式(如時態(tài)變化)的單詞將共享部分相同的表示,縮小了詞表大小,有益于模型收斂。 段嵌入向量中只包含0、1 兩個值,該向量是為了區(qū)分句對而設(shè)置的。 由于Transformer編碼器在輸入文本上并行計算,遺失了單詞的位置信息,故使用位置向量來補(bǔ)充位置信息。 此外,BERT 模型的輸入中還定義了兩個特殊符號[CLS]與[SEP]。 [CLS]符號位于輸入的起始位置,在進(jìn)行句子級別的分類任務(wù)時,可以使用該符號對應(yīng)的向量進(jìn)行預(yù)測。 [SEP]符號用于分隔輸入的兩個句子,與位置向量配合使用。
Google 提供的預(yù)訓(xùn)練模型與本文要完成的語義匹配任務(wù)仍有一些差距,需要經(jīng)過微調(diào)操作把BERT從海量數(shù)據(jù)中學(xué)習(xí)到知識遷移到目標(biāo)領(lǐng)域。 對于句子級別的匹配任務(wù),微調(diào)時將輸入“[CLS]”所對應(yīng)的最后一層隱層向量V ∈RH,經(jīng)過一層線性變換后送入 softmax 函 數(shù), 計 算 類 別 得 分 即: P =softmax ( V*WT) ,式中W ∈RK×H,P ∈RK,K 為分類器標(biāo)簽數(shù)目。 在語義匹配任務(wù)中,K 取2。 使用LCQMC 數(shù)據(jù)集與生成的問句進(jìn)行微調(diào)。 LCQMC 是中文口語話描述的語義匹配數(shù)據(jù)集,該數(shù)據(jù)集定位與本文的任務(wù)比較相符。 但是該數(shù)據(jù)集面向領(lǐng)域為開放域問答,問句類型與限定領(lǐng)域問答仍有一定差距。因此本文使用模版生成的問句做了一組微調(diào)數(shù)據(jù):將生成的問句兩兩拼接為句對,由同一關(guān)系生成的句子標(biāo)注為正例,不同關(guān)系生成的句子標(biāo)注為負(fù)例。 語義匹配模型在這兩個數(shù)據(jù)集上進(jìn)行微調(diào),微調(diào)網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
圖1 BERT 微調(diào)Fig. 1 BERT fine-tuning
本文提出了一種無標(biāo)注數(shù)據(jù)下快速構(gòu)建知識圖譜問答系統(tǒng)的方法。 該方法首先針對知識圖譜的應(yīng)用場景編寫模版文件。 模版文件結(jié)構(gòu)簡單,不需要編寫者掌握專業(yè)的知識。 模版以自然語言形式組織,只需標(biāo)注者具有應(yīng)用場景的基本常識即可,標(biāo)注成本極低。 經(jīng)程序使用知識圖譜三元組填充模版后,可以得到具有完整語義信息的問句表達(dá),使用檢索工具包Lucene 為生成的問句建立全文索引。 當(dāng)用戶輸入查詢時,系統(tǒng)首先使用全文檢索引擎檢索出相關(guān)的問句,然后使用預(yù)訓(xùn)練模型為候選項打分。這樣既保證了檢索的速度,又保證了檢索結(jié)果與查詢句語義層面相匹配。 最后,系統(tǒng)返回語義匹配模塊得分最高項對應(yīng)的三元組就完成了整個問答操作。 本文所提出的方法最大的優(yōu)點就是不需要標(biāo)注數(shù)據(jù),編寫模版的人工成本很低,并且充分發(fā)揮了預(yù)訓(xùn)練模型的語義匹配能力,有效地提升問答效果。系統(tǒng)流程示意圖如圖2 所示。
本文提出了一種限定領(lǐng)域下無標(biāo)注數(shù)據(jù)的知識圖譜問答方法。 對于無標(biāo)注數(shù)據(jù)場景下的系統(tǒng)評價采用自行構(gòu)建測試數(shù)據(jù)的方法進(jìn)行。 首先,人工構(gòu)建了面向哈爾濱工業(yè)大學(xué)百年校慶知識問答的知識圖譜數(shù)據(jù),該知識圖譜包含哈爾濱工業(yè)大學(xué)基本信息、院系專業(yè)、長江學(xué)者等4 個領(lǐng)域,共2922 組三元組數(shù)據(jù)。 然后通過在線文檔的方式收集并標(biāo)注了250 組標(biāo)注數(shù)據(jù),標(biāo)注數(shù)據(jù)包含問句與對應(yīng)的答案。
圖2 系統(tǒng)流程示意圖Fig. 2 System flow diagram
基于知識圖譜的問答系統(tǒng)使用宏觀準(zhǔn)確率P(Macro Precision)與宏觀召回率R(Macro Recall)以及Averaged F1 值對模型性能進(jìn)行評價。 設(shè)Q 為問題集合,Ai為問答系統(tǒng)對第i 個問題給出的答案集合,Gi為第i 個問題的標(biāo)注答案集合,這3 個指標(biāo)的定義如公式(5)~公式(7):
使用基于語義圖的深度學(xué)習(xí)模型作為實驗的baseline。 該模型通過建模語義圖的方式將自然語言問句映射為SPARQL 語句。 實驗結(jié)果如表1 所示。表1 顯示了本文提出的方法與深度模型在此數(shù)據(jù)集上的效果的對比情況。 從F1 值上可以看到基于問句生成的知識圖譜問答方法相比于深度學(xué)習(xí)模型有顯著的提高。 這是由于深度模型需要大量的訓(xùn)練樣本,在無標(biāo)注、少量標(biāo)注數(shù)據(jù)情況下很難奏效,而本文提出的方法克服了這一缺點,無需標(biāo)注數(shù)據(jù)也可以取得較好的效果。 進(jìn)一步補(bǔ)充了消融實驗,消融實驗的結(jié)果顯示了兩種微調(diào)數(shù)據(jù)給模型帶來的效果提升。 在LCQMC 數(shù)據(jù)集上進(jìn)行微調(diào)給模型帶來了小幅度的提升,而使用生成的問句進(jìn)行微調(diào)對模型影響較大。 這說明了兩個問題:預(yù)訓(xùn)練模型確實有助于下游任務(wù)的表現(xiàn);微調(diào)時,需要選擇與下游任務(wù)緊密結(jié)合的數(shù)據(jù)。
表1 實驗結(jié)果Tab. 1 Experimental results %
基于知識圖譜的問答系統(tǒng)由于其準(zhǔn)確、便捷的知識獲取能力受到了學(xué)術(shù)界和工業(yè)界的關(guān)注和重視。然而目前主流的深度學(xué)習(xí)技術(shù)需要成本昂貴的人工標(biāo)注數(shù)據(jù)驅(qū)動,妨礙了知識圖譜問答系統(tǒng)的應(yīng)用。 針對這一問題,本文提出了基于問句生成的知識圖譜問答方法,該方法充分利用了文本檢索技術(shù)與預(yù)訓(xùn)練語義匹配模型,只需針對知識圖譜編寫簡單的模板文件即可構(gòu)造問答系統(tǒng)。 實驗結(jié)果表明,該方法在無標(biāo)注數(shù)據(jù)的限定領(lǐng)域內(nèi)具有良好的問答效果。