規劃 LUIS 應用程式

Language Understanding (LUIS) 應用程式架構包含與您的主體網域相關的意圖實體。 這些意圖會分類使用者語句,而實體則會從使用者語句中擷取資料。 與您的主體網域相關的意圖和實體。 意圖會將使用者語句分類。

LUIS 應用程式會在您反復開發 LUIS 應用程式時,學習並執行最有效率地執行。 以下是一個典型的反覆循環:

  1. 建立新版本
  2. 編輯 LUIS 應用程式結構描述。 這包括:
    • 具有範例表達的意圖
    • 實體
    • 功能
  3. 訓練、測試和發佈
  4. 檢閱傳送至預測端點的語句,以測試主動式學習
  5. 從端點查詢收集資料

A screenshot showing the authoring cycle

識別您的領域

LUIS 應用程式是以主體網域為中心。 例如,您可能準備建立一個旅遊應用程式,能夠處理預訂票證、航班、旅館及汽車租借。 另一個應用程式則可以提供與運動、追蹤健身進度及設定目標相關的內容。 識別網域有助於您尋找與您網域相關的單字或片語。

提示

LUIS 有針對許多常見案例提供預先建置的領域。 請確認您是否能使用預先建置的領域作為應用程式的起點。

識別您的意圖

想想各種對您應用程式的工作較為重要的意圖

讓我們以一個旅遊應用程式作為例子。這個應用程式能夠預訂航班,並可查看使用者目的地的天氣。 您可以針對這些動作定義兩個意圖 BookFlight 和 GetWeather。

在具有更多函式的較複雜應用程式中,您可能會有更多意圖,而且您應該仔細定義它們,使其不具特定性。 例如,BookFlight 和 BookHotel 可能需要個別的意圖,但 BookInternationalFlight 和 BookDomesticFlight 可能太類似。

注意

最佳做法是僅使用必要的意圖數目來執行應用程式的功能。 若您定義過多的意圖,LUIS 可能會無法正確地分類語句。 若您定義的意圖太少,意圖可能會因為過於籠統而互相重疊。

若您不需要識別整體使用者意圖,請將所有範例使用者語句新增至 None 意圖。 若您的應用程式擴大到需要更多意圖,您可以稍後再建立意圖。

建立每個意圖的範例語句

若要開始,請避免為每個意圖建立太多語句。 一旦您判斷應用程式所需的意圖之後,請為每個意圖建立 15 到 30 個範例語句。 每個語句都應該與先前提供的語句不同。 包含各種字數、字組選擇、動詞時態和 標點符號

如需詳細資訊,請參閱了解 LUIS 應用程式的良好語句

識別您的實體

在範例語句中,識別您要擷取的實體。 若要預訂航班,您需要如目的地、日期、航空公司、票證類別及艙等之類的資訊。 為這些資料類型建立實體,然後在範例語句中標示這些實體。 實體對於完成意圖而言很重要。

判斷要在您的應用程式中使用的實體時,請記住,有不同類型的實體可用來擷取物件類型之間的關聯性。 如需不同類型的詳細資訊,請參閱 LUIS 中的實體

提示

LUIS 為常見的對話式使用者案例提供預先建立的實體。 考慮使用預先建立的實體做為應用程式開發的起點。

意圖與實體

意圖是整個表達所期望的結果,而實體則是從表達中擷取的部分資料。 意圖通常會與動作有關連,也就是用戶端應用程式該採取的動作。 實體是執行此動作所需的資訊。 從程式設計的觀點來看,意圖會觸發方法呼叫,而實體則用來作為該方法呼叫的參數。

此表達必須有意圖且可能具有實體:

從西雅圖購買航班票證到華盛頓」

這項表達有個單一意圖:

  • 購買機票

這項表達可能有數個實體:

  • 西雅圖 (出發地) 與開羅 (目的地) 的位置
  • 數量為一張票

具有多個函式或意圖的語句解析

在許多情況下,尤其是在使用自然對話時,使用者會提供一個可包含多個函式或意圖的語句。 若要解決此問題,一般策略是瞭解輸出可由意圖和實體表示。 此標記法應該可對應至用戶端應用程式的動作,而且不需要僅限於意圖。

Int-ent-ties 是動作 (通常被視為意圖的概念,) 也可能擷取為應用程式輸出中的實體,並對應至特定動作。 例如,否定通常依賴意圖和實體進行完整擷取。 請考慮下列兩個語句,這兩個語句在字組選擇中類似,但結果不同:

  • 請排程從西雅圖到西雅圖的航班
  • 取消我從西雅圖到西雅圖的正式發行前小眾測試版」

您應該使用 FlightAction 機器學習實體來建立單一意圖,而不是有兩個不同的意圖。 此機器學習實體應該擷取排程和取消要求的動作詳細資料,以及來源或目的地位置。

此 FlightAction 實體會以下列最上層機器學習實體和子實體進行結構化:

  • FlightAction
    • 動作
    • 來源
    • Destination

為了協助擷取,您會將特徵新增至子實體。 您會根據預期會在使用者語句中看到的詞彙,以及您想要在預測回應中傳回的值來選擇特徵。

最佳作法

規劃您的架構

開始建置應用程式的架構之前,您應該先識別您打算使用此應用程式的方式和位置。 您的規劃越徹底且越明確,您的應用程式就會變得越好。

  • 研究目標使用者
  • 定義端對端角色來代表您的應用程式 - 語音、虛擬人偶、問題處理 (主動式、反應式)
  • 識別使用者互動的通道 (,例如文字或語音) 、交接至現有的解決方案,或為此應用程式建立新的解決方案
  • 端對端使用者旅程圖
    • 您預期此應用程式會執行哪些動作,而且不會這麼做? 其應執行的優先順序為何?
    • 主要使用案例有哪些?
  • 收集資料 - 瞭解如何收集和準備資料

請勿對每一個範例語句都進行定型和發佈

請新增 10 或 15 個語句之後,再進行定型和發佈。 這將可讓您了解對預測準確性的影響。 新增單一語句對分數可能不會有明顯的影響。

請勿使用 LUIS 作為定型平台

LUIS 是語言模型定義域特定的。 不是用來作為一般的自然語言訓練平台使用。

使用版本反覆建置您的應用程式

每個撰寫週期都應該包含在從現有 版本複製的新版本內。

不要太快發佈

發佈您的應用程式的速度太快,而且沒有適當的規劃可能會導致數個問題,例如:

  • 在實際案例中,您的應用程式不會以可接受的效能層級運作。
  • 架構 (意圖和實體) 可能不適合,而且如果您已根據架構開發用戶端應用程式邏輯,您可能需要重做。 這可能會造成您正在處理之專案的非預期延遲和額外成本。
  • 您新增至模型的語句可能會對難以偵錯和識別的範例語句造成偏差。 在您認可至特定的結構描述之後,也會變得難以消除語意模糊。

請務必監視您應用程式的效能

請使用批次測試集合來監視預測準確性。

保留一組未用來作為範例語句或端點語句的個別語句。 持續針對測試集改善應用程式。 調適測試集以反映真實的使用者語句。 使用此測試集來評估應用程式的每個反覆項目或版本。

請勿建立具有所有可能值的片語清單

請在詞語清單中提供一些範例,但不要提供每個單字或詞語。 LUIS 會將內容一般化並納入考量。

後續步驟

意圖