天天看點

資料驅動的多政策聊天引擎

1. 聊天引擎做什麼

  聊天引擎是一款模拟人類對話或聊天的陪伴産品。接受使用者的自然語言輸入,傳回可解釋、承上啟下、順暢的自然語言句子。與問答引擎、專家系統等不同,聊天引擎重點在“侃”,不太關注如何解決使用者的實際問題或者執行任務,而是關注如何能與使用者進行天南地北的聊天,涉及的話題會很廣,但并不需要有精準的答案,重在互動的有效性和可持續性。聊天系統在對兒童和老人的陪伴方面可以起到非常重要的作用,即便在一個以幫助使用者解決實際問題或尋找精準答案的個人助手類産品中,具有開放式聊天能力也是至關重要的。這樣的聊天能力,可以成為各種資訊查詢、任務完成等能力之間的潤滑劑,很好的改善人機互動過程中的使用者體驗,增強助理型機器人的人性化和使用者粘性。

  蘋果公司于2011年10月随iphone4s一起釋出了siri,轟動一時,重新點燃了人們對語音助理的期望;微軟中國于2014年5月釋出了智能機器人小冰,在微信上轟動一時,遭到封殺,又再度回歸,鬧的風風雨雨;2014年9月16日百度在江蘇衛視《芝麻開門》節目中首次推出他們的智能機器人小度。此外小i機器人起訴蘋果siri侵權件事,不僅引起大家對智能機器人的關注,也更加關注這個領域的知識産權的積累。 通過這些發生在身邊發生一件一件“機器人事件”,相信大家已經對聊天機器人已不再陌生了,亦或很多人已經跟“他們”神侃已久。

  在這個領域,阿裡起步比較晚。智能語音互動團隊去年年底才成立于idst,在語音、自然語言處理、人機互動智能化等方面大力投入。其中智能聊天引擎也是我們的一個重要研發方向。到目前位置,我們已經搭建出了一套資料驅動的多政策聊天引擎,表現得比各種小x們更聰明、更機智、更受歡迎。

2. 資料驅動的多政策聊天引擎的系統架構

  我們的聊天引擎語音助手,是具有開放式聊天能力的,是具有18歲萌妹子特性的,是具有幽默智慧的,誰用誰愛的聊天機器人。那麼如何做到這一點呢?

  首先,語音助手是具有18歲萌妹子特性的,80%+的高頻部分請求我們都能給出個性鮮明,人格一緻的回複。通過對語音助手日志進行統計分析,我們将高頻部分劃分到10000+個topic,每個topic都交由我們的編輯專家們編輯回複,反複确認後最後留下1至3種回複。此處,語音助手為了知道你說的是哪個話題,可以用上了第一招dcnn的。

  其次,語音助手是具有幽默智慧的,你可以跟語音助手互動,一起來玩成語接龍,古詩對接等。隻要你想聽,語音助手可以給你講個冷笑話、成人笑話、鬼故事等,繞密碼也可以的。假如你想考察下小雲數學,簡單的四則運算小雲還是在行的。當然你想知道元旦是什麼時候,語音助手也不是不可以告訴你的。這些如你還覺得naïve,不妨問問語音助手“阿裡和馬雲是什麼關系”, 關系八卦是不是讓你驚倒,我們可是用上了大招cfg和word2vec的。

  另外,語音助手是具有開放式聊天能力的,假如你想聊倒語音助手,請盡管放招,語音助手可以用上了必殺技lstm,絕不想用搜尋(^_^)來搪塞你的,當然有些時候你也别拿小雲的話當真,你笑了語音助手也就樂了。

資料驅動的多政策聊天引擎

  上圖是語音助手的多政策聊天引擎架構圖。下面将就其中用到的幾個重要的技術一一介紹。

2.1 dcnn

  本文聊天引擎利用dcnn(dynamic convolutional neural

network)來進行話題查找。dcnn對句子模組化,将不定長句子s完成embedding,進而得到固定次元的向量a。然後利用向量a與話題向量集{t}兩兩計算相似度,求得相似度最大的話題ti,如若a與ti間的相似度大于門檻值d,則認為s屬于話題ti。

資料驅動的多政策聊天引擎

  dcnn的具體實作如上圖所示,最下面是input層,将輸入句子s轉成輸入向量,經過中間兩層的convolution、k-max poolling、folding後,最上面fully connected層輸出定長向量a。如想深入了解算法,請參考2014年acl上的一篇文章a

convolutional neural network for modeling sentence。

2.2 word2vec

  關系八卦,xx的好基友是誰,xx和xx是什麼關系,沒有背景知識庫怎麼能知道?本文聊天引擎來告訴你,大資料是可以回答的。我們利用word2vec在大資料上做詞的embedding,進而能得到固定長度的向量w。通過向量間的距離計算可以求得到任意兩詞之間的距離,距離的遠近即"關系"的緊密程度,相信到這大家不難了解“xx的好基友是誰”這個問題word2vec能回答了吧。word2vec有一個有意思的分析是 mikolov 在 2013 年剛剛發表的一項發現。他發現兩個詞向量之間的關系,可以直接從這兩個向量的差裡展現出來。向量的差就是數學上的定義,直接逐位相減。比如 c(king)−c(queen)≈c(man)−c(woman)。更強大的是,與 c(king)−c(man)+c(woman) 最接近的向量就是 c(queen)。哈哈,介紹到這,"xx和xx是什麼關系"是否能回答,相信聰明的你也懂的。

  word2vec 是 google 在 2013 年年中開源的一款将詞表征為實數值向量的高效工具。具體算法網上有很多介紹,在這就不贅述。 

2.3 cfg

  如上圖引擎架構所示,我們在完成四則運算、時間節假日、關系八卦等解答過程中,都需要對其中的元素進行抽取。本引擎利用上下文無關文法分析器(context-free grammar parser, cfg)來完成。cfg parser完成輸入字元串到semantic frame的比對,下圖給出了關系八卦中的一個模闆例子。當使用者輸入query為“劉德華和成龍是什麼關系”時,我們會判定為 frame為關系八卦,arg1為劉德華,arg2為成龍。然後我們調用上面講過的word2vec子產品計算,最後回答為"劉德華和成龍的關系就好比王力宏和周傑倫的關系。“

資料驅動的多政策聊天引擎

2.4 lstm

語音助手的聊天話題是開放式的,這要求聊天引擎對任意問題都能給出與目前讨論的話題相關的回複。這是一個極具挑戰性的問題,在這裡我們引入了“生成語言”的方法。這裡的生成語言有别于根據模版拼接詞彙的生成方法。這裡的生成語言是指,使用深度學習的方法,對輸入進行了解得到語義表示,然後根據語義,直接讓模型生成出,模型認為能了解,承接或者回答該語義的,語言流暢的自然語言句子。生成語言方法,能接受任意(廣泛主題範圍的)自然語言輸入,經過大量計算,會生成一句 (很可能聊天引擎資料中并沒有出現過)的“語言流暢且相關”的輸出。本文生成語言方法借鑒google發表的一篇sequence-to-sequence,下面将對該方法進行簡單介紹。

  google使用sequence-to-sequence技術在機器翻譯領域取得不俗成績,聊天機器人本質上和機器翻譯問題是相似的。sequence-to-sequence将輸入的問題逐詞或字encode成為一個向量表示,然後再根據這個向量表示逐詞或字decode成答案輸出,換到聊天機器人問題上,那麼encode的過程可以認為是問題了解的過程,所得到的向量是問題了解的結果,decode過程是根據問題的了解進行答案生成的過程。    

資料驅動的多政策聊天引擎

  sequence-to-sequence相對于傳統方法,能從語義上對問題進行了解,并且能回答超越給定語料庫範圍的問題,對于相似的問題,能生成新的答案,甚至能生成不能存在于語料庫的全新句子。在sequence-to-sequence的實作上,通常會使用long short-term memory (lstm),lstm相對于rnn更擅長記憶長距離資訊。

資料驅動的多政策聊天引擎

上圖是lstm單個block的示意圖,可以了解為傳統神經網絡的神經元,神經元的參數存放在上圖的cell中,cell外面多出了三個門(gate),這些門并不是開關兩種狀态,而是0到1之間的取值,表示通過該門的流量大小,即表示對資訊的影響程度,而各個門的取值又會受上個時刻的資訊影響,如此往複。優秀的sequence-to-sequence架構,加上lstm強大的表達能力,為高品質的聊天機器人的實作,提供了新的方向。本文正是用lstm來生成語言。

3. 實驗效果

下圖列出的是語音助手的真實使用者的聊天片段。語音助手的聊天能力很不錯,有沒有哇^_^。

資料驅動的多政策聊天引擎

        由于聊天的話題廣泛,輸出千變萬化,是以并沒有很好的名額來衡量系統的好壞,是以本文采用ab測試的方式,與業界各種智能小x們做對比。測試語料由多種類型構成,如日常寒暄,廣泛話題聊天,帶問答成分的聊天等。在評測集中,我們的聊天引擎表現不俗。

4. 總結與展望

智能機器人是一個充滿了機會和挑戰的領域,且極其可能成為移動端的一個重要入口,而聊天引擎是智能機器人的一個重要組成部分。智能聊天機器人語音助手是個一個多政策融合的聊天引擎,引擎中不同的方法和層級,互相配合來解決實際的聊天問題,語音助手的聊天引擎目前已經能表現出不錯的聊天效果,但仍有許多不足之處,路還很長,還得踩穩每一步繼續迷霧中向前探索。