喬奮鳳,朱欣娟,高 嶺
(西安工程大學 計算機科學學院,陜西 西安 710600)
智能問答系統的構建方法主要分為三種:基于模式模板匹配用戶問題句式的方法、基于相似度匹配問題庫的方法和基于知識圖譜實時檢索的方法。Karpagam等人[1]使用模式模板的方法對用戶提交的查詢進行問題類型的識別,依賴于早期構建的模式模板的完備性。Cai等人[2]使用問題對匹配的方法來實現限定域內的中文智能問答。該類方法依賴于FAQ庫的建立,不能根據用戶需求實時更新FAQ庫。知識圖譜通過“實體-關系-實體”的形式來保存數據,可以有效地組織和表示知識,從而使知識本身得到有效利用[3]。因此,基于知識圖譜的智能問答系統成為智能問答系統構建的主流。
基于知識圖譜的智能問答系統通常由用戶意圖識別、數據處理和答案檢索[4]三個模塊構成。在用戶意圖識別階段,如何分析用戶問題語句,獲取用戶意圖,最常用的方法是將用戶問題語句進行分類,把分類結果看作用戶意圖。
基于知識圖譜的智能問答系統目前仍處在起步階段,進一步的發(fā)展需要從淺層語義理解逐步過渡到深層語義理解[5]。要實現深層語義理解,重點應該關注用戶意圖識別,也就是問題分類。在用戶意圖識別方面,各類學者做了大量研究工作。Lim等人[6]針對文本數據以單詞表示的特點,提出了基于語義張量空間模型的神經網絡結構,從而對問題語句進行建模。Qiao等人[7]使用基于卷積神經網絡(convolutional neural networks,CNN)的方法自動將句子歸類。Xu等人[8]提出一種改進的基于CNN的跳格法的中文文本分類方法,并證明該方法比基于CNN的單熱方法具有更高的性能。余本功等人[9]使用多層級注意力卷積長短時記憶模型(multi-level attention convolution LSTM neural network,MAC-LSTM),它結合卷積神經網絡與長短時記憶模型,并行提取詞匯級特征,以此對用戶問題語句進行建模,并實現問題分類,實驗證明使用MAC-LSTM對用戶問題類型進行識別,準確率遠遠大于使用傳統深度網絡模型進行用戶問題類型識別。Wu等人[10]將注意力機制應用于文本分類中,驗證了注意力機制的有效性。
目前智能問答系統普遍使用單層網絡模型分析用戶語句,由于單層網絡模型識別能力的限制,造成對問題中的細節(jié)特征提取不足。如何充分挖掘用戶問題中的語義信息,進行深層次用戶意圖識別,提高問題的分類精度是智能問答系統亟待解決的問題之一。同時,沒有一個智能問答系統是一成不變的。隨著用戶需求的變化和知識的更新,智能問答系統中原先設定的問題類型和對應的知識也該隨之迭代更新。常規(guī)的方法是使用機器學習、深度學習對網絡上的知識進行提取,以此來豐富系統知識。此方法依賴大量的用戶數據,但是在系統搭建之初是缺乏大量用戶數據的。因此,如何對系統中現有的問題類型和知識進行動態(tài)更新也是智能問答系統有待解決的問題之一。
針對以上智能問答系統構建存在的問題,筆者做了如下工作:
(1)使用雙層網絡模型進行用戶意圖的識別,重點關注了用戶問題語句中的關鍵詞,把它作為用戶問題語句中的細節(jié)特征,作為輸入信息添加到用戶問題類型的識別模型中,實現了智能問答系統的深層次用戶意圖識別。
(2)為了使智能問答系統擁有更多的智能,該文提出了一種自適應擴展機制,利用人工和機器自動算法相結合的方式進行問題類型知識庫的更新,實現了智能問答系統的擴展。
(3)在步驟(1)和(2)的基礎上設計了針對學科課程問答的智能問答系統,該系統包括三個模塊:意圖識別、答案檢索、數據更新。意圖識別模塊使用(1)中的基于關鍵詞分離的用戶意圖識別技術;答案檢索模塊使用基于用戶典型案例庫的方法在知識圖譜中進行答案的檢索;數據更新模塊使用(2)中的基于自適應擴展技術的智能問答系統優(yōu)化方法。
領域智能問答系統依賴特定領域知識,該文以學科課程領域智能問答系統為例展開研究。智能問答系統后臺數據庫的構建包括兩個內容:用戶問題案例庫的構建和學科課程領域知識圖譜的構建。
根據用戶問題語句中的已知條件、待求答案、答案檢索方式,將用戶常見問題進行分類,分別對應每類用戶意圖,整理為用戶問題案例庫。構建好的典型用戶問題案例示例如表1所示。
表1 典型用戶問題案例示例
當對用戶問題在知識圖譜中進行答案檢索時,首先針對該問題類型的答案檢索預設檢索規(guī)則。而針對知識圖譜來說,該檢索規(guī)則應該和實體關系進行一一對應。但實際上,為了避免知識圖譜存儲的冗余,各種實體關系之間是可以進行推理的,所以最終呈現的基本實體關系邊事實上與該檢索規(guī)則不是一一對應的關系。因此,需要對問題類型進行一定的整理,以便和知識圖譜的基本實體關系進行一一對應。將問題類型定義如下:
定義1:問題類型。按照不同答案檢索規(guī)則分為三類,分別為 “屬性類問題”、“推理類問題”和“關系類問題”。對應知識圖譜的實體和屬性,檢索規(guī)則為對屬性進行檢索的問題類型稱為“屬性類問題”;檢索規(guī)則可以和知識圖譜中的基本實體關系進行一一對應的問題類型稱為“關系類問題”;檢索規(guī)則和知識圖譜中的基本實體關系不能達到一一對應,但是可以通過知識圖譜的基本實體關系推理得到,稱這類型問題為“推理類問題”。
這三種問題類型對應的知識圖譜檢索規(guī)則如表2所示。
表2 三類問題類別的檢索路徑規(guī)則
領域知識圖譜構建的基礎是構建本體庫[11]。結合用戶問題數據的特征設計本體模型[12],設計好的教育技術領域學科課程知識圖譜本體模型如圖1所示。
圖1 學科課程知識圖譜本體模型
文中學科課程知識圖譜的初始數據來源為課程教學大綱,后續(xù)根據網絡爬蟲爬取維基百科的同類型詞條對知識圖譜進行數據擴充。
基于關鍵詞的用戶意圖識別也就是把用戶意圖分為兩層,第一層是用戶問題語句中的關鍵詞,第二層是用戶問題語句所屬的問題類型。
分析發(fā)現,用戶問題中的關鍵詞很大程度上影響了用戶問題分類結果,也影響了用戶意圖判斷,例如:
句子1:計算機網絡管理這本書是哪門課上學的?
句子2:二叉樹這個知識點是在哪門課上學的?
在這兩個句子中,語法結構類似,所包含的詞匯大體相同,僅有關鍵詞不同,導致問題類型和檢索路徑也不同,具體如下:
(1)關鍵詞類型不同:句子1中的關鍵詞為“計算機網絡管理”,屬于“教材”實體類別;句子2中的關鍵詞為“二叉樹”,屬于“知識點”實體類別。
(2)用戶問題類型不同:句子1所屬的問題類型為“教材課程”,句子2所屬的問題類型為“知識課程”。
(3)答案檢索路徑不同:對用戶答案檢索時,句子1的答案檢索規(guī)則為從“教材”出發(fā),沿著“教材課程”邊進行檢索;句子2檢索規(guī)則為從“知識點”出發(fā),沿著“知識課程”邊進行檢索。
綜合以上分析,用戶問題中的關鍵詞對用戶意圖識別有重要作用。常規(guī)的用戶意圖識別,如文獻[7-9],缺乏對這種細節(jié)特征的充分利用,對用戶語句整體進行問題類型提取,對問題類別識別率造成影響。
基于關鍵詞分離的用戶意圖識別由兩個子模型組成,分別為用戶問題關鍵詞識別模型和用戶問題類型識別模型,總體結構設計如圖2所示。
圖2 基于關鍵詞分離的用戶意圖識別模型結構
圖2首先對用戶意圖進行初步提取,提取結果為用戶語句中的關鍵詞及關鍵詞類別,將提取結果作為用戶的第一層意圖,用戶第一層意圖識別模型使用的是雙向長短時記憶網絡和條件隨機場模型。
識別到關鍵詞后,為了使識別到的用戶意圖更充分,也為了后期更方便地檢索答案,根據關鍵詞的數目對問題句式進行區(qū)分。對問題句式做如下定義:
定義2:問題句式。根據問題語句中關鍵詞數目的不同,將問題句式分為三種,具體如下:
If關鍵詞數目≥3:
then問題句式為“判斷句式(選擇判斷)”;
If關鍵詞數目=2:
then問題句式為“判斷句式(是否判斷)”;
If關鍵詞數目=1:
then問題句式為“搜索內容句式”。
例如:
“判斷句式(是否判斷)”,如“《可視化程序設計》是選修課嗎”,關鍵詞為“可視化程序設計”和“選修課”,數目為2個;
“判斷句式(選擇判斷)”,如“《地理信息系統》是網絡工程專業(yè)開設的還是軟件工程專業(yè)開設的”,關鍵詞為“地理信息系統”、“網絡工程”、“軟件工程”,數目為3個;
“搜索內容句式”,如“首先學習哪方面的知識會對我學習二叉樹知識有幫助” ,關鍵詞為“二叉樹”,數目為1個。
在用戶問題類型識別模型中,首先使用依存句法分析工具[13]對用戶語句進行分析,得到分詞結果和依存句法分析結果,然后融合關鍵詞、分詞、詞性和依存句法分析結果,綜合作為用戶第二層意圖識別模型的初始特征進行特征提取。用戶第二層意圖識別模型使用的是融合了注意力機制的雙層雙向長短時記憶網絡(double-layer BILSTM-att),雙向長短時記憶網絡(bidirectional long short term memory network,BILSTM)可以有效利用文本的前后長距離特征[2],使用雙層特征提取可以使得特征提取更充分。采用注意力機制(attention)可以通過計算特征與結果的相似度差值對特征的權重進行調整[2]。添加了關鍵詞特征的用戶問題類型識別模型結構如圖3所示。
圖3 添加關鍵字特征的用戶問題類型識別模型結構
最后,綜合用戶的兩層意圖,共同組合為用戶的最終意圖。這樣,使用雙層網絡模型,關鍵詞特征就更充分地被利用起來了。
針對三種問題句式,構建的檢索方案如表3所示。
表3 三種問題句式的答案檢索方案
根據表3的答案檢索方案,以及用戶問題案例庫中的檢索路徑,對用戶意圖進行檢索,可以檢索到用戶所詢問的知識詞匯,將該詞匯插入到設定好的回答語句槽中,組合完成的語句直接作為答案進行輸出。
另外,當用戶檢索問題時,首先使用基于同義詞詞林的詞語相似度計算方法[14]將關鍵詞與實體詞典中的實體作對照,作為對不規(guī)范關鍵詞描述的修正,輸出該實體對應問題的答案,即為用戶所提問題的答案。當用戶對給出的答案仍不滿意時,可以選擇對答案進行評分。
當系統輸出答案時,允許用戶對答案進行評分,系統將接收評分,并將其寫入反饋數據庫,自適應擴展就在于定期對反饋數據庫中的用戶反饋進行處理。
定期對反饋數據庫中的數據進行整理。用戶反饋主要為兩種:一種是需要擴充用戶問題案例庫,即用戶提出新的類型問題。另一種是答案不在知識庫中。對于前一類反饋,首先使用基于句法結構的層次聚類算法進行問題的初步聚類;然后人工對新問題類型進行命名,更新用戶問題案例庫;最后通過網爬數據及官方數據進行知識圖譜實例更新。對于后一類反饋,只需擴充數據來源,進行知識圖譜實例更新即可。
自適應擴展智能問答系統,也就是自適應擴展用戶問題案例庫,重點在于對用戶反饋進行分析處理??紤]用戶語句的特點,使用基于句法結構的層次聚類算法[15]。文獻[15]表明在中文文本領域,該算法能夠準確地進行聚類分析,并能得到很好的聚類效果。
經分析發(fā)現,句法結構對文本含義的影響很大,比如用戶問題語句為:
A.計算機包含數據庫嗎?
B.網絡包含TCP/IP嗎?
C.我的計算機里面有數據庫軟件嗎?
如果僅考慮文本之間的相似度,由于句子A和句子C中都包含 “計算機”和“數據庫”,那么A和C將被劃分為一類,但是考慮用戶意圖,句子A是詢問“計算機”這門課中是否包含“數據庫”這個知識點;句子B是詢問“網絡”這門課中是否包含“TCP/IP”這個知識點;句子C是詢問“計算機”這個設備中是否包含“數據庫”軟件。所以句子A和B屬于同類型問題。根據分析發(fā)現句子A和句子B句法結構類似,均為a包含b的句式,可以先把這樣的句式提取出來,再進行下一步聚類。
對于問題文本來說,在聚類前并不知道將要操作的數據有多少種類型,故使用分層聚類算法,預先不劃定聚類簇數,而是在操作中對聚類簇數進行更新。在聚類時,計算待比較文本的相似度,如果相似度在閾值內,則進行更新;如果任意兩個句子的相似度都不在閾值內,那么結束聚類操作。
對如下兩個數據預處理后的句子Si和Sj:
Si[(w1i,w1i')p1i,(w2i,w2i')p2i,…,
(wmi,wmi')pmi]
Sj[(w1j,w1j')p1j,(w2j,w2j')p2j,…,
(wnj,wnj')pnj]
其中,w1i,w1i',w2i,w2i',…,wmi,wmi',w1j,w1j',w2j,w2j', …,wnj,wnj'表示經過句法結構分析后的詞;p1i,p2i,…,pmi,p1j,p2j,…,pnj表示句法分析符號。
句子Si和句子Sj的相似度simij的計算公式為:
(1)
match(Ski,Sj)=max{similarity(wki,w1j)+
similarity(wki',w1j'),…,
similarity(wki,wnj)+
similarity(wki',wnj')}
(2)
其中,SCounti為句子Si的有效搭配對數,SCountj為句子Sj的有效搭配對數,Ski為句子Si的的匹配對。match為匹配函數。similarity(wi,wj)為相似函數,結果通過計算同義詞詞林中wi和wj對應的義項編號的距離得到[14],max為最大值函數。
在結合新簇后,需要對簇中心點進行更新,中心點的計算方法為:計算簇中每個句子與其余句子的平均相似度,平均相似度最大的句子為該簇的中心點。
基于句法結構的文本聚類方法步驟如下:
第一步:數據預處理。
(1)提取關鍵詞[16],避免關鍵詞語義對文本分析的影響。處理方法為:使用意圖識別模型的第一層模型提取用戶問題中的關鍵詞,并將關鍵詞所代表的詞語用符號表示,不是關鍵詞的內容繼續(xù)用原來的詞語表示。根據第1部分的描述,關鍵詞的種類有6種,關鍵詞及對應符號為:“課程”->C、“教材”->B、“課程性質”->Y、“考試形式”->T、“專業(yè)”->S、“知識點”->K。
(2)提取文本的句法結構。
分析文本的句法結構,使用中文依存句法分析工具[13]進行句法結構分析,并將句法結構分析的結果作為待比較文本的替代。
對于原句子:“數據通信原理考試形式是什么”, 經過預處理后的結果為“(C, '考試形式'), ('考試形式', '是'), ('是', 'root'), ('什么', '是')”。其中,root是句法結構分析的根,所有句法結構關系都由這個根發(fā)出,這個根由文獻[13]的句法結構分析工具自動生成。
第二步:分層聚類。
對預處理后的兩個句子進行分層聚類。
基于句法結構的分層聚類算法描述如下:
算法:基于句法結構的分層聚類算法。
輸入:預處理后的文本序列DataList;相似度閾值T;
輸出:聚類后的結果conclusion。
1: for sen in DataList:
2: 計算相似度最大的兩個文本(sen1,sen2)的相似度
3: if sim≥T:
4: conclusion. append(sen1,sen2) // 把這兩個句子加入聚類結果
5: 計算聚類簇的中心點center
6: DataList. delete (sen1, sen2)
7: DataList. append(center) // 用中心點替換原來的兩個句子
8: else:
9:聚類結束,輸出結果
進行基于句法結構的層次聚類后,形成C1,C2,…,Cm共m種新的問題類型,為了保證問答助手的準確性,人工對聚類結果進行二次篩選,并給新的問題類型命名,將其寫入用戶問題案例庫中。新類型問題的解決依賴大量知識圖譜實例,故采取網絡爬蟲和擴充數據來源的方式進行知識圖譜實例更新。
在本節(jié)中,使用該文提出的方法構建了一個基于自適應擴展的智能問答系統,并在教育技術領域用戶常用問題集上進行了測試。
基于知識圖譜的智能問答系統數據一方面依賴知識圖譜的完備性,另一方面依賴問答分類標準。對于教育技術領域的問題分類,目前還沒有公開的數據集,而其他領域的數據集也不適用于該領域。為了解決這一問題,利用某大學計算機科學學院的課程大綱構建了面向學科課程知識問答的知識圖譜雛形,并使用爬蟲技術爬取了同類型實體詞條進行擴充。
用戶意圖識別的數據來源有兩個:
(1)公開領域有各種類型的用戶問題語句,根據課程大綱數據在這些問題的基礎上進行修改。
(2)網爬各大教育平臺及教務系統的學生問題。
教育技術專家制定教育技術領域的數據標注標準,使用眾包的方式對使用以上兩種方式收集的用戶語句進行標注。為了避免小樣本數據造成的過擬合,提高模型魯棒性,首先對樣本中的名詞使用同義詞替換的方式進行數據增強,最終生成針對教育技術領域面向學科課程的智能問答系統用戶意圖識別小型數據集CCID(Chinese course intention dataset)。
在意圖識別的實驗中,使用準確率、召回率、F1值作為意圖識別結果的評價指標。其中,準確率指在分類結果為某類別的樣本中,實際上屬于該類別的樣本個數占該樣本個數的比值;召回率指實驗分類結果為某類別的樣本個數占實際上應屬于該類別的樣本總數的比值;F1值(f1-score)為準確率與召回率的算術平均數。
文本聚類的判斷標準為準確率,使用公式(3)、公式(4)來計算用戶問題類型聚類結果的正確率precision。
(3)
(4)
其中,Ci表示聚類結果中代表文本類型為i的聚類簇的聚類正確率;n表示聚類簇數;Si表示聚類結果為文本類型i的聚類簇中文本的總個數;Counti表示聚類結果本該為文本類型i的文本個數。在以上公式中,i的取值范圍均為1~n。
進行兩個實驗來驗證提出的自適應擴展模型。
第1個實驗驗證使用關鍵詞分離的方法提高了用戶意圖識別的準確率。總體采用十次十折交叉驗證的方式進行測試。本實驗將文中方法與其他文獻中的網絡模型結果進行多次實驗對比。表4為文中雙層模型的超參數。實驗得到的數據結果如表5所示。
表4 模型參數設置
表5 文中方法與其他網絡模型對問題 類型識別的結果對比
從實驗結果可以得出,文獻[9]的MAC-LSTM使用的雙層網絡模型較傳統的神經網絡有明顯的效果提升。而文中提出的模型優(yōu)于MAC-LSTM,具體表現為:在文中用戶意圖識別模型不添加關鍵詞特征時,比MAC-LSTM的正確率提高了7%,召回率提高了3%,F1值提高了5%,原因是文中在問題類型識別模型中使用了雙層雙向長短時記憶網絡,比普通的長短時記憶網絡能獲取更多的特征;在文中用戶意圖識別模型添加關鍵詞特征時,比MAC-LSTM的正確率提高了14%,召回率提高了8%,F1值提高了11%。這是由于相比于MAC-LSTM,文中提出的方法將文本中的關鍵詞作為特征。使用文中提出的用戶意圖識別模型,添加關鍵詞特征比不添加關鍵詞特征的準確率提高了7%,召回率提高了5%,F1值提高了6%。由此說明,添加關鍵詞特征的雙層意圖識別模型是有效的。這是因為關鍵詞特征在問題類型識別中占有很大的作用。比如對于“課驗知識”和“先驗知識”,在不添加關鍵詞作為特征時,這兩類類型易混淆,它們的含義都是已知一個類別,求這個類別的先驅知識。如果不考慮關鍵詞特征,光從語義上來看,并不能確認某一個問題表示的是課驗知識還是先驗知識。但是添加了關鍵詞特征后,如果關鍵詞類別為“知識點”,那么這個問題就被劃分為“先驗知識”,如果關鍵詞類別為“課程”,那么這個問題就被劃分為“課驗知識”,由此可見,提前進行關鍵詞的識別在一定程度上可以減輕問題類型識別的混淆度。
第2個實驗是選擇在哪個閾值下基于句法結構的分層聚類算法能得到聚類最好效果。在其他條件不變的情況下調整閾值T,并計算最終得到的聚類正確率,得到的實驗結果如圖4所示。圖中橫坐標為閾值,縱坐標表示在該閾值下聚類結果的正確率。
圖4 改變閾值對基于句法結構的分層聚類算法的正確率的影響對比
從圖4中可以看到,當閾值T取值為0.58時,聚類的正確率達到了76%,在這樣的正確率下,可以在一定程度上更新智能問答系統的后臺數據。
通過以上實驗結果,可以得到結論:添加了自適應擴展機制后,智能問答助手有更好的用戶滿意度。究其原因,是因為深度學習方法需要大量用戶數據,而智能問答系統搭建之初,用戶數據較少,文中自適應擴展機制使用的是基于句法結構的層次聚類算法,這種方法依賴較少的數據,在一定程度上可以滿足對智能問答系統數據更新的需求。另外,該自適應擴展機制使用定期更新的方式對用戶反饋進行處理,可以動態(tài)滿足用戶的需求。同時,定時對后臺數據進行更新,也有助于構建更可靠的智能問答系統。
該文提出一種基于自適應擴展機制的智能問答系統構建方法,并以學科課程領域知識問答為例。首先構建用戶問題案例庫和知識圖譜;然后對于目前大多數智能問答系統使用單層模型不能充分利用用戶語句中的細節(jié)特征、不能獲取用戶深層語義、從而不能更好地識別用戶意圖的問題,提出基于關鍵詞分離的雙層模型識別用戶意圖方法。實驗表明,該方法可以有效提高用戶問題意圖的識別精度。針對系統構建之初用戶數據量較少,智能問答系統需要進行后臺優(yōu)化的問題,首先使用基于句法結構的層次聚類算法對用戶語句進行初步聚類,然后人工對聚類結果進行二次核查并更新用戶問題案例庫,達到智能問答系統自適應擴展的目的。提出的基于關鍵詞分離的雙層模型識別用戶意圖方法和自適應擴展機制,基于特定領域知識圖譜,可以進行拓展應用。目前智能問答系統構建技術仍有很大的發(fā)展空間,未來的研究工作將更多著眼于尋求在自動聚類時,提高識別新問題類型的成功率的方法,以此進一步減少人工參與。