建立屬于你的智能客服
背景
很多人問(wèn),對(duì)話式交互系統(tǒng)就是語(yǔ)音交互么?當(dāng)然不是。語(yǔ)音交互本身真的算不上新概念,大家可能都給銀行打過(guò)電話,“普通話服務(wù)請(qǐng)按1,英文服務(wù)請(qǐng)按2……返回上一層請(qǐng)按0” 這也算對(duì)話式交互系統(tǒng),我想大家都清楚這種交互帶來(lái)的用戶(hù)體驗(yàn)有多低效。那么對(duì)話式交互系統(tǒng)已經(jīng)可以取代人類(lèi)提供服務(wù)了么?也沒(méi)有,圖靈測(cè)試還沒(méi)有過(guò)呢,著什么急啊。
不過(guò),隨著人工智能的發(fā)展,對(duì)話式交互穿著語(yǔ)音和文本的外衣,攜手模糊搜索引擎,懷抱計(jì)算科學(xué)和語(yǔ)言學(xué)的內(nèi)核,帶著定制化推薦的花環(huán),駕著深度學(xué)習(xí)和大數(shù)據(jù)的馬車(chē)乘風(fēng)破浪而來(lái)——我們就知道,大約是時(shí)候了。至少,我們已經(jīng)可以在十分鐘內(nèi)創(chuàng)造自己的對(duì)話式客服了。
今天的文章大致分為三部分:歷史,今天(chatbot api)和未來(lái)(深度學(xué)習(xí)和智能問(wèn)答)。
先定義一下交互系統(tǒng),wiki給出的定義是:
Interaction is a kind of action that occurs as two or more objects have an effect upon one another. |
即雙方或者多方相互影響的過(guò)程,那么在咱們的上下文中,我們不妨限定為人機(jī)交互。先來(lái)講講是什么,再來(lái)講講怎么做吧。
歷史和現(xiàn)在
廣義上的對(duì)話式交互實(shí)際上包括所有一問(wèn)一答形式的人機(jī)交互,自始至終,我們都需要從機(jī)器拿到信息。在最早的時(shí)代用的是文本交互系統(tǒng)TUI,其實(shí)直到今天,我相信程序員們?cè)贚inux下面完成大部分操作時(shí)還是會(huì)選用Terminal,這種文本交互非常簡(jiǎn)潔高效,但是有一個(gè)缺點(diǎn):不熟悉操作的人上手非常困難,需要記住大量的指令和規(guī)則,才可以有效的告訴機(jī)器想要它做什么——正如一個(gè)笑話:“問(wèn):如何生成一個(gè)隨機(jī)的字符串? 答:讓新手退出VIM”。
直觀的,既然“以機(jī)器的交流方式告訴機(jī)器想要做什么”這件事情給人類(lèi)帶來(lái)了很差的用戶(hù)體驗(yàn),那我們可以讓機(jī)器提供可能的選項(xiàng)來(lái)讓人類(lèi)選擇。所以,人類(lèi)用了幾十年,把交互系統(tǒng)升級(jí)成了圖形化交互GUI。大家今天看到的桌面系統(tǒng)就是特別典型的一個(gè)體現(xiàn)。包括后來(lái)的觸摸屏幕和智能手機(jī)的發(fā)展,其實(shí)都是圖形化交互的不同表現(xiàn)。
現(xiàn)在一切都好了么?并沒(méi)有。雖然機(jī)器可以在瞬間呈現(xiàn)大量的信息,但是人類(lèi)在同一時(shí)刻可注意到的信息卻極為有限。心理學(xué)研究發(fā)現(xiàn),人類(lèi)的注意廣度其實(shí)只有5-9個(gè)對(duì)象。想象一下上面那張圖,如果我在桌面上放100個(gè)應(yīng)用程序呢?1000個(gè)呢?隨著數(shù)據(jù)量的發(fā)展。如何在大量的信息中,迅速呈現(xiàn)出有效的信息呢?
搜索系統(tǒng),或者再具體一點(diǎn)——推薦系統(tǒng),在選項(xiàng)過(guò)多的時(shí)候,承擔(dān)起了給用戶(hù)盡可能高效率的提供想要的信息的任務(wù)。如果我們做好了智能搜索,我們就能做好智能交互。本質(zhì)上都是一樣的:在浩瀚的已知數(shù)據(jù)里,基于一定模型和經(jīng)驗(yàn),總結(jié)出用戶(hù)最想要的答案并及時(shí)的呈現(xiàn)出來(lái)。我問(wèn)Google一個(gè)問(wèn)題,Google將我想要的答案排在***個(gè)位置返回給我,誰(shuí)又能說(shuō)這不是對(duì)話式交互呢?
當(dāng)然,我們希望的對(duì)話式UI不僅是一問(wèn)一答,我們希望對(duì)話系統(tǒng)能夠有自己的知識(shí)數(shù)據(jù)庫(kù),希望它保有對(duì)上下文的記憶和理解,希望它具有邏輯推演能力,甚至,頗有爭(zhēng)議的,希望它具有一定的感情色彩。
所以,我們有了今天的Conversational UI,對(duì)話式交互只是一個(gè)殼子。其中的本質(zhì)是智能和定制化服務(wù),在一段時(shí)間的訓(xùn)練之后,你拿起電話撥給銀行,應(yīng)答的智能客服和人類(lèi)的交互方式是一樣的。拋開(kāi)繁瑣的從1按到9的決策路徑,直接告訴他你要做什么,銀行會(huì)直接給你提供***你需求的服務(wù)。而完成這個(gè)任務(wù),我們主要有兩條路可以走,一條是專(zhuān)家系統(tǒng),這里也會(huì)給大家介紹幾個(gè)網(wǎng)絡(luò)上的引擎,爭(zhēng)取在十分鐘之內(nèi)讓大家學(xué)會(huì)建立一個(gè)屬于自己的智能客服系統(tǒng)。而另外一條,則是智能問(wèn)答系統(tǒng),需要一點(diǎn)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的知識(shí)——教機(jī)器理解規(guī)則,比教機(jī)器規(guī)則,要有趣的多。
輸入和輸出
前面都在講輸入,就是機(jī)器如何理解人類(lèi)的指令。是因?yàn)檩敵鲞@個(gè)問(wèn)題,可以說(shuō)已經(jīng)被解決了很久了。文本、圖像和語(yǔ)音三大交流方式中,語(yǔ)音被解決的最晚,但是20年前的技術(shù)就已經(jīng)足夠和人類(lèi)進(jìn)行交流了,雖然我們還是能很容易的聽(tīng)出來(lái)語(yǔ)料是不是電子合成的,但是這一點(diǎn)音色上的損失并不影響我們交流的目的。
而語(yǔ)音到文本的識(shí)別便要復(fù)雜得多。這類(lèi)工作確切來(lái)說(shuō)始于1952年。從讀識(shí)數(shù)字從1到0,然后把數(shù)字的聲音譜線打出來(lái),識(shí)別說(shuō)的是哪個(gè)數(shù)字開(kāi)始。這個(gè)模型雖然達(dá)到了98%的精度,但是其實(shí)并不具有通用性:數(shù)據(jù)源空間和目標(biāo)空間都實(shí)在是太小了。
我們都知道當(dāng)下***或者說(shuō)***用的語(yǔ)音識(shí)別模型是深度學(xué)習(xí)模型。但是在此之前呢?舉一個(gè)典型例子:開(kāi)復(fù)老師的博士論文,隱馬爾科夫模型,大約三十年前發(fā)表,如下圖所示:
簡(jiǎn)單說(shuō)就是一個(gè)時(shí)間序列模型。有時(shí)間狀態(tài),隱藏狀態(tài),然后有觀測(cè)狀態(tài)。比如我有兩個(gè)色子,一個(gè)六面體色子,從1到6。一個(gè)四面體的,從1到4。兩個(gè)色子之間進(jìn)行轉(zhuǎn)換的概率都是0.5。現(xiàn)在給出一段極端一點(diǎn)的序列 111122224441111555566666666,大家覺(jué)得哪一段是四面體色子、哪一段是六面體色子呢?同理,聽(tīng)到一個(gè)語(yǔ)音,我想知道后面隱藏起來(lái)的那句話,原理也是和扔色子一樣的:根據(jù)觀測(cè)到的狀態(tài)(聲音)來(lái)推理后面隱藏的狀態(tài)(文本)。這類(lèi)概率模型的效果相當(dāng)不錯(cuò),以至于今天還有許多人在用。
Chatbot API
按照人工干預(yù)的多少,推理引擎的實(shí)現(xiàn)大致可以分為兩類(lèi)。一類(lèi)是人工定義規(guī)則,一類(lèi)是機(jī)器從數(shù)據(jù)里面自動(dòng)學(xué)習(xí)規(guī)則。對(duì)于前者,我們都知道wit.ai和api.ai這兩個(gè)著名的chatbot開(kāi)放api, 分屬于Facebook和Google兩大巨頭。先來(lái)看一下實(shí)現(xiàn)的效果:
這里的+表示得分,機(jī)器準(zhǔn)確的理解了人類(lèi)的意圖。o表示不得分,機(jī)器并沒(méi)有理解。我們可以看到,其實(shí)表現(xiàn)并沒(méi)有想象中的那么好,一些很簡(jiǎn)單的案例‘i would like to order pizza’ 都沒(méi)有得分,離普通人類(lèi)的智能還有些距離。
那么背后的邏輯是怎樣的呢?舉一個(gè)api.ai的例子,我們會(huì)定義不同的類(lèi)型和變量,然后把他們和相關(guān)的值與回答鏈接起來(lái)。從而在和用戶(hù)進(jìn)行交互的時(shí)候,能夠按照已知的(人類(lèi)定義的)規(guī)則來(lái)存儲(chǔ)相應(yīng)的值,并調(diào)用相應(yīng)的方法。
可能大家會(huì)覺(jué)得英文讀起來(lái)比較慢,這里介紹一個(gè)中文版api.ai——yige.ai. 并不是廣告,我了解這個(gè)平臺(tái)還得益于我的朋友——有一天他跑來(lái)跟我說(shuō):夭壽啦!你知道嗎,有個(gè)相親網(wǎng)站,拿人工智能代替女性用戶(hù)和人聊天!之后,官方辟謠說(shuō)并不會(huì)這么做。但是yige.ai在新手入門(mén)方面的友善程度,實(shí)在是我見(jiàn)過(guò)中文chatbot API中數(shù)一數(shù)二好的。
但是也正如圖中所示,我們依舊需要人工定義很多事情包括詞庫(kù),場(chǎng)景,規(guī)則,動(dòng)作,參數(shù)等等。在買(mǎi)鞋這樣一個(gè)小的場(chǎng)景和確定范圍的交互期待里面,這樣做還是可以為大部分人群所接受的。畢竟簡(jiǎn)單而直觀,精準(zhǔn)的實(shí)現(xiàn)了“十分鐘制作屬于自己的chatbot”這一需求,更不需要強(qiáng)大的計(jì)算資源和數(shù)據(jù)量。但我們并不太可能在這樣的系統(tǒng)里面,得到定義好的域以外的知識(shí)。如果我們的時(shí)間和人力足夠多的話,能夠有專(zhuān)門(mén)的一些領(lǐng)域?qū)<襾?lái)完善這個(gè)提問(wèn)庫(kù),將會(huì)使得搜索的精度非常高。因?yàn)樗锌赡艿奶釂?wèn)都已經(jīng)有了專(zhuān)業(yè)的答案。但是,當(dāng)場(chǎng)景復(fù)雜之后,這樣做的工作量就會(huì)變成很大的壓力了。
所以,我們需要深度學(xué)習(xí)。
深度學(xué)習(xí)想要達(dá)到一個(gè)好的表現(xiàn),需要有兩個(gè)前提。一個(gè)是足量的計(jì)算資源,一個(gè)是大量的數(shù)據(jù)。
計(jì)算資源不用說(shuō),如果沒(méi)有GPU,圖片/語(yǔ)音這種非結(jié)構(gòu)化的原始數(shù)據(jù)訓(xùn)練的時(shí)間基本需要以“周”來(lái)作單位。
數(shù)據(jù)集設(shè)計(jì)
關(guān)于大數(shù)據(jù),一個(gè)很常見(jiàn)的問(wèn)題就是,多大才算大,學(xué)術(shù)一點(diǎn)的說(shuō)法是:大到包含區(qū)分目標(biāo)值所需要的所有特征就可以了——我們都知道在實(shí)踐中,這句話基本屬于廢話。那么舉個(gè)例子,一般來(lái)說(shuō)訓(xùn)練一個(gè)語(yǔ)音識(shí)別的模型,數(shù)據(jù)是以千小時(shí)為單位計(jì)算的。
而且很抱歉的是,很多商業(yè)公司的數(shù)據(jù)集基本是不公開(kāi)的。那么對(duì)于小型的創(chuàng)業(yè)公司和自由研究者,數(shù)據(jù)從哪里來(lái)呢?筆者整理了一些可以用來(lái)做自然語(yǔ)言處理和智能問(wèn)答的公開(kāi)數(shù)據(jù)集,這里由于篇幅和主題所限,就不展開(kāi)講了。改天會(huì)專(zhuān)門(mén)開(kāi)主題介紹免費(fèi)可用的公開(kāi)數(shù)據(jù),以及在公開(kāi)數(shù)據(jù)集上所得到的模型應(yīng)該如何遷移到自己的問(wèn)題域當(dāng)中來(lái)。
這里用斯坦福大學(xué)的著名問(wèn)答數(shù)據(jù)集作為例子,SQuAD,可以被稱(chēng)為業(yè)內(nèi)用于衡量問(wèn)答系統(tǒng)的最棒最典型的數(shù)據(jù)集。我們可能在高中時(shí)代都做過(guò)閱讀理解,一篇文章帶有幾個(gè)問(wèn)題,答案來(lái)自于文章的信息。那么有了這樣一個(gè)數(shù)據(jù)集,我們能做的事情是什么呢?這樣一個(gè)數(shù)據(jù)集所訓(xùn)練出的模型可以解決什么樣的問(wèn)題?在各個(gè)問(wèn)題中,人類(lèi)的表現(xiàn)和機(jī)器的表現(xiàn)有什么樣的差異?為什么?
我們很高興的看到,在***發(fā)表的一篇基于r-net的論文中,機(jī)器的表現(xiàn)已經(jīng)可以和人類(lèi)媲美了。人類(lèi)在這個(gè)數(shù)據(jù)集所得到的EM得分約82.3,F(xiàn)1得分約91.2。而微軟發(fā)表的框架EM得分高達(dá)82.1,和人類(lèi)相差不足0.2%。
深度學(xué)習(xí)
好的,現(xiàn)在數(shù)據(jù)有了,計(jì)算資源有了,模型從哪里來(lái)呢?我們很高興的看到算法正在進(jìn)化,人工的干預(yù)隨著技術(shù)的進(jìn)步越來(lái)越少。在DeepMind于2017年12月5日發(fā)表的***版本中,AlphaZero沒(méi)有用到任何人工的特征就打敗了用了一堆特征的前任AlphaGo,也打敗了人類(lèi)歷經(jīng)千年沉淀下來(lái)的珍瓏棋譜。
直觀一點(diǎn),在圖像識(shí)別的深度網(wǎng)絡(luò)中,計(jì)算機(jī)難以理解原始圖像像素值的含義,然而神經(jīng)網(wǎng)絡(luò)每層的權(quán)重實(shí)際上學(xué)習(xí)到了圖像的高級(jí)特征。越高層的神經(jīng)網(wǎng)絡(luò),成分越具體。***層可以通過(guò)比較像素的亮度來(lái)識(shí)別邊緣,基于此,第二層可以檢測(cè)邊角的集合,第三層可能是小的色泡或者面,第四層可能是嘴巴這類(lèi)更復(fù)雜的對(duì)象,再往下可能是更具體的特征,直到物體本身。 神經(jīng)網(wǎng)絡(luò)和人腦一樣,將原始信號(hào)經(jīng)過(guò)逐層的處理,最終從部分到整體抽象為我們感知的物體。圖中所示的是一個(gè)從圖像到物體的感知過(guò)程,或者說(shuō)是一個(gè)圖像到標(biāo)簽列表的映射模型。
語(yǔ)音轉(zhuǎn)文本或者問(wèn)題到答案,也是一樣的,可以用sequence2sequence作為學(xué)習(xí)的模型設(shè)計(jì)。前面說(shuō)到的api.ai也好,yige.ai也好,規(guī)則和變量都是傾向于人工定義的。機(jī)器會(huì)對(duì)未經(jīng)定義的語(yǔ)法規(guī)則給出一些通用的支持,但是正如我們看到的,一旦遇到定義域之外的交互場(chǎng)景,表現(xiàn)就很難盡如人意。
而在端到端的識(shí)別中,我們不關(guān)心所有的語(yǔ)法和語(yǔ)義規(guī)則,所有的輸入直接定向?yàn)閱?wèn)題,所有的輸出直接是答案。當(dāng)數(shù)據(jù)足夠多,我們就可以做到端到端的識(shí)別,而不受人工定義的語(yǔ)義規(guī)則的干擾。這件事情,既是好事情,也是壞事情?;谌斯ひ?guī)則的機(jī)器永遠(yuǎn)都不可能超過(guò)人類(lèi)的表現(xiàn),但是純基于數(shù)據(jù)的機(jī)器學(xué)習(xí)模型,卻可以打敗人類(lèi)——這點(diǎn)在AlphaGo的所向披靡之中,已經(jīng)被證實(shí)過(guò)了。
如同圖示,seq2seq的模型可以基于Sutskever在2014年發(fā)表于NIPS的一篇文章設(shè)計(jì) ,模型用recurrent neural network每次讀入一個(gè)token作為輸入,并預(yù)測(cè)應(yīng)答的token。我們假設(shè)***個(gè)人說(shuō)了ABC,而第二個(gè)人回答了WXYZ,那么模型將會(huì)建立一個(gè)從ABC到WXYZ的映射。模型的隱變量,我們可以叫他“thought vector”,表明在這里機(jī)器理解了這個(gè)ABC的想法,或者說(shuō)概念。這個(gè)模型在簡(jiǎn)化程度和通用程度上都是極好的,后面的實(shí)驗(yàn)也證明了這一點(diǎn)。
下圖是LSTM(一種神經(jīng)網(wǎng)絡(luò))所產(chǎn)生的翻譯結(jié)果樣例,大家可以參考一下效果,并和百度翻譯以及谷歌翻譯對(duì)比一下。
深度學(xué)習(xí)Chatbot開(kāi)源實(shí)現(xiàn)
相信通過(guò)前面的介紹,大家對(duì)于對(duì)話式交互系統(tǒng),以及現(xiàn)有的api都有了初步了解,那么對(duì)于剩下一部分想要自己實(shí)現(xiàn)模型的人們,感謝github和arxiv,我們?cè)谠创a和原理級(jí)別都可以知道當(dāng)今最聰明的那批人在做什么。
這里是一個(gè)頗具代表性的開(kāi)源框架,純基于seq2seq,由機(jī)器學(xué)習(xí)實(shí)現(xiàn),并沒(méi)有任何人工規(guī)則干預(yù)。
和Google一直以來(lái)的風(fēng)格相符,整個(gè)代碼都是在TensorFlow和python3.5上實(shí)現(xiàn),支持各種開(kāi)源數(shù)據(jù)庫(kù)以及定制化對(duì)話數(shù)據(jù)庫(kù),甚至擁有本地的web界面。有現(xiàn)成的權(quán)重文件可以下載(無(wú)需自己耗時(shí)訓(xùn)練),通過(guò) TensorBoard我們也可以輕松監(jiān)測(cè)系統(tǒng)的表現(xiàn),雖然在部分對(duì)話的表現(xiàn)上差強(qiáng)人意,有著諸如在上下文中對(duì)同一個(gè)問(wèn)題的回答不統(tǒng)一這種明顯的bug,離通過(guò)圖靈測(cè)試更是很遙遠(yuǎn),但是其設(shè)計(jì)原理和實(shí)現(xiàn)方式對(duì)入門(mén)者實(shí)在是再友好不過(guò)。至少,這個(gè)模型告訴了我們,深度學(xué)習(xí)模型是可以自動(dòng)從有噪聲的開(kāi)放領(lǐng)域內(nèi)提取相應(yīng)知識(shí),并全自動(dòng)生成答案的。
總結(jié)與展望
總結(jié)一下,如果我們有更多的領(lǐng)域?qū)<液蜆I(yè)務(wù)分析師,并且業(yè)務(wù)上需要進(jìn)行對(duì)話式交互設(shè)計(jì)的場(chǎng)景相對(duì)有限,變量關(guān)系都比較簡(jiǎn)單,那么毫無(wú)疑問(wèn),各式各樣的chatbot API將會(huì)是你***的選擇——它設(shè)計(jì)直觀,接口簡(jiǎn)單,集成容易,而且大多數(shù)時(shí)候,它在特定問(wèn)題下的精度將會(huì)比端到端的深度學(xué)習(xí)要高。如果我們有更多的數(shù)據(jù)科學(xué)家和大數(shù)據(jù)工程師,對(duì)和機(jī)器一起學(xué)習(xí)數(shù)據(jù)中的規(guī)則有很大的興趣,同時(shí)業(yè)務(wù)場(chǎng)景又比較復(fù)雜,需要支持更多非結(jié)構(gòu)化的原始數(shù)據(jù)以及自動(dòng)化提取特征和規(guī)則,那么建議大家借勢(shì)深度學(xué)習(xí),搭建屬于自己的智能問(wèn)答系統(tǒng)。
【本文是51CTO專(zhuān)欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號(hào):思特沃克,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】