用深度學習構造聊天機器人簡介

聊天機器人(也可以稱爲語音助手、聊天助手、對話機器人等)是目前非常熱的一個人工智能研發與產品方向。很多大的互聯網公司重金投入研發相關技術,並陸續推出了相關產品,比如蘋果Siri、微軟Cortana與小冰、Google Now、百度的“度祕”、亞馬遜的藍牙音箱Amazon Echo內置的語音助手AlexaFacebook推出的語音助手MSiri創始人推出的新型語音助手Viv…….


爲何老牌互聯網公司和很多創業公司都密集地在聊天機器人領域進行投入?其實根本原因在於大家都將聊天機器人定位爲未來各種服務的入口,尤其是移動端APP應用及可穿戴設備場景下提供各種服務的服務入口,這類似於Web端搜索引擎的入口作用。將來很可能通過語音助手繞過目前的很多APP直接提供各種服務,比如查詢天氣、定航班、訂餐、智能家居的設備控制、車載設備的語音控制等等,目前大多采用獨立APP形式來提供服務,而將來很多以APP形式存在的應用很可能會消失不見,直接隱身到語音助手背後。作爲未來各種應用服務的入口,其市場影響力毫無疑問是巨大的,這是爲何這個方向如此火熱的根本原因,大家都在爲爭奪未來服務入口而提前佈局與競爭,雖然很多公司並未直接聲明這個原因,但其目的是顯而易見的。


|聊天機器人的類型


目前市場上有各種類型的機器人,比如有京東JIMI這種客服機器人,兒童教育機器人,小冰這種娛樂聊天機器人,Aexa這種家居控制機器人、車載控制機器人、Viv這種全方位服務類型機器人等等。這是從應用方向角度來對聊天機器人的一種劃分。


如果對其應用目的或者技術手段進行抽象,可以有以下兩種劃分方法。

 

  • 目標驅動(Goal –DrivenVS  無目標驅動(Non-Goal Driven)聊天機器人


目標驅動的聊天機器人指的是聊天機器人有明確的服務目標或者服務對象,比如客服機器人,兒童教育機器人、類似Viv的提供天氣訂票訂餐等各種服務的服務機器人等;這種目標驅動的聊天機器人也可以被稱作特定領域的聊天機器人。


無目標驅動聊天機器人指的是聊天機器人並非爲了特定領域服務目的而開發的,比如純粹聊天或者出於娛樂聊天目的以及計算機遊戲中的虛擬人物的聊天機器人都屬於此類。這種無明確任務目標的聊天機器人也可以被稱作爲開放領域的聊天機器人。

 

  • 檢索式 VS 生成式聊天機器人

檢索式聊天機器人指的事先存在一個對話庫,聊天系統接收到用戶輸入句子後,通過在對話庫中以搜索匹配的方式進行應答內容提取,很明顯這種方式對對話庫要求很高,需要對話庫足夠大,能夠儘量多地匹配用戶問句,否則會經常出現找不到合適回答內容的情形,因爲在真實場景下用戶說什麼都是可能的,但是它的好處是回答質量高,因爲對話庫中的內容都是真實的對話數據,表達比較自然。


 生成式聊天機器人則採取不同的技術思路,在接收到用戶輸入句子後,採用一定技術手段自動生成一句話作爲應答,這個路線的機器人的好處是可能覆蓋任意話題的用戶問句,但是缺點是生成應答句子質量很可能會存在問題,比如可能存在語句不通順存在句法錯誤等看上去比較低級的錯誤。


本文重點介紹開放領域、生成式的聊天機器人如何通過深度學習技術來構建,很明顯這是最難處理的一種情況。


|好的聊天機器人應該具備的特點


一般而言,一個優秀的開放領域聊天機器人應該具備如下特點:


首先,針對用戶的回答或者聊天內容,機器人產生的應答句應該和用戶的問句語義一致並邏輯正確,如果聊天機器人答非所問或者不知所云,亦或老是回答說“對不起,我不理解您的意思”,對於聊天機器人來說無疑是毀滅性的用戶體驗。


其次,聊天機器人的回答應該是語法正確的。這個看似是基本要求,但是對於採用生成式對話技術的機器人來說其實要保證這一點是有一定困難的,因爲機器人的回答是一個字一個字生成的,如何保證這種生成的若干個字是句法正確的其實並不容易做得那麼完美。


再次,聊天機器人的應答應該是有趣的、多樣性的而非沉悶無聊的。儘管有些應答看上去語義上沒有什麼問題,但是目前技術訓練出的聊天機器人很容易產生“安全回答”的問題,就是說,不論用戶輸入什麼句子,聊天機器人總是回答“好啊”、“是嗎”等諸如此類看上去語義說得過去,但是這給人很無聊的感覺。


還有,聊天機器人應該給人“個性表達一致”的感覺。因爲人們和聊天機器人交流,從內心習慣還是將溝通對象想象成一個人,而一個人應該有相對一致的個性特徵,如果用戶連續問兩次“你多大了”,而聊天機器人分別給出不同的歲數,那麼會給人交流對象精神分裂的印象,這即是典型的個性表達不一致。而好的聊天機器人應該對外體現出各種基本背景信息以及愛好、語言風格等方面一致的回答。


|幾種主流技術思路


隨着技術的發展,對於聊天機器人技術而言,常見的幾種主流技術包括:基於人工模板的聊天機器人、基於檢索的聊天機器人、基於機器翻譯技術的聊天機器人、基於深度學習的聊天機器人。


基於人工模板的技術通過人工設定對話場景,並對每個場景寫一些針對性的對話模板,模板描述了用戶可能的問題以及對應的答案模板。這個技術路線的好處是精準,缺點是需要大量人工工作,而且可擴展性差,需要一個場景一個場景去擴展。應該說目前市場上各種類似於Siri的對話機器人中都大量使用了人工模板的技術,主要是其精準性是其他方法還無法比擬的。


基於檢索技術的聊天機器人則走的是類似搜索引擎的路線,事先存儲好對話庫並建立索引,根據用戶問句,在對話庫中進行模糊匹配找到最合適的應答內容。


基於機器翻譯技術的聊天機器人把聊天過程比擬成機器翻譯過程,就是說將用戶輸入聊天信息Message,然後聊天機器人應答Response的過程看做是把Message翻譯成Response的過程,類似於把英語翻譯成漢語。基於這種假設,就完全可以將統計機器翻譯領域裏相對成熟的技術直接應用到聊天機器人開發領域來。


   基於深度學習的聊天機器人技術是本文後續內容主要介紹的技術路線,總體而言,絕大多數技術都是在Encoder-Decoder(或者稱作是Sequence to Sequence)深度學習技術框架下進行改進的。使用深度學習技術來開發聊天機器人相對傳統方法來說整體思路是非常簡單可擴展的。


|深度學習構建聊天機器人


如上所述,目前對於開放領域生成式聊天機器人技術而言,多數技術採用了Encoder-Decoder框架,所以本節首先描述Encoder-Decoder框架技術原理。然後分別針對聊天機器人研究領域需要特殊考慮的主要問題及其對應的解決方案進行講解,這些主要問題分別是:多輪會話中的上下文機制問題、“安全回答”問題以及個性信息一致性問題。


  • Encoder-Decoder框架



    Encoder-Decoder框架可以看作是一種文本處理領域的研究模式,應用場景異常廣泛,不僅僅可以用在對話機器人領域,還可以應用在機器翻譯、文本摘要、句法分析等各種場合。下圖是文本處理領域裏常用的Encoder-Decoder框架最抽象的一種表示:

                                                  1. 抽象的Encoder-Decoder框架


Encoder-Decoder框架可以如此直觀地去理解:可以把它看作適合處理由一個句子(或篇章)生成另外一個句子(或篇章)的通用處理模型。對於句子對<X,Y>,我們的目標是給定輸入句子X,期待通過Encoder-Decoder框架來生成目標句子YXY可以是同一種語言,也可以是兩種不同的語言。而XY分別由各自的單詞序列構成:

                                             


Encoder顧名思義就是對輸入句子X進行編碼,將輸入句子通過非線性變換轉化爲中間語義表示C

                                      

對於解碼器Decoder來說,其任務是根據句子X的中間語義表示C和之前已經生成的歷史信息來生成i時刻要生成的單詞yi:

                                          


每個yi都依次這麼產生,那麼看起來就是整個系統根據輸入句子X生成了目標句子Y


對於聊天機器人來說,完全可以使用上述的Encoder-Decoder框架來解決技術問題。具體而言,對應的<X,Y>中,X指的是用戶輸入語句,一般稱作Message,而Y一般指的是聊天機器人的應答語句,一般稱作Response。其含義是當用戶輸入Message後,經過Encoder-Decoder框架計算,首先由EncoderMessage進行語義編碼,形成中間語義表示CDecoder根據中間語義表示C生成了聊天機器人的應答Response。這樣,用戶反覆輸入不同的Message,聊天機器人每次都形成新的應答Response,形成了一個實際的對話系統。


在實際實現聊天系統的時候,一般EncoderDecoder都採用RNN模型,RNN模型對於文本這種線性序列來說是最常用的深度學習模型,RNN的改進模型LSTM以及GRU模型也是經常使用的模型,對於句子比較長的情形,LSTMGRU模型效果要明顯優於RNN模型。儘管如此,當句子長度超過30以後,LSTM模型的效果會急劇下降,一般此時會引入Attention模型,這是一種體現輸出Y和輸入X句子單詞之間對齊概率的神經網絡模型,對於長句子來說能夠明顯提升系統效果。


文獻1和文獻2都較早採用Encoder-Decoder模型來建立對話機器人,一般的做法是採用收集Twitter或者微博中評論裏的聊天信息來作爲訓練數據,用大量的此類聊天信息來訓練Encoder-Decoder模型中RNN對應的神經網絡連接參數。圖2展示了利用微博評論對話數據訓練好的聊天機器人的聊天效果,其中Post列指的是用戶輸入Message,其後三列是不同Encoder-Decoder方法產生的應答Response,而最後一列是基於傳統檢索方法的輸出應答。

                                             

              圖2. 聊天機器人聊天效果示例


  • 多輪會話中的上下文問題


  上述Encoder-Decoder框架可以根據用戶當前輸入Message,聊天機器人自動生成應答Response,形成了一個有效的對話系統。但是一般人們聊天並不是單純的一問一答,在回答的時候到底說什麼內容常常要參考上下文Context信息,所謂對話上下文Context,也就是在用戶當前輸入問句Message之前兩者的對話信息,因爲存在多輪的一問一答,這種情形一般稱爲多輪會話。在多輪會話中,一般將上下文稱作Context,當前輸入稱爲Message,應答稱作Response


深度學習來解決多輪會話的關鍵是如何將上下文聊天信息Context引入到Encoder-Decoder模型中去的問題。很明顯,上下文聊天信息Context應該引入到Encoder中,因爲這是除了當前輸入Message外的額外信息,有助於Decoder生成更好的會話應答Response內容。目前不同的研究主體思路都是這樣的,無非在如何將Context信息在Encoder端建立模型或者說具體的融入模型有些不同而已。


在上文所述的Encoder-Decoder框架中,很容易想到一種直觀地將Context信息融入Encoder的思路:無上下文信息的Encoder-Decoder模型的輸入僅僅包含Message,只需要把上下文信息Context和信息Message拼接起來形成一個長的輸入提供給Encoder,這樣就把上下文信息融入模型中了。這個直覺本身其實是沒有什麼問題的,但是對於採用RNN模型的Encoder來說會存在如下問題:因爲輸入是歷史上下文Context加上當前輸入Message構成的,有時候輸入會非常長,而衆所周知,對於RNN模型來說,如果輸入的線型序列長度越長,模型效果越差。所以這樣簡單地拼接ContextMessage的策略明顯不會產生太好的聊天效果。


考慮到RNN對長度敏感的問題,文獻3提出了針對聊天機器人場景優化的Encoder-Decoder模型,核心思想是將Encoder用多層前向神經網絡來代替RNN模型,神經網絡的輸出代表上下文信息Context和當前輸入Message的中間語義表示,而Decoder依據這個中間表示來生成對話Response。這樣做既能夠將上下文信息Context和當前輸入語句Message通過多層前向神經網絡編碼成Encoder-Decoder模型的中間語義表達,又避免了RNN對於過長輸入敏感的問題。圖3和圖4是論文中提出的兩種不同的融合方法,方法1ContextMessage不做明顯區分,直接拼接成一個輸入;而方法2則明確區分了ContextMessage,在前向神經網絡的第一層分別對其進行編碼,拼接結果作爲深層網絡後續隱層的輸入,核心思想是強調Message的作用,這個道理上是很好理解的,因爲畢竟Response是針對Message的應答,Context只是提供了背景信息,所以應該突出Message的作用。


               圖3.  融合方法1




                     4.  融合方法


當然,除了EncoderRNN替換爲深層前向神經網絡外,文獻3與傳統Encoder-Decoder還有一個顯著區別,就是DecoderRNN模型每個時刻t在輸出當前字符的時候,不僅僅依賴t-1時刻的隱層狀態和當前輸入,還顯示地將Encoder的中間語義編碼直接作爲t時刻RNN節點的輸入,而不是像經典Encoder-Decoder模型那樣把中間語義編碼當做DecoderRNN的最初輸入。其出發點其實也是很直觀的,就是在生成每個輸出字符的時候反覆強化中間語義編碼的作用,這對於輸出應答Response較長的時候無疑是有幫助作用的。 



                   5. 層級神經網絡 


  

文獻4給出瞭解決多輪會話上下文問題的另外一種思路(如圖5所示),被稱作層級神經網絡(Hierarchical Neural Network,簡稱HNN)。HNN本質上也是Encoder-Decoder框架,主要區別在於Encoder採用了二級結構,上下文Context中每個句子首先用“句子RNN(Sentence RNN)”對每個單詞進行編碼形成每個句子的中間表示,而第二級的RNN則將第一級句子RNN的中間表示結果按照上下文中句子出現先後順序序列進行編碼,這級RNN模型可被稱作“上下文RNNContext RNN)”,其尾節點處隱層節點狀態信息就是所有上下文Context以及當前輸入Message的語義編碼,以這個信息作爲Decoder產生每個單詞的輸入之一,這樣就可以在生成應答Response的單詞時把上下文信息考慮進來。


綜上所述可以看出,深度學習解決多輪會話的上下文信息問題時大致思路相同,都是在Encoder階段把上下文信息Context及當前輸入Message同時編碼,以促進Decoder階段可以參考上下文信息生成應答Response


  • 如何解決“安全回答”(Safe Response)問題


如果採用經典的Encoder-Decoder模型構建開放領域生成式聊天機器人系統,一個比較容易產生的嚴重問題就是“安全回答”問題。什麼是安全回答問題呢?就是說不論用戶說什麼內容,聊天機器人都用少數非常常見的句子進行應答,比如英文的“I don’t know”、“Come on”、“I’m OK”,中文的“是嗎”、“呵呵”等。雖然說在很多種情況下這麼回答也不能說是錯誤的,但是可以想象,如果用戶遇到這樣一位聊天對象會有多抓狂。這個現象產生的主要原因是聊天訓練數據中確實很多回答都是這種寬泛但是無意義的應答,所以通過Encoder-Decoder模型機器人學會這種常見應答模式。如何解決聊天機器人“安全回答”問題,讓機器產生多樣化的應答是個很重要的課題。


 文獻5即在Sequence-to-Sequence框架下來解決“安全回答”問題。在聊天場景下,傳統的使用Sequence-to-Sequence框架來進行模型訓練時,其優化目標基本上是最大似然法(MLE),就是說給定用戶輸入Message,通過訓練來最大化生成應答Response的概率: 

    

  其中M代表messageR代表Response


 文獻5提出了改進的優化目標函數:最大化互信息(MMI),其目標函數如下:

   

可以從公式差異中看出,MMI的優化目標除了最大化從Message生成應答Response的概率,同時加入了反向優化目標,即最大化應答Response產生Message的概率,其中lamda是控制兩者哪個更重要的調節超參數。通過其名字“互信息”以及具體公式可以看出,這個優化目標函數要求應答ResponseMessage內容密切相關而不僅僅是考慮哪個Response更高概率出現,所以降低了那些非常常見的回答的生成概率,使得應答Response更多樣化且跟Message語義更相關。

 

採用MMI作爲目標函數明顯解決了很多“安全回答”問題,表一是兩個不同優化目標函數產生的應答Response的示例,其中Message列代表用戶輸入語句MessageS2S Response代表MLE優化目標產生的應答,MMI Response代表MMI優化目標產生的應答。

  

             1  S2SMMI產生的應答 



  • 個性信息一致性問題 


對於聊天助手等應用來說,聊天機器人往往會被用戶當做一個具有個性化特性的虛擬人,比如經常會問:“你多大了”、“你的愛好是什麼”、“你是哪裏人啊”等。如果將聊天助手當做一個虛擬人,那麼這位虛擬人相關的個性化信息比如年齡、性別、愛好、語言風格等個性特徵信息應該維護回答的一致性。利用經典的Sequence-to-Sequence模型訓練出的聊天助手往往很難保持這種個性信息的一致性(不一致的例子請參考圖6),這是因爲Sequence-to-Sequence模型訓練的都是單句Message對單句Response的映射關係,內在並沒有統一維護聊天助手個性信息的場所,所以並不能保證每次相同的問題能夠產生完全相同的應答。另外,對於海量用戶來說,可能不同的用戶會喜歡不同聊天風格或者不同身份的聊天助手,所以聊天機器人應該能夠提供不同身份和個性信息的聊天助手,不同類型用戶可以採用相應類型的聊天助理來聊天,當然,在聊天過程中要儘量保持身份和個性信息的一致性。

                  6. 個性信息不一致問題(這是利用Twitter 25百萬訓練數據經過Sequence-to-Sequence模型訓練後產生的結果) 



              7. 一種Sequence-to-Sequence框架下維護聊天助手個性一致化的方案 



那麼如何在Sequence-to-Sequence框架下采用技術手段維護聊天助手的個性一致性呢?文獻6給出了一種比較典型的解決方案。參照文獻6,我們可以改造出一個能夠實現不同身份個性特徵的聊天助手的思路。圖7是其示意圖。(注意:本文敘述的並非文獻6中的原始場景,而是本文作者參照文獻稍作修正的技術方案)

   

     其基本思路如下:聊天機器人系統可以定義不同身份和個性及語言風格的聊天助理身份,個性化信息通過Word Embedding的表達方式來體現,在維護聊天助手個性或身份一致性的時候,可以根據聊天對象的風格選擇某種風格身份的聊天助手。整體技術框架仍然採用Sequence-to-Sequence架構,其基本思路是把聊天助手的個性信息導入到Decoder的輸出過程中,就是說在採用RNNDecoder生成應答Response的時候,每個t時刻,神經網絡節點除了RNN標準的輸入外,也將選定身份的個性化Word Embedding信息一併作爲輸入。這樣就可以引導系統在輸出時傾向於輸出符合身份特徵的個性化信息。

   

   上述是一種深度學習框架下維護聊天助手個性一致性的技術框架,很明顯還可以衍生出很多種其它方案,但是其技術思路應該是類似的,核心思想是把聊天助手的個性信息在Decoder階段能夠體現出來,以此達到維護個性一致性的目的。

   

上述內容介紹了使用深度學習構建聊天機器人採用的主體技術框架以及面臨的一些獨特問題及相應的解決方案,除此外,還有一些問題值得探討,比如如何使得聊天機器人有主動引導話題的能力,因爲一般聊天機器人都比較被動,話題往往都是由用戶發起和引導,聊天機器人只是作爲應答方,很少主動引導新話題,而這很容易導致聊天冷場,所以如何主動引導話題也是聊天機器人應該具備的能力之一,文獻7提出了一種技術方案,此處不贅述,感興趣的讀者可自行參考。


|深度學習聊天機器人的優點與需要改進的方向


相對基於檢索類或者機器翻譯類傳統技術而言,基於Encoder-Decoder深度學習框架的聊天機器人具有如下明顯優點:

  1.    構建過程是端到端(End-to-End)數據驅動的,只要給定訓練數據即可訓練出效果還不錯的聊天系統,省去了很多特徵抽取以及各種複雜中間步驟的處理,比如省去句法分析與語義分析等傳統NLP繞不開的工作,使得系統開發效率大幅提高;

  2.  語言無關,可擴展性強。對於開發不同語言的聊天機器人來說,如果採用Encoder-Decoder技術框架,只需要使用不同語言的聊天數據進行訓練即可,不需要專門針對某種語言做語言相關的特定優化措施,這使得系統可擴展性大大加強;

  3.  訓練數據擴大有助於持續提升系統效果。對於Encoder-Decoder深度學習模型來說,一般來說,通過不斷增加訓練數據能夠帶來持續的效果提升。

 

當然,開發出具備像人一樣能夠自然交流的聊天機器人目前還面臨着各種技術難題需要克服,具體到使用深度學習技術來構建聊天機器人來說,目前在以下幾個方面還需大力加強:

  1.   聊天機器人的評價標準。如何評價聊天機器人效果質量的評價標準對於持續提升系統是至關重要的,因爲只有這樣才能目標明確地去有針對性地設計技術方案進行改進。聊天機器人在評價標準方面還有待深入研究,目前常用的標準包括機器翻譯的評價指標BLEU、語言模型評價標準困惑度等,還有很多工作是通過人工來進行效果評價,還沒有特別合適地專用於聊天機器人的評價標準,這是阻礙聊天機器人技術持續發展的一個障礙。

  2.  缺乏標準化的大規模訓練數據。就像上述深度學習模型優點所述,訓練數據的不斷增加一般能夠帶來性能的持續提升。但是目前來說,標準化的特大規模的人與人對話數據相對缺乏,很多研究都是通過Twitter或者微博評論等高成本的採集方式來收集對話訓練數據,或者使用電影字幕等比較間接的方式來積累訓練數據。如果能夠有大規模的標準聊天數據,很明顯將能夠極大提升技術進步。

  3. 技術仍處於發展初期。很明顯採用深度學習來進行聊天機器人的技術研發還處於非常初期的階段,從技術手段也好,亦或是實際系統效果也好,都有非常大的進步空間。


參考文獻

 

[1]Lifeng Shang, Zhengdong Lu, and Hang Li.2015. Neural responding machine for short-text conversation. In ACL-IJCNLP,pages 1577–1586.

 

[2] Oriol Vinyals and Quoc Le. 2015. Aneural conversational model. In Proc. of ICML Deep Learning Workshop.

 

[3] Alessandro Sordoni, Michel Galley,Michael Auli, ChrisBrockett, Yangfeng Ji, Meg Mitchell, Jian-Yun Nie,JianfengGao, and Bill Dolan. 2015. A neural network approach to context-sensitivegeneration of conversational responses. In Proc. of NAACL-HLT.

 

[4] Iulian V Serban, Alessandro Sordoni,Yoshua Bengio,Aaron Courville, and Joelle Pineau. 2015. Building end-to-enddialogue systems using generative hierarchical neural network models. In Proc.of AAAI.

 

[5]Jiwei Li, Michel Galley, Chris Brockett,Jianfeng Gao,and Bill Dolan. 2015. A diversity-promoting objective function forneural conversation models. arXiv preprint arXiv:15

 

[6] Jiwei Li, Michel Galley, ChrisBrockett, Jianfeng Gao and Bill Dolan. A Persona-Based Neural ConversationModel. arXiv preprint arXiv:16

 

[7] Xiang Li,Lili Mou,Rui Yan and MingZhang. StalemateBreaker: A Proactive Content-Introducing Approach to AutomaticHuman-Computer Conversation.IJCAI 2016. 


本博客轉載自張俊林博客:http://blog.csdn.net/malefactor/article/details/51901115


歡迎關注公衆號學習自然語言處理技術


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章