張世西,丁祝祥
(四川大學計算機學院,成都610065)
自動問答系統(tǒng)是自然語言處理領域(NLP)一個重要的研究課題,該課題可被形式化地表示為計算機和人通過人類的語言進行交互,并幫助用戶完成簡單的任務。該課題早在上世紀60年代就被提出,并在80年代因圖靈實驗[1]而風靡一時,但由于當時實驗條件的限制,自動問答一直被限制在特殊領域的專家系統(tǒng),發(fā)展緩慢。隨著網(wǎng)絡和信息技術的快速發(fā)展,用戶期待系統(tǒng)可以更快更精準地定位意圖,給出高質(zhì)量的回答,促使自動問答系統(tǒng)再次成為NLP領域的一個研究熱點。
近年來,隨著大數(shù)據(jù)時代的到來以及GPU等高速計算設備的發(fā)展,深度學習在圖像分類、語音識別等任務上取得了突出效果,其在自動學習抽象知識表達上的優(yōu)異表現(xiàn)使得越來越多的研究人員將其應用在NLP領域的各項任務中,包括自動問答,機器翻譯,文章摘要等。本文的研究主要基于自動問答系統(tǒng)中的答案選擇子任務,重點集中在問答語句語義表示任務上,探究了主流的深度學習算法,包括卷積神經(jīng)網(wǎng)絡(CNN)、循環(huán)神經(jīng)網(wǎng)絡(RNN)等在答案選擇中的應用,并通過實驗證明結合了兩者的混合深度神經(jīng)網(wǎng)絡在問答系統(tǒng)語義表示上取得的效果要好于單一網(wǎng)絡。
答案選擇是自動問答系統(tǒng)中的一個關鍵步驟,該問題可描述為:給定問題q及其對應的候選答案集表示該問題對應的候選答案集的大小,任務目標是從候選答案集中選出最佳答案ak,若ak屬于該問題的正確答案集合(一個問題的合理答案可以有多個),則認為該問題被正確回答,否則判定該問題沒有被正確回答[2]。該問題的一種解決方案是獲取問題和答案的語義表示,通過衡量語義表示的匹配度來選擇最佳答案。本文采取上述方案,則所需考慮的兩個問題是:一是如何實現(xiàn)問句及答案的語義表示。二是如何實現(xiàn)問題答案間的語義匹配。故而目標任務可分解為兩個步驟:第一,利用深度學習算法,如RNN,CNN等將問題序列q以及候選答案集序列轉(zhuǎn)化為向量,分別記為;第二,利用相似度衡量標準衡量中每個向量的相似度,相似度越高,則問題與答案越匹配,該答案排序越靠,反之,問題與答案匹配度越低,該答案排序越靠后。
將深度學習應用于NLP領域的第一步是需要將詞語轉(zhuǎn)換為向量,并且向量之間的距離可以表示詞語的語義相似度。傳統(tǒng)的one-hot詞向量不僅無法表示詞語的語義相似度,而且會造成維度災難。近幾年,NLP領域多采用分布式稠密實數(shù)向量來表示詞語的語義特征,如Word2Vec[3],GloVe[4].本文采用的是GloVe算預訓練好的模型(Common Crawl,840B tokens),每個單詞表示為一個300維的向量[5]。本文實驗中直接將詞向量初始化后的問題答案向量進行相似性度量,在實驗數(shù)據(jù)集上有一定的效果,網(wǎng)絡結構如圖1所示。

圖1 基于GloVe詞向量嵌入的答案選擇網(wǎng)絡結構
RNN已被證明在NLP領域的很多任務中表現(xiàn)突出,是當下主流的深度學習模型之一[6]。在NLP領域,一個句子的單詞之間是相互關聯(lián)的,單詞因上下文不同而具有不同的含義。然而,傳統(tǒng)的神經(jīng)網(wǎng)絡通常假設所有的輸入和輸出是相互獨立的,這對很多NLP領域任務來說是不合理的。RNN的提出正是為了利用句子的這種序列信息。RNN依賴之前的計算結果,并對序列的每個節(jié)點執(zhí)行相同的操作,每個節(jié)點的輸入除了當前的序列節(jié)點還包括之前的計算結果,相當于擁有一個“記憶單元”來記錄之前的信息[7]。RNN算法可簡單表示為,給定輸入,其中xt表示t時刻的序列輸入,用ht-1表示t-1時刻的計算結果,則t時刻的計算公式為,其中U,W為參數(shù)矩陣,在訓練過程中學習;f為非線性激活函數(shù),一般可以用tanh或者ReLU。上述簡單RNN在訓練過程中容易導致梯度爆炸或者梯度消失,因此研究者們在簡單RNN的基礎上進行改進,提出了很多變體,常用的包括長短時記憶網(wǎng)絡(LSTM)[8]和門限循環(huán)單元網(wǎng)絡(GRU)[9]。
LSTM針對RNN的處理節(jié)點進行了改進,引入了細胞狀態(tài)值Ct和“門機制”,包括輸入門ft,忘記門it以及輸出門ot,其單元內(nèi)部計算公式如下:

GRU在LSTM基礎上做了一些簡化,將忘記門和輸入門合成了一個單一的更新門。同樣還混合了細胞狀態(tài)和隱藏狀態(tài),和其他一些改動,其單元內(nèi)部計算公式如下:

上述式子中σ表示sigmoid激活函數(shù),tanh表示tanh激活函數(shù),*表示矩陣逐點相乘,W,U均為訓練過程中學習的參數(shù)矩陣。
網(wǎng)絡結構圖如圖2所示。

圖2 基于RNNs(LSTM/GRU)的答案選擇網(wǎng)絡結構
CNN最早被用在計算機視覺領域,提取圖像特征。與傳統(tǒng)神經(jīng)網(wǎng)絡相比,卷積神經(jīng)網(wǎng)絡(CNN)包含了一個由卷積層和子采樣層構成的特征抽取器。在CNN的卷積層中,一個神經(jīng)元只與部分鄰層神經(jīng)元連接,CNN的一個卷積層通常包含若干個特征平面,每個特征平面由一些矩形排列的神經(jīng)元組成,同一特征平面的神經(jīng)元共享權值,以減少網(wǎng)絡各層之間的連接,同時又降低過擬合的風險。近年來,隨著Word2Vec,GloVe等詞向量技術的發(fā)展,很多NLP領域任務的輸入也可以看作是詞語序列與詞向量構成的“像素矩陣”,因而很多研究人員也開始將CNN應用于NLP的任務中[10]。不同于圖像處理的卷積,CNN對NLP的卷積核大小有要求,一般來說,卷積核的長度和詞向量的維度應該是一致的。例如一個詞向量是N維的,卷積核就為X*N維的,X一般可取1,2,3,表示提取1個詞、2個詞、3個詞之間的特征。本文實驗中,CNN卷積核數(shù)目為1000,CNN窗口大小分別取值為2,3,5,7,并將所得向量做一個拼接,最后經(jīng)過一層max-pooling得到句子的最終表示,網(wǎng)絡結構如圖3所示。

圖3 基于CNN的答案選擇網(wǎng)絡結構
RNN的模型設計可以很好地為序列建模,尤其是LSTM和GRU模型可以很好地保留遠距離依賴的信息,但容易忽略局部的最近幾個詞之間的關系,同時,若序列過長,LSTM和GRU訓練的時間代價將難以忍受。而CNN中的卷積核大小遠小于輸入大小,強調(diào)的是局部最近幾個詞之間的關系,同時其訓練時間代價也小于LSTM。因而將兩種模型結合起來使用,對解決NLP領域任務更有幫助。本文實驗的模型結構如圖4。
本實驗基于開放數(shù)據(jù)集Ubuntu Dialog Corpus(UDC,Paper[11],GitHub[12]),該數(shù)據(jù)集是目前已公開的最大的對話數(shù)據(jù)集之一,它抽取互聯(lián)網(wǎng)中繼聊天Internet Relay Chat(IRC)中的 Ubuntu 聊天室記錄,文獻[11]中詳細介紹了該數(shù)據(jù)集的產(chǎn)生過程。該數(shù)據(jù)集被劃分為訓練集,驗證集以及測試集,訓練集包含1000000個樣例,驗證集包含195600個樣例,而測試集包含189200個樣例。訓練集的每一個樣例包含一個問題,一個回答和一個標簽,其中500000為正例(標簽為1),500000為負例(標簽為0)。正例表明該答案與問題匹配,負例表示不匹配,數(shù)據(jù)樣例如圖5。驗證集和測試集的格式與訓練集不同,驗證集和測試集的每一個樣例包括一個問題,1個正確答案(ground truth utterance)和9個干擾項,即錯誤答案(錯誤答案來自于驗證和測試集中其他問題的答案),數(shù)據(jù)樣例如圖6。值得注意的是數(shù)據(jù)集的產(chǎn)生腳本中已經(jīng)對數(shù)據(jù)做了一些預處理,包括分詞、取詞根、英文單詞變形歸類等。此外,例如人名、地名、組織名、URL鏈接、系統(tǒng)路徑等專有名詞也做了替代。表1給出了訓練集問題答案長度統(tǒng)計信息。

圖4 基于混合模型Conv-RNN的答案選擇網(wǎng)絡結構

圖5 UDC訓練集示例

圖6 UDC驗證集/測試集示例

表1 UDC訓練數(shù)據(jù)集問題(context)和響應(utterance)長度統(tǒng)計
本文數(shù)據(jù)預處理主要包括兩個部分,一是文本序列化以及序列填充;二是重構驗證集和測試集,保證驗證集和測試集數(shù)據(jù)格式與訓練集相同,便于驗證和測試。在第一步中,首先建立詞表(將詞語和某個整數(shù)一一對應),并將句子轉(zhuǎn)換為整數(shù)序列;本文通過對訓練集問題和回答的長度統(tǒng)計分析,綜合考慮長度統(tǒng)計信息以及模型訓練時長,最終選擇最大序列長度為160,若句子序列長度大于160,則將超過的部分截斷;若不足160,則在句子后面以0填充。在第二步中,本文擴充了驗證集和測試集中的問題數(shù)目,使得每個正確的回答和干擾項都對應一個問題,并為正確回答打上標簽1,干擾項打上標簽0。
本文實驗中問題和回答的相似度計算公式為:

式(10)中,Vq表示經(jīng)過深度神經(jīng)網(wǎng)絡學習后的上下文向量,Va表示經(jīng)過深度神經(jīng)網(wǎng)絡學習后的響應向量,*表示逐點相乘,Vq*Va表示Vq和Va的相似度向量,經(jīng)sigmoid函數(shù)轉(zhuǎn)換成值為(0,1)的一個相似度概率,此概率越接近于1表明相似度越大,上下文于答案越匹配;越接近于0表明相似度越小,上下文與響應越不匹配。
本文實驗中模型的目標函數(shù)選擇的是對數(shù)損失函數(shù)(binary cross-entropy loss),計算公式如下:

其中y'表示預測標簽,y表示真實標簽,訓練目的為最小化該損失函數(shù)。
模型其他參數(shù)設置如下:詞向量維度為300維;LSTM隱藏層大小設置為300;CNN卷積核數(shù)目為1000,混合模型中CNN卷積核數(shù)目取500,CNN窗口大小取值為2,3,5,7;batch_size為256,模型優(yōu)化器為Adam優(yōu)化器[13]。
本文采用的評價標準為recall@k in n,其中n表示候選答案集的大小,k表示正確答案在top_k中,如re?call@2 in 10表示給定的候選答案集大小為10,從其中選擇得分最高的前兩個答案,正確答案出現(xiàn)在前兩個答案中,則認為回答正確,計算回答正確的樣例占數(shù)據(jù)集總樣例的比例。
實驗結果如表2所示,文獻[11]中給出的基準實驗結果如表3所示。通過實驗表2和表3的對比發(fā)現(xiàn),LSTM和GRU在答案選擇任務上的表現(xiàn)突出,且效果不相上下,CNN在該任務上的表現(xiàn)不如前兩者,而將LSTM與RNN組合使用的混合模型Conv-LSTM在該任務該數(shù)據(jù)集上的表現(xiàn)要好于單獨使用LSTM或者CNN,由表2表3可以看出,Conv-LSTM比CNN在Re?call@1 in 10上提升了9.2%,比LSTM提升了2.3%,比文獻[11]中提供的LSTM基準提升了3.2%。

表2 實驗結果
本文針對深度學習在問答系統(tǒng)中的句意表示子任務上進行了研究,通過實驗對比發(fā)現(xiàn)LSTM和GRU等RNN模型相比于CNN在該任務上的表現(xiàn)更為突出,而將LSTM與CNN結合后的混合模型Conv-LSTM效果更好。目前針對問答系統(tǒng)依據(jù)答案來源分為兩種解決方案,一種是如本文所述的檢索式模型,即給定了答案集合,從中檢索出正確的答案;另一種是生成式模型,即不依賴于預先定義的回答集,模型自動生成回答的句子,如深度學習中的sequence to sequence架構[14]便可用于這種生成式任務。另外,在檢索式或生成式模型中引入注意力機制[15]也是最近的研究熱點;本文所述研究集中在單輪對話任務上,而用戶所期待的對話系統(tǒng)往往需要處理多輪對話任務,這可作為未來的一個研究方向。
參考文獻:
[1]https://en.wikipedia.org/wiki/Turing_test.
[2]MinweiFeng,Bing Xiang,MichaelR.Glass,LidanWang,Bowen Zhou.Applying Deep Learning To Answer Selection:AStudy And An Open Task.arXiv:1508.01585v2[cs.CL]2Oct2015.
[3]Mikolov,Tomas,Chen,Kai,Corrado,Greg,Dean,Jeffrey.Efficient Estimation of Word Representations in Vector Space.arXiv:1301.3781v3.
[4]Jeffrey Pennington,Richard Socher,Christopher D.Manning.GloVe:Global Vectors forWord Representation.In EMNLP,2014
[5]https://nlp.stanford.edu/projects/glove/.
[6]https://karpathy.github.io/2015/05/21/rnn-effectiveness/
[7]L.R.Medskerand L.C.Jain.Recurrent neural networks.Design and Applications,2001.
[8]Alex Graves.Supervised Sequence Labelling with Recurrent Neural Networks.Textbook,Studies in Computational Intelligence,Springer,2012.
[9]K.Cho,B.V.Merrienboer,C.Gulcehre,D.Bahdanau,F.Bourgares,H.Schwenk,and Y.Bengio.2014.Learning Phrase Representations Using Rnn Encoder-Decoder for Statistical Machine Translation.In arXiv preprintarXiv:1406.1078.
[10]Yoon Kim.ConvolutionalNeuralNetworks for Sentence Classification.arXiv:1408.5882v2[cs.CL].
[11]Ryan Lowe*,Nissan Pow*,Iulian V.Serbany,Joelle Pineau*.The Ubuntu Dialogue Corpus:A Large Dataset for Research in Unstructured Multi-Turn Dialogue Systems.arXiv:1506.08909v3[cs.CL]4 Feb 2016.
[12]https://github.com/rkadlec/ubuntu-ranking-dataset-creator
[13]KINGMAD,BA J.Adam:AMethod for Stochastic Optimization[J].arXiv preprintarXiv:1412.6980,2014.
[14]Ilya Sutskever,Oriol Vinyals,Quoc V.Le.Sequence to Sequence Learning with Neural Networks.arXiv:1409.3215v3.
[15]C.Santos,M.Tan,B.Xiang,and B.Zhou.2016.Attentive Pooling Networks.In arXiv:1602.03609.