上一篇([19]把LUIS和Bot Builder SDK整合)看完了如何把LUIS model發佈出來并且在Bot Builder SDK怎麽整合在一起之後。
接下來在更深入的看看如何把LUIS使用到最大化。先從Entities開始介紹起。
Entities是什麽?
可以把Entities想成是句子裡面的參數,也就是會變動的部分。舉例來説,如果我今天要訂房,可能會説,我要住3個晚上。換另外一個人,可能變成我要住5個晚上。
從這個語句裡面,有2個參數:
- 3和5 - 代表要住的天數
- 晚上 - 代表的是單位
透過把這些參數定義出來,就是今天要介紹的Entities。
Entities有什麽用?
在寫程式裡面,會把重複的邏輯變成一個方法,而變化的地方變成方法傳入的參數。
同理,intent可以比喻成爲方法,而entities就是參數,透過這兩個結合,不用寫那麽多種組合的utterance。
另外一個好處是,在識別意圖的時候,entities可以被識別出來,讓程式可以使用,讓整個intent用同一個方法處理,而entities 作爲傳入進去的參數。
建立Entities
entities是定義在utterance上面,而utterance是依附在intent上面,因此先從建立intent開始。
接下來的執行動作將會是:
- 建立一個intent
- 建立出utterance
- 使用内建的entities定義天數
- 測試天數的entities
- 使用自定的entities定義單位
- 測試建立出來的單位
建立一個intent
這邊要在建立一個新的intent,這個intent用來識別使用者想要訂房。因此叫做ReserveRoom
建立出utterance
接下來要定義一個utterance。這邊將會以一個簡單的例子做測試。
一般來説,訂房都會說要住多久,因此,加入一個我要住3晚的utterance。
使用内建的entities做定義
上面的語句可以看到,3是一個關鍵。代表著總共有幾個晚上。
因此,可以把這個定義成爲一個entities。
要定義非常簡單,只需要把滑鼠移動上去,會有一個框框把目前選到的字包住,然後點下左鍵,就可以設定要定義成爲什麽entities:
由於這個entities都會是數字,因此要定義為一個數字形態。而數字屬於内建的entities清單,因此選擇了Browse prebuilt entities
。
點下去了之後,會出現一個pop up,這個時候只需要搜索number
,就可以找到内建的數字形態number
。
當選擇好了之後,在清單裡面,會發現本來的3變成了number
,這個可以透過右邊的Entities Views
來切換要顯示entities名稱還是實際的值。如果滑鼠移動上去,會顯示對應的值:
測試天數的entities
首先,可以先輸入定義的utterance,可以看到,使用有training的utterance找到是很正常的:
這個時候來換一下晚上住幾晚的數字,變成我要住10晚
:
從截圖可以發現,發現entities有對應到,但是intent錯了。
這個是因爲training的基數太小了,因此可以把這組新的也加入utterance清單。
使用自定的entities定義單位
接下來再來定義另外一個entities。3晚其實是一個單位。有可能是3天(也就是2晚)。
因此來增加一個entities用來發現unit。
這次因爲不屬於任何已經存在的entities清單,因此,將建立一個自定義的entities。
- 先選到文字晚
- 輸入unit - 因爲不存在所以找不到
- 按下
Create new entities
在pop up出來的畫面定義entities名稱unit,Entity Type選擇simple。
新增好了這個entities之後,將來建立一個新的utterance,我要住4天,這個時候,把天的部分設定entities為unit
測試建立出來的單位
接下來,按下Train
之後,接下來做一個測試。
測試會發現,number
以及unit
都可以識別出來。
到目前爲止整個entities的定義就完成了。
管理Entities
透過左邊可以切換成爲以entities爲主,看的到總共有多少entities有被使用和定義出來。
如果要修正entities將可以在這個位置做到:
結語
這篇介紹了如何在LUIS裡面從句子裡面特定字的部分,也就是entities的部分。
透過測試可以看到,LUIS可以在判斷intent之外也取得到這些entities。
下一篇([21]LUIS深入使用 - 如何在Bot Builder SDK使用entities)將切回到程式的部分,將來看看如何在程式裡面使用這些entities。