唐衛玲 胡廣朋
(江蘇科技大學計算機學院 鎮江 212003)
問答系統的概念最早是在二十世紀六十年代被提出,目的是希望計算機可以像人腦一樣理解人們用自然語言進行的提問然后給出答案。目前,一個成熟的問答系統的工作流程可分為問句處理、智能檢索以及答案生成三步[3]。首先要將用戶提問的問句解析成與知識庫中存儲的信息形式一樣的結構化表達及關鍵字,然后根據解析出的結構化表達和關鍵字從知識庫中匹配出相關的問題模板以及答案,再把上述結果交由答案處理模塊進一步分析處理,最終將處理整合后的答案返回給用戶。簡而言之,問答系統就是根據用戶的提問去知識庫中匹配相應的問題和答案。
為了提高問題匹配的準確率和效率,本文提出了一種基于規劃識別的問題匹配方法。采用加權目標圖的規劃識別方法[1],將用戶提問問句的關鍵詞、知識庫中的問題以及問題的構成詞作為目標圖的節點,詞語在句子中的權重和詞語之間的相似度作為支持程度。
加權目標圖是一種加權分層有向與或圖,由節點和加權邊組成[7]。節點代表動作,加權邊是節點之間的連接,代表動作之間的支持關系,其權值表示節點之間的支持程度[4]。節點之間存在整體與部分、抽象與具體兩種關系,在加權目標圖中分別用帶圓弧的虛線和實線將其連接起來[4],效果如圖1所示。
由圖1可知,在設定的加權目標圖中,將用戶提問的問句中提取出來的關鍵詞作為已觀察到的動作序列,將知識庫中的問題作為要識別的目標,同時在問題和構成詞、構成詞和關鍵詞的推導計算中分別引入了詞語相似度和權重來表示它們之間的支持程度。

圖1 加權目標圖
由上述目標圖的設定可知,這里僅要考慮具體對抽象的支持程度以及部分對整體的支持程度,定義如下。
1)部分對整體的支持程度
若規劃a1,a2,…,ai,…an是規劃a的組成部分[8],則每個部分ai(1≤i≤n)對整體a的支持程度為p(a|ai),在本文中將其設置為該構成詞在其問題句中所占的權重。
目前,比較常見的詞語權重計算方法為TF-IDF,該方法就是根據特征詞在當前文檔中出現的次數以及在整個文檔庫中出現的次數來判斷其重要程度[5]。這種算法的缺點在于單一的依賴詞頻進行權重計算,因此本文將詞語的詞性、長度、位置信息加入到權重計算中,同時也將同義詞問題考慮了進來,改進后的權重計算如式(1)所示:

其中,∑k score(wk)表示該篇文檔中所有特征詞的詞語得分之和,score(wi)表示該詞語的得分,計算公式為

其中,fre q(wi)表示詞頻-逆文檔頻率,計算公式為

其中,ni,j表示該詞語在文檔dj中出現的次數,∑k nk,j表示文檔dj中所包含的詞語總數;|S|表示整個文檔庫中文檔的總數目表示文檔?庫中包含詞語ti或其同義詞的文檔的數目。這里在傳統IDF算法基礎上進行了改進,在計算逆文檔頻率時,將包含給定特征詞的同義詞的文檔也統計在內。這是因為考慮到不同用戶對同一問題的表述可能是多種多樣的,而知識庫中存儲的問題-答案對是唯一的;此外,知識庫中存儲的是簡短的問題-答案對,而一個簡短的句子,一般不會出現兩個語義完全一致的詞語,因此如果不把包含特征詞的同義詞的文檔也統計在內,就會導致結果出現較大偏差。
Pos(wi)表示詞語的詞性權重,規定若該詞為人名、地名、機構名這類名詞則權重為1,其他名詞權重為0.5,動詞權重為0.4,形容詞權重為0.3,除此之外的詞性權重均為0。Len(wi)表示詞語的長度權重,若詞長大于3,則將其權重定義為中l eni為該詞長度,Lmax為該句中最長的詞語的長度。Loc(wi)表示詞語的位置權重,規定位于句首的詞語權重為0.6,其他位置為0.4。
2)具體對抽象的支持程度
若規劃a1,a2,…,ai,…an都是抽象規劃a的具體化[8],則每個具體規劃ai(1≤i≤n)對抽象a的支持程度為p(ai),抽象a最終的概率為max{p(ai)}。在本文中將具體對抽象的支持程度設置為問句中的關鍵詞與問題構成詞之間的相似度,這里采用Simhash來計算相似度。
本文采用基于加權目標圖的規劃識別算法來實現問答系統的問題匹配環節,其基本思想是將加權目標圖、觀察到的智能體的動作集合o={o1,o2,…,on},在本文中即為問句中提取出的關鍵詞序列以及一個給定的閾值φ作為算法的輸入,經過一系列的處理、計算最終返回給用戶一個帶有各種結果可能出現概率的、完整的加權目標圖,具體過程描述如下。
初始化目標圖:利用全部已觀察到的動作集合o={o1,o2,…,on}構造初始目標圖,oi(i=1,2,…,n)為從用戶提問的問句中提取出來的關鍵詞序列。
生成完整的加權目標圖,求出最佳匹配問題:這里采用自底向上的擴充目標圖的解法,首先根據目標圖,找到其中每個節點的父節點,若子節點xi(i=1,2,…,n)出現則其父節點a出現的概率p(a)計算公式如下。
1)若子節點xi(i=1,2,…,n)與其父節點a之間是具體與抽象的關系,則父節點出現概率p(a)為

2)若子節點xi(i=1,2,…,n)與其父節點a之間是部分與具體的關系,p(a)則為

然后將1)或2)中求得的概率p(a)和初始設定的閾值φ進行比較,若p(a)>φ,則將a保留在目標圖中,否則刪掉節點a以及其后繼所有的節點。這樣就能得到完整的加權目標圖,從而通過已觀察到的動作得到所有可能結果以及各個結果的可能性大小,選擇概率最大的識別結果作為最終結果。
下面以簡化的問答知識庫為例,驗證基于加權目標圖的問題匹配方法的有效性。現假設知識庫中僅有“土豆發芽了還能吃嗎?”和“土豆皮是干垃圾還是濕垃圾?”兩個問題句。經過處理之后,“土豆發芽了還能吃嗎?”主要包含3個構成詞:土豆、發芽、吃;“土豆皮是干垃圾還是濕垃圾?”主要包含3個構成詞:土豆皮、干垃圾、濕垃圾。當用戶提問“馬鈴薯的皮屬于什么垃圾?”,根據上述加權目標圖的定義,構造問答規劃知識圖,如圖2所示。

圖2 問答規劃知識圖
已觀察到的動作為“馬鈴薯”、“皮”和“垃圾”,運用上述加權目標圖算法進行求解,生成的目標圖如圖3所示。

圖3 完整加權目標圖
由圖3可知,用戶提問的問句是“土豆發芽了還能吃嗎?”的概率為0.44,而提問“土豆皮是干垃圾還是濕垃圾?”的概率為0.73,因此系統最終判定用戶輸入的問句為“土豆皮是干垃圾還是濕垃圾?”,顯然這個判定是正確的。
問答系統的運行環境為Windows10操作系統、Tomcat-7.0.70服務器、MySQL數據庫、JDK1.8、Eclipse Mars2。
本實驗使用維基百科的百科問答數據集。其中所有數據都是維基百科上,截止到2018年的百科問答數據,總共有150萬個經過事先篩選的、擁有較高參考價值的問題和答案。所有的問題都有自己所屬的類別,數據集中問題的類別總數為492,其中相關問題個數超過10個的類別有434類。此外,本文以“沃森”機器人的Java開源版本Question Answering System(QASystem)為基礎,構建了基于規劃識別的QASystem(Plan Recognition Question Answering System,PR-QASystem),然后將兩者進行對比。
本文中的實驗結果使用P-R曲線作為評估指標。其中,P代表precision(精準率),R代表recall(召回率)。P-R曲線就是以這兩個屬性為變量繪制出的曲線,其中精準率為縱坐標,召回率為橫坐標。精準率的原理見式(6):

本文選取P-R曲線作為實驗結果評估標準,經過多次調整閾值,得到了本文基于加權目標圖的PR-QASystem與QASystem的P-R曲線如圖4所示。

圖4 系統P-R曲線圖
一般認為,如果一個算法的P-R曲線完全包裹住了另外一個算法的P-R曲線,則說明前者的性能要優于后者,否則按照其與坐標軸圍成的幾何圖形的面積大小進行判斷,面積大的則性能更好,顯然本文基于加權目標圖的問題匹配方法在一定程度上提高了系統的性能。
本文以用戶提問問句的關鍵詞、知識庫中的問題以及問題的構成詞為節點,以詞語在句子中的權重和詞語之間的相似度為支持程度,構建了加權目標圖,實現問答系統的問題匹配環節。通過實驗證明,這種融合了改進后的權重和相似度的加權目標圖方法在問答系統中具有一定的可行性與有效性,能夠幫助系統更加準確地匹配出正確答案。但是本文是在分詞結果是完全正確的基礎之上進行的,且僅僅是利用關鍵詞進行問題匹配而未考慮上下文語境、語義,因此本系統還有很大的改進空間。