最近Chatbot突然間火紅了起來,在幾次的交流及課程活動中,常被問到有關LUIS的一些相關問題(誤解?),索性就來寫篇關於LUIS的意圖(intents)及關鍵項目(entities)見解文(可能有不同見解或想法,歡迎交流)。
先來說一下LUIS到底是什麼,跟Chatbot開發又有什麼關係?
追朔Chatbot發展歷史可以發現,大多資料都指向第一個Chatbot是在1966年由MIT教授Joseph Weizenbaum所設計的ELIZA(用來輔助治療心理疾病的Chatbot),Chatbot開發的關鍵點其中一項是如何辨示使用者的意圖,白話一點是Chatbot要能知道你想要幹什麼,而偏偏這點是有難度的,因為人類的對話語句夾帶著情緒、文字,甚至於每個人說話的習慣及用字各有不同,再加上對話的斷句,eg:今天...你有空嗎? vs 今天你有空嗎,這些都增加了如何理解語句真正意圖的難度。因此要開發一個Chatbot背後所需要的語言知識可能遠遠大於你我的想像,幸好我們身處於雲端的時代,可以站在巨人的身上運用既有的雲端服務來專注於應用發展上,而非花心力在於改善提升演算法準確率(學術研究上或許比較需要),LUIS(Language Understanding Intelligent Services)就是微軟推出針對語句理解能力的服務,背後結合了機器學習能力,藉由語句推測出對話者的意圖(intents)以及相關的關鍵項目(entities)。
想像一下,今天你去一間飲料店,跟店員說:我要2杯綠茶
什麼是意圖(intents)?
意圖就是你想要幹嘛,上面這個例句的意圖是什麼?我們可以說這樣的一句話,意圖是:【點飲料】、【點餐】,但不建議把意圖定義成【點綠茶】,這會使得你在設計語意理解的意圖過於狹隘
什麼是關鍵項目(entities)?
每個語句中都藏有關鍵點的項目,以上面的例句來說,關鍵項目很有可能是【數量】【飲料種類】,而【2杯】【綠茶】則分別是【數量】【飲料種類】的值(value)
意圖(intents)與關鍵項目(entities)最常被誤解的情況在於定義的不夠抽象,舉幾個例子
(1)台北天氣如何?
(2)我要2張飛日本的經濟倉機票
各位會怎麼定義意圖(intents)與關鍵項目(entities)?
LUIS最常會被誤解為就是針對對話文字去拆關鍵字,這可是天大的誤會,LUIS是具有機器學習能力的,它是根據你所定義的意圖及關鍵項目,透過例句進行學習訓練,LUIS回饋給你的是對話意圖的推測百分比數據,如果你有看過賭神電影的話,就像是有51%是黑桃2、33%是梅花3這樣,所以當你的意圖設計不當或是基本例句數量還不足,都會影響到意圖推測的準確度,LUIS絕對不是拆字系統。
需要把所有可能性的對話文字組合都輸入到LUIS的例句訓練嗎?
剛剛提過,LUIS是具有機器學習能力的,所以並不需要把所有可能性的對話文字組合都餵給LUIS(又不是在餵公子吃餅),舉例來說一個天氣問答的Chatbot,你並不需要把【台北天氣如何?】【台中天氣如何?】【高雄天氣如何?】【台北天氣好嗎?】【高雄天氣好嗎?】...所有可能性及問法都一一餵給LUIS,你只需要給與一些基本例句,LUIS就能進行學習訓練應付相似的對話,相對的也不用把所有地點都鍵入。
我該怎麼鍵入動詞?
這個問題是一位教授問我的,事實上我個人認為以LUIS來說,定義意圖(intents)這檔事就是在定義動詞,而關鍵項目(entities)則比較像是名詞,例如:我要一杯鮮奶茶,用LUIS來定義意圖(intents)及關鍵項目(entities)的話,分別可能是【買飲料】(買是表示動作、動詞)【飲料種類】則是鮮奶茶(名詞)。
LUIS可做到像siri嗎?
LUIS只是個自然語言理解系統,它可以做的是意圖的推測及關鍵項目的辨識,至於得到這些結果之後你要Chatbot做出什麼回應,就是你的Chatbot應該做的事情了,換言之你還是得寫些程式碼的,能不能做到跟siri一樣,我只能說可能有機會,但絕對不是想像中的簡單,即便有了LUIS。
最後附上在第一科大分享Chatbot與LUIS的簡報,供大家參考 :)
https://www.slideshare.net/IanChen2/chatbot-luis
By No.18