李強(qiáng)偉,王鑫,陳浩民,趙坤,仝思凡
(西安工程大學(xué),陜西西安 710600)
問答系統(tǒng)是自然語言處理(Natural Language Processing,NLP)領(lǐng)域的重要分支,隨著自然語言處理技術(shù)的發(fā)展,對(duì)問答系統(tǒng)的研究也越來越多。通常認(rèn)為最早的問答系統(tǒng)理論是由Alan Mathison Turing 提出的圖靈測(cè)試[1]。1966 年,由Joseph Weizenbaum 研發(fā)的Eliza 系統(tǒng),是通過模板特征實(shí)現(xiàn)的,即通過人工定義對(duì)話模板完成問答[2]。
問答系統(tǒng)通常要求以自然語言形式描述的問題為輸入,并輸出一個(gè)簡(jiǎn)潔的答案或答案列表,而不是一堆相關(guān)的文檔。對(duì)于問答系統(tǒng),主要需要解決三個(gè)問題:首先,機(jī)器需要理解用戶輸入的問題是什么;其次,機(jī)器需要根據(jù)這些問題的關(guān)鍵點(diǎn)檢索并處理相關(guān)信息;最后,機(jī)器需要將答案返回給用戶。問答系統(tǒng)的關(guān)鍵在于提高問題檢索召回的精度和效率,如何合理利用現(xiàn)有模型和方法,達(dá)到檢索系統(tǒng)的整體優(yōu)化和性能提升[3]。目前最受關(guān)注的是基于知識(shí)圖譜的問答系統(tǒng),有多種方法可供選擇,包括基于模板、語義解析、向量和深度學(xué)習(xí)[4]。知識(shí)圖譜的問答系統(tǒng)有多種方法來回答問題[5]。其中,基于模板的方法使用預(yù)先設(shè)計(jì)的查詢模板來匹配問題并進(jìn)行查詢,避免了語義解析的難題[6];基于語義解析的方法則通過分析問題的成分,構(gòu)建邏輯表達(dá)式,并將其轉(zhuǎn)換為知識(shí)圖譜的查詢語言進(jìn)行查詢。基于向量的方法則利用表示方法將知識(shí)圖譜映射到低維向量空間,然后將問題中的實(shí)體和關(guān)系還原到相同的向量空間,并通過向量之間的距離或相似度來推理答案。最后,基于深度學(xué)習(xí)的方法則通過神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)問句和知識(shí)圖譜中的語義信息,獲得字向量或詞向量,并使用深度學(xué)習(xí)模型計(jì)算向量之間的相似度并進(jìn)行排序,以推理問句的答案[7]。Bert 句向量生成指的是通過Bert 生成文本的句向量[8],生成的句向量能準(zhǔn)確表征句子的語義。采用生成式的掩碼語言模型(Masked Language Model,MLM),該模型是一種雙向Transformer結(jié)構(gòu)[9]。
原生的Bert 在下游任務(wù)中表現(xiàn)出色,但是將其用于句子相似度等任務(wù)時(shí),生成的句子向量效果不佳。為了解決這個(gè)問題,本文采用了Reimers N 等人[10]在2019 年提出的句子向量計(jì)算模型Sentence-BERT 模型。該模型可以獲取句向量,并通過句子向量的Cosine 相似度來衡量文本相似度。此外,文本句子中的冗余部分對(duì)相似度計(jì)算有很大的影響,特別是在使用詞向量模型時(shí)[11]。
因此,本文根據(jù)領(lǐng)域知識(shí)庫創(chuàng)建了領(lǐng)域詞典[12],它是一種應(yīng)用于具體領(lǐng)域的信息化工具,能夠從大量語料中抽取出簡(jiǎn)潔凝練的詞匯來傳遞某個(gè)特定領(lǐng)域的特征信息[13],以過濾冗余信息,支持特定領(lǐng)域的自然語言處理任務(wù)。最終,本文總結(jié)對(duì)句向量與去自然語言冗余的研究,提出了一種基于領(lǐng)域詞典和Sentence-BERT 的快速文本匹配方法,來更高效、更準(zhǔn)確地解決問答任務(wù)。
領(lǐng)域詞典構(gòu)建模型如圖1 所示。首先,進(jìn)行問答文本的擴(kuò)展;然后對(duì)擴(kuò)展好的問答文本進(jìn)行關(guān)鍵詞短語的去雜與提取,對(duì)標(biāo)準(zhǔn)類庫的問題進(jìn)行處理得到標(biāo)準(zhǔn)短語并進(jìn)行擴(kuò)展,最后整合得到每個(gè)問題的相關(guān)領(lǐng)域短語。最后,加入原標(biāo)準(zhǔn)問題及對(duì)應(yīng)答案,完成領(lǐng)域詞典的建立。
對(duì)爬取到的原始問題進(jìn)一步擴(kuò)展,按照自然語言問法進(jìn)行數(shù)據(jù)標(biāo)注,盡可能地覆蓋所有自然語言問法。并且由此生成后續(xù)訓(xùn)練的問題文本數(shù)據(jù)集。
關(guān)鍵詞語提取是對(duì)一類問題(即一個(gè)標(biāo)準(zhǔn)問題與其對(duì)應(yīng)的擴(kuò)展問題組成的問題集)篩選出能代表其問題核心的詞語。首先對(duì)所有問題文本進(jìn)行分詞,使用停用詞表對(duì)詞堆進(jìn)行第一輪篩選,過濾掉大部分詞頻高但是沒有計(jì)算意義的詞;其次,對(duì)過濾好的詞使用詞頻權(quán)重計(jì)算,即進(jìn)行關(guān)鍵詞挖掘,最后進(jìn)行排序,算法如下。
算法1:getkeywords算法
輸入:所有問題分詞形成的詞堆Row,一類問題分詞形成的詞堆W,停用詞表stopwords,計(jì)算TF 值模型tf_Cal;計(jì)算IDF值模型idf_Cal。
輸出:某類問題的關(guān)鍵詞與權(quán)重值的字典dict。
通過對(duì)標(biāo)準(zhǔn)問題庫的標(biāo)準(zhǔn)問題進(jìn)行處理,同樣進(jìn)行分詞和去除停用詞。標(biāo)準(zhǔn)庫中的問題十分精簡(jiǎn),需要對(duì)其關(guān)鍵詞語進(jìn)行擴(kuò)充,迎合自然語言的多樣性,增大領(lǐng)域詞典的處理一詞多義的能力。主要做法是使用哈爾濱工業(yè)大學(xué)社會(huì)計(jì)算與信息檢索研究中心研發(fā)的“語言技術(shù)平臺(tái)(LTP)”進(jìn)行遠(yuǎn)程同義詞獲取,再使用HuggingFace 提供的可直接使用的Sentence-Bert 預(yù)訓(xùn)練模型對(duì)搜索到的同義詞與1.1.2 獲取的同類問題關(guān)鍵詞進(jìn)行相似性比對(duì),即保證所擴(kuò)充的同義詞對(duì)本問題有意義。
經(jīng)人工篩選過濾掉抽取錯(cuò)誤,選擇其中的200 個(gè)詞語作為測(cè)試語料。設(shè)置并比較12組過濾閾值后,最終確定閾值為0.75。在此閾值下,從實(shí)驗(yàn)語料中,共識(shí)別出同義詞48組,同義詞識(shí)別準(zhǔn)確率為50.24%,召回率為65.41%。實(shí)驗(yàn)整體準(zhǔn)確率不高、召回率高的原因歸結(jié)為詞向量的本質(zhì)是基于語料的訓(xùn)練結(jié)果,預(yù)訓(xùn)練模型在專業(yè)語義方面表現(xiàn)效果不是很好。因此先通過實(shí)驗(yàn)確定閾值μ,然后將原始詞語進(jìn)行自動(dòng)識(shí)別同義詞,然后人工進(jìn)行再次驗(yàn)證并篩選出高質(zhì)量同義詞形成詞典。
表1 同義詞識(shí)別結(jié)果舉例
短語擴(kuò)展算法如下
算法2:標(biāo)準(zhǔn)短語擴(kuò)展。
輸入:同類標(biāo)準(zhǔn)問題詞語表S;語料庫D;關(guān)鍵詞詞堆;詞向量模型tf_Sim;閾值μ。
輸出:擴(kuò)充詞語表E。
設(shè)計(jì)領(lǐng)域詞典的基本架構(gòu),本詞典的最小單元為一個(gè)標(biāo)準(zhǔn)問題,為這些標(biāo)準(zhǔn)問題加上問題編碼和分類編碼。將關(guān)鍵詞與擴(kuò)展詞作為該問題下的相關(guān)領(lǐng)域短語集,并整合問題與答案,形成最終的領(lǐng)域詞典。
領(lǐng)域詞典基本信息如下
如圖2 所示,使用領(lǐng)域詞典構(gòu)建階段產(chǎn)生的問題文本數(shù)據(jù)集進(jìn)行模型訓(xùn)練,得到最終識(shí)別問句的Sentence-Bert 詞向量模型。輸入用戶的問題后,先通過之前構(gòu)建好的領(lǐng)域詞典對(duì)其進(jìn)行冗余過濾,過濾后的問句再放入模型中進(jìn)行計(jì)算返回top1答案。
圖2 模型訓(xùn)練
對(duì)詞典構(gòu)建階段擴(kuò)展的問題數(shù)據(jù)集進(jìn)行處理,劃分為正負(fù)樣本作為輸入,使用HuggingFace 提供的Sentence_transformers 進(jìn)行數(shù)據(jù)處理,即將單個(gè)問題轉(zhuǎn)化成Bert可識(shí)別的InputExmple,并打上正負(fù)樣本的標(biāo)簽,再隨機(jī)打亂,按照8∶1 的比例劃分訓(xùn)練集和測(cè)試集。并且以huggingfac 提供的Sentence-BERT 中文預(yù)訓(xùn)練模型uer/sbert-base-chinese-nli為基礎(chǔ)進(jìn)行訓(xùn)練。
如圖2所示,把正負(fù)樣本喂給預(yù)訓(xùn)練的Sentence-BERT模型,然后獲得每個(gè)標(biāo)記的向量表示,用兩個(gè)一樣的BERT模型。把句子1喂給第一個(gè)BERT模型,把句子2 喂給第二個(gè)BERT 模型,然后計(jì)算模型輸出的標(biāo)記表示的均值(池化)。u,v分別表示輸入的2個(gè)句子的向量表示,|u-v|表示取兩個(gè)向量的絕對(duì)值,(u,v,|u-v|)表示將三個(gè)向量在-1 維度進(jìn)行拼接,因此得到向量的維度為3×d,d表示隱層維度。
令u代表句子1的表示,v代表句子2的表示。然后通過余弦相似計(jì)算這兩個(gè)向量表示的相似度:Similarity=cos(u,v)。
本系統(tǒng)由領(lǐng)域詞典、句向量模型、問題處理器三部分組成,如圖3所示。領(lǐng)域詞典用于過濾冗余詞、匹配關(guān)鍵詞、提供標(biāo)準(zhǔn)問句與回答;句向量模型用于計(jì)算去冗余句子的句向量以及該句向量與標(biāo)準(zhǔn)句子的文本相似度;問題處理器用于接受用戶問題并進(jìn)行文本預(yù)處理,調(diào)用領(lǐng)域詞典去冗余、調(diào)用句向量模型計(jì)算文本相似度。
圖3 模型訓(xùn)練及用戶問題匹配過程
如圖3所示,用戶輸入問題后,先進(jìn)行分詞,去掉停用詞,剩余的每個(gè)詞再與之前構(gòu)建的領(lǐng)域詞典的每個(gè)詞進(jìn)行文本相似性比對(duì),相似結(jié)果大于閾值υ 才可被認(rèn)定為是有效詞,再將剩余詞拼接起來,使用訓(xùn)練好的Sentence-BERT 模型將其與標(biāo)準(zhǔn)庫中的標(biāo)準(zhǔn)問題進(jìn)行文本相似計(jì)算,同樣設(shè)置閾值a,返回相似度大于a的top1問題,并對(duì)應(yīng)的答案。具體算法如下:
算法3:QueryDealing
輸入:用戶問題Query,領(lǐng)域詞典短語庫W,領(lǐng)域詞典問題答案對(duì)DicQAs,詞語相似度閾值e,句向量相似度閾值a,句向量模型Sbert,停用詞表stopwords。
輸出:相似度top1的答案A。
本文使用的數(shù)據(jù),是通過爬蟲爬取的某文旅網(wǎng)站的游客最關(guān)心的92個(gè)標(biāo)準(zhǔn)問題,例如幾點(diǎn)開門,能否提前預(yù)訂門票等。經(jīng)過對(duì)這些問題進(jìn)行同類擴(kuò)展和相似問題爬取,盡可能地覆蓋自然語言問法。最終得到2 027 個(gè)問答對(duì)的訓(xùn)練數(shù)據(jù)集和包含207 個(gè)問答對(duì)的測(cè)試數(shù)據(jù)集。
train_loss:該損失函數(shù)是將余弦相似度轉(zhuǎn)化為距離,然后計(jì)算誤差,并使用這種差異來更新模型的權(quán)重,從而使得模型能夠更好地學(xué)習(xí)到句子向量之間的相似性關(guān)系。
max_grad_norm:用于確保梯度在量級(jí)上不會(huì)變得太大。1的值確保梯度不超過某個(gè)閾值。
weight_decay:權(quán)重衰減項(xiàng),小樣本訓(xùn)練模型復(fù)雜度較低,應(yīng)設(shè)置為較小的值,如0.01,可以在一定程度上避免過擬合。
batch_size:在官方文檔中,提到了在使用sentence_transformer 進(jìn)行訓(xùn)練時(shí),建議使用較大的batch size,例如可以使用batch_size=32 或更大。然而由于實(shí)驗(yàn)設(shè)備沒有太高的顯存,這里設(shè)置為32。
對(duì)于短語二分類問題,本文使用準(zhǔn)確率P、召回率R 評(píng)估模型分類效果。根據(jù)真實(shí)類別與預(yù)測(cè)類別可以分為真正類(TP)、真負(fù)類(TN)、假正類(FP)、假負(fù)類(FN)。準(zhǔn)確率、召回率的計(jì)算公式如下:
其中,正樣本表示被分類為正類別的樣本,負(fù)樣本則表示被分類為負(fù)類別的樣本。在二分類問題中,準(zhǔn)確率指的是分類器正確分類的樣本數(shù)占總樣本數(shù)的比例,而召回率則是正類別樣本被正確分類的比例。
由表3可以看出,采用Sentence-BERT+領(lǐng)域詞典方法,其精確度比BERT模型+領(lǐng)域詞典增加了6.9%、比Sentence-BERT 模型增加了2.2%,而召回率比BERT模型+領(lǐng)域詞典提高了8.3%、比Sentence-BERT模型提升了7.1%??傮w效果比單獨(dú)采用Sentence-BERT模型和BERT模型+領(lǐng)域詞典有所提升。
表3 分類模型性能比較
本文構(gòu)建的Sentence-BERT+領(lǐng)域詞典的訓(xùn)練集準(zhǔn)確度為93.2%,預(yù)測(cè)集準(zhǔn)確度為91.0%,通過比較BERT+領(lǐng)域字典、Sentence-BERT、Sentence-BERT+領(lǐng)域詞典三種不同的模型,與實(shí)驗(yàn)結(jié)果的對(duì)比,可以得出以下結(jié)論:
1) 當(dāng)使用領(lǐng)域詞典進(jìn)行模型擴(kuò)展時(shí),Sentence-BERT+領(lǐng)域詞典模型可以更好地將特定領(lǐng)域的語法和詞匯考慮到嵌入空間中,從而提高了模型性能。還可以在不同的句子之間建立更準(zhǔn)確的相似度關(guān)系。相比之下,BERT 模型可能會(huì)受到數(shù)據(jù)稀疏和詞匯多樣性的限制,而且對(duì)于基于句子的任務(wù),其表現(xiàn)可能不如Sentence-BERT 模型。因此,Sentence-BERT+領(lǐng)域詞典比BERT 模型+領(lǐng)域詞典更適合處理基于句子的特定領(lǐng)域任務(wù),具有更好的性能。
2)而Sentence-BERT+領(lǐng)域詞典方法,該模型結(jié)合了Sentence-BERT 模型和BERT+領(lǐng)域詞典的優(yōu)點(diǎn)。通過使用帶有Sentence-BERT 的領(lǐng)域特定字典,可以在特定領(lǐng)域主題中以更高的準(zhǔn)確度捕獲句子的語義。相比之下,單獨(dú)使用Sentence-BERT 模型因?yàn)闆]有對(duì)這些專業(yè)自然語言問題語句的冗余部分進(jìn)行處理,在實(shí)驗(yàn)結(jié)果上顯然遜色于有領(lǐng)域詞典的實(shí)驗(yàn)組。因此,使用Sentence-BERT+領(lǐng)域詞典的方法在處理自然語言與專業(yè)文本時(shí)更有優(yōu)勢(shì)。
3) 總體來說,與傳統(tǒng)的BERT 模型相比,使用Sentence-BERT模型的優(yōu)點(diǎn)包括更好的句子級(jí)語義理解,而使用特定領(lǐng)域的字典可以提高Sentence-BERT模型在特定領(lǐng)域上下文中的準(zhǔn)確性。
本文提出了一種基于領(lǐng)域詞典和Sentence-BERT的智能問答系統(tǒng)。通過實(shí)驗(yàn)證明,本方法在進(jìn)行問答自然語言匹配的效果非常好。但是仍在實(shí)驗(yàn)中發(fā)現(xiàn),當(dāng)兩個(gè)不同問題語義非常相近時(shí),領(lǐng)域詞典去問句冗余之后計(jì)算的兩個(gè)句子仍然十分相近。未來將會(huì)嘗試進(jìn)一步研究通過增添語義的方式更高準(zhǔn)確地識(shí)別問句。