【Azure 機械人】微軟Azure Bot 編輯器系列(6) : 添加LUIS,理解自然語言 (The Bot Framework Composer tutorials)

歡迎來到微軟機械人編輯器使用教程,從這裡開始,創建一個簡單的機械人。

在該系列文章中,每一篇都將通過添加更多的功能來構建機械人。當完成教程中的全部內容後,你將成功的創建一個天氣機械人(Weather Bot)。在本系列中將學會以下內容:

 

1)創建一個簡單的對話天氣機械人

2)在機械人中提出問題,並獲取從HTTP API獲取響應

3)在機械人中增加幫助提示和取消功能

4)使用語言生成功能(LG: Language Generation)

5)把機械人的回復轉換為卡片

6)添加LUIS功能,理解自然語言

 

準備條件

 

Bot Composer使用的默認識別器就是LUIS。它使用語言理解 (LUIS) 服務,該服務允許機械人理解用戶的響應並確定在對話流中下一步要做什麼。語言理解 (LUIS) 是 Azure 認知服務中的一項服務,可將自然語言處理應用於對話文本以預測含義並提取相關信息。

本文將展示如何訓練LUIS識別器來捕獲消息中所包含的用戶意圖。然後將消息傳遞給觸發器,觸發器定義機械人將如何響應。主要包含的內容有:

  • 將LUIS識別器添加到機械人
  • 確定用戶意圖和實體以生成正確的響應

 

修改識別器的類型(Update the recognizer type)

第一步:啟動編輯器並打開weather_bot項目

第二步:在左側導航欄中選中weather_bot對話組件

第三步:在右側的屬性欄中,從「 識別器類型 」中選擇「 默認識別器 」。默認識別器即使用LUIS

 

 

添加LUIS的數據和條件(Add language understanding data and conditions)

本節中,將創建三個語意(cancel, help, weather),用於替換在系列3[//www.cnblogs.com/lulight/p/14902267.html]中使用正則表達式來檢測用戶所輸入的指令。

第一步:選中「Cancel」觸發器,在屬性的觸發語句表達式中填入以下語句:

- cancel
- please cancel
- stop that
- 取消對話
- 退出吧

第二步:在「Condition」部分,設置表達式條件為#Cancel.Score >= 0.8 

設置LUIS的判斷結果分數要大於等於80%(0.8)的目的是避免不必要的觸發。因為LUIS是基於機器學習的意圖分類器,它會返回各種可能的匹配項,每一個匹配項都有一個評分。通過評分可以避免低可信度的結果。

第三步:同樣的操作為「help」觸發器。選中「help」觸發器,在屬性的觸發語句表達式中填入以下語句:

- help
- I need help
- please help me
- can you help

第四步:在「Condition」部分,設置表達式條件為 #Help.Score >= 0.5 

第五步:最後在「weather「觸發器中。同樣用以下的語意替換舊的正則表達式關鍵字。

- get weather
- weather
- how is the weather

 

請查看添加LUIS語意的演示動畫: 

 

 

配置LUIS資源(Configure a Language Understanding resource)

正如上一節中配置了LUIS語意和條件後,Bot Composer會提示有兩個錯誤(在右上角)。這正是由於當前還沒有配置LUIS資源。需要在appsettings.json文件中設置LUIS key和region信息。

第一步:當在Azure門戶上已經創建好LUIS(Language Understanding)服務後,登錄Azure LUIS資源的界面,查看」Keys and Endpoint「。注意:LUIS資源創建好後,會有兩個類型,一個是Language Understanding Authoring (LUIS)創作資源,一個是Language Understanding (LUIS)資源,提供服務接口。這兩個資源的Keys和Endpoint都需要在Bot Composer中配置。 

第二步:回到Bot Composer界面,可以直接點擊錯誤提示中的」appsettings.json「進入文件中為luis節點設置值:(最左側導航中選擇」Configure「,”Development resources”,點擊右上角的JOSN視圖查看,填充第一步中的值)。

  "luis": {
    "authoringEndpoint": "",
    "authoringRegion": "",
    "defaultLanguage": "en-us",
    "endpoint": "",
    "environment": "composer",
    "name": "weather_bot",
    "authoringKey": "",
    "endpointKey": ""
  },

注意:也可以在UI上通過按鈕」Set up Language Understanding「根據UI提示一步一步的登錄到Global版Azure,選擇已有的LUIS或新建。但當前還不支持中國區的Azure。

第三步:填充完luis節點中的信息後,回到」創建「目錄。此時,Bot Composer的錯誤提示消息。表示已經可以測試Bot是否可以成功調用LUIS資源。

第四步(非常重要的驗證步驟):登錄LUIS門戶(//luis.azure.cn/applications), 驗證並測試weather_bot的LUIS App是否創建成功?語意和實體等是否同步過來?項目是否發佈?驗證調用結果(LUIS門戶 –> LUIS APP –>MANAGE –> Azure Resources ->  )。如果在測試遇見 403 Forbidden —  “This application cannot be accessed with the current subscription.” 最大的原因是在LUIS門戶中新建的weather_bot 沒有Publish。

 

 

 

LUIS偵測並提取文字中的實體(Using LUIS for entity extraction)

使用LUIS還可以在用戶的話語中來識別實體,如本文的郵政編碼。這樣就能更明確的知道用戶意圖,簡化詢問輸入郵政編碼的步驟。

例如:用戶輸入「How is the weather in 98052?」,機械人就不需要再次提醒用戶輸入郵政編碼,而是可以直接回復天氣信息。雖然這是一個簡單的例子,但對於機械人來說這個功能是一個機器模式與人自然對話的一個巨大改進。

第一步:在Bot Composer的左側目錄中選擇「用戶輸入」,然後選中「weather_bot」對話組件(非根目錄),點擊「顯示代碼」,在最後部分加上以下內容:

> Define a postal code entity. Any time LUIS sees a five digit number, it will flag it as 'postal code' entity.
$ postalcode:/[0-9]{5}/

第二步:設置完成後,回到機械人設計頁面,選中」getWeather「的BeginDialog組件。在這裡添加一個任務用來為屬性user.postalcode設置postalcode實體的值(由第一步中所設置的匹配規則從LUIS中獲取)

第三步:在詢問郵政編碼的任務模塊之前,點擊」+「號按鈕,添加一個設置屬性的任務(」管理屬性「 –> 「設置屬性」)。

第四步:在「Set a property」組件的右側的屬性中,為Property設置為「 user.postalcode 」,為Value設置為 ” =@postalcode

當操作到這裡後,天氣機械人已經創建完成,就可以開啟測試的旅程了。

請查看使用LUIS後,天氣機械人的完整版演示動畫: 

 

 

感謝您看到了這裡。開啟實驗機械人的旅程。謝謝。  

(微軟Azure Bot 編輯器系列的六個內容均是參考微軟官方的機械人文檔進行的中文操作步驟,原文連接見參考資料)

 

參考資料

Tutorial: Add LUIS for language understanding//docs.microsoft.com/en-us/composer/tutorial/tutorial-luis?tabs=v2x

 

[微軟Azure Bot 編輯器系列 1~6完]