本文第一部分講解自然語言處理的原理,第二部分講解聊天機器人的實現(xiàn)原理,解決方案及挑戰(zhàn),最后以 seq2seq+Attention 機制講解模型結(jié)構(gòu)。第三部分講解如何從 0 開始訓(xùn)練一個聊天機器人。
人工智能理解自然語言的原理,要解釋清楚,首先需要界定下這個問題的含義,一種是狹義的說如何用計算機來處理和分析自然語言;另一種是則是廣義地理解關(guān)于“人工智能”、“自然語言”和“理解”的含義。
我們先從廣義層面探討。弄清楚這幾個名詞。
自然語言:就是人類社會中發(fā)明和演變的用于溝通和交流的語言。而人工智能在對事物(不僅僅是自然語言)的理解,往往包含兩個層次:一是研究內(nèi)容;二是方法論。研究內(nèi)容上主要是現(xiàn)在流行的研究課題,例如知識圖譜、CV、語音識別、NLP 等。方法論是指實現(xiàn)人工智能的方法,主要有三種:符號主義、聯(lián)結(jié)主義、行為主義。符號主義是用數(shù)理邏輯的推理來模擬人的思維智能,例如專家系統(tǒng)的實現(xiàn)。聯(lián)結(jié)主義對人腦的仿生學(xué)研究,最常見的就是神經(jīng)網(wǎng)絡(luò)模型。行為主義重點在可預(yù)測的人類行為上,認(rèn)為人類通過與外界環(huán)境的交互而得到自適應(yīng)性,涉及的算法有遺傳算法、強化學(xué)習(xí)等。
現(xiàn)有的NLP主要是以規(guī)則和統(tǒng)計相結(jié)合來處理的。它的規(guī)則一面偏向于符號主義的視角;而統(tǒng)計一面偏向于挖掘一般規(guī)律,屬于歸納,目前用的方法,比如將自然語言用詞向量的方法表征,然后接入神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,也就是聯(lián)結(jié)主義的思想。
理解:關(guān)于機器是否能真正理解語言一直有爭論。先拋開這個問題,我們看看人類對語言的理解是怎么樣的。實際上,人類對理解這個事情也做的不一定好。比如,南北方對“豆腐腦”的認(rèn)知是不同的,兩人交談可能就會對同一物體的理解不同。因此,理解是需要由相似的生活經(jīng)歷、共同話題、上下文、會話的環(huán)境、雙方的知識等很多因素決定的。既然對于人類來說,真正能理解對方,需要這么多的隱性因素,那對于機器來說,我們最好就不要關(guān)心機器是否真正能理解問題的含義本身,而是盡可能地讓機器關(guān)注上述因素,來模擬人的智能。
狹義的層面是我們工程師研究的主要方向。也就是將自然語言理解看成是用計算機來處理和分析自然語言,它涉及到語言學(xué)(詞、詞性、語法)和計算機學(xué)科(模型/算法)的范疇。
從語言學(xué)上來看,研究的方向包括詞干提取、詞性還原、分詞、詞性標(biāo)注、命名實體識別、詞性消歧、句法分析、篇章分析等等。這屬于研究的基礎(chǔ)范疇,在這些基礎(chǔ)的研究內(nèi)容之上,面向的是具體的文本處理應(yīng)用,如,機器翻譯、文本摘要、情感分類、問答系統(tǒng)、聊天機器人等。
在計算機算法的研究方面,一般是以規(guī)則和統(tǒng)計相結(jié)合的方法,也就是理性主義和經(jīng)驗主義相結(jié)合。自然語言本質(zhì)上還是符號系統(tǒng),因此有一定的規(guī)則可尋,但是它的復(fù)雜性又決定了沒有規(guī)則可以既不相互沖突又能覆蓋所有的語言現(xiàn)象。后來大規(guī)模語料庫的完善和統(tǒng)計機器學(xué)習(xí)方法流行起來后,就省去了很多人工編制規(guī)則的負(fù)擔(dān),使模型生成自動生成特征。
所以,我們研究的NLP就是使用數(shù)理和機器學(xué)習(xí)的方法對語言進(jìn)行建模??梢哉f,NLP不是達(dá)到真正的自然語言理解,而是把語言當(dāng)成是一種計算任務(wù)。
我們從聊天機器人的分類和實現(xiàn)原理分別說起。目前聊天機器人根據(jù)對話的產(chǎn)生方式,可以分為基于檢索的模型(Retrieval-Based Models)和生成式模型(Generative Models)。
基于檢索的模型有一個預(yù)先定義的回答集,我們需要設(shè)計一些啟發(fā)式規(guī)則,這些規(guī)則能夠根據(jù)輸入的問句及上下文,挑選出合適的回答。
生成式模型不依賴預(yù)先定義的回答集,而是根據(jù)輸入的問句及上下文,產(chǎn)生一個新的回答。
聊天機器人的這兩條技術(shù)路線,從長遠(yuǎn)的角度看目前技術(shù)還都還處在山底,兩種技術(shù)路線的異同和優(yōu)勢如下:
基于檢索的模型的優(yōu)勢:
答句可讀性好
答句多樣性強
出現(xiàn)不相關(guān)的答句,容易分析、定位 bug
但是它的劣勢在于:需要對候選的結(jié)果做排序,進(jìn)行選擇。
基于生成式模型的優(yōu)勢:
端到端的訓(xùn)練,比較容易實現(xiàn)
避免維護一個大的Q-A數(shù)據(jù)集
不需要對每一個模塊額外進(jìn)行調(diào)優(yōu),避免了各個模塊之間的誤差級聯(lián)效應(yīng)
但是它的劣勢在于:難以保證生成的結(jié)果是可讀的,多樣的。
因此,上述方法共同面臨的挑戰(zhàn)有:
如何利用前幾輪對話的信息,應(yīng)用到當(dāng)輪對話當(dāng)中
合并現(xiàn)有的知識庫的內(nèi)容進(jìn)來
能否做到個性化,千人千面。
這有點類似于我們的信息檢索系統(tǒng),既希望在垂直領(lǐng)域做得更好;也希望對不同的人的 query 有不同的排序偏好。
從應(yīng)用目的的角度區(qū)分,可以分為目標(biāo)驅(qū)動(Goal Driven),應(yīng)用于客服助理等,在封閉話題場景中;無目標(biāo)驅(qū)動(Non-Goal Driven),應(yīng)用在開放話題的場景下,這是可談?wù)摰闹黝}是不限的,但是需要機器人有一定的基礎(chǔ)常識。
盡管目前工業(yè)界應(yīng)用的大多數(shù)是基于檢索的模型,屬于目標(biāo)驅(qū)動的,例如:阿里小蜜,應(yīng)用的話題領(lǐng)域比較窄,稍微將話題擴大一點,它就會不著邊際回復(fù)或者文不對題。如下圖:
一個開放話題場景下的生成式模型應(yīng)該是最智能、符合我們預(yù)期的聊天機器人。因此總結(jié)來看:
智能聊天機器人的目標(biāo):
和人類能夠進(jìn)行持續(xù)的溝通
對不同的提問能夠給出合適的回答
考慮到人類不同個性化的差異性,給出差異性的回答(例如,同一個問題,對男女老少不同群體的回答應(yīng)該略有差異)
那么對于一個智能機器人來說,它的聊天的功能在其中應(yīng)該處于什么位置?首先,聊天應(yīng)該是一個基礎(chǔ)模塊;其次,聊天應(yīng)該和完成任務(wù)的模塊有很好的協(xié)作;最后,聊天應(yīng)該使機器人看上去像您的朋友,而不是您的代理或者助手。
從上述角度來說,現(xiàn)在有一些經(jīng)常與聊天機器人混淆的概念,也是一些聊天系統(tǒng)的周邊產(chǎn)品:
QA 問答系統(tǒng):是回答事實問題(例如珠峰有多高)以及非事實問題(例如why, how, opinion等觀點性問題)的領(lǐng)域機器人。
Dialog system 對話系統(tǒng):這種大多是目標(biāo)驅(qū)動的,但是近幾年都也在慢慢接受聊天機器人功能
Online customer service 在線客服:例如淘寶小蜜,它在多數(shù)情況下像一個自動的FAQ。
因此,盡管聊天系統(tǒng)都是針對文本理解的大方向,但目標(biāo)不同決定了技術(shù)路線會有所偏重,但聊天功能是一個基礎(chǔ)功能。
智能聊天機器人可以從上面的周邊系統(tǒng)研究領(lǐng)域的數(shù)據(jù)集有所借鑒:
非事實問題的問答
社區(qū)型問答系統(tǒng)(例如百度知道等,對問題和答案間有較強的匹配;并且一個問題多個答案時有評分、排序)
從在線系統(tǒng)中挖掘一些好的 QA corpus
那如何來評價一個聊天機器人的好壞?最重要的是問句和答句的相關(guān)性,也就是本質(zhì)是:短文本相關(guān)度計算。但要注意:
相似性和相關(guān)性是不同的。用于相似性計算的各種方法并不適用于相關(guān)性。我們需要建立一套短文本相關(guān)性計算方法。
相關(guān)性計算有一些在早期的聊天機器人的構(gòu)建中延續(xù)下來的方法:
詞語共現(xiàn)的統(tǒng)計
基于機器翻譯的相關(guān)度計算
主題模型(LDA)的相似度計算
目前在聊天機器人上使用的深度學(xué)習(xí)方法有如下這些:
Word2vec, Glove
CNN, LSTM, GRU
Seq2Seq
Attention mechanism
Deep Reinforcement Learning
其中,深度強化學(xué)習(xí)是把“如何得到一個足夠讓人滿意的生成式結(jié)果”量化成 Reward。這些因素包括:
是否容易被回答(一個好的生成式的結(jié)果應(yīng)該是更容易讓人接下去的)
一個好的回復(fù)應(yīng)該讓對話前進(jìn),避免重復(fù)性
保證語義的連貫性。用生成式的結(jié)果反推回 query 的可能性有多大,能保證在語義上是和諧的、連貫的。
那么如何實現(xiàn)在智能聊天機器人的第三個目標(biāo),差異化回答呢?也就是如何在對話里如何引入個性化(personality)信息?
首先預(yù)訓(xùn)練一個人的向量,讓生成的結(jié)果貼近人的特點。通過 word embedding 將人的信息作為一個詞向量,在輸入部分增加一組人的向量;在生成回答的時候,考慮不同的人應(yīng)該選什么樣的詞語。
目前,我們要做一個真正智能的自動聊天機器人,仍然面臨一些挑戰(zhàn):
缺乏公共的訓(xùn)練數(shù)據(jù)集,目前使用國外的數(shù)據(jù)集較多
Ubuntu dialog corpus(subset of Ubuntu Corpus)
Reddit dataset(可讀性和質(zhì)量都不錯)
Corpora from Chinese SNS(微博)
測試集還不統(tǒng)一
評估度量:度量很難設(shè)計(目前是從機器翻譯和自動摘要的 BLEU、ROUGE 里借鑒的,但面臨問題是否能刻畫聊天機器人的好壞,并且指導(dǎo)聊天機器人的技術(shù)朝著正向的方向發(fā)展)
聊天機器人的一般對話和任務(wù)導(dǎo)向的對話之間如何能夠平滑切換
這種平滑切換對用戶的體驗非常重要
切換的技術(shù)需要依賴情緒分析及上下文分析
用戶不需要給出明確的反饋。例如,我前一句說鹿晗好,后一句說不喜歡韓范,需要聊天機器人能正確識別
仍然存在的問題
句子級、片段級的語義建模還沒有詞語的建模(word embedding)那么好
生成式仍然會產(chǎn)生一些安全回答
在知識的表示和引入上還需要努力
(本文余下還有7000字)
聯(lián)系客服