聊天機(jī)器人實(shí)踐(一)

目前機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí),已經(jīng)成功的解決了圖像識別的問題。從IMAGENET大賽的近幾年成績看,識別類問題準(zhǔn)確度已經(jīng)接近100%。


與此同時(shí),機(jī)器學(xué)習(xí)在解決“語音到文字”(Speech to Text)以及“文字到語音” (Text to Speech)方面也有了飛躍。


而一群更加瘋狂的人在嘗試用機(jī)器學(xué)習(xí)解決自然語音理解,甚至在自然語言理解的基礎(chǔ)上,開發(fā)聊天機(jī)器人。


服務(wù)
描述地址
Botframework by Microsoft提供會話管理,跨平臺連接方案https://dev.botframework.com/API.AI會話訓(xùn)練,會話管理,語音識別,意圖識別,一系列訓(xùn)練好的主題https://api.ai/Telegram Bot Store聊天機(jī)器人應(yīng)用商店https://storebot.me/


通過這三個(gè)服務(wù), 就可以構(gòu)建聊天機(jī)器人并且發(fā)布上線。


Step 1 - 在Telegram上注冊賬號

通過 BotFather創(chuàng)建Bot。


Step 2 - 在Botframework上注冊賬號

創(chuàng)建一個(gè)Bot, 同時(shí)下載Botframework提供的SDK/Sample( Node.js|C#),連接到Telegram。

基于Botframework的對話,要寫很多代碼實(shí)現(xiàn),這樣我們更需要一個(gè)連接到已經(jīng)提供一些對話的服務(wù)上。


Step 3 - 接入 API.AI

API.AI可以提供標(biāo)注對話,開放域?qū)υ捄驼Z音識別,意圖識別等功能。


Step 4 - 服務(wù)發(fā)布

Telegram是一個(gè)神奇的IM,它提供了聊天機(jī)器人應(yīng)用商店。使用Telegram IM的用戶可以快速體驗(yàn)和使用這些Bot。

一些Bot的體驗(yàn)真的很棒,尤其是使用了人工智能技術(shù)的Bot,以至于會出現(xiàn)下面的評論

還有其他聊天機(jī)器人的玩家:wit.ai,?Chatfuel,?Facebook Messager,?Apple Siri,?騰訊機(jī)器人平臺,?Microsoft LUIS.AI, etc.

不管是像微軟這樣的大公司,還是像Operator在垂直領(lǐng)域提供服務(wù)的創(chuàng)業(yè)公司,都將聊天機(jī)器人看成是下一代人機(jī)交互的服務(wù)形態(tài),聊天機(jī)器人不單純的提供了一個(gè)新的服務(wù)渠道,它還改變了服務(wù)本身,即通過歷史數(shù)據(jù)訓(xùn)練Language Model,來部分取代人的作用,聊天機(jī)器人對信息的組織和處理能力,在搜索引擎基礎(chǔ)上,又往前邁了一大步。比如,京東JIMI依靠DeepQA系統(tǒng),實(shí)現(xiàn)“最強(qiáng)大腦”,JIMI就是聊天機(jī)器人的一個(gè)形態(tài)。


聊天機(jī)器人模型分類


基于檢索的模型

回答是提前定義的,使用規(guī)則引擎、正則匹配或者深度學(xué)習(xí)訓(xùn)練好的分類器從數(shù)據(jù)庫中挑選一個(gè)最佳的回復(fù)。

基于生成的模型

不依賴于提前定義的回答,但是在訓(xùn)練的過程中,需要大量的語料,語料包含了context和response?。當(dāng)下流行使用LSTM和?RNN訓(xùn)練生成的模型,這種方法最早用來完成機(jī)器翻譯的任務(wù) -?Sequence to Sequence Learning with Neural Networks。

目前,在生產(chǎn)環(huán)境下,提供聊天服務(wù)的,一般都是基于檢索的模型,而Seq2Seq的出現(xiàn),有可能使基于生成的模型成為主流,因?yàn)镾eq2Seq在長對話的情況下,依然可以表現(xiàn)的很好。


長對話和短對話

長對話需要考慮的因素更多,就像目前API.AI提供的服務(wù)中,要完成一個(gè)任務(wù),比如預(yù)定酒店。


小明: 幫我訂今天晚上,上海浦東香格里拉酒店。


這時(shí),API.AI得到了時(shí)間,地點(diǎn)和人員。它可能正好檢索到了我們在訂酒店故事里的一條被標(biāo)注的記錄。Intent,?Entity確定了,?Action就被確定了。


可是,如果是下面:

小明: 幫我訂今天晚上,上海的酒店。


Chatbot就要詢問:

Bot: 你需要訂哪家酒店?


長對話,其實(shí)就是能在用戶場景下對話,要識別場景,就需要考慮時(shí)間、地點(diǎn)、剛剛用戶都說了什么以,用戶和Bot的關(guān)系。


"訂酒店"屬于個(gè)人助理類服務(wù),目前,api.ai已經(jīng)支持了這種“追問用戶更多信息”的功能,屬于簡單的問題。

而類似于客服機(jī)器人,更多情況是多問題-多交織的對話,就是長對話中,很難解決的問題。

所以,當(dāng)下,大量機(jī)器人是面向短對話的。比如,微軟小冰,小娜,圖靈機(jī)器人, etc.


開放領(lǐng)域和封閉領(lǐng)域

這兩個(gè)主要從話題層面進(jìn)行區(qū)分。在開放語境下,用戶可以和聊天機(jī)器人聊任何話題。在封閉語境下,只能聊機(jī)器人設(shè)定的主題。


這主要取決于數(shù)據(jù):有什么數(shù)據(jù),就能聊什么主題。


比如在車載系統(tǒng)中,對話的機(jī)器人一般都是十個(gè)左右的意圖,圍繞意圖進(jìn)行訓(xùn)練聊天主題。

老司機(jī)一般都聊什么?

服務(wù)區(qū)還有多遠(yuǎn)?

我買的股票怎么樣?

播放一個(gè)音樂

聽交通臺

呼叫一個(gè)電話

...

挑戰(zhàn)


關(guān)聯(lián)上下文

關(guān)聯(lián)上下文,就需要在設(shè)計(jì)機(jī)器人的時(shí)候,給它一個(gè)問題,獲得一個(gè)回復(fù)。生成回復(fù)的時(shí)候,要考慮 P, U, L.

P - Personality matrix

U - User Relationship with Bot

L - Lexicon

這需要在訓(xùn)練LSTM Net的時(shí)候,要將更多信息注入,而且也更像是將基于檢索的模型和基于生成的模式混合起來完成。


意圖識別

就像API.AI, 及其WIT.AI, LUIS.AI們構(gòu)想的一樣,要完成有效的對話,先要搞清楚用戶在表達(dá)什么意圖。但是目前API.AI們提供的方案需要人工標(biāo)注Entity和Intent,這種工作很繁瑣,效率低。

能通過歷史數(shù)據(jù),無監(jiān)督或者半監(jiān)督的完成意圖的分類模型是亟須解決的一個(gè)挑戰(zhàn)。


如何判斷一個(gè)模型的好壞

在使用LSTM訓(xùn)練基于生成的模型的過程中,一個(gè)很大的挑戰(zhàn)就是沒有自動化的量化的標(biāo)準(zhǔn):除了人工的和模型對話意外,不確定模型間的好壞。

這個(gè)問題的解決辦法,應(yīng)該是在訓(xùn)練時(shí),就同時(shí)訓(xùn)練正確的回答和錯(cuò)誤的回答,然后使用recall@k機(jī)制驗(yàn)證。


一種設(shè)想

在經(jīng)過了很多調(diào)研和嘗試后,一種比較Smart的機(jī)器人的實(shí)現(xiàn)方案可能是下面這個(gè)樣子:

從社交網(wǎng)絡(luò)上對接到服務(wù)需要走InboundMessage, 從OutboundMessage中異步獲取回復(fù)。

Bot Engine 處理session, context, personality,知識圖譜,對話規(guī)則和主題。

對話主題是基于人工經(jīng)驗(yàn)制作的。除了包括引導(dǎo)用戶做自我介紹類的"系統(tǒng)對話",還要包括實(shí)現(xiàn)業(yè)務(wù)價(jià)值的"服務(wù)對話",比如“學(xué)習(xí)英語單詞”,還要有“日常對話”,比如打招呼,詢問最近看的電影等生活場景。

Bot Engine不能做到回復(fù)所有問題,因?yàn)榛谝?guī)則的原因,能覆蓋的聊天內(nèi)容范圍小,當(dāng)在Bot Engine中,得不到好的答案或者沒有命中一個(gè)規(guī)則時(shí),就請求背后的Bot Model.

Bot Model是通過深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練而來,可以回答任何問題。

在對話服務(wù)過程中,會產(chǎn)生新的數(shù)據(jù),使用強(qiáng)化學(xué)習(xí),給Bot Model正向的激勵。

使用知識圖譜記錄Bot,User, World三層知識。

作為這個(gè)系列文章的第一篇,主要是介紹聊天機(jī)器人目前發(fā)展的狀況和分類,在后面幾篇中,將對上圖所設(shè)想的方案做更多描述。


◆??◆??◆ ?◆??◆??

張洋銘,投資人中最懂動漫的程序員,負(fù)責(zé)PlugandPlay早期科技類項(xiàng)目投資,個(gè)人關(guān)注動漫虛擬助手。

微信公眾號:張洋銘Ocean(ocean_anidata)

BP請投遞至:ocean.zhang@plugandplaychina.com

本文作者:王海良? 原文地址:http://eng.snaplingo.net/approaching-a-chatbot-service-part-1/??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容