系列

2018年4月9日 星期一

Language Understanding (LUIS.AI) 語意分析 教學 快速建立自己的LUIS




動機
為什麼需要語意分析呢?原因當然是作為一個資深阿宅工程師當然就是要玩一些新的服務才夠潮阿~(大誤),為什麼會接觸到Luis呢?原因是我現在有在製作聊天機器人的部分,所以我需要一個簡單的語意分析器,來幫助我達成選用邏輯特定邏輯的意圖,語意分析自己實作的成本實在是很高,所以我就先挑選一個服務來使用,讓我的入門的門檻可以低一些,微軟在服務的包裝上實在是很強大,讓服務可以比較入門,再加上我是使用.net C#,也就想說相容及整合度比較好,不過可能會尋找Luis的替代方案,我最後會簡單的說明一下原因是什麼。


價格

東南亞地區,每個月10000筆交易免費,之後每1000筆NT$45.09 價格偏高


先到https://www.luis.ai/home點選SingIn登入沒有帳號請自行申請。



條款說明
選擇國家 :Taiwan
勾選一:請與我聯繫,了解有關Cognitive Services的促銷優惠和更新。
勾選二: 我同意這項服務受制於 我通過Azure訂閱Cognitive Services的相同條款, 如果我不通過Azure訂閱Cognitive Services,我同意此服務受 Microsoft Online Subscription Agreement約束。 在每種情況下,條款包括 在線服務條款。 我承認 隱私和Cookies聲明。

PS.勾選一可選擇是否要勾選



點擊Create new App新增Luis服務



Name:應用程式名稱
Culture:語意判斷主要語言[並非介面語系而是要使用主要的要用來判斷語意的語言]
Description:應用程式說明
設定完畢後點擊Done




新增完畢後就可以看到這個畫面,先從畫面來簡單說明一下,左上角紅色框框處
Intents:意圖 = 意圖
Entities:實體 = 屬性
我比較喜歡這樣解釋,例如我要買一杯大杯冰奶茶,基本上一句話都一定會有一個意圖,再加上多個屬性組成,
當然一句話是可能有多個意圖,這時候就要依靠Luis去計算出來機率給您,最重要的應該會是在資料校正的這個部分。
Ex.我要買一杯冰奶茶
這時候我知道「我要買一杯冰奶茶」這句話的意圖是要購買,然後用這句話裡面的屬性來預測他要購買什麼,
像我在這裡可能就會分成  一杯 = 「單位」、冰= 「規格」、奶茶 = 「商品」
這時候我就會去建立
意圖:購買
屬性:單位、規格、商品

那接下來就實際進行設定



點擊左方Intents > Create new intent 加入意圖



輸入完畢後點擊Dene完成新增



在紅色框框裡面輸入句子按下Enter後就會加入到這個意圖中



接下來在下方就可以看到剛剛加入的句子代表加入成功了



接下來加入屬性左方的Entities > Create new entity



在這裡加入屬性,我都選Simple說明可以看下方的Entity Type 說明參考。

Entity Type 說明參考
名稱
類型
可以標籤
描述
Prebuilt
定義
表示常用概念(如數字,日期和電子郵件)的內置類型。

預建的實體名稱是保留的。

所有添加到應用程序的預建實體都將在端點查詢中返回。有關更多信息,請參閱預建實體

Regular Expression
定義
忽略大小寫並忽略文化變體的自定義正則表達式。 

拼寫檢查更改後應用正則表達式匹配。

如果正則表達式太複雜,例如使用多個括號,則無法將該表達式添加到模型中。

示例
kb[0-9]{6,}與kb123456匹配。

List
定義
列表實體表示系統中相關單詞的固定封閉集(白名單)。

每個列表實體可以有一個或多個表單。最好用於表示相同概念的一系列已知變體。

LUIS不會為列表實體發現其他值。

如果有多個具有相同值的列表實體,則每個實體都將在端點查詢中返回。

Simple
定義
一個簡單的實體是一個通用的實體,描述一個單一的概念,並從機器學習的上下文中學習。

Hierarchical
定義
分層實體是一種簡單實體的特殊類型; 以親子關係的形式定義一個類別及其成員。

示例
給定一個Location帶有子項的分層實體,ToLocation並且FromLocation可以根據話語中的上下文確定每個子項。在話語中,Book 2 tickets from Seattle to New York中,ToLocation並且FromLocation是基於他們周圍的話語境不同。

不要使用如果
如果您正在尋找一個實體具有與兒童無關的精確文本匹配的實體,則應該使用List實體。如果您正在尋找與其他實體類型的父子關係,則應該使用複合實體。

CompositeSimple
定義
一個複合實體由其他實體組成,例如預建實體,列表實體和簡單實體。單獨的實體形成一個完整的實體。

示例
名為PlaneTicketOrder的組合實體可能具有預構建的子實體numberToLocation





可以看到我這裡加入了單位、規格、商品三個屬性。


然後點擊左方Intents>購買 切換回剛剛建立的購買意圖


在要加上屬性的句子點擊文字,像我這裡要對奶茶加上商品的屬性,我就先點「奶」在點「茶」,他就會把奶茶選取起來,出現我們剛加入的屬性讓你選擇。


然後我就依序把屬性加上去,完成後就會類似上方圖片。


如果要檢視原本的句子就把Entities view關閉即可



接下來按下右上方的訓練,接下來等待他出現綠燈與提示完成的訊息。


接下來就可以點擊Test來測試剛剛建立的資訊看他會回饋什麼資訊給您


接下來切換到PUBLISH


Publish to 這裡很貼心的提供兩個環境給您使用,右方是時區
這裡切割的用意應該是測試環境跟正式環境的切換,當測試環境的Luis測試OK在更換到正式的
Production生產:正式環境
Staging分期:測試環境
這裡我就直接選擇Production



勾選一 [包括所有預測的意圖分數]
    說明:以JSON響應返回所有意圖和他們的分數。
勾選二 [啟用Bing拼寫檢查器]
    說明:允許Bing Spell Check在LUIS處理查詢之前更正拼寫錯誤的單詞。
這裡我都是勾選一,因為我並沒有使用拼寫檢查器。


都設定好就點擊 Publish to production slot
PS.接下來就要發行,外部服務串接使用是以發行的版本為主,所以記得訓練完還要發行喔~


看到綠燈 代表完成囉


接下來使用下方提供的Url來測試一下,把Url複製下來然後再最後面加上要測試的文字

使用Url測試的結果


API
Luis 的API文件底下都有Sample Code可以參考


結論
Luis的入門的門檻對於寫.net C#的各位大大們應該是相對很低的,加上有提供API讓你去管理Luis上的資訊,所以如果需要在自己的後台實作在Luis平台上的操作,應該不太會有問題,可是我之前在使用上有一個很大的問題是,Luis現在並不提供使用API或是其他方式去新增新的Luis應用程式,這對我來說太傷了,我沒有辦法每次都要為了一個新客戶去手動新增Luis應用程式,可能就在等待看看未來是否會支援,或是在尋找替代方案。

優點
  • 介面友善
  • 簡單好上手
  • C#整合度高
  • 提供完整的SDK
  • 資訊多
  • 有提供完整的API資訊串接(管理Luis資訊及訓練發佈)
缺點
  • 無法自動化新增應用程式
  • 價格偏高

無法自動化新增應用程式(有連結有真相):https://docs.microsoft.com/en-us/azure/cognitive-services/luis/

參考資訊:


沒有留言:

張貼留言