當(dāng)前閑聊機(jī)器人有兩種實現(xiàn)方式:基于檢索 與 基于生成
基于檢索的chatbot
檢索這種方式舰讹,在搜索與推薦系統(tǒng)中通常會用的到。具體來說是衡量一種相似度闪朱;
在人機(jī)對話的開放域月匣,我們雖然想要實現(xiàn)非常自然的人機(jī)對話,但是基于當(dāng)前技術(shù)限制奋姿,如果把機(jī)器人真的當(dāng)做一個獨立對象去對話锄开,它必須有推理與知識能力,目前AI水平是無法達(dá)到的称诗;如果換一個角度來看問題萍悴,如果僅僅是給用戶一個可以接受的回答,并推動對話不斷進(jìn)行下去這樣的目標(biāo)實現(xiàn)起來就比較容易寓免。(個人感覺更像是為突破圖靈測試的一種方法)
我們首先對語料進(jìn)行檢索匹配癣诱,篩選出最合適的回答
再對待選回答進(jìn)行rank,基于一些更宏觀的考慮比如上下文袜香,最后將的得分最高的給用戶
對語料檢索匹配
基于檢索的方法本質(zhì)上是計算相似度撕予,如果用戶給一個query,我們將其與語料庫中的對話進(jìn)行匹配蜈首,相似分?jǐn)?shù)最高的是不是就是最優(yōu)解实抡?
然后問題就落在如何定義所謂的相似度?什么是語句的相似疾就?聽起來就像我們在推薦系統(tǒng)中定義什么是用戶可能喜歡澜术。那么我們就需要再進(jìn)行兩步:
1、定義影響相似性的特征
一些重要的詞猬腰、詞頻鸟废、詞性、RNN姑荷、詞嵌入等
2盒延、定義特征輸入-分?jǐn)?shù)的匹配函數(shù)
cos相似度、CNN深度學(xué)習(xí)等算法
這樣的檢索功能其實應(yīng)用到客服問答領(lǐng)域非常合適鼠冕,只要命中知識庫哪個問題添寺,就返回該問題下的回答
考慮上下文進(jìn)行response 評分
經(jīng)過上一輪檢索匹配接下來我們就有了幾個候選response,我們需要進(jìn)行其他維度的考慮使得回復(fù)更合理懈费;比如很有可能出現(xiàn)前文提到的信息bot又重新出現(xiàn)计露。所以我們需要將上下文考慮進(jìn)去,從而使得對話看起來比較智能
1.我們將待選回復(fù)r 與歷史對話u都經(jīng)過詞嵌入以及GRU序列神經(jīng)網(wǎng)絡(luò)預(yù)處理
2、將每一個預(yù)處理后的r向量分別與u向量進(jìn)行match相似計算
3票罐、將結(jié)果進(jìn)行CNN處理 (提取特征并縮小矩陣)
4叉趣、再通過一個GRU網(wǎng)絡(luò)處理,這層GRU是上下相連的该押,即考慮了上下文處理
5疗杉、經(jīng)過最后的輸出層給出一個分?jǐn)?shù)
分?jǐn)?shù)最高的是我們r是我們返回給用戶的答復(fù)
總結(jié)
基于檢索的bot核心思想是從語料庫中尋找最適合的匹配回答,那么bot的效果就會被相似計算的特征設(shè)計以及語料庫的豐富度影響
基于生成的chatbot
生成模型在深度學(xué)習(xí)領(lǐng)域應(yīng)用廣泛蚕礼,在自然語言方面應(yīng)用最為成功的就是機(jī)器翻譯烟具;像之前介紹序列模型時還有一些詩歌與音樂的創(chuàng)作也屬于這類模型的應(yīng)用。
對于閑聊bot來講奠蹬,模型更像是類似機(jī)器翻譯的 編碼-解碼 的生成模式朝聋,輸入一個語句,最后模型返回另一個語句
模型左側(cè)是編碼器、右側(cè)是解碼器;
理解的話学辱,可以認(rèn)為是編碼器將語句特征提煉出來給解碼器买喧,然后解碼器以該特征作為條件限制去按照訓(xùn)練過的參數(shù)去生成另一個語句。比如機(jī)器翻譯就可以理解為某個語義從一個語言到另一個語言的映射。
考慮上下文
對于聊天機(jī)器人來講,不僅需要單次對話看起來不錯,還需要在多輪對話中也有好的表現(xiàn)(不要前面提過的后面又忘了)猜极,畢竟這個場景用戶一定是進(jìn)行多輪對話
圖中可以看到模型通過一條綠色線context-RNN將encoder-decoder模型串了起來
也就是說每一次模型編碼都會考慮前序編碼結(jié)果。這樣每次解碼生成的語句就已經(jīng)考慮了上下文的信息
考慮情感化
聊天場景除了對話流通順消玄,還需要給用戶提供驚喜跟伏,來自于情感的驚喜。有了情感化的chatbot才更像一個聊天的人而不是bot翩瓜。這是提高用戶感受的重要因素
綠框中的Z節(jié)點就是模型對情感化的考慮
通過將contextRNN的h作為輸入受扳,進(jìn)行情感分類處理,輸出結(jié)果同h一同作為輸入進(jìn)入解碼器兔跌。相當(dāng)于解碼器是在標(biāo)記條件Z下進(jìn)行生成勘高,從而使得生成語句附帶情感屬性
這是一篇論文中加入情感因素后的實例,可以看到機(jī)器人在不同情感下的回復(fù)坟桅,有點意思但是距離人類還有距離华望。這里的情感分類有6種,準(zhǔn)確率確實會低仅乓,大概60%多一點赖舟。如果是三元情感分類(積極-消極-中性)準(zhǔn)確率可能就90%左右(之前的數(shù)據(jù),現(xiàn)在應(yīng)該會高)夸楣。越豐富復(fù)雜的情感宾抓,機(jī)器就越難以捕捉子漩,但足夠有趣,做好情感化是chatbot一個發(fā)展方向石洗。
情感分析應(yīng)用
上文中加入情感因素的語句生成雖然效果不那么好痛单,但是如果只是情感分類,感知還是很明顯的劲腿。比如已經(jīng)落地的Emoji,在社交網(wǎng)絡(luò)中用戶打字后系統(tǒng)給予表情推薦用以代替語言鸟妙。印象中微信與搜狗很早已經(jīng)有做這個了焦人,不過感覺應(yīng)該是簡單的單詞匹配,沒有涉及情感重父,但是使用體驗不錯花椭。還有我大天朝的表情包就是個大場景
考慮知識/主題
基于生成的chatbot效果不佳有一個很重要的原因是,人類語言很多信息都是隱藏在語言背后的房午,就拿人來講矿辽,4歲孩子和成年人對話中,成年人也會覺著聊來聊去就那些郭厌,小孩子懂太少袋倔,說太多聽不懂;所以通過知識/主題(先驗知識)對bot的response生成進(jìn)行信息增添可能會有效果折柠。
加入知識
聊天過程涉及的范圍很廣宾娜,用戶可能會詢問那部電影、哪個地方扇售、天氣等具有一定目的性的問題前塔,我們完全可以像任務(wù)型對話一樣,通過查詢數(shù)據(jù)庫承冰、通過槽位追問得到信息來作為條件限制解碼器的輸出
主題限制
通過主題限制語句生成達(dá)到較好的效果华弓,下面是小冰的一個應(yīng)用
仍然是在encoder-decoder 基礎(chǔ)上,應(yīng)用了topic model困乒,即對用戶的消息進(jìn)行了主題分類寂屏,
每個主題下本身就是一個詞頻的概率分布,知道是哪個主題后顶燕,將前面的高頻詞匯抓出來轉(zhuǎn)化為向量凑保。再將其引入注意力模型中,結(jié)和傳統(tǒng)的注意力模型相加起來作為輸入進(jìn)入解碼器涌攻,使得解碼器的內(nèi)容在主題范圍內(nèi)欧引。
相似的方式還有好幾個,但是本質(zhì)上都是通過加入先驗知識(主題恳谎、知識庫芝此、上下文憋肖、情感)對解碼器進(jìn)行輸出優(yōu)化』槠唬基礎(chǔ)的架構(gòu)都是編碼-解碼模型
加入強(qiáng)化學(xué)習(xí)DM
上述基于生成的語句通常加了很多先驗知識岸更,但是還是可能呈現(xiàn)飄忽不定的現(xiàn)象。因為對話缺乏靈魂膊升,chat場景與task一樣需要策略管理系統(tǒng)怎炊。
不同之處在于task的策略學(xué)習(xí)比較容易定義,任務(wù)對話填寫槽位時給予reward廓译,每次actor都會有相對明確的reward评肆。
而在chat場景,對話沒有明確的目標(biāo)非区,定義reward比較麻煩瓜挽,reward是滯后的≌鞒瘢可能需要在用戶獲得滿意結(jié)果時給予一個很大的reward久橙,不滿意的時候各一個很大的懲罰。距離用戶滿意所耗費的輪數(shù)會給一個小的懲罰等等管怠。
強(qiáng)化學(xué)習(xí)東西挺多淆衷,挖坑放著
結(jié)語
感覺chatbot機(jī)器人確實落地問題挺大的,但這也是預(yù)期肯定會存在的排惨,畢竟如果聊天都跟真人似的吭敢,就距離強(qiáng)人工智能不遠(yuǎn)了~~
比較靠譜的還是檢索類的chatbot,完全可以應(yīng)用在客服場景暮芭。另外感覺在一些垂直細(xì)分場景(情感咨詢鹿驼、教育)做是否會更好,畢竟領(lǐng)域窄了辕宏,語料可以構(gòu)建得更好畜晰,提高穩(wěn)定性;前一陣子看到國外有一個chatbot機(jī)器人用來和用戶聊深度學(xué)習(xí)的知識瑞筐,所以說窄領(lǐng)域可能會有一定的驚喜凄鼻。https://www.lilabot.com/
(筆者正尋求NLP、人機(jī)對話方向產(chǎn)品職位 微信:cheng390552021)