曹 斌 柯顯信 白姣姣
(上海大學機電工程與自動化學院 上海 200444)
隨著數據時代發展,人們越來越關注利用大量真實的交流數據來訓練對話模型,這些模型的一個主要問題是它們傾向于選擇具有最大可能性的響應(訓練數據中表示的人類的共識響應),產生的回復通常是模糊的或不一致的[1]。Vinyals等[2]指出,當前的對話系統仍然無法通過圖靈測試,在眾多限制中,缺乏一致的個人信息是最具挑戰性的困難之一,如表1所示。在人機交互的過程中,對話的部分內容會涉及到機器人的自身信息類問題[3],如姓名、年齡、性別等。和諧自然的人機交流需要機器人對于涉及個人信息類問題的回復總是穩定的,不要出現前后不一致的現象。

表1 信息不一致的回復
近年來,Li等[4]以序列到序列模型為基礎,通過Al-Rfou等[5]使用類似的用戶嵌入技術來模擬用戶個性化的工作,兩項研究都需要每個用戶的對話數據來模擬她/他的個性。Qian等[6]利用雙向解碼器來生成預先給定的個人信息,但是需要大量數據標注信息位置。
本文提出一種具有個人信息的對話模型,賦予聊天機器人特定個人信息(如表2所示),并使聊天機器人能夠生成與其給定信息一致的回復。

表2 預設五種個人信息
對話模型如圖1所示,任務描述如下:給出一個輸入問題x,問題分類器D預測問題x是否屬于個人信息問題:如果是,將問題轉入個人信息回復模塊,隨機返回問題所屬類別K的候選回復y作為模型回復;否則轉入開放域對話模塊,生成回復y。生成回復的過程如下:

圖1 對話模型
P(y|x)=P(z=1|x)×PO(y|x(ki))+
P(z=0|x)×PG(y|x)
(1)
式中:P(z|x)表示輸入問題(x)所屬類別的概率;z=1表示問題x屬于涉及個人信息,否則反之。PO(y|x(ki))表示個人信息回復模塊給出的所屬類別的答案的概率;PG(y|x)表示開放域對話模塊給出的回復的概率。
分類模型用來判別輸入問題是否需要個人信息回復模塊處理,是一個二分類問題。用P(z|x)(z∈{0,1}),z=1表示需要個人對話模塊,例如:“你今年幾歲?”則P(z=1|x)≈1;“你哥哥今年幾歲?”則P(z=1|x)≈0。
近年國內外學者對于短文本分類的問題做了大量研究,主要分為兩類:機器學習算法和深度學習算法。機器學習領域有支持向量機(Support Vector Machine,SVM)、邏輯回歸(Logistics Regression,LR)、樸素貝葉斯分類法(Naive Bayes Classifier,NBC)、K-最近鄰法(k-Nearest Neighbor,KNN)、決策樹法(Decision Tree,DT)和中心向量法等[7]。深度學習算法有Kim[8]提出的Text-CNN,其具有良好表現。然而自然語言處理中最常用的是具有捕捉上下文信息的遞歸神經網絡(Recurrent Neural Network,RNN)。為了將RNN與CNN結合,又提出RNN-CNN模型來彌補CNN不能夠處理文本上下關系和RNN在長距離上存在信息衰減的問題。
本文將對比各方法在語料上面的性能,綜合考慮選取恰當的方法。
為了維護前后回復的信息一致性,本文的解決思路是相似問題匹配,即對比用戶的輸入問題與設定的數據庫中問題的相似度,返回最大相似度的問題的答案作為模型回復。相比于機器學習方法,深度學習能夠發掘以往很難發掘的隱含在大量數據中的不顯著特征,更細化地表達文本匹配問題[9]。
本文以孿生網絡思想構建個人信息回復模塊,如圖2所示。

圖2 個人信息回復模型
本文模型首先將兩個句子通過深度學習模型進行表示,然后利用相似度方程計算這兩個表示之間的相似度即匹配度。該方法注重于構建句子的表示層,盡量用等長的向量表示待匹配句子的語義。本文采用BiLSTM模型對句子的語義信息進行表示,BiLSTM由正反兩個長短期記憶網絡(Long Short-Term Memory,LSTM)[10]模型組成。LSTM記憶單元各部分在時刻t更新如下:
ft=σ(Wf·[ht-1,xt]+bf)
(2)
it=σ(Wi·[ht-1,xt]+bi)
(3)
(4)
(5)
ot=σ(WO[ht-1,xt]+bo)
(6)
ht=ot×tanh(Ct)
(7)
式中:it、ft、ot依次表示輸入門、遺忘門、輸出門;xt表示t時刻的特征向量;σ(·)表示sigmoid函數。
BiLSTM模型增加對文本逆向語義的學習。連接正反兩個方向的LSTM模型輸出向量作為t時刻BiLSTM的輸出Bt[11]:
(8)
(9)
(10)
本文采用的損失函數是對比損失函數,可以有效地處理成對數據的關系,其表達式如下[12]:
(11)

基礎的Seq2seq模型是以最大對數似然為目標函數,模型在面對問題時會容易產生類似“我不知道”“呵呵”“哈哈”等通用無意義的回復。因此本文借鑒了Li等[13]提出的抗語言模型(anti-language model,anti-LM),以最大互信息作為Seq2seq的目標函數,公式如下:
(12)
(13)

(14)
式中:λlogP(T)視為對任何輸入都具有高概率的候選詞的懲罰,由參數λ控制懲罰的大小。由于懲罰項的存在,模型不再一昧選擇概率高的詞,避免產生通用的回答。但懲罰會影響句子結構和流暢性,因此引入分段函數g(k)[14]:

(15)
(16)

(17)
前期生成詞對句子多樣性的影響顯著大于后期生成詞,為了盡可能地保證句子流暢性,在解碼器生成句子過程中僅僅對前期生成的高概率候選詞進行懲罰。
本文根據設定的五種身份信息,從微博、小黃雞語料和青云語料提取和采樣得到了10 072個樣本用于訓練問題分類器。通過對樣本進行標注,涉及個人信息為正樣本(標簽為1),反之為負樣本(標簽為0),部分語料如表3所示。

表3 部分問題分類樣本示例
訓練個人信息回復模型時需要輸入兩個句子和相似度。人工地將所收集的正樣本進行五分類(姓名、年齡、性別、地點、職業),同類型樣本間構成相似問題對(標簽為1),不同類型間樣本構成不相似問題對(標簽為0),如表4所示。

表4 部分相似度訓練樣本示例
本文測試了SVM、LR、NBC、CNN、LSTM和LSTM-CNN。傳統機器學習模型的文本表達形式為詞袋和TF-IDF;SVM采用線性核函數;深度學習方法采用預先訓練好的詞向量;CNN參考Text-CNN模型;LSTM模型利用最后一個時刻狀態經過全連接輸出;LSTM-CNN利用CNN把LSTM每個時刻的輸出進行卷積和池化。本文選取了準確率、F1值和AUC值來評價各模型性能,實驗結果如表5所示。

表5 不同方法模型評估
可以看出:(1) 基于詞袋的SVM取得了最好的性能指標。(2) 傳統的機器學習分類性能整體優于深度學習,主要原因是因為所提取的語料中某些詞匯頻繁出現,比如涉及姓名信息問題中姓名、名字和叫什么等詞匯大量出現,所以具有統計特性的模型會有良好表現。本文還選取準確度最多的三個模型進行加權平均法,但是分類效果沒有顯著提高。最終本文選取基于詞袋的SVM作為問題分類器。
除了本文中的基于BiLSTM的孿生網絡的相似度計算方法外, 還比較了基于LSTM與全連接、基于BiLSTM與全連接、基于LSTM與余弦以及基于詞向量余弦距離和詞移距離(Word Mover’s Distance,WMD)的方法。以上幾種方法對應簡稱為LSTM_F、BiLSTM_F、LSTM_cosine、w2v_cosine和w2v_wmd, 其中采用全連接層的網絡加入了Batch normalizationn層[15]來提高收斂速度,LSTM_cosine利用余弦計算logit與目標值[1,0]的距離,作為相似度。
由于本文設定五個身份信息,因此準確性是指預測的類別是否為標簽類別,公式如下:
P=P(klabel=kp)
(18)
kp=K(max(Similarity))
(19)
式中:P為模型準確度;klabel為標定種類;kp為預測類別;K為設定的五類信息;Similarity為相似度。
實驗階段針對五種身份信息選取 500個問題作為匹配數據庫,每個類型100個,各模型實驗結果如表6所示,均耗時指的是平均每個問題回復的時間。

表6 各模型實驗結果
w2v_cosine和w2v_wmd直接將詞向量拼接來表示句子特征,這導致只要句子關鍵字相同就會判別句子表達主題相似,而本部分數據經過問題分類,選取的數據詞語分布集中所以取得了較高準確率;BiLSTM_F、LSTM_F和LSTM_cosine利用LSTM能夠學習文本深層次關系。本文方法取得了較好的準確率,因為對比損失函數可以很好地表達成對樣本的匹配程度,但是在時間效率上略有不足。
為了回復的多樣性,本文為每個類別分別設置多個回復模板,比如關于年齡的回復有“我今年一歲了”“人家已經一歲了”“一歲”“本寶寶出生一年了”等,每次選取一個答案作為回復。
對開放域回復模塊采用人工測評與BLEU評估結合的形式,分別以最大對數似然和互信息作為目標函數訓練了兩個對話模型。實驗中最大互信息模型的懲罰系數λ取值為0.5,γ設定為1。
兩個模型的BLEU值為0.17 和0.25,以最大互信息為目標函數的模型較好。在人工測評中,讓20個人與兩個模型分別進行20句以上的交互,判斷哪種生成的結果更好,結果顯示大多數人認為兩個模型差不多,30%的人認為以最大互信息為目標函數的模型較好。
本文隨機選取部分對話,請10 位志愿者對其以下幾個方面進行評價。
自然性:回復是否自然通順。如果太短或者無意義回復被認為缺乏自然性,獲得0分,反之得1分。
邏輯性:回復與問題是否成邏輯關系。比如涉及性別問題,回復類似“女孩”等將獲得1分,反之得0分。
信息一致性:對于涉及個人信息的回復是否保持前后一致。比如年齡一類問題,回復的屬性值應該與設定的一樣“一歲”。信息一致獲得1分,反之得0分。
多樣性:對于某一類問題是否具有多種回復。比如對于回復年齡類別,應該具有不同的回復如“我今年一歲”“人家已經一歲了”。具有多樣性獲得1分,反之得0分。
人工評價結果如表7所示。可以看出,本文模型在每個指標都優于普通的Seq2seq模型,特別在信息一致性,這是因為本文添加了個人信息回復模塊。本文模型對話樣例如表8所示。

表7 回復的評估 %

表8 對話樣例
為了維護對話前后個人信息的一致性問題,本文提出了具有個人信息的對話模型,該模型能夠簡化從對話數據中學習個人信息的復雜性。實驗表明,本文的對話模型能夠有效地生成與預設信息一致的回復,同時減少無意義的通用回復,有助于產生更加連貫和多樣的對話。
本文不足如下:訓練語料的質量不佳,模型的時間復雜度較大。未來研究還需要考慮對話的情感狀態、對話的邏輯推理和對話的風格等。