如何打造“智能助理”?阿里對話開發(fā)平臺這樣做
一個合格的智能助理能夠幫你預(yù)約開會時間,處理日常辦公需求,還能打電話提醒你要還信用卡了,作為用戶或者消費者,我們已經(jīng)越來越習慣對話機器人提供的各色服務(wù)。但對于企業(yè)來講,搭建提供這些服務(wù)的對話機器人是一件門檻及成本都很高的事情。阿里巴巴達摩院小蜜Conversational AI團隊的高級算法專家李永彬(水德)為我們帶來了分享——小蜜智能對話開發(fā)平臺,圍繞平臺來源、設(shè)計理念、核心技術(shù)、業(yè)務(wù)落地四大維度講述了如何賦能各行各業(yè)開發(fā)自己的對話機器人。
平臺由來
為什么要做一個平臺?我覺得還是從一個具體的任務(wù)型對話的例子說起,在我們?nèi)粘9ぷ髦校粋€很高頻的場景就是要約一個會議,看一下我們內(nèi)部的辦公助理是怎么來實現(xiàn)約會議的:我說“幫我約一個會議”,它會問“你是哪一天開會?”,跟它說是“后天下午三點”,接下來它又會問“你跟誰一起開會啊?”,我會把我想約的人告訴它,這個時候它在后臺發(fā)起一次服務(wù)調(diào)用,因為它要去后臺拿到所有參會者的日程安排,看一下在我說的這個時間有沒有共同的空閑時間,如果沒有的話它會給我推薦幾個時間段。由于我說的那個時間段大家沒有共同的空閑時間,于是我改了時間。
我說“上午十一點吧”,它會接著問,“你會持續(xù)多長時間”,我會告訴它“一個小時”,它再問“會議的主題是什么”,于是,我跟它說“我們討論一下下周的上線計劃”,到此為止它把所有的信息收集全了,最后,它會給我一個 summary,讓我確認是不是要發(fā)送會議邀約,我回復(fù)確認以后,它在后臺就會調(diào)用我們的郵件系統(tǒng),把整個會議邀約發(fā)出來。
這是一個非常典型的任務(wù)型的對話,它滿足兩個條件,第一,它有一個明確的目標;第二,它通過多輪對話交互來達成這個目標。像這樣的任務(wù)型對話在整個辦公行業(yè)里面,除了約會議以外還有查考勤、請假、定會議室或者日程安排等等。
如果我們把視野再放大一點的話,再看一下電商行業(yè),電商行業(yè)里面就會涉及到開發(fā)票、催發(fā)貨、查物流、改地址、收快遞等等,也會涉及到很多很多的這樣的任務(wù)型對話場景;視野再放大一下,我們再看一下電信行業(yè)或者整個運營商的行業(yè)里面,會有查話費、查流量、買套餐、報故障或者是進行密碼的更改服務(wù)等,也會有大量的這種任務(wù)型的對話場景。如果我們再一步去看的話,像政務(wù)、金融、教育、文娛、健康、旅游等,在各行各業(yè)的各種場景里面我們都會發(fā)現(xiàn)這種任務(wù)型的對話,它是一種剛需,是一種普遍性的存在。
所有的這些場景落地到我們小蜜家族的時候,是通過剛剛介紹過的三大小蜜來承載:阿里小蜜、店小蜜和云小蜜。我們不可能給每一個行業(yè)里面的每一個場景去定制一個對話流程,所以我們就沿用了阿里巴巴一貫做平臺的思路,這也是我們整個智能對話開發(fā)平臺的由來。這款產(chǎn)品在內(nèi)部的名字叫對話工廠(Dialog Studio)。
以上主要是給大家介紹我們?yōu)槭裁匆鲋悄軐υ掗_發(fā)平臺,總結(jié)起來就是我們目前面臨的業(yè)務(wù),面臨的場景太寬泛了,不可能鋪那么多人去把所有的場景都定制化,所以我們需要有一個平臺來讓開發(fā)者進來開發(fā)各行各業(yè)的各種場景對話。
設(shè)計理念
再看第二部分,對話工廠的一些核心設(shè)計理念。整個設(shè)計理念這塊我覺得概括起來就是“一個中心,三個原則”。一個中心就是以對話為中心,這句話大家可能覺得有點莫名其妙,你做對話的,為何還要強調(diào)以對話為中心呢?
這是有來源的,因為在過去幾年全世界范圍的技術(shù)實踐以及直到今天很多巨頭的對話平臺里面,我們能看到的基本還是以意圖為中心的設(shè)計模式,它把意圖平鋪在這里,比如你想完成音樂領(lǐng)域的一些事情,可是你看到的其實是一堆平鋪的意圖列表,完全看不出對話在哪里。
我們在這次對話工廠的設(shè)計中徹底把它扭轉(zhuǎn)回來,對話就是要以對話為中心,你在我們的產(chǎn)品界面里面看到的不再是一個個孤立的意圖,而是關(guān)聯(lián)在一起的、有業(yè)務(wù)邏輯關(guān)系的對話流程。以意圖為中心的設(shè)計中,你看到的其實是一個局部視角,就只能實現(xiàn)一些簡單的任務(wù),比如控制一個燈,講個笑話,或者查個天氣,如果你想實現(xiàn)一個復(fù)雜的任務(wù),比如開一個發(fā)票,或者去 10086 里開通一個套餐,它其實是較難實現(xiàn),很難維護的。我們把整個理念轉(zhuǎn)換一下,回到以對話為中心以后,就會看到全局視野,可以去做復(fù)雜的任務(wù),可以去做無限的場景。
整個對話工廠剛剛也說過了,它是一個平臺,要做一個平臺就會遇到很多挑戰(zhàn)。
第一個挑戰(zhàn)就是對用戶來說,希望使用門檻越低越好;第二個挑戰(zhàn)是要面對各行各業(yè)的各種場景,就要求能做到靈活定制;第三個挑戰(zhàn)是上線以后所有的用戶肯定都希望你的機器人,你的對話系統(tǒng)能夠越用越好,而不是停留在某一個水平就不動了。這就是我們平臺所面臨的三大挑戰(zhàn)。
為了應(yīng)對這三個挑戰(zhàn),我們提出了在整個平臺的設(shè)計以及實現(xiàn)過程中始終要遵循三個原則。
第一個原則是冷啟動要快,其實就是要讓用戶的使用門檻低一點;第二個原則是要有靈活定制的能力,只有這樣才能滿足各行各業(yè)的各種場景需求;第三個是要有魯棒進化的能力,就是模型上線以后,隨著時間的變化,隨著各種數(shù)據(jù)的不斷回流,模型效果要不斷提升。
這三個原則里面,冷啟動這一塊,其實就是要把用戶用到的各種能力和各種數(shù)據(jù)都盡量變成一種預(yù)置的能力,簡單來說就是平臺方做得越多,用戶就做得越少;第二塊關(guān)于靈活定制,就要求我們把整個對話平臺的基礎(chǔ)元素進行高度抽象,你抽象的越好就意味著你平臺的適應(yīng)能力越好,就像是經(jīng)典力學只要三條定律就夠了;第三塊就是魯棒進化,這一塊就是要在模型和算法上做深度了,語言理解的模型,對話管理的模型,數(shù)據(jù)閉環(huán),主動學習,在這些方面能夠做出深度來。
以上說的都是一些理念和原則,接下來給大家介紹一下具體在實現(xiàn)過程中是怎么來做的。
核心技術(shù)
講到技術(shù)這塊的話,因為我們做的是一個平臺,涉及到的技術(shù)非常廣,是全棧的技術(shù),從算法到工程到前端到交互所有的技術(shù)都會涉及到。我摘取里面算法的核心部分來給大家做一個介紹。
對話工廠首先是用來做對話的,人機對話有兩個主體,一個是人,一個是機器,人有人的邏輯,人的邏輯使用什么來表達呢?到今天為止主要還是通過語言,所以我們需要有一個語言理解的服務(wù)來承載這一塊;機器有機器的邏輯,機器的邏輯到今天為止還是通過代碼來表達的,所以我們需要一個函數(shù)計算的服務(wù);在人和機器對話的過程中,這種對話過程需要有效的管理,所以我們需要一個對話管理模塊。整個對話工廠最核心的三個模塊就是語言理解、對話管理和函數(shù)計算。
第一個模塊是語言理解。
我們先看一下這個圖,在整個這個圖里面,橫軸是意圖的多樣性,縱軸是頻次,這樣說有點抽象,我舉一個具體的例子,比如說我要開發(fā)票,這是一個意圖,如果去采樣十萬條這個意圖的用戶說法作為樣本,把這些說法做一個頻率統(tǒng)計,可能排在第一位的就是三個字“開發(fā)票”,它可能出現(xiàn)了兩萬次,另外排在第二位可能是“開張發(fā)票”,它可能出現(xiàn)了八千次,這些都是一些高頻的說法,還有一些說法說的很長,比如“昨天我在你們商鋪買了一條紅色的裙子,你幫我開個發(fā)票唄”,這種帶著前因后果的句式,在整個說法里面是比較長尾的,可能只出現(xiàn)了一次或兩次。
我們統(tǒng)計完以后,整個意圖的說法的多樣性分布符合冪律分布。這種特征可以讓我們在技術(shù)上進行有效的針對性設(shè)計,首先針對這種高頻的部分,我們可以上一些規(guī)則,比如上下文無關(guān)文法,可以比較好的 cover 這一塊,但是基于規(guī)則的方法,大家也知道,規(guī)則是沒有泛化能力的,所以這時候要上一個匹配模型,計算一個相似度來輔助規(guī)則,這兩塊結(jié)合在一起就可以把我們高頻確定性的部分解決的比較好;對于長尾的多樣性的這一部分,基本到今天為止還是上有監(jiān)督的分類模型,去收集或者去標注很多數(shù)據(jù),把這一塊做好;在規(guī)則和分類模型之間,我們又做了一部分工作,就是遷移學習模型,為什么要引入這個模型呢?我們看下一張圖。
在冷啟動階段,用戶在錄入樣本的時候,不會錄入太多,可能錄入十幾條幾十條就已經(jīng)很多了,這個時候按照剛才那個冪律分布,二八原則的話,它的效果的話可能也就是 70% 多,它不可能再高了。但對于用戶的期望來說,如果想要上線,想要很好的滿足他的用戶需求,其實是想要模型效果在 90% 以上,如果想要達到這個效果,就需要復(fù)雜的模型,需要標注大量數(shù)據(jù)。所以其實是存在一個 gap 的,我們引入了遷移學習模型。
具體來說,我們把膠囊網(wǎng)絡(luò)引進來和 few-shot learning 結(jié)合在一起,提出了一個網(wǎng)絡(luò)結(jié)構(gòu)叫 Induction Network,就是歸納網(wǎng)絡(luò)。整個網(wǎng)絡(luò)結(jié)構(gòu)有三層,一層是 Encoder層,第二層是 Induction,歸納層,第三層是 Relation 層。
第一層負責將每一個類的每一個樣本進行編碼,編碼成一個向量;第二層是最核心的一層,也就是歸納層,這里面利用膠囊網(wǎng)絡(luò)的一些方法,把同一個類的多個向量歸納成一個向量;然后第三層 Relation 層把用戶新來的一句話和每一個類的歸納向量進行關(guān)系計算,輸出他們的相似性打分。如果我們想要一個分類結(jié)果就輸出一個 One-hot,如果不想要 One-hot,就輸出一個關(guān)系的 Relation score,這是整個 Induction network 的網(wǎng)絡(luò)結(jié)構(gòu)。
這個網(wǎng)絡(luò)結(jié)構(gòu)提出來以后,在學術(shù)圈里面關(guān)于 few-shot learning 的數(shù)據(jù)集上,我們以比較大的提升幅度做到了 state-of-the-art 的效果,目前是最好的,同時我們將整個網(wǎng)絡(luò)結(jié)構(gòu)上線到了我們的產(chǎn)品里面,這是語言理解。
第二塊我們看對話管理。
對話管理其實我剛剛也說過了,如果想要讓平臺有足夠的適應(yīng)性的話,那么它的抽象能力一定要好。對話管理是做什么的?對話管理就是管理對話的,那么對話是什么呢?對話的最小單位就是一輪,一個 turn,我們進去看的話,一個 turn 又分為兩部分,一個叫對話輸入,一個叫對話輸出;在輸入和輸出中間,有一個對話處理的過程,就像兩個人互相交流一樣,我問你答,但其實你在答之前是有一個思考過程的,如果你不思考就回答,那你的答案就是沒有質(zhì)量的,所以就會有一個中間的對話處理過程。
我們把對話抽象到這種程度以后,整個平臺就三個節(jié)點,一個叫觸發(fā)節(jié)點,一個叫函數(shù)節(jié)點,一個叫回復(fù)節(jié)點。
觸發(fā)節(jié)點是和用戶的對話輸入對著的,函數(shù)節(jié)點是和對話處理對著的,回復(fù)節(jié)點是和對話輸出對著的。有了這一層抽象以后,無論你是什么行業(yè)的什么場景,什么樣的對話流程,都可以通過這三個節(jié)點通過連線把你的業(yè)務(wù)流畫出來。
舉兩個例子,先看一個簡單的,你要查一個天氣,很簡單,先來一個觸發(fā)節(jié)點,把天氣流程觸發(fā)起來,中間有兩個函數(shù)節(jié)點,一個是調(diào)中央氣象臺的接口,把結(jié)果拿過來,另一個是對結(jié)果進行一次解析和封裝,以一個用戶可讀的形式通過回復(fù)節(jié)點回復(fù)給用戶。這里面稍微解釋一下就是增加了一個填槽節(jié)點,填槽節(jié)點是什么意思呢?就是在任務(wù)型對話里面,幾乎所有的任務(wù)都需要收集用戶的信息,比如你要查天氣,就需要問時間是哪一天的,地點是什么地方的,這樣就叫做填槽,填槽因為太常用太普遍了,就符合我們冷啟動快里面做預(yù)置的思想,所以通過三個基礎(chǔ)節(jié)點,我們自己把它搭建成填槽的一個模板,需要填槽的時候從頁面上拖一個填槽節(jié)點出來就可以了。
我們再看一個復(fù)雜的場景,這是在線教育里面的一個外呼場景,家里有小孩的可能知道,這種在線教育特別火,在上課之前半小時,機器人就會主動給用戶打電話,指導軟件下載,指導怎么登陸,登陸進去以后怎么進入教室,所有的這些流程都可以通過機器人進行引導。
通過這兩個例子我們就可以看到,無論是簡單還是復(fù)雜的場景,通過這三種抽象節(jié)點的連線都可以實現(xiàn)。有時候我們開玩笑就會說,整個這種連線就叫一生二,二生三,三生萬千對話。
講了抽象以后,再看一下具體的對話管理技術(shù)。從實現(xiàn)上來說,這張圖和大家剛才看到的語言理解那張是一模一樣的,因為很多東西的分布其實是遵循著共同規(guī)律的,區(qū)別在與把意圖換成了對話。
舉一個例子,比如像查天氣這樣的,如果采集十萬個查天氣的樣本,對這些用戶的說法進行一個頻率統(tǒng)計的話,大概就是這樣一個曲線,用兩步能夠完成的,比如說查天氣,先填槽一個時間再填槽一個地點,然后返回一個結(jié)果,通過這種流程來完成的,可能有兩萬次;中間可能會引入一些問 A 答 B 的情況,這樣的 B 可能有各種各樣的,就跑到長尾上來了,這樣整個對話其實也遵循一個冪律分布。
對于高頻確定的部分,可以用狀態(tài)機進行解決,但狀態(tài)機同樣面臨一個問題,它沒有一個很好的容錯能力,當問 A 答 B 的時候,機器不知道下面怎么接了。在這種情況下,需要引入一個類人能力,對狀態(tài)機的能力進行補充,狀態(tài)機加上類人能力以后,基本上可以把高頻的對話比較好的解決了。對于長尾上的對話,目前對于整個學術(shù)界或者工業(yè)界都是一個難題,比較好的解決方式就是上線以后引入在線交互學習,不斷跟用戶在對話過程中學習對話。在狀態(tài)機和在線交互學習之間其實是有 gap 的,因為狀態(tài)機自己沒有學習能力,所以需要引入增強學習。接下來我會介紹在類人能力以及增強學習方面的一些工作。
先看一下類人能力。我們把人說的話,做一下分類大概可以分為三種:第一種就是用戶說的話清晰明了只有一個意思,這種其實對機器來說是可理解的;第二種機器壓根兒不知道在說啥,也就是 unknown 的;還有一種就是用戶表達的意思可以理解,但是有歧義,有可能包含著兩個意圖、三個意圖,就是uncertain,不確定的。確定性的,狀態(tài)機其實是可以很好地捕捉和描述的,類人能力主要關(guān)注拒識的和不確定性的。
對于拒識這塊,比如還是在線英語的這個例子,機器人打來一個電話,問現(xiàn)在方不方便調(diào)試設(shè)備,這個時候從設(shè)計的角度來說希望用戶回答方便或者不方便就OK了,但是一旦這個用戶回答了一個比較個性化的話,比如,“呃,我剛掃完地,過會兒可能有人要來”,這時候我們的語言理解模塊很難捕捉到這是什么語義,這時候需要引入一個個性化的拒識,比如說,“您好,不好意思,剛才沒聽明白,請問您現(xiàn)在是否方便調(diào)試,如果您不方便,我過會兒再給您打過來”,這個就是對話的兜底,是對 unknown 的處理。
第二個我們看一下澄清,用戶說的一句話里面,如果是模糊不清的怎么辦?我們通過大量的數(shù)據(jù)分析發(fā)現(xiàn)這種模糊不清主要出現(xiàn)在兩種情況下,一種是用戶把多個意圖雜糅在一段話里來表達;第二種是用戶在表達一個意圖之前做了很長的鋪墊,對于這兩種長句子現(xiàn)在的語言理解給出的是意圖的概率分布,我們把這個概率分布放到對話管理模塊以后就需要讓用戶進行一輪澄清。比如這個例子,這是移動領(lǐng)域的一個例子,這句話理解有三種意圖,到底是想問花費明細,還是套餐的事情還是想問合約的低保,把這三個問題拋給用戶進行澄清就可以了。
從技術(shù)上來說是怎么實現(xiàn)的呢,我們看一下這個圖,開發(fā)者負責把對話流程用流程圖清晰描述出來,然后像澄清這種其實是我們系統(tǒng)的一種內(nèi)置能力,什么時候澄清是通過下端的這兩個引擎里面的能力來決定的,第一塊是 Error Detection,它用來檢測用戶當前說的這句話是否需要觸發(fā)澄清,一旦它覺得要觸發(fā)澄清,就會交給下一個模塊,究竟用什么樣的方式澄清以及怎么生成澄清的話術(shù),這是目前我們整個智能澄清這塊做的工作。
再看一下我們在增強學習方面的工作。在對話管理模型里面,經(jīng)典的分成兩個模塊,一個是 neural belief tracker,用來做對話狀態(tài)追蹤的,另一個是 policy network,用來做行為決策的。在整個框架下,要去訓練這個網(wǎng)絡(luò)的時候,有兩種訓練方式,一種是端到端的去訓練,用增強學習去訓練,但這種方式一般它的收斂速度會比較慢,訓練出的結(jié)果也不好;另外一種方式是先分別做預(yù)訓練,這個時候用監(jiān)督學習訓練就好了,不用增強學習訓練,訓練完以后再用增強學習對監(jiān)督學習預(yù)訓練的模型進行調(diào)優(yōu)就可以了。
無論是端到端的一步訓練還是先預(yù)訓練再調(diào)優(yōu),只要涉及增強學習這一塊,都需要有一個外部環(huán)境,所以在我們的實現(xiàn)架構(gòu)里面,引入了模擬器的概念,就是user simulator。模擬器這主要分為三大塊,一個是 user model,用來模擬人的行為的;第二個是 error model,模擬完人的行為以后經(jīng)過 error model 引入一個錯誤擾動,用 user model 產(chǎn)出的只是一個概率為 1 的東西,它對網(wǎng)絡(luò)訓練是不夠好的,error model 會對這個結(jié)果進行擾動并給他引進幾個其他的結(jié)果,并且把概率分布進行重新計算一下,這樣訓練出的模型在擴展能力或者泛化能力上會更好一些;第三個模塊是 reward model,用來提供 reward 值。這是我們今天在整個增強學習的對話管理這塊的一些工作。
最后看一下函數(shù)計算。
函數(shù)計算是什么東西呢?還是舉一個例子吧,比如說,10086 里面用戶說要查一下話費,10086 那邊的機器人就會回復(fù)一句是發(fā)短信還是播放語音,表面看來就是簡單的一入一出,其實在這背后要經(jīng)過多輪的服務(wù)查詢,才能完成這個結(jié)果,因為當要查話費的時候,先要經(jīng)過函數(shù)計算查一下現(xiàn)在是哪一天,如果是下賬期的話是不能查話費的,就是每個月的最后一天不能查話費,如果可以查話費的話,先看一下用戶是否存在話費,如果存在花費的話第三步調(diào)用的服務(wù)看是不是停機了,因為停機了的話只能語音播報不能接收短信。所以看一下在一個簡單的一入一出的對話背后,是走了一個復(fù)雜的流程的,這些流程今天都是在機器端用代碼來實現(xiàn)的。函數(shù)計算的引入,使對話工廠可以去處理復(fù)雜的任務(wù)。
業(yè)務(wù)應(yīng)用
最后我們看一下對話工廠的業(yè)務(wù)應(yīng)用情況。這是我們在浙江上線的 114 移車,當有市民舉報違規(guī)停車擋路后,就會自動打一個電話讓他移車。第二個是在金融領(lǐng)域里面關(guān)于貸款催收的例子。在剛剛過去的雙十一里面,對話工廠在整個電商里面也有大量應(yīng)用,主要是在店小蜜和阿里小蜜里面。
店小蜜主要是一些開發(fā)票、催發(fā)貨、改地址這樣的流程,這里是一個開發(fā)票的例子,用戶可能會先說一個開發(fā)票,進來以后要進行復(fù)雜的流程,一種是在說的時候其實他已經(jīng)把它的訂單號送進來了,如果沒有說訂單號的話需要去后臺系統(tǒng)查訂單號,查出來以后彈一個訂單選擇器選擇訂單,接下來如果是個人發(fā)票就走這個流程,如果是公司發(fā)票走另一個流程,接下來會問是普通發(fā)票還是增值稅發(fā)票,如果是普通發(fā)票接著往這兒走,如果是增值稅發(fā)票需要獲取企業(yè)增值稅的稅號,最后匯總到一個節(jié)點,調(diào)用后臺開發(fā)票的系統(tǒng),把發(fā)票開出來。這是這次雙十一里面用到的開發(fā)票的一個例子。
阿里小蜜主要是負責阿里巴巴集團內(nèi)部各個 BU 的業(yè)務(wù),手淘是一個最大的業(yè)務(wù),進入手機淘寶以后,進入“我的”里面有一個客服小蜜,就是阿里小蜜;上個月我們剛剛在優(yōu)酷上線了優(yōu)酷小蜜,星巴克是 9 月份上的,是屬于新零售的一個最大的嘗試點,還有很多其他的場景。
在釘釘上,通過智能工作助理,對話工廠為千萬企業(yè)提供智能考勤、智能人事等對話服務(wù)。
最后看一下我們整體的落地情況。目前整個對話工廠在阿里巴巴經(jīng)濟體內(nèi)部各業(yè)務(wù)(如淘寶、優(yōu)酷、盒馬等)、淘寶天貓上的商家、釘釘千萬量級的企業(yè)、公有云企業(yè)、私有云重點行業(yè)(政務(wù)行業(yè)、運營商行業(yè)、金融行業(yè)等)、國際化(東南亞新加坡、印尼、越南、泰國、菲律賓、馬來西亞等6國)等業(yè)務(wù)中開始大規(guī)模應(yīng)用,賦能各行各業(yè)開發(fā)者自主構(gòu)建對話機器人。