周艷平 李金鵬 蔡 素
(青島科技大學信息科學技術學院 山東 青島 266061)
隨著智能時代的來臨,問答系統引起了國內外研究和教育機構的廣泛關注。問答系統按問題集來源可分為三類[1]:基于常問問題的問答系統、基于Internet日志的開放域問答系統和基于百科全書知識庫的知識問答系統。
在中文問答系統中,問句信息匹配最大的難點就是一詞多義問題,如何準確地計算中心詞之間同義項的相似程度是當前研究的重要課題[2]。現有的計算句子相似度的方法可以分為四類:文字匹配方法、概率方法、詞頻-逆向文檔頻率向量方法和語義依存方法。文字匹配方法基于兩個句子中包含的相同詞或同義詞的數量來計算句子相似度,如基于overlap的改進方法[3]、余弦相似度算法。概率方法通過借助語言模型框架,利用概率方法計算兩個句子的相似度[4]。詞頻-逆向文檔頻率向量方法需要計算句子中心詞的詞頻和權重,然后生成頻率向量組,使用余弦相似度計算方法得出句子之間相似程度[5]。上述三種方法只通過句子中心詞的表意來比較相似度,無法對整個句子語法結構進行分析判斷。語義依存方法借助本體或字典,對詞進行語義分析[6-7]以解決句法問題。但傳統的語義依存法不能從詞義的角度上考慮句子相似度信息,因此會出現句法一致,句子相似度低的情況。
本文提出了一種基于同義詞詞林的句子語義相似度方法,采用同義詞詞林的編排及其語義特征,完成多義詞的信息匹配,通過加權詞形、詞序和語義的相似性來獲得最終句子相似程度。然后將本文提出的方法應用于常問問題的問答系統中,用來提高問句匹配的準確率。
在語言學中,句子由中心部分(如主語、謂語和賓語等)和修飾語部分(如定語、狀語和補語等)組成。中心部分在句子中起主導作用,本文只考慮句子中心部分的相似性。一般來說,句子中的主語和賓語通常是名詞或代詞,謂詞通常是動詞或形容詞。在計算句子相似度時,重點考慮這些中心部分的詞[8]。
本文利用哈爾濱工業大學信息檢索研究中心開發的在線語言技術平臺(Language Technology Platform,LTP)[9]獲得句子之間的依存句法關系。該平臺將整個句子轉換為結構化語義依存樹,依賴弧反映了句子中詞與詞之間的依賴關系。該平臺可以用于分詞、詞性標注、命名實體、詞義消歧、句法分析和語義分析。例如句子“今年我弟弟考上了青島科技大學”可表示成樹狀結構,并能得到句子的中心詞和詞性標注,如圖1所示。

圖1 使用LTP抽取句子的中心詞和詞性標注
詞形相似度需要考慮到同義詞識別判斷的情況,本節借助同義詞詞林的編排及語義特點完成一詞多義的信息匹配。
同義詞詞林利用樹狀結構表示詞語義項間的關系[10],共有5層分支編碼,第1、4層為大寫英文字母、第2層為小寫英文字母、第3、5層為兩位十進制數。借助同義詞詞林計算詞語相似度步驟如下:
(1) 判斷兩個詞語的同義詞詞林編號在第幾層不同。兩個詞語編號不同的層需要乘以該層的系數d。如:Ae05A02與Ae05A03是第5層不同,則乘以第5層系數d;Ae05A02與Ae05B03是第4層不同,則乘以第4層系數d。為了將結果控制在[0,1]范圍內,需要乘以調節參數cos(lπ/180),l為該層分支元素個數。
(2) 詞語所在的分支上的元素會影響到詞語義項的相似度,為了將分支元素與義項相似度對應起來,需要乘以控制參數(l-k+1)/n,l為分支元素個數,k為兩個分支的距離。相似度計算如下:
通過實驗分析,本文將不同層數對應的參數d設置為:第1層d=0.1,第2層d=0.65,第3層d=0.8,第4層d=0.9,第5層d=0.96。
實驗發現,中心詞W、W′之間相似度SIM(W,W′)≥0.8時,才能將W、W′作為同義詞或相同詞使用。但該方法只是針對同義詞詞林中存在的詞語進行對比,如詞林中并無該詞語,就會默認不是相同詞或同義詞。為避免這種情況發生,本文根據詞林中有無某個詞語進行判斷,步驟如下:
(1) 判斷同義詞詞林中有無W、W′,若有,則用上述方法直接計算詞語相似度;若沒有,則需要對W擴展近義詞,并將擴展的近義詞按順序加入數組中。
(2) 判斷W近義詞組中是否包含W′。在近義詞組中,序數越小的近義詞與原詞W的相似度越高,因此W、W′的詞語相似度SIM(W,W′)計算如下式所示:
式中:arrayW是W的近義詞組,orderW(W′)是W′在W近義詞組中的序數,countW是W近義詞組的元素個數。
在語言學中,一個詞在不增加任何詞綴的情況下轉化為另一詞性的現象在構詞法中稱作詞性轉化[11]。例如句子A=“怎么做好協調工作”中的“協調”是動詞,而句子B=“和老板的關系一直不是那么協調”中的“協調”是形容詞。研究證明,同義詞或相同詞在不同詞性下含義不同。針對詞性轉化問題,本文提出詞性匹配加權方法,對同義詞或相同詞的不同詞性所得出來的相似度進行加權處理,從而使計算得出的中心詞相似度更加準確。本文只對詞語相似度SIM(W,W′)≥0.8并且詞性不同的中心詞進行加權處理,權值γ=0.85,處理之后的中心詞W與W′詞形相似度SIMnew(W,W′)按下式計算:
SIMnew(W,W′)=γ×SIM(W,W′)
(3)

(4)
本文計算句子之間的詞形相似度的步驟:

(3) 按式(4)計算句子S、S′的詞形相似度Sword(S,S′)。
詞序相似性反映的是相同詞或同義詞在兩個句子中的位置相似性,在某些情況下詞序會直接影響到句子所要表達的意思[12]。例如句子S=“我今天買了從青島到北京的車票”,句子S′=“我今天買了從北京到青島的車票”。經過詞形匹配發現這兩句話相似度是100%,但實際意義有差別。通常用逆序數法計算詞序相似度,但其時間復雜度要高。為了降低時間復雜度,本文采用基于向量的詞序相似度算法進一步提高詞序相似度的計算效率。
下面舉例說明計算句子S與句子S′之間的詞序相似度的方法。
句子S的中心詞={“我”,“今天”,“買”,“青島”,“北京”,“車票”};
句子S′的中心詞={“我”,“今天”,“買”,“北京”,“青島”,“車票”};
句子S、S′的公共詞語:CSS′={“我”,“今天”,“買”,“青島”,“北京”,“車票”}。
對應的標準排列向量u=(1,2,3,4,5,6)。
將句子S′中的公共詞語映射為位置向量u′=(1,2,3,5,4,6)。則u′到u的向量距離可用下式表示:
(5)
從而得出distance(u,u′)=2,基于向量的詞序相似度算法定義為:
式中:maxDistance為distance(u,u′)的最大值:maxDistance=n2/2,c是兩個句子中相同中心詞的個數。最終得出句子S與S′的詞序相似度Sord(S,S′)=0.89。
詞形相似度算法通過句子中心詞的表意來比較相似度,不能分析和判斷整個句子的句法結構。本文引入了語義依存樹來彌補詞形相似度算法的不足。因句子中心部分占主導作用,所以在使用依存句法進行相似度計算時,只需計算兩個句子中心部分的詞語組成的關鍵配置對的相似程度。關鍵配置對是指句子中的核心詞以及由中心詞組成的配置對[9]。這里中心詞定義為名詞、代詞、動詞和形容詞,它是通過在線語言技術平臺分詞后的詞性標注決定的。相似度St(S,S′)的計算公式為:
(7)
式中:Qi為句子S和句子S′關鍵配置對的權重,TC1為句子S的關鍵配置對數,TC2為句子S′的關鍵配置對數。對于任意兩個配置對:(1)W1-W2;(2)W1′-W2′。若W1=W1′并且W2=W2′,則配置對(1)和配置對(2)的權重為1;若W1≠W1′但W2=W2′,或W1=W1′但W2≠W2′,則配置對(1)和配置對(2)的權重為0.5;否則為0。需要指出的是,這里的W=W′表示這兩個詞是相同詞或同義詞,可通過1.2節的方法判斷兩個詞是否為相同詞或同義詞。
問句相似度反映了兩個問句之間的相似程度,通常用[0,1]之間的數值表示。數值越大,兩個問句的相似度越高。若S為問句,S′為問題集中的任意一個問句,則問句相似度為:
SIM(S,S′)=k1×Sword(S,S′)+k2×Sord(S,S′)+
k3×St(S,S′)
(8)
式中:Sword(S,S′)為詞形相似度;Sord(S,S′)為詞序相似度;St(S,S′)為語義相似度;k1、k2、k3為相似度系數,且滿足k1+k2+k3=1。
根據本文上述方法對問句S和問題集M中的任意問句S′進行FAQ問句相似度計算,如圖2所示,具體步驟如下:
(1) 將問句分詞并抽取中心詞。
(2) 使用本文提出的詞形相似度計算方法計算問句的詞形相似度Sword(S,S′)。
(3) 使用基于向量的詞序相似度算法計算關鍵詞之間的詞序相似度Sord(S,S′)。
(4) 借助語義依存方法計算句子之間的語義相似度St(S,S′)。
(5) 使用式(8)對上述相似度加權求和,最終得到S、S′問句的相似度SIM(S,S′)。
對給定相似度閾值σ,選擇SIM(S,S′)中相似度的最大值MAX,若該最大值大于σ則返回相應的答案,若該最大值小于σ則默認問題集沒有該問題的答案。

圖2 FAQ問句相似度計算流程圖
將本文所提出的基于同義詞林的句子語義相似度算法應用于FAQ機器問答系統中。本文使用同義詞詞林擴展版,并通過在線詞典來對同義詞詞林沒有的詞進行擴展,本文只將擴展后的前5個近義詞作為計算元素加入近義詞組中。本文開發環境為Window7 X64,開發工具為PyCharm4.5.4,開發語言為python3.6.1。
隨機從哈爾濱工業大學信息檢索研究室(HIT-IRLab)提供的問答集合中選取500條問句作為初始數據集S。隨機選出100條問句作為初始標準集M,剩余400條作為初始噪聲集N,依次選取S中的問句作為百度知道的查詢條件,利用BeautifulSoup解析庫[13]對查詢返回的網頁H進行標簽處理,提取出H中的前3個標題。為了提高標題與問句的相似度,需要人工進一步篩選。M中每個問句都會有1~3個相似句子,文本最后得到擴充標準集MT的元素個數為253。將M與MT混合起來作為標準測試集MMT的元素個數為353。同樣將N進行擴充得到噪聲測試集NNT的元素個數為1 200。最后我們把MMT與NNT混雜起來作為測試集。
實驗流程:按順序從標準測試集MMT的353個句子中抽出1個問句X,然后計算這個問句與測試集中的問句之間的相似度,并按照相似度值對測試集中問句進行倒序排序,輸出前三個問句,如果所得到的這三個問句包含了擴展標準集MT中的問句X對應的所有問句(1~3個),則說明這個問句的相似度計算是成功的。
句子成分是由一個個詞組成的,即使在句子不通順的情況下,也可以根據詞來判斷整個句子要表達的意思。因此句子相似度應以詞形相似度為主,以語義結構相似度為輔,同時考慮詞序相似度,并進行綜合計算得出句子相似度。本文相似度系數的取值原則:當k1過小時,詞形相似度比例過低,會導致詞義不同但句法相同的兩個句子相似度變高。當k1過大時,詞形相似度比例過高,會導致詞義相同但句法和順序不同的兩個句子相似度變高。因此相似度系數應符合k1≥k2+k3且k3>k2(k1,k2,k3不為0)。根據人工測試經驗,當k1=0.5、k2=0.2、k3=0.3時較為合適。為了防止遺漏正確答案并且剔除冗余數據,本文取相似度閾值σ=0.7。
采用信息檢索技術中的準確率(P)計算:
式中:CorrectCount表示實驗中正確的句子總數,AllCount表示實驗的句子總數。
分別用詞頻-逆向文檔頻率向量方法和文獻[7]方法與本文提出的方法做測試試驗,實驗結果如表1所示。從表1可以看出,使用本文所提出的方法,問句相似度準確率可以達到92.63%,明顯優于使用詞頻-逆向文檔頻率向量方法和文獻[7]方法。

表1 實驗結果
本文提出了一種基于同義詞詞林的句子語義相似度方法,并將該方法應用與問答系統的問句匹配。相
比傳統句子相似度方法,該方法能有效提高問句相似度準確率。本文所提出的方法可以適用于所有句子語法情況,后續研究中,將進一步簡化該方法的計算復雜度和提高FAQ回答效率。