[chatbot + AI = 下一代操作模式][20]LUIS深入使用 - 定義Entities來截取參數 @ Alan Tsai 的學習筆記|An Asp .Net Mvc Web Developer Blog

Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[chatbot + AI = 下一代操作模式][20]LUIS深入使用 - 定義Entities來截取參數

[chatbot + AI = 下一代操作模式][20]LUIS深入使用 - 定義Entities來截取參數.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

上一篇([19]把LUIS和BotBuilder整合)看完了如何把LUIS model發佈出來并且在BotBuilder怎麽整合在一起之後。

接下來在更深入的看看如何把LUIS使用到最大化。先從Entities開始介紹起。

Entities是什麽?

可以把Entities想成是句子裡面的參數,也就是會變動的部分。舉例來説,如果我今天要訂房,可能會説,我要住3個晚上。換另外一個人,可能變成我要住5個晚上

從這個語句裡面,有2個參數:

  1. 35 - 代表要住的天數
  2. 晚上 - 代表的是單位

透過把這些參數定義出來,就是今天要介紹的Entities。

Entities有什麽用?

在寫程式裡面,會把重複的邏輯變成一個方法,而變化的地方變成方法傳入的參數。

同理,intent可以比喻成爲方法,而entities就是參數,透過這兩個結合,不用寫那麽多種組合的utterance。

另外一個好處是,在識別意圖的時候,entities可以被識別出來,讓程式可以使用,讓整個intent用同一個方法處理,而entities 作爲傳入進去的參數。

建立Entities

entities是定義在utterance上面,而utterance是依附在intent上面,因此先從建立intent開始。

接下來的執行動作將會是:

  1. 建立一個intent
  2. 建立出utterance
  3. 使用内建的entities定義天數
  4. 測試天數的entities
  5. 使用自定的entities定義單位
  6. 測試建立出來的單位

建立一個intent

這邊要在建立一個新的intent,這個intent用來識別使用者想要訂房。因此叫做ReserveRoom

chrome_2018-07-25_19-53-38.png
建立出ReserveRoom intent

建立出utterance

接下來要定義一個utterance。這邊將會以一個簡單的例子做測試。

一般來説,訂房都會說要住多久,因此,加入一個我要住3晚的utterance。

使用内建的entities做定義

上面的語句可以看到,3是一個關鍵。代表著總共有幾個晚上。

因此,可以把這個定義成爲一個entities。

要定義非常簡單,只需要把滑鼠移動上去,會有一個框框把目前選到的字包住,然後點下左鍵,就可以設定要定義成爲什麽entities:

chrome_2018-07-25_19-55-41.png
選取要設定3的entities

由於這個entities都會是數字,因此要定義為一個數字形態。而數字屬於内建的entities清單,因此選擇了Browse prebuilt entities

點下去了之後,會出現一個pop up,這個時候只需要搜索number,就可以找到内建的數字形態number

chrome_2018-07-25_19-56-21.png
找到内建的number形態

當選擇好了之後,在清單裡面,會發現本來的3變成了number,這個可以透過右邊的Entities Views來切換要顯示entities名稱還是實際的值。如果滑鼠移動上去,會顯示對應的值:

chrome_2018-07-25_19-56-41.png
清單裡面會預設顯示entities的名稱

測試天數的entities

首先,可以先輸入定義的utterance,可以看到,使用有training的utterance找到是很正常的:

chrome_2018-07-25_20-37-12.png
測試training的utterance

這個時候來換一下晚上住幾晚的數字,變成我要住10晚

chrome_2018-07-25_20-39-16.png
測試我要住10晚

從截圖可以發現,發現entities有對應到,但是intent錯了。

這個是因爲training的基數太小了,因此可以把這組新的也加入utterance清單。

使用自定的entities定義單位

接下來再來定義另外一個entities。3其實是一個單位。有可能是3(也就是2晚)。

因此來增加一個entities用來發現unit。

這次因爲不屬於任何已經存在的entities清單,因此,將建立一個自定義的entities。

  1. 先選到文字
  2. 輸入unit - 因爲不存在所以找不到
  3. 按下Create new entities
chrome_2018-07-25_19-57-31.png
建立新的entities

在pop up出來的畫面定義entities名稱unit,Entity Type選擇simple

entities可以有不同的形態,包含組合(Composition)類型,或者繼承(hierarchy)類型。以這邊的3天為例子,composition其實比較適合。不過這篇以簡單介紹爲主, 因此這邊將不會介紹這些其他形態,如果有興趣可以看官網的説明。

新增好了這個entities之後,將來建立一個新的utterance,我要住4天,這個時候,把的部分設定entities為unit

chrome_2018-07-25_19-58-39.png
設定好unit

測試建立出來的單位

接下來,按下Train之後,接下來做一個測試。

測試會發現,number以及unit都可以識別出來。

到目前爲止整個entities的定義就完成了。

管理Entities

透過左邊可以切換成爲以entities爲主,看的到總共有多少entities有被使用和定義出來。

如果要修正entities將可以在這個位置做到:

chrome_2018-07-26_08-14-35.png
entities的管理畫面

結語

這篇介紹了如何在LUIS裡面從句子裡面特定字的部分,也就是entities的部分。

透過測試可以看到,LUIS可以在判斷intent之外也取得到這些entities。

下一篇([21]LUIS深入使用 - 如何在BotBuilder使用entities)將切回到程式的部分,將來看看如何在程式裡面使用這些entities。

comments powered by Disqus