
這里用戶輸入是book a ticket to Los Angeles alt="物聯(lián)網(wǎng)" width="550" height="189" />
定義好subject entity之后,我給出了幾個examples,同時也包括其synonyms,keywords entity類似。
step 2 自定義Intents,這里我定義了兩個Intents,分別是update和search。下圖是update的examples,是我自定義的幾個例子。api.ai會根據(jù)我定義好的entity進(jìn)行自動標(biāo)注,比如cs.CL,today是系統(tǒng)默認(rèn)的entity所以也進(jìn)行了自動標(biāo)注。自動標(biāo)注是為了后臺的機器學(xué)習(xí)算法對標(biāo)注好的examples進(jìn)行學(xué)習(xí),以提高chatbot的NLU準(zhǔn)確率。

接下來,我需要定義下Actions,如下圖:

Action被稱為update,必須包含的參數(shù)是subject,也就是我們上面講到的一個entity,date參數(shù)并不是必須的。所以,這里如果用戶的input被識別出是update intents的話,就必須包括subject參數(shù),否則chatbot會trigger一個response,類似“請用戶輸入subject”這樣的話。
step 3 簡單測試,在界面的右側(cè)有一個console,用來測試當(dāng)前chatbot的效果,我輸入update cs.CL,得到下面的效果:

chatbot識別出Intent是Update,Action是update,Parameter是date和subject,并且subject的值是cs.CL,下面的Show JSON是api.ai為developer生成的,用來與developer自己的web service進(jìn)行數(shù)據(jù)交換。
step 4 訓(xùn)練。訓(xùn)練包括兩個部分,一是訓(xùn)練NER,二是訓(xùn)練Intent Classification。訓(xùn)練器是api.ai提供的,但是標(biāo)注數(shù)據(jù)是developer自己提供的,當(dāng)然訓(xùn)練數(shù)據(jù)越多,標(biāo)注越準(zhǔn),分類器的準(zhǔn)確率就越高,chatbot的NLU準(zhǔn)確率越高。至于訓(xùn)練方法,docs中沒有細(xì)說,我簡單猜測一下,NER可以當(dāng)做Sequence Labeling任務(wù),和Intent Recognition類似,都可以看作是多分類問題,不管是傳統(tǒng)的分類方法還是當(dāng)下流行的deep learning方法都能得到不錯的準(zhǔn)確率。隨著user logs的增多,訓(xùn)練數(shù)據(jù)會越來越多,chatbot通過學(xué)習(xí)就會變得越來越“聰明”。但這里有個問題,training data越多,需要標(biāo)注或者修改標(biāo)注的數(shù)據(jù)就會越多,也是一個麻煩事兒。
step 5 整合、發(fā)布。api.ai支持的平臺非常多,包括當(dāng)下流行的message平臺,還有各種操作系統(tǒng)平臺。在message平臺上提供了一鍵整合的功能,在操作系統(tǒng)上提供了SDK。這里我用了slack平臺,api.ai打通了和slack的接口,也提供了webhook,連接了我之前寫好的web service,只需要按照它給定的消息接口進(jìn)行定義即可。
demo
目前RSarXiv只提供兩個簡單的功能,一個是update今天最新的arxiv paper,你可以通過show me new papers in cs.CL等類似的話來獲取cs.CL這個領(lǐng)域中最新的paper;一個是search功能,你可以通過search LSTM等類似的話來獲取包括LSTM這個關(guān)鍵詞的paper。由于是一個測試用的demo,就沒做什么復(fù)雜的功能。

大家如果感興趣的話,可以留言給我或者發(fā)郵件給我([email protected][email protected]),我邀請大家到這個slack team中。
簡單場景chatbot構(gòu)建方法
介紹了下api.ai提供的服務(wù),下面簡單地提煉一下。
chatbot = NLU + NLG
api.ai解決的重點問題是NLU的問題,NLU也是Dialogue State Tracker(DST)的核心和基礎(chǔ),而DST是chatbot的核心。這里的NLU包括兩個問題:
1、從user inputs中識別出user intent和對應(yīng)的action。
2、從user inputs中抽取出預(yù)先設(shè)定好的entity value,作為action的parameter。
NLG在api.ai這里基本上通過developer在Intent中設(shè)定response,當(dāng)識別出是哪個intent之后,response自然就有了,最多空一些slot,用結(jié)果進(jìn)行填充。如果developer選擇了webhook,即需要從自定義的web service中給定response。如下圖:
