基於大數據與深度學習的自然語言對話

前言

我們在日常生活中經常使用自然語言對話系統,比如蘋果Siri。現在的對話系統多數只能做單輪對話,可以幫助用戶完成一些簡單的任務,如問天氣,查股票(如果做多輪對話,也是在單輪對話的基礎上加一些簡單處理)。做到這些自然語言對話系統的基本技術可以分為兩大類,基於規則的和基於數據的。你也許想知道對話系統的基本原理是怎樣的?特別是如何用數據驅動的方式構建一個對話系統?

最近基於數據的自然語言對話技術取得了突破性的進展。我們發現,利用深度學習和大數據,可以很容易地構建一個單輪對話系統,自動生成對話,並且取得驚人的好效果。比如,用5百萬微博數據可以構建一個系統,用戶給出一句話,這個系統可以自動生成一句回答。用戶輸入「我想買一部三星手機」,系統回答「還是支持一下國產的吧」,等等。你也許想知道這是如何做到的?能達到什麼樣的水平?

本文試圖系統地回答以上問題。首先指出,自然語言對話將是人們信息訪問的主要手段,信息檢索領域的主要研究范式。之後,定義自然語言對話任務,對相關技術進行分類,列舉主要技術挑戰。接著,詳細介紹如何構建基於數據的對話系統。最後,詳細介紹最新的基於深度學習的對話技術。當中也介紹深度學習在自然語言表示學習中的最新成果。

信息檢索領域的范式轉移

「科學的發展依賴於間斷性、革命性的變化」,這是科學哲學與科學史學家托馬斯·庫恩(Thomas Kuhn)的名言。庫恩認為科學的每個領域都有不同的「范式」 (paradigm),它們有著不同的研究對象、基本概念、解決問題的手段,甚至不同的研究者群體,比如,在物理學領域,量子力學與牛頓力學就屬於不同的范式。科學的發展不是連續的,而是間斷的,量子力學並不是在牛頓力學基礎上發展起來的。當一個領域發生革命性的變化的時候,一定有新的范式產生,庫恩稱之為范式轉移(paradigm shift)[1]。

信息檢索是計算機科學的一個分支,研究和開發計算機幫助用戶管理、訪問、使用信息的技術。縱觀信息檢索幾十年來的發展歷程,可以看到它已經歷了兩個主要范式:圖書館搜尋和互聯網搜尋。七十年代研究的重點是如何幫助用戶在圖書館快速地查找文獻資料,有不少該領域基本技術被開發出來,比如向量空間模型。九十年代研究的重點是如何幫助用戶在互聯網上迅速地訪問想訪問的網頁,有許多創新,鏈接分析、排序學習、語義匹配、日志分析等技術被開發出來。

2011年蘋果公司發布了語音助手系統Siri,標誌著一個新的時代的開啟。自然語言對話成了人們訪問信息的一個新的手段。現在,移動設備成為個人計算的主流,越來越多的用戶通過移動設備訪問信息。在移動設備上,自然語言對話是人機交互最自然的,最有效的方式。另一方面,自然語言對話的技術,雖然達到了一定可用的水平,但還不成熟,不能很好理解用戶的意圖,不能充分滿足用戶的需求。這就意味著,圍繞自然語言對話有很多待解決的具有挑戰性的問題,它自然成為信息檢索領域研究的一個新的重點,一個新的范式。

自然語言對話

自然語言對話可以形式化為以下問題。有一個計算機系統(對話系統),一個用戶。用戶通過自然語言,如中文、英文,與對話系統進行多輪交談,系統幫助用戶完成一個任務,特別是訪問信息的任務。

自然語言對話,即計算機和人通過人類的語言進行交互,是做到人工智能的標誌,其研究與開發有著很長的歷史。迄今為止,有許多自然語言對話系統被開發出來,在受限的條件下,可以與用戶進行一定的對話,幫助用戶完成簡單的任務。

現在的對話系統大多只做單輪對話,如果做多輪對話,也是在單輪對話的基礎上做一些簡單的處理。技術主要包括基於手寫規則的,和基於數據驅動的。比如,六十年代就有著名的Eliza系統問世,基於手寫規則,能與用戶進行簡單的對話,使許多用戶感覺到好像是在跟真人進行交流。Siri之後,有許多對話產品出現,包括GoogleNow,微軟Cortana。國內有許多聊天機器人發布,如微軟Xiaobing,受到廣泛矚目。據我們所知,大部分的對話系統都是基於規則,或者基於數據的。

自然語言對話的研究與開發,雖然取得了一定的進展,但離做到人工智能的理想,甚至離做到在複雜場景下的實用化還有很大距離。自然語言對話有許多應用場景。比如,如果用戶能夠通過對話在智慧型手機上完成訂酒店之類的複雜任務,那麼手機就會真正成為用戶的得力助手。這裡的核心問題是如何「理解」用戶的語言,幫助用戶完成任務。現在的語音助手還不能做到這一點。再比如,許多公司有呼叫中心,在電話上回答用戶提出的各種問題。如果能夠做到自動呼叫中心,機器來回答用戶的問題,就能大大提高服務的效率和質量。這裡的核心問題也是自然語言對話。

必須指出,重要的是需要將自然語言對話作為科學問題研究,而不能停留在工程的技巧上。作為科學問題研究,應該有幾個特點:首先是建立數學模型解決問題,其次是實驗結果能夠再現,還有複雜的問題被還原成簡單的問題解決。

基於數據的對話系統

大數據時代為自然語言對話研究提供了一個新的機會,大量的對話數據可以從實際的場景獲得。一個重要的研究問題是,我們是否可以利用大數據,構建一個數據驅動的自然語言對話系統。比如,記錄呼叫中心話務員與客戶的對話,用這些數據,是否可以構建一個自動的呼叫中心。

計算機理解人的語言還是非常困難的,即使是不可能的。一個克服這個挑戰的方法就是用數據驅動的方式構建對話系統。搜尋技術的成功給我們的一個啟示,盡量避開自然語言理解,用數據驅動的方式解決問題,是人工智能技術實用化的一個有效途徑。我們可以把對話系統的主要部分用數據驅動的方式構建,另一方面,只做到輕量級的知識使用、推理、對話管理。

我們可以把自然語言對話分成單輪對話和多輪對話進行研究。單輪對話是基礎,也應該是研究的第一個重點。單輪對話可以是基於規則的,或基於數據的。基於數據的方法又可以分成基於檢索的方式和基於生成的方式。下面作一簡單介紹。

基於大數據與深度學習的自然語言對話

圖1 基於檢索的對話系統

圖1是基於檢索的單輪對話系統。大量的單輪對話數據存儲在索引裡,每一個實例包括一個信息和一個回復。用戶輸入一個信息,檢索模塊從索引中檢索相對相關的信息和回復,並將最適合的回復返給用戶,形成一輪對話。而檢索系統本身是通過機器學習構建的。

基於大數據與深度學習的自然語言對話

圖2 基於生成的對話系統

圖2是基於生成的單輪對話系統。學習模塊利用大量對話數據構建生成模塊。當用戶給定一個信息時,生成模塊針對該信息自動生成一個回復。

深度學習與語義表示學習

最近深度學習技術有了突飛猛進的發展,為語音識別、圖像識別、自然語言處理(包括自然語言對話),提供了強大的工具,為這些領域今後的快速發展提供了新的契機。事實上,若干個基於深度學習的對話系統已被開發出來,受到了廣泛矚目。

深度學習為自然語言處理帶來的本質突破是語句的語義表示學習,也是基於深度學習的對話技術的基礎,這裡做一簡要介紹。

在自然語言處理領域,一個普遍使用的技術是用實數值向量來表示單詞的語義,其基本假設是單詞的語義可以由與其共現的其他單詞來決定。比如,統計每一個單詞與其它單詞在一個數據集的共現頻率,並將其表示為向量,這些向量能夠很好地表示單詞的語義相似性,兩個單詞向量的餘弦相似度越大,兩個單詞的語義就越相近。

最近自然語言處理與深度學習的一個新發現是,我們可以通過深度學習用實數值向量來表示語句的語義。如圖3所示,兩句話「John loves Mary」和「Mary is loved by John」的語義向量就相近,而這兩句話的語義向量就與「Mary loves John」的語義向量相遠。

基於大數據與深度學習的自然語言對話

圖3 語句的語義可以由向量空間中的實數值向量表示

下面具體地講述四個深度學習方法:單詞嵌入(word embedding)、循環神經網路(Recurrent Neural Network)、卷積神經網路(Convolutional Neural Network)、遞歸神經網路(Recursive Neural Network)的原理,它們是語句語義學習的強有力工具。

第一個工具是單詞嵌入,其中最常用的是稱為Word2Vec的工具[2]。如果僅僅基於一個單詞和其他單詞的共現信息構建該單詞的語義表示向量,那麼就會得到一個高維稀疏的向量。這種高維的向量不適合用於語句語義表示的學習,因為它有過多的參數。我們的問題是如何將高維的單詞向量壓縮成為低維的單詞向量。Word2Vec提供了一個有效的方法,它對應著以下的非監督學習方法[3]。

假設在一個數據集上獲得單詞在不同上下文出現的互信息可以由一個矩陣來表示,每一行對應著一個單詞,每一列對應著一個上下文,每一個元素表示相應的單詞與上下文的互信息,表示該單詞與上下文共同出現的可能性大小。因為這個矩陣是稀疏的,可以對其進行矩陣分解,即將原來的矩陣近似地表示為兩個矩陣的乘積的形式。這時得到的左矩陣就可以作為單詞嵌入使用。它是一個低維稠密矩陣,每一行對應著一個單詞,每一列對應著一個話題。

基於大數據與深度學習的自然語言對話

圖4 循環神經網路

第二個工具是循環神經網路(RNN)[4]。RNN把一句話看成單詞的序列,每個單詞由一個向量表示,每一個位置上有一個中間表示,由向量組成,表示從句首到這個位置的語義。這裡假設,每一個位置的中間表示由當前位置的單詞向量以及前一個位置的中間表示決定,通過一個神經網路模型化。RNN把句末的中間表示當作整個句子的語義表示。參照圖4。RNN與隱馬爾可夫模型有相似的結構,但具有更強的表達能力,中間表示沒有馬爾可夫假設,而且模型是非線性的。加入長短期記憶(Long Short Term Memory,LSTM)機制, RNN可以處理遠距離依存關係,能夠更好地表示整句的語義。

基於大數據與深度學習的自然語言對話

圖5 卷積神經網路

第三個工具是卷積神經網路(CNN)[5,6]。CNN對句子進行掃描,抽取特徵,選擇特徵,最後組合成句子的語義表示。首先從左到右用一個滑動窗口對句子進行掃描,每個滑動窗口內有多個單詞,每個單詞由一個向量表示。在滑動窗口內,通過卷積(convolution)操作,進行特徵抽取。這樣,在各個位置上得到一系列特徵。之後再通過最大池化(max pooling)操作,對特徵進行選擇。重復以上操作多次,得到多個向量表示,將這些向量連接起來得到整個句子的語義表示。參照圖5。同一卷積層內參數是共享的,也就是同一層的卷積操作是相同的,這也就保證了在局部領域進行相同的特徵抽取。

基於大數據與深度學習的自然語言對話

圖 6 遞歸神經網路

第四個工具是遞歸神經網路(ReNN)[7]。ReNN假設對語句進行句法分析,得到句法樹。句法樹的每個節點上有一個向量中間表示。父節點的表示由其子節點的表示決定,通過神經網路模型化。而根節點的表示就是整個句子的語義表示。參照圖6。句法樹上的中間表示可以在句法分析的過程中得到,比如在最大間隔分析(max margin parsing)。

基於深度學習的自然語言對話系統

華為諾亞方舟實驗室是最早用深度學習技術開發自然語言對話系統的研究機構之一,提出了若干個具有代表性的模型,這裡做一簡單介紹。我們開發了基於檢索的單輪對話系統和基於生成的對話系統。

如圖1所示,基於檢索的方式將對話看作搜尋問題。系統索引大量對話數據,每一個實例由單輪對話中的一對信息與回復組成。給定一個信息,系統從索引中找出相關的信息與回復對,計算輸入信息與檢索到的回復之間的匹配度,基於匹配度對回復進行排序,並將排在最前的回復返回。輸入信息與每一個回復之間的匹配度計算,由事先學好的多個匹配模型完成。回復的排序由事先學好的排序模型決定。這裡的關鍵問題是如何做到不同的匹配模型。我們提出了兩個基於深度學習的匹配模型。

基於大數據與深度學習的自然語言對話

圖7 匹配模型Deep Match CNN

第一個匹配模型稱為Deep Match CNN [5],如圖7所示。這個模型可以判斷給定的兩句話和是否可以成為一次單輪對話中的信息和回復。將兩句話輸入到CNN模型,可以得到它們的語義表示(實數值向量)和。之後,再將這兩個語義表示輸入到一個多層神經網路,判斷兩句話語義的匹配程度。這就是Deep Match CNN模型的基本想法。如果有大量的信息和回復對的數據,那麼就可以訓練這個模型。這裡介紹的是最基本的模型,還可以對它進行擴展,這裡不予介紹,詳見[5]。

基於大數據與深度學習的自然語言對話

圖8 匹配模型Deep Match Tree

第二個匹配模型稱為Deep Match Tree [8],如圖8所示。這個模型,基於句法分析結果,判斷兩句話是不是可以形成一輪對話中的信息和回復。先對兩句話和進行句法分析,得到兩個句法樹和,再看兩個句法樹的子樹是否滿足各種匹配模式。比如「how do you think about Hong Kong」與「the food in Hong Kong is great」就滿足匹配模式「how do you think about X」與「the Y in X is great」。之後將匹配結果輸入到一個多層的神經網路,這個神經網路的輸入層的每個神經元對應一個匹配模式。匹配模式事先從數據中挖掘出來,有上百萬個。如果輸入的兩句話能夠滿足某一模式,其對應的神經元取值為一,否則取值為零。神經網路最後判斷兩句話的匹配程度。如果兩句話能夠滿足許多配模模式,那麼這兩句話最終形成一輪對話的可能性就會很高。Deep Match Tree模型也可以通過大量信息與回復對的數據訓練得到。

如圖2所示,基於生成的方式將對話看作基於信息產生回復的問題。系統利用大量對話數據構建生成模型,給定一個信息,系統自動生成一個回復。這裡的關鍵問題是如何做到這個生成模型。我們提出了一個基於深度學習的生成模型。

基於大數據與深度學習的自然語言對話

圖9 生成模型Neural Responding Machine

這個生成模型稱為Neural Responding Machine(NRM)[9],如圖9所示。NRM的基本想法是這樣的。將輸入的一句話看作一個單詞表示的序列,通過編碼器,是一個RNN模型,將轉換成一個中間表示的序列,再通過解碼器,是另一個RNN模型,將轉換成一個單詞的系列,作為一句話輸出。NRM模型也可以通過大量信息與回復對的數據訓練得到。

基於檢索的對話系統和基於生成的對話系統各有其特色。生成系統比檢索系統的準確率會高一些,在一個標準數據集上,檢索系統的準確率是70%,生成系統的準確率是76%。但檢索系統比生成系統會更安全一些,不會返回語法不通的句子。這裡的準確率的定義是,人對返回結果做評價,如果回復可以成為一輪對話,就認為是正確,否則是錯誤。如何對自然語言對話系統進行客觀評價,仍然是一個需要進一步深入研究的課題。

同時指出,基於深度學習的生成模型比傳統的基於機器翻譯的模型在準確率上有大幅度的提升,從26%提高到76%[9]。深度學習在圖像處理、語音處理等領域有許多大幅度提升性能的實例,在自然語言處理領域這樣的事例還不多,在機器翻譯等任務上的提升往往沒有這麼高。

令人驚訝的是,基於生成的對話系統可以返回許多有趣的回復,超出想像。表1給出一些系統生成的例子。可以看出,在大部分情況下,系統能夠生成比較「自然」的句子,構成一個自然的對話。

生成系統產生的回復例如下:

輸入信息
系統回復
持續面試是必須的習慣。
必須來支持!加油!
每天最重要的是就是思考用哪姿勢睡覺……
每天都在思考這個問題
看韓寒的台灣經驗與驚艷alink
支持一下感覺挺不錯的
今晚又可以在海邊發呆了,舒暢啊。
好美的藍天,我喜歡
女人的名字決定性格!你的準嗎?
準,準,準,準,準
22歲上非誠勿擾是什麼心態?
挺好的,支持一下感覺挺不錯的

結束語

本文介紹了利用大數據與深度學習構建自然語言對話系統的技術。最近的深度學習對話的一些進展確實令人振奮。我們還不知道能沿著這條路,是否能達到完全做到、或者局部做到自然語言對話的目標,但是至少我們面前出現了不少可以嘗試的路徑,不少可以期待的機會。

參考文獻

  1. 托馬斯•庫恩, 《科學革命的結構》(The Structure of Scientific Revolutions)(1962),北京大學出版社,2003。

  2. Tomas Mikolov, Martin Karafiát, Lukas Burget, Jan Cernocký, and Sanjeev Khudanpur. Recurrent Neural Network based Language Model. InterSpeech 2010.

  3. Omer Levy, Yoav Goldberg, and Ido Dagan. Improving Distributional Similarity with Lessons Learned from Word Embeddings. TACL 2015 pp. 211-225.

  4. Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S. Corrado, and Jeff Dean. Distributed Representations of Words and Phrases and Their Compositionality. NIPS 2013, pp. 3111-3119.

  5. Hu, B., Lu, Z., Li, H., & Chen, Q. Convolutional Neural Network Architectures for Matching Natural Language Sentences. NIPS 2014 (pp. 2042-2050).

  6. Blunsom, P., Grefenstette, E., & Kalchbrenner, N. (2014). A Convolutional neural network for modeling sentences. ACL 2014.

  7. Socher, Richard, John Bauer, Christopher D. Manning, and Andrew Y. Ng. “Parsing with compositional vector grammars.” ACL 2013.

  8. Mingxuan Wang, Zhengdong Lu, Hang Li, Qun Liu. Syntax-based Deep Matching of Short Texts. IJCAI’15, 2015.

  9. Lifeng Shang, Zhengdong Lu, Hang Li. Neural Responding Machine for Short Text Conversation. ACL-IJCNLP'15, 2015.

(責編/周建丁)

90+位講師,16大分論壇,Databricks公司聯合創始人、Apache Spark首席架構師辛湜,Hadoop、HBase和Thrift項目的PMC成員和Committer、Kudu的發明人Todd Lipcon等海外專家將親臨2015中國大數據技術大會。餘票已然不多,預購從速。

購票地址:http://bdtc2015.hadooper.cn/dct/page/65581

閱讀原文


關於作者:
CSDN分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、記憶體計算、流計算、機器學習和智能算法等相關大數據觀點,提供雲計算和大數據技術、平台、實踐和產業信息等服務。

微信號:csdnbigdata