王 沖 張 虎 王 鑫 劉全明
(山西大學計算機與信息技術學院 山西 太原 030006)
近年來,隨著自然語言理解和深度學習技術的快速發(fā)展和廣泛應用,人機對話已成為自然語言處理領域的一項重要研究任務,已引起學術界和企業(yè)界的廣泛關注。目前國內外相關學術會議例如SIGIR2018、ICTIR2017、EMNLP2018和SMP2018等都開展了人機對話研究的分組研討或公開評測,專門就人機對話技術和應用展開了深入交流,這些會議促進了人機對話技術的發(fā)展,推動了語音識別、信息檢索和自動問答等技術在人機對話系統(tǒng)的深入應用。當前很多公司也專門開展了人機對話的應用研究,將人機對話技術應用到企業(yè)客服、個人事務助理、虛擬情感陪護機器人以及娛樂性聊天機器人等產品,典型的產品有Amazon Echo、Google Home、Microsoft Cortana、百度小度、阿里的天貓精靈等。
經典的人機對話系統(tǒng)一般包括三個主要部分:用戶意圖識別、用戶對話管理和自然語言生成。其中用戶意圖識別是人機交互系統(tǒng)能否進行準確、有效對話的一個首要基礎環(huán)節(jié)[1]。然而,由于人機對話中對話環(huán)境的復雜性及用戶輸入方式的多性樣,對話系統(tǒng)經常對用戶意圖識別出錯,大大影響了交互的體驗。因此迫切需要針對人機對話中的用戶意圖識別任務提出更有效的解決辦法。
目前意圖識別的典型方法是將意圖識別任務轉化為意圖的自動分類任務。即在給定意圖類別體系的情況下,通過提取特征、訓練分類模型來實現對意圖的自動識別[2]。例如用戶輸入“你好啊,很高興見到你!”,系統(tǒng)將其分到閑聊類;輸入“我想訂一張去北京的機票”,系統(tǒng)將其分到“訂機票”類;對于“我想找一家五道口附近便宜干凈的快捷酒店”,將其分為“訂酒店”類。
國外的研究人員早期曾提出使用句子相似度進行用戶意圖的識別[3]。國內研究人員將特征擴展思想引入意圖識別研究中,即引入額外的信息挖掘文本所表達的含義來輔助分類[4]。這些研究都在特定數據集上取得了有效的結果,然而由于這些意圖識別方法大都基于模板匹配或人工特征集合,不僅費時費力、擴展性差[5],還經常由于意圖識別錯誤出現答非所問的情形。
針對上述方法的不足,本文考慮了人機對話文本的長度短、噪聲大和容易出現分詞錯誤等特點,構建了融合敏感詞規(guī)則和字符級RCNN的雙層意圖識別模型。首先基于部分對話文本類別詞明顯的特點構建了敏感句子及敏感詞詞典,并通過規(guī)則及相似度匹配策略對特征明顯的對話進行了意圖識別;然后針對類別特征不明顯的對話提出了深層語義分類模型,該模型以單字符串作為輸入序列,利用RCNN模型構建了意圖分類框架,既可以避免分詞結果不準確帶來的錯誤傳導問題,同時利用字符的分布向量表示方法還可以獲取句子的深層語義信息。
意圖識別是人機對話系統(tǒng)中一項重要的研究內容,其任務本質是對用戶輸入的語句自動標注一個預先定義好的類別標簽[6]。以往針對用戶意圖識別的研究主要集中在利用支持向量機(Support vector machine,SVM)、條件隨機場(Conditional random field,CRF)等傳統(tǒng)機器學習技術,并結合n-gram等語言模型的方法[7-8]對用戶意圖進行分類,這些方法都是采用較為復雜的人工特征,如語法信息、韻律信息和詞匯信息等,較難捕捉文本的深層語義信息。
隨著深度學習技術的不斷發(fā)展,越來越多的研究者開始利用深度學習方法解決自然語言處理領域中的問題,基于深度學習技術的用戶意圖識別任務也開啟了新的發(fā)展階段。Liu等[9]使用基于注意力的循環(huán)神經網絡進行意圖識別,用戶語句中每個詞在RNN中都有對應的隱藏狀態(tài),利用這些隱藏狀態(tài)生成最后的意圖類別。Ding等[10]受Collober等[11]提出的CNN網絡結構的啟發(fā)提出了基于卷積神經網絡(CNN)的消費意圖挖掘模型(CIMM)來識別用戶的消費意圖。CIMM模型首先用一個卷積層將一個上下文窗口中的每個詞映射成相應的上下文特征向量,接著用一個最大池化層提取上下文特征向量中的最大值,將池化之后的向量拼接形成句子級的特征向量,最后將句子級特征向量作為前饋神經網絡的輸入進行一系列的非線性變換,進而實現了消費意圖分類。此外,還有一些學者嘗試使用深度置信網絡(deep belief network,DBN)及深度凸網絡(deep convex network,DCN)[12-13]進行了用戶意圖識別。
相關研究表明,在文本分類任務中可以通過字符嵌入來得到更加豐富的文本語義表示[14]。一種方法是利用外部詞匯如WordNet來豐富單詞嵌入,另一種方法是將字符嵌入融入到詞嵌入中。Zhang等[15]設計了字符級文本分類的卷積神經網絡模型,與傳統(tǒng)的基于詞的卷積神經網絡模型及循環(huán)神經網絡相比取得了更好的效果。Kim等[16]于2015年也提出使用字符級卷積神經網絡提取字詞信息,其輸出被用作循環(huán)神經網絡語言模型(RNN-LM)的輸入,在詞法更豐富的西班牙語數據集上,性能優(yōu)于傳統(tǒng)的詞級LSTM,同時參數也減少了60%。Santos等[17]用英文短文字符序列作為處理單元,分別學習文字的單詞和句子特征,以此提高短文分類的準確性。顯然,從字符層面進行文本嵌入提取出抽象的文本表示的好處是不需要使用預訓練好的詞向量等信息,可以盡可能保存原文信息,自然地學習諸如拼寫錯誤和表情符號之類的異常字符組合。此外,字符級神經網絡還可以較容易地推廣到其他語言。
本文提出的意圖識別方法主要分為兩個層次:基于敏感詞規(guī)則的意圖識別和基于字符級RCNN模型的意圖識別。具體的意圖識別流程如圖1所示。
圖1 意圖識別流程圖
1) 基于敏感詞規(guī)則的意圖識別。利用句子類別詞比較明顯的數據集統(tǒng)計分析各個類別的敏感詞,結合外部網絡資源,搜集個別類別的常見關鍵詞,如郵件類、機票類、股票類等,經人工篩選后構建敏感詞詞典,具體數據樣例如表1所示;同時還可以針對每個類別構建敏感句詞典。意圖識別過程首先利用敏感詞典,并通過規(guī)則及相似度匹配策略對特征明顯的對話進行意圖識別。
表1 敏感詞表
例如用戶輸入“給張三打電話”、“幫我查詢下午去北京的航班”,通過敏感詞表中的敏感詞“打電話”、“航班”,可以將其歸屬到電話類及機票類。
2) 基于字符級RCNN模型的意圖識別。將前一層未能識別的類別特征不明顯的對話輸入到字符級RCNN模型進行分析,得到最終的意圖識別結果。
對用戶意圖進行分類,首先要對數據進行預處理,包括字詞切分、停用詞去除等步驟。傳統(tǒng)的分類模型通常選擇文本自動分詞后的詞特征,而基于分詞的詞語集合構建的文本分類詞特征集經常由于分詞出錯,容易導致模型學習到錯誤的特征,會大大降低模型的準確率。
例如使用分詞工具對“宮保雞丁怎么做”和“富春山居圖電影”這兩句話進行分詞,分詞結果為“宮保雞/丁/怎么/做”和“富春山/居圖/電影”,其中“宮保雞丁”錯誤分成“宮保雞/丁”,“富春山居圖”錯誤分成“富春山/居圖”。以上例子采用傳統(tǒng)的1-gram分詞結果進行特征選擇時,候選特征會從{宮保雞,丁,怎么,做}、{富春山,居圖,電影}這些結果選擇,顯然此時分類器基于這個詞語集合會學習出錯誤的關鍵詞特征,并最終影響模型的實驗結果。
因此,本文進一步提出基于字符級的RCNN模型。使用神經網絡處理數據時需要將其表示為分布式向量,因此模型首先輸入用戶語句的字符嵌入,通過LSTM層后將其輸出加入到卷積層,然后卷積層的輸出通過最大池化層及全連接層匯集到較小的維度,輸出類別標簽,模型具體結構如圖2所示。
圖2 字符級RCNN模型圖
1) LSTM層不僅保存當前的信息,還可以存儲任何以前的信息,所以LSTM層可以為原始輸入生成新的編碼。它由一系列重復的時間模塊組成,每個模塊包含:遺忘門、輸入門、輸出門和一個記憶細胞結構Ct∈R。輸出是ht、ct,wf、wg、wo、wi為LSTM權重矩陣,bf、bg、bo、bi為LSTM的偏置,σ為激活函數sigmoid,⊙為點乘操作。在LSTM層中的更新方式如下:
it=σ(wixt+uiht-1+bi)
(1)
ft=σ(wfxt+ufht-1+bf)
(2)
ot=σ(woxt+uoht-1+bo)
(3)
gt=tanh(wgxt+ught-1+bg)
(4)
ct=ft⊙ct-1+it⊙gt
(5)
ht-1=ot⊙tanh(ct)
(6)
2) 卷積層的目的是應用卷積運算,提取任意輸入矩陣W隱含高階特征的過程。通過不同高度卷積核Cl,a在W上滑動計算,得到不同卷積核的卷積序列,卷積序列構成特征面hl,a,其中l(wèi)表示卷積核高度,a表示文本向量維度。hl,a實際是利用輸入矩陣W與Cl,a進行內卷積的結果集,再加上偏置bl,a得到的結果,表示為:
hl,a=f(X×Cl,a+bl,a)
(7)
式中:f是激活函數tanh,用于對卷積結果作平滑。其目的在于為神經網絡引入非線性,確保輸入與輸出之前的曲線關系。
3) 池化層就是對高維的特征面集合進行降采樣操作,進行特征的二次提取。池化操作一般有兩種:平均池化和最大池化。本文采用的是最大池化,也就是選取每個特征中的最大值,將池化得到的所有最大值拼接起來,得到一個特征向量。
4) Dropout是防止神經網絡過擬合的技巧,其主要思想是在訓練過程中臨時從網絡結構中以概率p隨機移除部分神經元以及對應的輸入輸出權重。
最后使用softmax函數進行分類得到意圖識別結果。
為了驗證所提方法在用戶意圖識別中的可靠性,本文分別在兩個數據集上進行了多組對比實驗,并對實驗結果進行了錯誤分析。
針對用戶意圖識別研究,目前沒有標注好大規(guī)模數據集,因此本文選取的兩組數據集分別為SMP2017(中國社會媒體處理大會)人機對話技術評測中用戶意圖分類的數據和從百度知道上抓取的問答數據。Broder[18]曾提出根據用戶行為對用戶的意圖進行分類,分為導航類、事務類、信息類。在此基礎上,SMP2017所標注的類別將其進行細分為31類,基本可以涵蓋用戶的所有意圖。因此,可以使用用戶行為類別對用戶意圖進行表示。數據的樣例如表2所示,兩種數據集規(guī)模如表3所示。
表2 數據樣例
表3 數據集規(guī)模
為了從不同的角度來驗證本文提出的模型在用戶意圖識別任務中的適用性和有效性。實驗采用了幾個典型文本分類模型作為基線。
N-gram+SVM:使用n-gram來提取輸入特征,并使用SVM作為分類器,得到意圖識別結果。
Char-CNN:使用字符級特征作為神經網絡模型的輸入,通過CNN作為分類模型得到意圖識別結果。
CNN-LSTM:使用詞級特征作為卷積神經網絡輸入,提取局部代表性特征,然后按照卷積先后順序重新組合,再依次輸入LSTM中進行上下文學習,得到意圖識別結果。
Text-GCN[19]:在整個語料集上構建圖,將詞及文檔作為圖中的節(jié)點,利用共現信息重構邊,將用戶意圖識別看作節(jié)點分類,以此得到預測結果。
本文采用準確率(Precision,P)、召回率(Recall,R)和F值(F-measure,F)作為實驗評價指標。假定a表示被正確分到某類的文檔數,b表示錯分到該類的文檔數,c表示屬于該類但被錯分的文檔數。則準確率、召回率和F值可分別按照如下公式計算:
(8)
(9)
(10)
基于SVM的意圖識別模型選取1-gram、2-gram和3-gram的組合作為特征集。
對于其他基于深度學習的意圖識別模型,采用skip-gram模型預先訓練嵌入大小為64的字嵌入,將LSTM的隱藏狀態(tài)大小設置為100,CNN的過濾器寬度設置為(2,3,4,5),每個過濾器大小為25。使用Adam作為優(yōu)化器,并將學習率設置為0.01,丟失率為0.5,批量大小為64。
從表4可以看出,本文提出的融合敏感詞規(guī)則和字符級RCNN模型的意圖識別方法優(yōu)于所有基線,在兩個數據集上的F值分別達到了91.2%和90.7%,可以較好地實現用戶意圖識別任務。在沒有使用分詞、句法分析等輔助標注工具下,模型能夠自動抽取出文本深層次特征,在實際應用中不僅可以簡化繁瑣的特征抽取過程,而且避免了詞法、句法分析的錯誤傳導,減輕了特征選擇對識別結果的影響。
表4 基于兩種數據集的實驗結果 %
在實驗過程中發(fā)現,在對SMP2017數據進行分詞處理時,切分正確率為80%,且存在較多未登錄詞切分錯誤,從而一定程度干擾最后對用戶意圖的分類效果,因此基于詞級的CNN-LSTM模型結果低于本文模型,同時是可見的。Text-GCN表現不好的原因可能在于本任務中短文本較多,導致GCN構圖時文檔-詞、詞-詞之間邊比較少,同時GCN忽略詞的順序,導致學習的文檔向量及詞向量區(qū)分度不大。
為了進一步分析本文模型的性能,將其預測結果輸出進行錯誤分析,列出了部分具有代表性的分類錯誤樣本,如表5所示。
表5 意圖識別錯誤的部分樣本
經過統(tǒng)計將預測錯誤樣本分為三類:
1) 測試數據樣本類別標注錯誤導致預測錯誤。表4中“今天什么天氣”、“可以幫買火車票嗎”等屬于樣本類別標注有誤。結合訓練數據與類別真實含義來看,模型輸出的意圖識別結果更準確一些。
2) 樣本語義多樣性導致預測錯誤。例如“我想看電影肖申克的救贖”、“爸爸去哪幾點結束啊”等樣本屬于多個類別。
對于“我想看電影肖申克的救贖”,如用戶本意是想在線播放,則前一句應屬于video;若是想去影院看,則應屬于cinemas。在這種情況下,僅根據文本的信息無法做出可靠的正確分類。因此對于類似對話語句,在實際應用中需結合額外的場景信息或用戶的上下文信息來作出判斷。
3) 數據集過少導致預測錯誤。由于訓練樣本數據規(guī)模較小,而某些類別有大量的領域相關詞匯,給定的訓練樣本無法覆蓋該類別的所有語義場景。因而導致模型無法分清“三安光電”是股票還是視頻,“2立方”是數學知識還是視頻。
針對這類錯誤,提升訓練樣本的數量是一種有效的方法,在此基礎上還可以引入類別相關知識,通過構建股票名表、常見數學名詞表等知識庫可以達到精確的意圖識別。
針對人機對話系統(tǒng)中用戶對話常為短文本的特點,本文將用戶意圖識別任務轉化為短文本分類任務,并在此基礎上提出了融合敏感詞規(guī)則和字符級RCNN模型的用戶意圖識別方法,分別利用多個基線模型在兩類數據集上進行了對比實驗,驗證了本文提出方法的有效性。接下來我們將在更加開放的領域和更大規(guī)模的數據集上進行測試,同時考慮attention機制在其中的影響,并擴展基于字符級特征的思想,探索在其他問題上的應用。