Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

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

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

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

接下來在更深入的看看如何把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深入使用 - 如何在Bot Builder SDK使用entities)將切回到程式的部分,將來看看如何在程式裡面使用這些entities。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus