[LUIS]申請LUIS帳號

如果今天公司突然要開發一個ChatBot

你要怎麼去確認User問的是甚麼問題?有的人中文好,有的人???(疑.

這個時候你會需要類似語言分析工具來幫你辨識User問了你甚麼,到底問題的意圖又是甚麼

如果又這麼剛好有一個User的問法跟別人很不一樣的時候,

你又該如何處理?再加一個if else來判斷?這樣專案不就永遠都無法close?

要專門養一個人來做這件事情?

此時 你就需要類似LUIS的工具,來幫你處理這樣的困擾

前言介紹完了~

我們就先來申請一下帳號吧

進入以下網址微軟Language Uderstanding Intelligent Servie ,點選左上角的Sign In

請輸入你的MSN帳號即可

點選下圖中的New App

可以照下圖黑字來設定一個新的app

建立好之後就可以進入這個畫面, 我遮蔽起來就是非常重要的App ID,請保存好

接著我們就繼續建立意圖Intent ,也就是目前你可以提供給你的User問甚麼

當你key完,按下Save即可

輸入好之後,就可以在下圖黑字旁 輸入User的問題

(怕前面圖太小...這裡把圖放大一點)

把剛剛輸入的那句話中的台北選起來,

因為要讓使用者詢問天氣,地點就是一個很重要的資訊

這裡我輸入了location,因為這會是我這個名詞的類別

意思就是說 我也可以問基隆 宜蘭 桃園 台中等等等..這些名詞分別都是甚麼?

都是地點,所以我建立了location

接著 天氣 就是 使用者想要知道的另外一個名詞,所以我們把天氣 建立成weather

溫度也是類似天氣的問法,只是問幾度而已對吧? 這裡建議最好一句話可以把實體都切出來

因為有的時候location會超出兩個字,譬如"菲律賓" 然後你可能會問 

菲律賓熱嗎 --> 這個時候 你如果只有定義location 可能抓到的Entities會是菲律 賓熱嗎 就會切開

這時候你在判斷的location的時候就會發現 沒有菲律這個地方

完成後按下Save即可(這裡溫度先不建立,晚點再提)

Intents建好了,我們就來進入Entities吧,可以看到除了location和weather之外我怎麼多了其他的

因為有先建別的啦,先忽略他!

在這邊我們看到了三個黃色的Button:Add custom entity、Add prebuilt entity、Add prebuild domain entity

其中Add Prebuilt entity 和Add prebuilt domain entity兩個是相關聯的

Prebuilt entity 是LUIS預先設定好或者是最Common的enetity

Prebuilt domain entity官方說法是和Prebuilt entity 是domain entity的一部分 也就是

Prebuilt entity是根據domain entity而來,

不過我們目前就很夠用了喔!

設定好了之後,就可以根據你所設定的intent和entities來訓練你的app

按下Train Application 就會開始Train

可以在下圖黑框中,測試你的APP 如我所輸入的台北天氣怎樣哩 他應該要可以抓到你剛剛所設定的各個Entities

看到與上一張圖片不同之處嗎? 我們抓到了剛剛問題的各個Entites location啦 weather啦 AskQuantify

其實 "怎麼樣" "如何" "多少" 我都覺得很難命名 就亂取了一個名字 就是AskQuantify 我覺得這是一個詢問的表達量化的副詞吧

那麼到底是Train哪個地方呢 ,可以回到Intents 下圖右框 看到Predicted Intent的數字了嗎? 訓練完才會有哦!

沒有訓練過 回到Train這一頁 test的時候是不會有結果的!!!! 而沒有訓練的話 數字也會變成 Not Train哦

好了總算快要結束了,總算可以Publish這個APP, BotNLP是我修改的,

原先應該是BootstrapKey 這只是代表 Publish之後會有一個網址,

這個網址會對應到一個key 而這是BotNLP只是方便你辨識的keyName(所以可以改也可以不改)

那麼我的key到底在哪裡勒? 請按下"add a new key to your account"

原來上面有一頁叫做My Keys阿 ~ 這裡就會存放 該APP 的KEY囉!!! 請保存好不要外流啊!!!!

這個時候 回到剛剛那頁,網頁下方,按下Publish,就完成囉!!! 你會看到有一個Endpoint url

這個就是你之後要寫程式Call的API啦

其中以下幾個我分開來說

1. 網址最後面 q= "請輸入User問的問題"
2.TimeZone是顯示時區,可以選GMT+8 也就是台灣時間哦!
3.verbose flag是當User輸入問題後,假設分析出來有多個意圖時,是否要傳給你這麼多意圖和評分?(下面會有圖文說明)

我們來測試一下LUIS提供給我們的URL吧 我在q=後輸入"台北天氣如何阿"

出現了以下json格式, 

  • query: 就是你輸入的問題啦!
  • topScoringIntent:是LUIS透過你所設定的Intents中,分析最高分最像的Intent
  • intents:就是我其他輸入的Intents啦 我通常不太理會...不過你可以看一下根據這樣的問題,跟其他相關度有多少
  • entities:台北天氣如何阿 這句話抓到了兩個entities,所以我們會根據type:weather、type:location來判別要回答甚麼

剛剛不是有講到Verbose嗎? 我們設定false看看,發現差別了嗎?

只有topScoringIntent呢!!! 

終於終於 我們的LUIS設定完成,可以開始來寫Code了

這邊設定好在程式判斷上才可以輕而易舉根據entities的type判斷正確的訊息啊!!

千萬不要忽略這個部分哦!!!

下一篇我們就來使用LineBot串接LUIS,並正確的回答使用者問題吧~~~

 

-----------------------------------------

有時在會走之前你就得跑

你不解決問題 就等問題解決你