上官鑫 呂俊玉 張桓宇 劉力軍
關(guān)鍵詞:情感監(jiān)督;Seq2Seq;注意力機制;深度學(xué)習(xí)
中圖分類號:TP311.1 文獻(xiàn)標(biāo)識碼:A
1引言(Introduction)
近年來,隨著人工智能技術(shù)的不斷發(fā)展,通過自然語言與人類進(jìn)行對話的聊天機器人成為研究熱點,并因深度學(xué)習(xí)在自然語言處理、詞向量表示、情感分析等領(lǐng)域的廣泛應(yīng)用,使其逐漸成為研究聊天機器人的關(guān)鍵技術(shù)[1]。目前,許多商業(yè)公司推出了應(yīng)用深度學(xué)習(xí)技術(shù)的相關(guān)產(chǎn)品,如“蘋果”的Siri、“微軟”的小冰、“百度”的度秘等。雖然現(xiàn)有聊天機器人都可以與人類進(jìn)行無差錯交流,普遍表現(xiàn)出“智商”很高,但是人們在日常交換信息的過程中,傳達(dá)的信息不僅包含信息語義本身,還包含著情感與情感狀態(tài)。為了使人機對話更加貼近現(xiàn)實,人們寄希望于聊天機器人具有“智商”的同時也具有“情商”。本文提出基于深度學(xué)習(xí)的文本情感聊天機器人系統(tǒng),滿足人們進(jìn)行日常文本聊天中對情感的需求,具有支持中英雙語對話、情感分類多元、適用多領(lǐng)域?qū)υ挼墓δ?,提升了用戶在日常閑聊時的使用體驗。
2研究現(xiàn)狀(Research status)
現(xiàn)有的文本聊天機器人按功能可劃分為任務(wù)型和非任務(wù)型。針對日常聊天應(yīng)用場景,采用非任務(wù)型可以更好地提升用戶使用體驗,提高用戶滿意度。非任務(wù)型聊天機器人按對話的實現(xiàn)方式可以分為檢索式對話系統(tǒng)和生成式對話系統(tǒng)[2]。基于檢索式的聊天機器人的回復(fù)語句存有單一匹配關(guān)鍵字的問題,其利用信息檢索技術(shù)為用戶會話請求匹配已經(jīng)事先存儲的對話語料作為回復(fù)[3]?;谏墒降牧奶鞕C器人,在現(xiàn)有的研究基礎(chǔ)上其回復(fù)語句多使用情感通用性回復(fù)語句,情感單一[4]。此類聊天機器人多采用Encoder-Decoder(編碼器-解碼器)框架中的Seq2Seq模型,其主要應(yīng)用端到端框架[5],利用大量自然語言訓(xùn)練集學(xué)習(xí)從問題到答案的關(guān)系,從而根據(jù)用戶輸入語句自動生成相應(yīng)的回復(fù),具備一定的自我學(xué)習(xí)能力。一些研究表明,基于Seq2Seq模型對于短句子有著較好的表現(xiàn),但對于長句子則表現(xiàn)力有所下降。注意力機制可以選擇性地學(xué)習(xí)句子中的部分單詞或片段[6],從而更好地處理長句子。目前在情感對話領(lǐng)域,許多研究者將各種端到端的神經(jīng)網(wǎng)絡(luò)模型作為情感對話生成模型的基礎(chǔ),并通過情感分析、情感嵌入等技術(shù)對模型進(jìn)行改進(jìn),實現(xiàn)了在對話生成中的情感表達(dá)[7]。周震卿等[8]提出了基于TextCNN(文本卷積神經(jīng)網(wǎng)絡(luò))情感預(yù)測器的情感監(jiān)督聊天機器人,在Seq2Seq模型中引入更準(zhǔn)確的情感特征,由問題直接獲取回復(fù)的情感表示,有效地提高了回復(fù)語句的質(zhì)量,但存在不能區(qū)分情感類別和對長文本不敏感的問題。
3系統(tǒng)設(shè)計(System design)
本系統(tǒng)采用Seq2Seq+Attention(序列到序列+注意力機制)模型,解決現(xiàn)有文本聊天機器人存在的單一匹配問題。構(gòu)建TextCNN-BiLSTM-SlefAttention(文本卷積神經(jīng)網(wǎng)絡(luò)-雙向長短期記憶網(wǎng)絡(luò)-自注意力機制)情感分類器,獲得具備表示文本情感的情感向量和情感分類向量。為了讓聊天機器人具有更好的情感回復(fù)表達(dá),將情感向量嵌入基于GRU的Seq2Seq+Attention對話模型中,同時將情感分類向量加入訓(xùn)練模型的損失函數(shù)中,實現(xiàn)對話過程中的情感監(jiān)督,避免產(chǎn)生通用性情感回復(fù)語句。運用豐富的數(shù)據(jù)集進(jìn)行模型訓(xùn)練,實現(xiàn)中英文對話,滿足了文本聊天中的多領(lǐng)域?qū)υ捫枨?。使用微信小程序作為系統(tǒng)的前端,實現(xiàn)前后端分離,便于前端優(yōu)化和功能更新。
3.1系統(tǒng)框架結(jié)構(gòu)
本系統(tǒng)采用分離式前后端部署的方式,前端部署在微信小程序中,與用戶進(jìn)行交互;后端部署在Flask(Web應(yīng)用程序框架)中,對用戶信息進(jìn)行處理與反饋。系統(tǒng)的整體框架如圖1所示。
本系統(tǒng)邏輯結(jié)構(gòu)分為輸入模塊、預(yù)處理模塊、對話處理模塊、輸出模塊,系統(tǒng)的邏輯結(jié)構(gòu)如圖2所示。
系統(tǒng)邏輯結(jié)構(gòu)流程如下:
①用戶在交互界面輸入文本;
②輸入文本經(jīng)格式轉(zhuǎn)換后傳輸?shù)胶蠖朔?wù)器;
③后端服務(wù)器將接收到的文本進(jìn)行格式化預(yù)處理;
④將預(yù)處理后的文本輸入對話處理模塊中自動生成回復(fù)文本;
⑤回復(fù)文本經(jīng)格式轉(zhuǎn)換后返回給用戶。
3.2情感分類模型
關(guān)于文本情感分類的研究,一般是對情感類別(褒義、中性、貶義)進(jìn)行情感分類;原福永等[9]提出將BiLSTM(雙向長短期記憶網(wǎng)絡(luò))與CNN(卷積神經(jīng)網(wǎng)絡(luò))模型結(jié)合,與此同時引入Attention(注意力)機制實現(xiàn)對人們的情感進(jìn)行分類;李輝等[10]提出將CNNGRU-Attention混合,實現(xiàn)二元(消極、積極)分類,并引入Attention機制構(gòu)建混合神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)重要文本信息。
本系統(tǒng)通過構(gòu)建TextCNN-BiLSTM-SelfAttention情感分類模型,應(yīng)用于問題情感分類器和答案情感監(jiān)督器。以憤怒、反感、害怕、內(nèi)疚、快樂、難過、羞愧7類情感作為情感分類標(biāo)簽,對輸入文本進(jìn)行情感類別預(yù)測,其情感分類模型如圖3所示。
3.3 對話處理訓(xùn)練模型
通過Seq2Seq+Attention模型與情感分類模型結(jié)合,構(gòu)建對話處理訓(xùn)練模型,如圖4所示。
對話處理的訓(xùn)練流程如下:①將問題數(shù)據(jù)集序列分別輸入編碼器和問題情感分類器中,產(chǎn)生編碼向量和情感向量;②將上述產(chǎn)生的向量及decoder(解碼器)的hidden state(隱藏狀態(tài))經(jīng)過注意力機制產(chǎn)生context vector(上下文張量);③將答案數(shù)據(jù)集序列及context vector加入解碼器中,輸出回復(fù)向量及hidden state向量;④將hidden state向量輸入到答案情感監(jiān)督器中,輸出情感分類向量;⑤將解碼器輸出的回復(fù)向量和答案情感監(jiān)督器輸出的情感分類向量加入對話訓(xùn)練模型的損失函數(shù)中,使對話訓(xùn)練模型在訓(xùn)練過程中實現(xiàn)情感監(jiān)督。
3.4對話處理預(yù)測模型
本系統(tǒng)采用對話處理訓(xùn)練模型去除答案情感監(jiān)督器構(gòu)成對話處理預(yù)測模型,從而進(jìn)行對話處理預(yù)測,如圖5所示。
對話處理的預(yù)測流程如下:①將問題數(shù)據(jù)集序列分別輸入編碼器和問題情感分類器中,產(chǎn)生編碼向量和情感向量;②將上述產(chǎn)生的向量以及decoder的hidden state經(jīng)過attention機制產(chǎn)生context vector;③將解碼時間步序列以及contextvector輸入解碼器中,輸出對話預(yù)測序列。
4系統(tǒng)實現(xiàn)(System implementation)
系統(tǒng)實現(xiàn)分為前端設(shè)計實現(xiàn)、數(shù)據(jù)預(yù)處理、對話處理和系統(tǒng)部署四個部分。
4.1實現(xiàn)環(huán)境
本系統(tǒng)實現(xiàn)環(huán)境詳見表1。
4.2前端設(shè)計實現(xiàn)
本系統(tǒng)的前端設(shè)計實現(xiàn)分為界面設(shè)計模塊,實現(xiàn)用戶交互界面;輸入模塊,實現(xiàn)對話文本更新。
4.2.1界面設(shè)計模塊
微信小程序框架系統(tǒng)分為邏輯層和視圖層。邏輯層使用JavaScript引擎,將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層,同時接收視圖層的事件反饋。視圖層由WXML(頁面文件)、WXSS(樣式文件)編寫,將邏輯層的數(shù)據(jù)反映到視圖層,同時將視圖層的事件發(fā)送給邏輯層。WXML用于描述頁面的結(jié)構(gòu),WXSS用于描述頁面的格式。
本系統(tǒng)實現(xiàn)的前端界面由對話框和輸入框構(gòu)成,對話框?qū)崿F(xiàn)用戶對話內(nèi)容展示,輸入框接收用戶輸入文本,如圖6所示。
在對話框中實現(xiàn)聊天文本更新的流程,如圖7所示。
圖7中,msg為獲得的問題文本/答案文本;msglist為對話過程中產(chǎn)生的問題、答案文本集;wx:for(msglist)為頁面循環(huán)渲染msglist;scroll-into-view:bottom為將scroll-view窗口滾動到最低端(bottom為msglist的長度)。
該模塊流程如下:
①邏輯層在獲得輸入文本后,將輸入文本加入用戶對話列表中;
②視圖層進(jìn)行頁面的重新渲染,將輸入文本信息展現(xiàn)在對話框中。
4.2.2輸入模塊
本模塊通過對用戶的輸入文本類別進(jìn)行判斷,然后經(jīng)過json格式轉(zhuǎn)換傳輸?shù)胶蠖朔?wù)器,從而進(jìn)行相對應(yīng)語言的對話預(yù)測處理,如圖8所示。
4.3數(shù)據(jù)預(yù)處理
為了完成本系統(tǒng)語言模型的構(gòu)建、訓(xùn)練以及生成對話,需要大量的數(shù)據(jù)集。基于目前已有數(shù)據(jù)集的基礎(chǔ)上,對其進(jìn)行整理、預(yù)處理后加入對話生成模型中。整理數(shù)據(jù)集時發(fā)現(xiàn),電影字幕文件的對話素材較為豐富,因此采用康奈爾大學(xué)電影對話語料作為對話處理訓(xùn)練模型的訓(xùn)練數(shù)據(jù)集。采用帶有情感標(biāo)注的情感數(shù)據(jù)集作為問題情感分類器的訓(xùn)練數(shù)據(jù)集;此外,收集了ai(人工智能)、food(食品)、history(歷史)、movies(電影)、literature(文學(xué))等17 種話題領(lǐng)域的數(shù)據(jù)集實現(xiàn)中文多領(lǐng)域?qū)υ挕?/p>
數(shù)據(jù)預(yù)處理流程如圖9所示。
(1)對數(shù)據(jù)集中的文本進(jìn)行清洗分割(以電影對話語料庫為例)。使用Python的正則庫re,其中re.sub()函數(shù)對數(shù)據(jù)集中的問題和答案對進(jìn)行清洗分割;給問題、答案字符串的前后加上‘\t(開始)、‘\n(結(jié)束)標(biāo)志;得到Question_list,Answer_list;其中,問題格式如‘\t how are you ?\n,答案格式如‘\t i am fine ! \n。
(2)將切割分詞后的文本轉(zhuǎn)換為向量化數(shù)字序列。將得到的Question_list、Answer_list,經(jīng)keras_preprocessing.Text.Tokenizer()處理得到Question_list_ids(問題向量化數(shù)字序列)、Question_vocab(問題字典)、Answer_list_ids(答案向量化數(shù)字序列)、Answer_vocab(答案字典)。keras_preprocessing.Text.Tokenizer:keras中的一個文本標(biāo)記實用類,將每個文本轉(zhuǎn)化為一個整數(shù)序列,其每個整數(shù)都是詞典中標(biāo)記的序列。
( 3 ) 將得到的向量化數(shù)字序列, 進(jìn)行p a d d i ng填充。將得到的Question_list_ids、Answer_list_ids,經(jīng)keras_preprocessing.sequence.pad_sequences()處理,獲得定長的問題、答案向量化數(shù)字序列。keras_preprocessing.sequence.pad_sequences:將序列轉(zhuǎn)化為經(jīng)過填充后得到的一個長度相同的新序列。
4.4對話處理
將數(shù)據(jù)集樣本對放入系統(tǒng)構(gòu)建的模型進(jìn)行訓(xùn)練,實現(xiàn)對話處理,完成對輸入文本的預(yù)測回復(fù)。系統(tǒng)模型訓(xùn)練可分為問題情感分類器訓(xùn)練和對話處理模型訓(xùn)練。
4.4.1問題情感分類器訓(xùn)練
問題情感分類器的嵌入層采用keras的自定義嵌入層(embedding layer),其embedding layer所有的words(單詞序列)被隨機初始化,將正整數(shù)(單詞序號)轉(zhuǎn)換為具有固定大小的向量。通過單層的卷積和池化進(jìn)行特征提取,同時卷積層使用ReLU激活函數(shù),對特征向量進(jìn)行非線性處理,避免了梯度消失和爆炸的問題,并提高BiLSTM的訓(xùn)練計算效率。BiLSTM獲取抽取后輸入特征向量間的相關(guān)性,同時關(guān)注“頭部”和“尾部”的信息,可以更好地學(xué)習(xí)長序列信息。SelfAttention針對BiLSTM輸出的特征向量,捕獲遠(yuǎn)距離的特征,將SelfAttention輸出的特征序列作為輸入文本的情感向量。使用全連接層、Dropout機制防止過擬合,提升模型訓(xùn)練效率。同時,使用Softmax激活函數(shù)對特征向量歸一化處理,輸出情感類別向量序列。
現(xiàn)有的情感分類一般是簡單的二元(消極、積極)或三元分類(消極、積極、中立),然而人的情感更加多元,因此本系統(tǒng)構(gòu)建的情感分類模型為多分類模型。在實現(xiàn)上,采用分類交叉熵?fù)p失函數(shù)作為該模型的損失函數(shù),將帶有情感標(biāo)注的情感數(shù)據(jù)集輸入問題情感分類器中,實現(xiàn)模型的訓(xùn)練。
4.4.2對話處理訓(xùn)練模型
對話處理訓(xùn)練模型分為情感分類器模塊、編碼器模塊、解碼器模塊。模型訓(xùn)練回合數(shù)epochs設(shè)為50,batch size設(shè)為64。
(1)情感分類器模塊。加載已經(jīng)訓(xùn)練好的問題情感分類模型輸入問題向量化數(shù)字序列,得到情感向量和問題情感分類向量。
(2)編碼器模塊。將問題向量化數(shù)字序列輸入編碼器中,得到編碼輸出序列和最后的隱藏狀態(tài)序列。編碼器由嵌入層、GRU(門控循環(huán)單元)層構(gòu)成,其中GRU設(shè)置為可返回隱藏狀態(tài)序列,如圖10所示。在選取編碼器輸入數(shù)據(jù)集時,首先對問題文本數(shù)據(jù)集進(jìn)行抽取后,得到15,838 個規(guī)格化的問題文本集,抽取得到問題文本集的90%作為模型訓(xùn)練集,10%作為模型驗證集。
(3)解碼器模塊。將編碼器輸出的向量序列和注意力機制對輸入文本選擇性學(xué)習(xí)得到的向量序列輸入到解碼器中。解碼器由嵌入層、GRU、全連接層組成,如圖11所示。在選取解碼器輸入數(shù)據(jù)集時,對答案文本數(shù)據(jù)集進(jìn)行抽取后,得到15,838 個規(guī)格化的答案文本集,單個文本格式如‘\t i amfine ?。躰;抽取得到答案文本集的90%作為模型訓(xùn)練集,10%作為模型驗證集。
4.5系統(tǒng)部署
微信小程序作為前端,實現(xiàn)微信小程序與用戶交互;Flask框架作為后端服務(wù)器,依載對話模型,并實現(xiàn)與微信小程序的通信。
4.5.1微信小程序
微信小程序的前端代碼存儲于微信服務(wù)器之中,在騰訊云端存放,無須加載,可以直接打開,響應(yīng)速度較快。使用wx.request API(請求函數(shù)接口)與Flask后端服務(wù)器進(jìn)行通信。
wx.request模板:
wx.request({
Url:,
Data:,
Method:'POST',
Header:{
'content-type':'application/x-www-form-urlencoded'
},
})
4.5.2 Flask后端
利用Python的Flask框架搭建后端服務(wù)器,可擴(kuò)展性強,在開發(fā)過程中不需要HTTP請求的發(fā)送和接收。
app.run(host='127.0.0.1',port=5000,debug=True):設(shè)置服務(wù)端的IP地址和端口號;
@app.route():設(shè)置對話處理函數(shù)所綁定的URL;
Request.values:獲得Post表單的數(shù)據(jù)部分;
Return:將對話處理結(jié)果以json格式返回給前端。
5 系統(tǒng)展示(System display)
本系統(tǒng)的功能展示如圖12所示。
6結(jié)論(Conclusion)
本研究提出了一種基于深度學(xué)習(xí)的文本情感聊天機器人系統(tǒng),該系統(tǒng)屬于生成式聊天機器人系統(tǒng),解決了單一匹配知識庫問題且適用于多領(lǐng)域?qū)υ?。同時,在對話過程中引入情感監(jiān)督,實現(xiàn)了對話過程中的情感回復(fù)與響應(yīng),提高了生成回復(fù)語句的情感質(zhì)量,有效拓展了文本聊天機器人的情感交互功能。此外,在系統(tǒng)部署上使用更加靈活的分離式框架搭建,便于前端優(yōu)化和功能更新。從整體上看,本系統(tǒng)具有一定的創(chuàng)新性和較好的應(yīng)用前景。
作者簡介:
上官鑫(2000-),男,本科生.研究領(lǐng)域:自然語言處理.
呂俊玉(2001-),女,本科生.研究領(lǐng)域:自然語言處理.
張桓宇(1999-),男,本科生.研究領(lǐng)域:自然語言處理.
劉力軍(1979-),男,碩士,講師.研究領(lǐng)域:網(wǎng)絡(luò)技術(shù).