作者:段清華
畢業(yè)于北京大學(xué)計(jì)算機(jī)專業(yè)。
因互聯(lián)早期研發(fā)工程師梨睁,完成項(xiàng)目包括金融搜索鲸睛,公告摘要抽取項(xiàng)目,銀行問答機(jī)器人坡贺。
某基金管理公司的量化分析平臺(tái)官辈,資產(chǎn)配置平臺(tái)算法負(fù)責(zé)人。
擁有多年金融NLP經(jīng)驗(yàn)遍坟,帶領(lǐng)團(tuán)隊(duì)完成問答機(jī)器人拳亿、投研系統(tǒng)、監(jiān)管輿情愿伴、知識(shí)圖譜等項(xiàng)目肺魁。對(duì)金融文檔解析、抽取隔节、搜索鹅经、量化分析、知識(shí)圖譜建設(shè)怎诫、對(duì)話系統(tǒng)等領(lǐng)域有深入研究瘾晃。
Bot Friday Zero - 沙龍第0場(chǎng)分享
關(guān)于對(duì)話系統(tǒng)/產(chǎn)品/技術(shù)
2019-07-19 于北京騰訊,QHDuan
對(duì)話系統(tǒng)與Rasa
首先筆者認(rèn)為: 所謂對(duì)話系統(tǒng)刽虹,是通過對(duì)話的方式酗捌,實(shí)現(xiàn)人機(jī)交互的一種方法呢诬。
就如同鍵盤鼠標(biāo)是輸入設(shè)備涌哲,顯示器音箱是輸出設(shè)備胖缤,輸入輸出是什么?是與計(jì)算機(jī)交互阀圾。對(duì)話系統(tǒng)也如此而已哪廓。
Rasa是一家通過機(jī)器學(xué)習(xí)技術(shù)實(shí)現(xiàn)對(duì)話系統(tǒng)、機(jī)器人開發(fā)的工具初烘,同時(shí)也是一家創(chuàng)業(yè)公司涡真。
Rasa最新于2019年初A輪融資$13M。
筆者認(rèn)為Rasa最大的創(chuàng)新肾筐,是開發(fā)了整套的基于機(jī)器學(xué)習(xí)的對(duì)話工具哆料,而相對(duì)的,如wit.ai吗铐,dialogflow(原api.ai)东亦,luis.ai等都不夠完整。
相對(duì)來說國(guó)內(nèi)的unit唬渗,yige ai典阵,更完整,但是無論是體驗(yàn)镊逝、效果壮啊、社區(qū)等等都不如rasa。
個(gè)人認(rèn)為:程序員更愛工具撑蒜,而不是平臺(tái)歹啼。
Rasa的組成
Rasa NLU
主要實(shí)現(xiàn)自然語言理解(即NLU)功能,本質(zhì)上就是識(shí)別句子的意圖和實(shí)體座菠。
如“買一張去北京的票”染突,我們可以定義一個(gè)意圖是“購(gòu)票”,實(shí)體是“北京”和“一張”辈灼。
意圖識(shí)別本質(zhì)是短文本分類任務(wù)(當(dāng)然在學(xué)術(shù)界可能稱為Intent Detection來和Text Classification分開)份企。 單純短文本分類任務(wù)的SOTA基本上就是BERT了。
抽取本質(zhì)是信息抽取任務(wù)巡莹。 抽取的SOTA現(xiàn)在一般還是BiLSTM-CRF的各種變型司志,或BERT之類。
現(xiàn)在學(xué)術(shù)界的主要研究方向是多種工作結(jié)合降宅,例如同一模型同時(shí)做意圖識(shí)別和信息抽取骂远,互相配合增加總體準(zhǔn)確率。
Rasa的NLU腰根,主要是當(dāng)前的社區(qū)版激才,主要還是使用了各種開源技術(shù),并沒有追求學(xué)術(shù)上的SOTA。 它使用的工具包括Spacy瘸恼、sklearn-crfsuite
Rasa Core
筆者認(rèn)為這是Rasa的核心部分劣挫,NLU有各種實(shí)現(xiàn),開源的也有snips nlu等东帅,但是core卻獨(dú)一無二压固。
Rasa Core主要完成了基于故事的對(duì)話管理,包括解析故事并生成對(duì)話系統(tǒng)中的對(duì)話管理模型(Dialog Management)靠闭,輸出系統(tǒng)決策(System Action/System Policy)帐我。
學(xué)術(shù)上一般認(rèn)為這部分會(huì)包含兩個(gè)模型:
對(duì)話狀態(tài)跟蹤(Dialog State Tracking / Belief Tracking)
對(duì)話策略(Dialog Policy / Policy Optimization)
對(duì)于1.其實(shí)Rasa實(shí)現(xiàn)很簡(jiǎn)單,具體在它的論文 Few-Shot Generalization Across Dialogue Tasks, Vlasov et at., 2018 中說的比較具體愧膀。就是簡(jiǎn)單的基于策略的槽狀態(tài)替換拦键。
對(duì)于2.Rasa使用基于LSTM的Learn to Rank方法,大體上是將當(dāng)前輪用戶意圖檩淋、上一輪系統(tǒng)行為矿咕、當(dāng)前槽值狀態(tài)向量化,然后與所有系統(tǒng)行為做相似度學(xué)習(xí)狼钮,以此決定當(dāng)前輪次的一個(gè)或多個(gè)系統(tǒng)行為:
Rasa X
Rasa的可視化編輯工具碳柱,更方便NLU、NLG數(shù)據(jù)的管理熬芜,故事的編寫莲镣。
Rasa X可能暫時(shí)還不能讓所有非開發(fā)人員也能快速方便的使用。不過它本質(zhì)上可以方便開發(fā)人員快速開發(fā)涎拉,快速訓(xùn)練模型驗(yàn)證瑞侮。
筆者是這么認(rèn)為的,Rasa X就好像小程序開發(fā)也要有個(gè)本地開發(fā)工具一樣鼓拧,或者像Android Studio那樣的工具半火。本地工具的優(yōu)點(diǎn)就是方便調(diào)試、開發(fā)季俩、快速驗(yàn)證钮糖、Debug。相對(duì)線上的缺點(diǎn)就是速度慢酌住、驗(yàn)證需要等待后臺(tái)訓(xùn)練店归、不便于Debug。
可以看出國(guó)內(nèi)外現(xiàn)在很多機(jī)器人平臺(tái)都是完全在線的酪我,例如國(guó)外的luis.ai消痛,dialogflow等。這樣當(dāng)然也可以都哭,但是總還是不如有一個(gè)可自己訓(xùn)練的終端對(duì)開發(fā)者更友好秩伞。 國(guó)內(nèi)的就不說了逞带。
再舉個(gè)例子,如Elasticsearch纱新、Docker都是非常棒的工具展氓,但是如果官方開始的時(shí)候說:你不能自己本地架設(shè),你只能用我的云服務(wù)怒炸。這樣對(duì)于很多開發(fā)者來說就必然喪失了很大的興趣带饱。
Rasa 的 Pipeline
Pipeline 的過程是這樣的:
用戶輸入文字毡代,送入解釋器阅羹,即Rasa NLU
NLU給出結(jié)果,如圖?
從Tracker到Policy教寂,Tracker用于跟蹤對(duì)話狀態(tài)捏鱼,Tracker輸出的是Embedding
用戶意圖的Embedding
系統(tǒng)動(dòng)作(上一步)的Embedding
實(shí)體(槽值/Slot)的Embedding
Policy給出系統(tǒng)行為
Tracker記錄系統(tǒng)行為,下一次會(huì)提供給Policy使用
返回消息給用戶
Rasa技術(shù)詳細(xì)
Embedding 方法
用戶意圖和系統(tǒng)行為會(huì)通過bag-of-word的方法分詞酪耕,然后向量化导梆,很有趣的結(jié)果。在官方論文沒有仔細(xì)探討為什么迂烁,筆者猜測(cè)是為了增加不同的意圖看尼、行為之間的語義關(guān)聯(lián)。
論文原文:
A bag-of-words representations for the user and the system labels are then created using token counts inside each label.
例如:
action_search_restaurant = {action, search, restaurant}
實(shí)體/槽值(Slot)的向量化就非常簡(jiǎn)單了盟步,只是走了是否存在的binary向量
The slots are featurized as binary vectors, indicating their presence or absence at each step of the dialogue.
Learn to Rank 方法
很多對(duì)話系統(tǒng)的系統(tǒng)決策都采用的是分類(Classification)方法藏斩,也就是每次總是在多個(gè)系統(tǒng)行為中選擇唯一一個(gè)。
而Rasa選擇了排序方法却盘,即判斷當(dāng)前對(duì)話狀態(tài)和系統(tǒng)行為的相似度狰域,筆者認(rèn)為這有兩個(gè)可能的好處(論文沒說明):
可以更容易實(shí)現(xiàn)多個(gè)系統(tǒng)行為的同時(shí)輸出。能讓一個(gè)對(duì)話狀態(tài)輸出多個(gè)系統(tǒng)行為是Rasa的特色黄橘。至于為什么如此兆览,可能有工程上的一些考慮,例如這樣更方便塞关,例如兩個(gè)系統(tǒng)行為抬探,一個(gè)是機(jī)器人說“請(qǐng)等待”,一個(gè)是真的去查詢數(shù)據(jù)帆赢。
更方便擴(kuò)展系統(tǒng)行為驶睦。如果是分類模型,增加一個(gè)分類匿醒,那必須重新訓(xùn)練整個(gè)分類器场航。如果是Ranking模型,如果只是增加或減少分類廉羔,可以考慮只訓(xùn)練新增的系統(tǒng)行為相關(guān)的和不相關(guān)的部分?jǐn)?shù)據(jù)集溉痢,可能增加總體的訓(xùn)練速度僻造。更方便快速實(shí)驗(yàn)、迭代孩饼。
總結(jié)
優(yōu)點(diǎn)
機(jī)器學(xué)習(xí)方法的好處是實(shí)際工程上代碼量比較少髓削,很多狀態(tài)不需要寫判斷(對(duì)比專家系統(tǒng))。
可以做到不寫邏輯下镀娶,快速驗(yàn)證某些場(chǎng)景或?qū)υ捔髁⑻拧@缫粋€(gè)非開發(fā)者甚至可以不需要寫一行代碼就能搭建某種原型機(jī)器人。
缺點(diǎn)
要做好一個(gè)比較復(fù)雜的機(jī)器人梯码,還是需要對(duì)機(jī)器學(xué)習(xí)有了解的工程師宝泵。
針對(duì)復(fù)雜的機(jī)器人,可能需要大量數(shù)據(jù)轩娶。