規劃 LUIS 應用程式
重要
LUIS 將於 2025 年 10 月 1 日淘汰,而自 2023 年 4 月 1 日開始,您將無法建立新的 LUIS 資源。 建議移轉 LUIS 應用程式至交談語言理解,以享有產品持續支援和多語言功能的優點。
Language Understanding (LUIS) 應用程式結構描述包含與您主體網域相關的意圖和實體。 這些意圖會分類使用者語句,而實體則會從使用者語句中擷取資料。 與您主體網域相關的意圖和實體。 意圖會針對使用者表達進行分類。
當您反覆開發 LUIS 應用程式時,LUIS 應用程式會以最有效率的方式學習和執行。 以下是一個典型的反覆循環:
- 建立新版本
- 編輯 LUIS 應用程式結構描述。 這包括:
- 具有範例表達的意圖
- 實體
- 功能
- 訓練、測試和發佈
- 檢閱傳送至預測端點的表達,以測試主動式學習
- 從端點查詢收集資料
識別您的領域
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 會將內容一般化並納入考量。