聊天機器人(Chatbot),又被稱為對話代理(Conversational Agents)或對話系統(Dialog Systems),是當前的一個研究熱點。Microsoft在聊天機器人領域下了巨大賭注,其他的公司,例如Facebook(M)、Apple(Siri)、Google、WeChat和Slack也不甘落後,推出了相關的產品。這股聊天機器人的新浪潮,也在一些創業公司興起了:試圖改變使用者和服務之間的互動模式的產品 Operator 和 x.ai,機器人開發平臺 Chatfuel,機器人開發庫 Howdy’s Botkit 等。Microsoft最近也公開了他們自己的 機器人開發框架。
許多公司希望機器人能夠像人類一樣自然地對話,而NLP和深度學習技術則是他們寄予厚望的實現方式。但是炒作歸炒作,我們必須直面的現實是,AI有些時候的表現還是和我們的期望相去甚遠的。
在這個系列的blog中,我們將會介紹用於搭建聊天機器人模型的深度學習技術,讓大家對於“這個領域中,什麼是能做到的,什麼是現階段幾乎不可能實現的”有一個大致的瞭解。本文僅是一個綜述,實現細節將會在該系列接下來的blog中推出。
模型分類
基於檢索的模型 vs. 產生式模型
基於檢索的模型(Retrieval-Based Models)有一個預先定義的“回答集(repository)”,包含了許多回答(responses),還有一些根據輸入的問句和上下文(context),以及用於挑選出合適的回答的啟發式規則。這些啟發式規則可能是簡單的基於規則的表示式匹配,或是相對複雜的機器學習分類器的整合。基於檢索的模型不會產生新的文字,它只能從預先定義的“回答集”中挑選出一個較為合適的回答。
產生式模型(Generative Models)不依賴於預先定義的回答集,它會產生一個新的回答。經典的產生式模型是基於機器翻譯技術的,只不過不是將一種語言翻譯成另一種語言,而是將問句“翻譯”成回答(response)。
兩種構建模型的方式都有其明顯的優點和缺點。對於基於檢索的模型,由於“回答集”是手工編寫的回答,因此幾乎不會有語法錯誤。然而,正是因為回答都是預先定義的,該模型有兩個明顯缺點:1)無法處理沒見過的問題,因為此時資料庫中沒有合適的回答;2) 無法追溯上文中的實體資訊,例如上文提到的人名、地名。相對來說,產生式模型就更“智慧”,他們能處理沒見過的輸入,也有辦法追溯上文提到的實體資訊。但是,凡事有利就有弊,產生式模型訓練難度大,並且很容易犯語法錯誤(尤其是長句子的生成),而且需要極其龐大的訓練資料集。
深度學習技術在兩種模型的搭建中都可以使用,最近研究熱點已經轉向了應用於產生式模型。深度學習中的Sequence to Sequence架構非常適用於生成文字的任務,研究者們希望藉助這個架構,在產生式模型領域取得進步。然而,距離我們搭建出一個像樣的產生式模型還有很長的路要走,當前工業界的主流還是基於檢索的模型。
長對話模型 vs. 短對話模型
短對話(Short Conversation)指的是一問一答式的單輪(single turn)對話。舉例來說,當機器收到使用者的一個提問時,會返回一個合適的回答。對應地,長對話(Long Conversation)指的是你來我往的多輪(multi-turn)對話,例如兩個朋友對某個話題交流意見的一段聊天。在這個場景中,需要談話雙方(聊天機器人可能是其中一方)記得雙方曾經談論過什麼,這是和短對話的場景的區別之一。現下,機器人客服系統通常是長對話模型。
開放話題模型 vs. 封閉話題模型
開放話題(Open Domain)場景下,使用者可以說任何內容,不需要是有特定的目的或是意圖的詢問。人們在Twitter、Reddit等社交網路上的對話形式就是典型的開放話題情景。由於該場景下,可談論的主題的數量不限,而且需要一些常識作為聊天基礎,使得搭建一個這樣的聊天機器人變得相對困難。
封閉話題(Closed Domain)場景,又稱為目標驅動型(goal-driven),系統致力於解決特定領域的問題,因此可能的詢問和回答的數量相對有限。技術客服系統或是購物助手等應用就是封閉話題模型的例子。我們不要求這些系統能夠談論政治,只需要它們能夠儘可能有效地解決我們的問題。雖然使用者還是可以向這些系統問一些不著邊際的問題,但是系統同樣可以不著邊際地給你回覆 ;)
挑戰?
在搭建聊天機器人的過程中,有許多公認或是還沒被注意到的挑戰,這些挑戰也是當下該研究領域的熱門探索方向。
挑戰1:結合上下文
聊天機器人要產生合理的回答,需要結合語境(linguistic context)和實體資訊(physical context)。人們在交談時,通常會記得雙方說了什麼、哪些資訊被改變了,這就是語境。當下流行的結合語境的方式是將對話用詞向量(word2vec)表示出來,但是這種方式在面對長對話場景時具有挑戰性。研究者們在 Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models 和 Attention with Intention for a Neural Network Conversation Model 中對長對話場景下的結合上下文挑戰做出了探索。此外,諸如日期/時間,地點,使用者資訊等實體資訊,也是需要考慮的。
挑戰2:個性化資訊一致
我們希望聊天機器人在遇到語義上一致的問題時能夠給出一致的回答。舉例來說,你希望對於“你多大?”和“你幾歲了?”這兩個問題,機器人能夠給出同樣的回答。這聽起來簡單,但是如何將這樣相對固定的個性化資訊嵌入模型中,卻是一個正在研究的難題。當前,許多系統致力於產生語義相關(回答和問題相關)的回答,但卻不能產生語義一致的回答,因為通常訓練資料來自於許多不同的使用者。在 A Persona-Based Neural Conversation Model 一文中,研究者們對於這一挑戰做出了探索性的嘗試。
挑戰3:模型評估標準
評估一個聊天機器人模型的好壞,最好的指標是看它能否完成給定的任務,例如,電腦故障助手根據使用者的問題,返回的回答解決了一個電腦故障。但是,採用人工評價來衡量一個模型的好壞開銷太大了,並且,還要考慮例如開放話題場景下的漫無目的的會話。目前,流行的衡量標準BLEU,最開始是用於評價機器翻譯模型的。它是基於文字匹配的統計方式,實際上並不適用於評價聊天機器人模型,因為兩個同樣合適的應答,它們可能具有完全不一樣的表達方式。事實上,已經有研究者在 How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation 一文中提出,目前流行的一切用於聊天機器人評測的標準都不能正確反映系統的水平。
挑戰4:回答的意圖和多樣性
產生式模型有這樣一個普遍問題:它們傾向於產生類似於“That’s great!”或是“I don’t know”等萬金油型的回答。Google的Smart Reply的早期版本幾乎對於所有問題,都會回覆“I love you”。造成這種現象的部分原因是訓練資料的構成(可能很多條資料的回答都是諸如此類的)以及訓練模型的演算法(使得產生的回答和訓練資料集內的回答機率分佈相似)。現在一些研究者已經在嘗試透過改進訓練模型的目標函式使得產生的回答具有多樣性。現實生活中,人們會根據不同的提問場景,給出具有特定意圖的回答,因此體現出了回答的多樣性。然而這一點,對於在不具備特定意圖的訓練資料集上訓練出來的產生式模型,尤其是開放話題場景下,目前是比較難做到的。
聊天機器人實際表現如何?
介紹了聊天機器人領域的前沿研究現狀,那麼聊天機器人實際上表現得如何呢?讓我們回過頭看一下模型分類。一個開放話題場景的基於檢索模型顯然是不現實的,因為你不可能把所有的回答都編入“回答集”中。一個開放話題場景的產生式模型應該說是最智慧、最符合我們預期的,理論上它能應對任何場景,然而我們距離實現這樣一個“智慧的聊天機器人”還有很遠(雖然有很多研究者正在探索)。
這些問題使得我們不得不先考慮實現封閉話題場景下的聊天機器人,因為此時產生式模型和基於檢索的模型都能發揮作用(之前我們說過,當前工業界用得較多的仍是基於檢索的模型)。對話越長,上下文資訊越重要,問題就變得越複雜。
在一個最近的採訪中,現百度首席科學家Andrew Ng說的好:
“當今深度學習的價值主要體現在一些相對狹窄的領域,因為這些領域你能夠獲得大量相對集中的資料。隨便舉一個深度學習做不來的例子:進行一次有意義的對話。雖然現下有許多對話系統的demo,你如果從中仔細挑選,還是能夠找到一些有意義的對話的,但是當你真的自己嘗試玩一下這些對話系統,就發現完全不靠譜。”
許多公司推出他們的對話系統,並承諾當他們收集到了足夠多的資料,這個系統就能運轉良好。這種承諾只有在面對一個特別狹窄的話題領域——如叫一輛Uber的對話才有可能兌現。任何稍微將話題領域擴大一些的嘗試(例如銷售電子郵件)現在都比較失敗。當然了,人們還是可以藉助這些不太完善的系統,加入一些主觀糾正,達到便利處理事務的目的。
在實際的會話產生系統中,語法錯誤會讓使用者體驗變差,可能使得公司付出昂貴的代價。這就是為什麼當今大多數的系統還是基於檢索的模型。如果這些公司能夠想辦法獲得大量的資料,那麼產生式模型在一定程度上還是可行的——但是仍有許多其他亟待解決的技術難題,防止系統如Microsoft的Tay所說的走上一條錯誤的道路。
敬請期待&閱讀列表
我們將在下篇blog中具體講述如何用深度學習搭建一個基於檢索模型的會話系統。如果你有興趣深入瞭解這個領域的前沿研究,以下的這些文章會是一個不錯的起點:
- Neural Responding Machine for Short-Text Conversation (2015-03)
- A Neural Conversational Model (2015-06)
- A Neural Network Approach to Context-Sensitive Generation of Conversational Responses (2015-06)
- The Ubuntu Dialogue Corpus: A Large Dataset for Research in Unstructured Multi-Turn Dialogue Systems (2015-06)
- Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models (2015-07)
- A Diversity-Promoting Objective Function for Neural Conversation Models (2015-10)
- Attention with Intention for a Neural Network Conversation Model (2015-10)
- Improved Deep Learning Baselines for Ubuntu Corpus Dialogs (2015-10)
- A Survey of Available Corpora for Building Data-Driven Dialogue Systems (2015-12)
- Incorporating Copying Mechanism in Sequence-to-Sequence Learning (2016-03)
- A Persona-Based Neural Conversation Model (2016-03)
- How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation (2016-03)