前言
我們在日常生活中經(jīng)常使用自然語言對話系統(tǒng),比如蘋果Siri。現(xiàn)在的對話系統(tǒng)多數(shù)只能做單輪對話,可以幫助用戶完成一些簡單的任務(wù),如問天氣,查股票(如果做多輪對話,也是在單輪對話的基礎(chǔ)上加一些簡單處理)。實現(xiàn)這些自然語言對話系統(tǒng)的基本技術(shù)可以分為兩大類,基于規(guī)則的和基于數(shù)據(jù)的。你也許想知道對話系統(tǒng)的基本原理是怎樣的?特別是如何用數(shù)據(jù)驅(qū)動的方式構(gòu)建一個對話系統(tǒng)?
最近基于數(shù)據(jù)的自然語言對話技術(shù)取得了突破性的進展。我們發(fā)現(xiàn),利用深度學(xué)習(xí)和大數(shù)據(jù),可以很容易地構(gòu)建一個單輪對話系統(tǒng),自動生成對話,并且取得驚人的好效果。比如,用5百萬微博數(shù)據(jù)可以構(gòu)建一個系統(tǒng),用戶給出一句話,這個系統(tǒng)可以自動生成一句回答。用戶輸入“我想買一部三星手機”,系統(tǒng)回答“還是支持一下國產(chǎn)的吧”,等等。你也許想知道這是如何實現(xiàn)的?能達到什么樣的水平?
本文試圖系統(tǒng)地回答以上問題。首先指出,自然語言對話將是人們信息訪問的主要手段,信息檢索領(lǐng)域的主要研究范式。之后,定義自然語言對話任務(wù),對相關(guān)技術(shù)進行分類,列舉主要技術(shù)挑戰(zhàn)。接著,詳細介紹如何構(gòu)建基于數(shù)據(jù)的對話系統(tǒng)。最后,詳細介紹最新的基于深度學(xué)習(xí)的對話技術(shù)。當中也介紹深度學(xué)習(xí)在自然語言表示學(xué)習(xí)中的最新成果。
信息檢索領(lǐng)域的范式轉(zhuǎn)移
“科學(xué)的發(fā)展依賴于間斷性、革命性的變化”,這是科學(xué)哲學(xué)與科學(xué)史學(xué)家托馬斯·庫恩(Thomas Kuhn)的名言。庫恩認為科學(xué)的每個領(lǐng)域都有不同的“范式” (paradigm),它們有著不同的研究對象、基本概念、解決問題的手段,甚至不同的研究者群體,比如,在物理學(xué)領(lǐng)域,量子力學(xué)與牛頓力學(xué)就屬于不同的范式??茖W(xué)的發(fā)展不是連續(xù)的,而是間斷的,量子力學(xué)并不是在牛頓力學(xué)基礎(chǔ)上發(fā)展起來的。當一個領(lǐng)域發(fā)生革命性的變化的時候,一定有新的范式產(chǎn)生,庫恩稱之為范式轉(zhuǎn)移(paradigm shift)。
信息檢索是計算機科學(xué)的一個分支,研究和開發(fā)計算機幫助用戶管理、訪問、使用信息的技術(shù)??v觀信息檢索幾十年來的發(fā)展歷程,可以看到它已經(jīng)歷了兩個主要范式:圖書館搜索和互聯(lián)網(wǎng)搜索。七十年代研究的重點是如何幫助用戶在圖書館快速地查找文獻資料,有不少該領(lǐng)域基本技術(shù)被開發(fā)出來,比如向量空間模型。九十年代研究的重點是如何幫助用戶在互聯(lián)網(wǎng)上迅速地訪問想訪問的網(wǎng)頁,有許多創(chuàng)新,鏈接分析、排序?qū)W習(xí)、語義匹配、日志分析等技術(shù)被開發(fā)出來。
2011年蘋果公司發(fā)布了語音助手系統(tǒng)Siri,標志著一個新的時代的開啟。自然語言對話成了人們訪問信息的一個新的手段?,F(xiàn)在,移動設(shè)備成為個人計算的主流,越來越多的用戶通過移動設(shè)備訪問信息。在移動設(shè)備上,自然語言對話是人機交互最自然的,最有效的方式。另一方面,自然語言對話的技術(shù),雖然達到了一定可用的水平,但還不成熟,不能很好理解用戶的意圖,不能充分滿足用戶的需求。這就意味著,圍繞自然語言對話有很多待解決的具有挑戰(zhàn)性的問題,它自然成為信息檢索領(lǐng)域研究的一個新的重點,一個新的范式。
自然語言對話
自然語言對話可以形式化為以下問題。有一個計算機系統(tǒng)(對話系統(tǒng)),一個用戶。用戶通過自然語言,如中文、英文,與對話系統(tǒng)進行多輪交談,系統(tǒng)幫助用戶完成一個任務(wù),特別是訪問信息的任務(wù)。
自然語言對話,即計算機和人通過人類的語言進行交互,是實現(xiàn)人工智能的標志,其研究與開發(fā)有著很長的歷史。迄今為止,有許多自然語言對話系統(tǒng)被開發(fā)出來,在受限的條件下,可以與用戶進行一定的對話,幫助用戶完成簡單的任務(wù)。
現(xiàn)在的對話系統(tǒng)大多只做單輪對話,如果做多輪對話,也是在單輪對話的基礎(chǔ)上做一些簡單的處理。技術(shù)主要包括基于手寫規(guī)則的,和基于數(shù)據(jù)驅(qū)動的。比如,六十年代就有著名的Eliza系統(tǒng)問世,基于手寫規(guī)則,能與用戶進行簡單的對話,使許多用戶感覺到好像是在跟真人進行交流。Siri之后,有許多對話產(chǎn)品出現(xiàn),包括谷歌Now,微軟Cortana。國內(nèi)有許多聊天機器人發(fā)布,如微軟Xiaobing,受到廣泛矚目。據(jù)我們所知,大部分的對話系統(tǒng)都是基于規(guī)則,或者基于數(shù)據(jù)的。
自然語言對話的研究與開發(fā),雖然取得了一定的進展,但離實現(xiàn)人工智能的理想,甚至離實現(xiàn)在復(fù)雜場景下的實用化還有很大距離。自然語言對話有許多應(yīng)用場景。比如,如果用戶能夠通過對話在智能手機上完成訂酒店之類的復(fù)雜任務(wù),那么手機就會真正成為用戶的得力助手。這里的核心問題是如何“理解”用戶的語言,幫助用戶完成任務(wù)。現(xiàn)在的語音助手還不能做到這一點。再比如,許多公司有呼叫中心,在電話上回答用戶提出的各種問題。如果能夠?qū)崿F(xiàn)自動呼叫中心,機器來回答用戶的問題,就能大大提高服務(wù)的效率和質(zhì)量。這里的核心問題也是自然語言對話。
必須指出,重要的是需要將自然語言對話作為科學(xué)問題研究,而不能停留在工程的技巧上。作為科學(xué)問題研究,應(yīng)該有幾個特點:首先是建立數(shù)學(xué)模型解決問題,其次是實驗結(jié)果能夠再現(xiàn),還有復(fù)雜的問題被還原成簡單的問題解決。
基于數(shù)據(jù)的對話系統(tǒng)
大數(shù)據(jù)時代為自然語言對話研究提供了一個新的機會,大量的對話數(shù)據(jù)可以從實際的場景獲得。一個重要的研究問題是,我們是否可以利用大數(shù)據(jù),構(gòu)建一個數(shù)據(jù)驅(qū)動的自然語言對話系統(tǒng)。比如,記錄呼叫中心話務(wù)員與客戶的對話,用這些數(shù)據(jù),是否可以構(gòu)建一個自動的呼叫中心。
計算機理解人的語言還是非常困難的,即使是可能的。一個克服這個挑戰(zhàn)的方法就是用數(shù)據(jù)驅(qū)動的方式構(gòu)建對話系統(tǒng)。搜索技術(shù)的成功給我們的一個啟示,盡量避開自然語言理解,用數(shù)據(jù)驅(qū)動的方式解決問題,是人工智能技術(shù)實用化的一個有效途徑。我們可以把對話系統(tǒng)的主要部分用數(shù)據(jù)驅(qū)動的方式構(gòu)建,另一方面,只實現(xiàn)輕量級的知識使用、推理、對話管理。
我們可以把自然語言對話分成單輪對話和多輪對話進行研究。單輪對話是基礎(chǔ),也應(yīng)該是研究的第一個重點。單輪對話可以是基于規(guī)則的,或基于數(shù)據(jù)的?;跀?shù)據(jù)的方法又可以分成基于檢索的方式和基于生成的方式。下面作一簡單介紹。
圖1 基于檢索的對話系統(tǒng)
圖1是基于檢索的單輪對話系統(tǒng)。大量的單輪對話數(shù)據(jù)存儲在索引里,每一個實例包括一個信息和一個回復(fù)。用戶輸入一個信息,檢索模塊從索引中檢索相對相關(guān)的信息和回復(fù),并將最適合的回復(fù)返給用戶,形成一輪對話。而檢索系統(tǒng)本身是通過機器學(xué)習(xí)構(gòu)建的。
圖2 基于生成的對話系統(tǒng)
圖2是基于生成的單輪對話系統(tǒng)。學(xué)習(xí)模塊利用大量對話數(shù)據(jù)構(gòu)建生成模塊。當用戶給定一個信息時,生成模塊針對該信息自動生成一個回復(fù)。
深度學(xué)習(xí)與語義表示學(xué)習(xí)
最近深度學(xué)習(xí)技術(shù)有了突飛猛進的發(fā)展,為語音識別、圖像識別、自然語言處理(包括自然語言對話),提供了強大的工具,為這些領(lǐng)域今后的快速發(fā)展提供了新的契機。事實上,若干個基于深度學(xué)習(xí)的對話系統(tǒng)已被開發(fā)出來,受到了廣泛矚目。
深度學(xué)習(xí)為自然語言處理帶來的本質(zhì)突破是語句的語義表示學(xué)習(xí),也是基于深度學(xué)習(xí)的對話技術(shù)的基礎(chǔ),這里做一簡要介紹。
在自然語言處理領(lǐng)域,一個普遍使用的技術(shù)是用實數(shù)值向量來表示單詞的語義,其基本假設(shè)是單詞的語義可以由與其共現(xiàn)的其他單詞來決定。比如,統(tǒng)計每一個單詞與其它單詞在一個數(shù)據(jù)集的共現(xiàn)頻率,并將其表示為向量,這些向量能夠很好地表示單詞的語義相似性,兩個單詞向量的余弦相似度越大,兩個單詞的語義就越相近。
最近自然語言處理與深度學(xué)習(xí)的一個新發(fā)現(xiàn)是,我們可以通過深度學(xué)習(xí)用實數(shù)值向量來表示語句的語義。如圖3所示,兩句話“John loves Mary”和“Mary is loved by John”的語義向量就相近,而這兩句話的語義向量就與“Mary loves John”的語義向量相遠。
圖3 語句的語義可以由向量空間中的實數(shù)值向量表示
下面具體地講述四個深度學(xué)習(xí)方法:單詞嵌入(word embedding)、循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network)、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network)、遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network)的原理,它們是語句語義學(xué)習(xí)的強有力工具。
第一個工具是單詞嵌入,其中最常用的是稱為Word2Vec的工具[2]。如果僅僅基于一個單詞和其他單詞的共現(xiàn)信息構(gòu)建該單詞的語義表示向量,那么就會得到一個高維稀疏的向量。這種高維的向量不適合用于語句語義表示的學(xué)習(xí),因為它有過多的參數(shù)。我們的問題是如何將高維的單詞向量壓縮成為低維的單詞向量。Word2Vec提供了一個有效的方法,它對應(yīng)著以下的非監(jiān)督學(xué)習(xí)方法。
假設(shè)在一個數(shù)據(jù)集上獲得單詞在不同上下文出現(xiàn)的互信息可以由一個矩陣來表示,每一行對應(yīng)著一個單詞,每一列對應(yīng)著一個上下文,每一個元素表示相應(yīng)的單詞與上下文的互信息,表示該單詞與上下文共同出現(xiàn)的可能性大小。因為這個矩陣是稀疏的,可以對其進行矩陣分解,即將原來的矩陣近似地表示為兩個矩陣的乘積的形式。這時得到的左矩陣就可以作為單詞嵌入使用。它是一個低維稠密矩陣,每一行對應(yīng)著一個單詞,每一列對應(yīng)著一個話題。
圖4 循環(huán)神經(jīng)網(wǎng)絡(luò)
第二個工具是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。RNN把一句話看成單詞的序列,每個單詞由一個向量表示,每一個位置上有一個中間表示,由向量組成,表示從句首到這個位置的語義。這里假設(shè),每一個位置的中間表示由當前位置的單詞向量以及前一個位置的中間表示決定,通過一個神經(jīng)網(wǎng)絡(luò)模型化。RNN把句末的中間表示當作整個句子的語義表示。參照圖4。RNN與隱馬爾可夫模型有相似的結(jié)構(gòu),但具有更強的表達能力,中間表示沒有馬爾可夫假設(shè),而且模型是非線性的。加入長短期記憶(Long Short Term Memory,LSTM)機制, RNN可以處理遠距離依存關(guān)系,能夠更好地表示整句的語義。
圖5 卷積神經(jīng)網(wǎng)絡(luò)
第三個工具是卷積神經(jīng)網(wǎng)絡(luò)(CNN)[5,6]。CNN對句子進行掃描,抽取特征,選擇特征,最后組合成句子的語義表示。首先從左到右用一個滑動窗口對句子進行掃描,每個滑動窗口內(nèi)有多個單詞,每個單詞由一個向量表示。在滑動窗口內(nèi),通過卷積(convolution)操作,進行特征抽取。這樣,在各個位置上得到一系列特征。之后再通過最大池化(max pooling)操作,對特征進行選擇。重復(fù)以上操作多次,得到多個向量表示,將這些向量連接起來得到整個句子的語義表示。參照圖5。同一卷積層內(nèi)參數(shù)是共享的,也就是同一層的卷積操作是相同的,這也就保證了在局部領(lǐng)域進行相同的特征抽取。
圖 6 遞歸神經(jīng)網(wǎng)絡(luò)
第四個工具是遞歸神經(jīng)網(wǎng)絡(luò)(ReNN)[7]。ReNN假設(shè)對語句進行句法分析,得到句法樹。句法樹的每個節(jié)點上有一個向量中間表示。父節(jié)點的表示由其子節(jié)點的表示決定,通過神經(jīng)網(wǎng)絡(luò)模型化。而根節(jié)點的表示就是整個句子的語義表示。參照圖6。句法樹上的中間表示可以在句法分析的過程中得到,比如在最大間隔分析(max margin parsing)。
基于深度學(xué)習(xí)的自然語言對話系統(tǒng)
華為諾亞方舟實驗室是最早用深度學(xué)習(xí)技術(shù)開發(fā)自然語言對話系統(tǒng)的研究機構(gòu)之一,提出了若干個具有代表性的模型,這里做一簡單介紹。我們開發(fā)了基于檢索的單輪對話系統(tǒng)和基于生成的對話系統(tǒng)。
如圖1所示,基于檢索的方式將對話看作搜索問題。系統(tǒng)索引大量對話數(shù)據(jù),每一個實例由單輪對話中的一對信息與回復(fù)組成。給定一個信息,系統(tǒng)從索引中找出相關(guān)的信息與回復(fù)對,計算輸入信息與檢索到的回復(fù)之間的匹配度,基于匹配度對回復(fù)進行排序,并將排在最前的回復(fù)返回。輸入信息與每一個回復(fù)之間的匹配度計算,由事先學(xué)好的多個匹配模型完成?;貜?fù)的排序由事先學(xué)好的排序模型決定。這里的關(guān)鍵問題是如何實現(xiàn)不同的匹配模型。我們提出了兩個基于深度學(xué)習(xí)的匹配模型。
圖7 匹配模型Deep Match CNN
第一個匹配模型稱為Deep Match CNN [5],如圖7所示。這個模型可以判斷給定的兩句話和是否可以成為一次單輪對話中的信息和回復(fù)。將兩句話輸入到CNN模型,可以得到它們的語義表示(實數(shù)值向量)和。之后,再將這兩個語義表示輸入到一個多層神經(jīng)網(wǎng)絡(luò),判斷兩句話語義的匹配程度。這就是Deep Match CNN模型的基本想法。如果有大量的信息和回復(fù)對的數(shù)據(jù),那么就可以訓(xùn)練這個模型。這里介紹的是最基本的模型,還可以對它進行擴展,這里不予介紹。
圖8 匹配模型Deep Match Tree
第二個匹配模型稱為Deep Match Tree [8],如圖8所示。這個模型,基于句法分析結(jié)果,判斷兩句話是不是可以形成一輪對話中的信息和回復(fù)。先對兩句話和進行句法分析,得到兩個句法樹和,再看兩個句法樹的子樹是否滿足各種匹配模式。比如“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”。之后將匹配結(jié)果輸入到一個多層的神經(jīng)網(wǎng)絡(luò),這個神經(jīng)網(wǎng)絡(luò)的輸入層的每個神經(jīng)元對應(yīng)一個匹配模式。匹配模式事先從數(shù)據(jù)中挖掘出來,有上百萬個。如果輸入的兩句話能夠滿足某一模式,其對應(yīng)的神經(jīng)元取值為一,否則取值為零。神經(jīng)網(wǎng)絡(luò)最后判斷兩句話的匹配程度。如果兩句話能夠滿足許多配模模式,那么這兩句話最終形成一輪對話的可能性就會很高。Deep Match Tree模型也可以通過大量信息與回復(fù)對的數(shù)據(jù)訓(xùn)練得到。
如圖2所示,基于生成的方式將對話看作基于信息產(chǎn)生回復(fù)的問題。系統(tǒng)利用大量對話數(shù)據(jù)構(gòu)建生成模型,給定一個信息,系統(tǒng)自動生成一個回復(fù)。這里的關(guān)鍵問題是如何實現(xiàn)這個生成模型。我們提出了一個基于深度學(xué)習(xí)的生成模型。
圖9 生成模型Neural Responding Machine
這個生成模型稱為Neural Responding Machine(NRM)[9],如圖9所示。NRM的基本想法是這樣的。將輸入的一句話看作一個單詞表示的序列,通過編碼器,是一個RNN模型,將轉(zhuǎn)換成一個中間表示的序列,再通過解碼器,是另一個RNN模型,將轉(zhuǎn)換成一個單詞的系列,作為一句話輸出。NRM模型也可以通過大量信息與回復(fù)對的數(shù)據(jù)訓(xùn)練得到。
基于檢索的對話系統(tǒng)和基于生成的對話系統(tǒng)各有其特色。生成系統(tǒng)比檢索系統(tǒng)的準確率會高一些,在一個標準數(shù)據(jù)集上,檢索系統(tǒng)的準確率是70%,生成系統(tǒng)的準確率是76%。但檢索系統(tǒng)比生成系統(tǒng)會更安全一些,不會返回語法不通的句子。這里的準確率的定義是,人對返回結(jié)果做評價,如果回復(fù)可以成為一輪對話,就認為是正確,否則是錯誤。如何對自然語言對話系統(tǒng)進行客觀評價,仍然是一個需要進一步深入研究的課題。
同時指出,基于深度學(xué)習(xí)的生成模型比傳統(tǒng)的基于機器翻譯的模型在準確率上有大幅度的提升,從26%提高到76%[9]。深度學(xué)習(xí)在圖像處理、語音處理等領(lǐng)域有許多大幅度提升性能的實例,在自然語言處理領(lǐng)域這樣的事例還不多,在機器翻譯等任務(wù)上的提升往往沒有這么高。
令人驚訝的是,基于生成的對話系統(tǒng)可以返回許多有趣的回復(fù),超出想象。表1給出一些系統(tǒng)生成的例子??梢钥闯觯诖蟛糠智闆r下,系統(tǒng)能夠生成比較“自然”的句子,構(gòu)成一個自然的對話。