對話機器人作為近年來愈發普遍的產品,以各種各樣的形態出現我們的生活中:電話客服、文本客服、超市裡的導購機器人等;那這些機器人如何實現和我們人類的智能對話的呢?本文將用顯淺易懂的文字講述機器人的對話原理與產品設計要點。
一、你都見過什麼樣的對話機器人
在正式開始接受設計原理前,我們一下來回顧下生活中,常見的對話機器人包括哪些類型:
1. 文本型智能客服
這種類型的對話機器人大多出現在app中或者網站上,以文字為主要的交互方式,旨在為顧客提供常見的問題解答與簡單任務的處理(如退貨,換貨等);常見的有:
- 阿里小蜜
- 京東JIMI
- 唯品客服
2. 話務型智能客服
這種類型的對話機器人常見於銀行與大型企業(如家電)的話務諮詢上,以語音為交互方式,同樣也是為了解答顧客的常見問題與處理簡單任務(如查詢餘額、充值等);常見的有:
- 工行工小智
- 中行智能客服
- 海爾智能客服
3. 個人助手
這種的對話機器人現階段基本已經滲透到了每一台智能手機,進入大多數人的日常生活,旨在為用戶提供一種語音交互的手段來提高操作的效率(如鬧鐘設置,日程提醒);常見的有:
- Siri
- Google Assistant
- Alexa
- 小愛同學
4. 工作助手
這種類型的對話機器人主要用於以文本或者語音對話的形式幫助員工進行假期申請,事務提醒等日常工作事項,起到辦公事項的整合(各種辦公事項都可以通過工作助手對話來實現)與效率的提高;常見的有:
- slack
- 釘釘
二、對話機器人的價值
1. 售後接待
在這個場景下,對話機器人最大的價值在於問題的攔截,即100個顧客來諮詢,最終需要人工客服解答的顧客只有10個——大大降低客服成本。
2. 售前接待
這種場景下,對話機器人最大的價值在於接待的及時性;想象下,淘寶里詢問掌柜問題,若是掌柜隔了五分鐘再回復,那基本就不會在這家店買東西了。因此,這類機器人在顧客到來的第一時間由機器人接待,同時機器人也在通知掌柜的抓緊上線,接管會話。
對於企業服務來說,這類機器人還會判斷顧客的意向程度,針對高意向的顧客會引導留下聯繫方式,方便後續客戶經理的跟進。
3. 個人助手
這種場景下的機器人,最大的價值在於以語音交互的方式提高用戶操作效率。例如在晚上在床上準備睡了,忘了設鬧鐘,而手機在桌子上,這時候一句話就能完成鬧鐘設置想必是一個很爽的體驗。
三、問答型文本對話機器人
這類型最典型的代表就是文本智能客服,這類客服常見於各種app中,以文本的形式為用戶排憂解惑。
1. 工作流程
下面我們來看下一個文本型智能客服的完整工作流程:
1)用戶發送消息:用戶以文本的形式輸入自己的問題。
2)NLU:NLU單元收到用戶的文本消息后,進行自然語言理解,識別用戶的問題,輸出識別結果
3)對話管理:對話管理單元收到NLU的識別結果后,找到該識別結果對應的回復內容,進而以文本的形式輸出回復內容給到用戶
2. NLU到底做了什麼
在整個工作流程中,NLU作為核心環節之一,想必是許多朋友們希望能夠了解的,那我們接下來就講講,在這一個環節裡面,機器到底是如何理解人類的語言的。
如果用一句話來概括NLU的工作的話:根據用戶的問題,在知識庫中尋找對應的問題。
這裡涉及了一個概念,知識庫:所有用戶常見問題的集合(包含同一個問題的多種問法與回答)。
這就好比一個行軍打仗的將領,面臨大敵的時候,拿出仙人給的錦囊,從錦囊里掏出一條退敵的妙計。知識庫在這裡就好比是錦囊,而挑選出錦囊中的妙計這一過程就好比NLU的工作。
2.1 基於統計學的自然語言理解
實際應用中,NLU常用的技術是基於統計學的自然語言理解,即:通俗的說就是把用戶的問題經過簡單處理后,和知識庫中的所有問題進行相似度計算,找到相似度最高的問題,然後把該問題的答案返還給用戶。
用一句話來概括就是:找相似。
而在這個過程中,又可以詳細的拆分為以下幾個環節:
- 分詞:顧名思義,把一句話,進行分詞處理,這也是中文自然語言理解領域最痛的一點,一旦分錯,後面的工作都白費了。而英文不一樣,英文本就是每個詞都用空格隔開的,不存在這個問題。
- 去除停用詞:把一些沒有用的詞去掉,例如【的】【呢】語氣詞、副詞等,精簡句子,輸出最簡表達。
- 詞性標註與命名實體識別(時間,貨幣):針對最簡表達中的詞性進行標註,同時針對一些專有名詞名次進行識別,我們叫命名實體識別,如時間、貨幣、樓盤名稱、人名等領域知識的識別。
- 向量化(word2vec):想要計算機處理這些數據,向量化是一個不錯的方法,利用word2vec等演算法把文本向量化。
- 計算相似度(BM25演算法,TFIDF,分類與檢索):完成了文本向量化之後,我們就需要計算用戶的這個問題和知識庫中每一個問題的相似度了,並從中找出相似度最高的一個知識庫問題,並把該問題對應的答案返還給到用戶。其實整個過程又可以分為兩個過程:召回與排序;通過分類演算法(如Bert)找出知識庫中用戶最有可能問的幾個問題,進而通過檢索演算法(如BM25)計算這幾個候選問題的相似度。
2.2 其他NLU技術
1)基於模版標註的語言理解
基於模版標註的自然語言理解也是常用一種技術,人工標註知識庫每個問題的最簡表達、關鍵實體、同義詞標註。這樣做的最大好處就是識別的準確率高,因為系統通過標註數據,已經知道了知識庫問題的最簡表達,以及每個問題的關鍵詞,以及同義詞;進而利用這部分數據去解析用戶的問題,往往能夠得到更加準確的識別結果。但是,缺點也是同樣明顯,需要針對每一個問題的每一個文法進行標註,典型的有多少人工,就有多少智能的做法。
2)基於知識圖譜的問答(KBQA)
另外的話,基於知識圖譜的知識問答也逐漸走上舞台。通過知識圖譜來對問題進行語義解析。例如姚明的老婆的國籍這樣一個問題,知識圖譜先找到姚明,然後找到姚明的老婆葉莉,最後找到葉莉的國籍中國。這項技術的準確率一般很高,但是能夠覆蓋多少問題,就要看這個知識圖譜建設的好不好,夠不夠廣;而知識圖譜的搭建,本身就是有多少人工,有多少智能的工作。
3. 知識庫的構建
講了NLU之後,不得不講的就是知識庫了,顧名思義,就是【知識的寶庫】,裡面收集了所有希望機器人能夠回答的問題,對應問題的N種文法(如價格這個問題:多少錢?怎麼賣?價格怎樣?),以及問題的對應答案。
構建一個知識庫的步驟也很簡單(簡單,但不代表很快,它需要多次調整和補充):
- 收集問題:收集我們希望機器人能夠回答的所有問題,一般客服中心都有這種知識庫,沒有的話可通過相關部門人員結合日常工作內容進行總結整合。
- 填寫問法:即一個問題對應的多個文法,這個需要窮舉(如價格這個問題,問法可能有:怎麼賣?多少錢?等),可利用同義詞和句式的改變來進行思考,一般這是傳統客服知識庫沒有的內容,需要重新整理。
- 補充答案:即該問題對應的答案,這塊內容也是傳統的客服知識庫就會有的內容,但是一般建議對每一個問題最少填寫兩個答案,為的就是在用戶提出同一個問題的時候,可以對同一個問題有不同的回答方式(但意思相同),讓用戶體驗更好。
- 知識庫模型發布:每一個知識庫就是一個NLU模型,因此每一次的知識庫更新也就意味著NLU模型的更新:系統把知識庫中的內容(問題與問法)輸入到模型中進行訓練,得到一個專門針對該知識庫的NLU模型。
四、閑聊機器人:做個有溫度的機器人
除卻問答型的機器人外,市面上常見的還有閑聊機器人,最典型的代表就是微軟小冰:無聊了,寂寞了,都可以找小冰說說話,而小冰一般也能給出不錯的對話內容。
要滿足機器人的閑聊場景,做法和問答型機器人大同小異,就是加入一個閑聊的語料庫,這個語料庫一般都可以從網上找到,但語料的覆蓋範圍和提供者所從事的服務有很大的關係,例如阿里雲小蜜的閑聊就滿滿的都是淘寶味,畢竟那些訓練的語料大都來自於淘寶體系內用戶和掌柜的聊天內容。
而一般的智能客服廠商,為了更好的銜接對話,也為了讓用戶有一個更好的對話體驗,一般也會加入一定量級的閑聊語料庫,但這個庫一般卻是不允許編輯的,裡面涉及一些敏感詞的管理,以及運營成本的考慮。
而這個閑聊語料庫,廠商必定也是在服務客戶的過程中,根據對話記錄去不斷豐富和完善的。
五、任務型機器人:做一個能夠解決問題的機器人
圖片中是一個物業報修機器人的對話截圖,一個用戶通過和機器人的多輪對話,完成了問題的描述並成功報修。
類似的場景逐漸得到了越來越多的應用,例如海爾的家電安裝預約已經實現了全量的機器人接待和預約,一方面大大的節省了企業的人力成本,另一方面也解決了及時響應消費者的問題。
1. 什麼是任務型對話機器人
在開始講任務型對話機器人設計之前,我們先明確下任務型對話機器人的定義:
- 任務型機器人指特定條件下提供信息或服務的機器人
- 場景案例:查天氣,設鬧鐘,訂餐,訂票,播歌
- 通常需分多輪互動,用戶在對話過程中不斷修改與完善需求,任務型機器人通過詢問、澄清和確認來幫助用戶明確目的
結合以上定義,我們就不難理解,完成一個任務型對話,需要進行以下三個關鍵點的設置:
- 意圖識別設置:即設置一個意圖(一個意圖一般對應一個任務與操作),以及用戶如何發問才能觸發該意圖,如示例中的物業維修就是一個意圖。
- 詞槽設置:即需要執行該意圖任務所需收集的關鍵信息,如示例中的物業報修,需要知道用戶具體是什麼問題才能生成物業維修工單。
- 回復設置:即當機器人完成了所有關鍵信息的收集且執行了意圖任務之後,對用戶的回復,可能是一句話,如示例中的【收到,回頭會有物業維修的師傅聯繫您】;也可能是一個執行結果,如示例中的工單接受通知。
2. 意圖設置
意圖,就是用戶想要達到的目標。上圖的示例講的是一個早餐預定的例子。
對於機器人來說,我們得先告訴它,用戶輸入了哪些內容之後,即可認為用戶想要達成的就是該意圖。而這個設置,一般有以下幾種常見的方法:
1)對話樣本集
例如示例這裡的意圖是早餐預定,那麼當用戶輸入:預定早餐、訂一份早餐等語句的時候,即可認為用戶想要達成的就是早餐預定這個意圖。
而這個設置的基本原理和方法與知識庫中的問題設置基本一樣,就是把用戶表達該意圖時常用的對話樣本進行收集和錄入。後續用戶只要表達了相近的輸入后,系統就會按照該意圖來執行對話。
2)關鍵詞
這個很好理解,就是對用戶表達某個意圖時的關鍵詞進行識別,只要用戶的表達中含有這些關鍵詞,系統就會按照該意圖執行對話。例如訂火車票這個意圖,只要用戶提及【訂火車票】這個詞時,即可讓機器人進入訂火車票這個意圖的多輪對話。
3)句式模版
句式模版這種方法,其實就是把某個意圖的語言表達進行規則化的抽象。例如訂火車票這個意圖,一般的表達就有:訂一下從廣州到長沙的火車票。像這種表達就可以抽象成這樣的句式模版:【發起預定】+【出發城市】+【到大城市】+【票類】
3. 詞槽設置
詞槽是多輪對話過程中將初步用戶意圖轉化為明確用戶指令所需要補全的信息。例如說,示例中的早餐預定,我們識別到了這個意圖之後,還需要知道顧客想要吃什麼,什麼時候來拿——這兩個關鍵信息就是機器人在執行這個意圖前需要完成收集的。
而詞槽設置一般包含以下幾個關鍵環節:
- 詞槽設置
- 詞典設置
- 澄清話術設置
1)詞槽設置
詞槽設置的核心在於明確執行該意圖過程中,需要明晰哪些關鍵信息。例如示例的早餐預定,那【時間】和【吃什麼】則是兩個必須明確的信息。
當然,除了必須要明晰的信息外,我們也可以讓機器人去記錄一些非必要因素(例如是否加辣),如果用戶有表達這個信息,機器人則會記錄相關信息;若用戶沒有表達該信息,機器人也不回去追問。
2)詞典
詞典,即告訴機器人,那些關鍵信息都有哪些枚舉值。例如示例的早餐預定,【吃什麼】這個詞槽的詞典,就包含了:餃子、牛肉丸、蘿蔔糕等詞。
而機器人只要能夠完成這些詞的識別,即可完成【吃什麼】這個詞槽的填寫。
至於詞典的設置,一般分為兩部分:
- 系統預置詞典:對於像時間、貨幣、地點、城市這些信息,系統一般會提供預置詞典,用戶只需要自己選擇即可。
- 用戶自定義詞典:而對於一些特定領域的專有名詞,則需要用戶自己去定義,例如樓盤的名稱,菜單的名稱等;只有設置了這些詞典,機器人在遇到這些特殊領域的專有名詞時才能夠更好的識別和完成關鍵信息的提取。
3)澄清話術
既然一個意圖中設置了若干的關鍵信息(詞槽)需要用戶填寫,自然就會存在用戶在表達意圖過程中沒有一次性表達清楚所有的關鍵信息,這時候機器人就需要針對一些必要的關鍵信息做追問,並根據用戶的回答完成關鍵信息的識別和提取。
而這個追問的話術,正是這裡的澄清話術,即我們告訴機器人關於某個具體的關鍵信息,機器人應該如何發問。且一般針對同一個關鍵信息,會設置多個澄清話術,為的是在追問用戶同一個關鍵信息的時候,機器人能夠用不同的化詢問同一個信息,讓用戶能有更好的體驗。
4、回復設置
當機器人完成用戶意圖的識別,且完成了關鍵信息的收集后,即可進行意圖的執行。而意圖的執行后,機器人需要給用戶一個回復(總得告訴人家做得怎麼樣嘛),這個回復可以是一句話,也可以是一個操作的執行入口,又或者是意圖執行之後的模版消息,也可是一個h5頁面等等,這個要具體場景,具體而論,沒有太多的限制。
六、綜合型對話機器人
當前市面上的機器人,更多的是綜合型的對話機器人,即同一個機器人,掛載了問答知識庫、閑聊語料庫以及多個任務技能。只是每個機器人根據自身具體的服務場景,在知識問答、閑聊、任務對話三者上面有所傾向罷了。
也正是因為綜合型對話機器人的出現,讓我們現在的生活更加多彩,我們才可以在深夜十二點進行物業報修預約,才可以夜深人靜的時候有個傾訴的對象,才可以在懶癌發作的時候通過一把聲音控制家裡的電器。
那是不是只要一個綜合型對話機器人做到了以上的內容,就可以高枕無憂,和我們人類暢通對話了呢?顯然不是的!上面這些內容如果形容為遊戲中的核心裝備的話,那要做好一個對話機器人,還需要針對不同的服務場景增加不同的輔助裝備——這方面我們下回分解!