意圖
重要
LUIS 將於 2025 年 10 月 1 日淘汰,而自 2023 年 4 月 1 日開始,您將無法建立新的 LUIS 資源。 建議移轉 LUIS 應用程式至交談語言理解,以享有產品持續支援和多語言功能的優點。
意圖代表使用者想要執行的工作或動作。 它是使用者語句中表達的目的或目標。
請定義一組與使用者想要在您應用程式中執行之動作對應的意圖。 例如,旅遊應用程式會有數個意圖:
旅遊應用程式意圖 | 表達範例 |
---|---|
BookFlight | 「幫我預訂下週到里約的班機」 「24 日讓我飛到里約」 「我需要一張下週日到里約熱內盧的機票」 |
問候 | 「嗨」 「您好」 「早安」 |
CheckWeather | 「波士頓的天氣如何?」 「顯示本週的預測」 |
無 | 「給我餅乾食譜」 「湖人隊贏了嗎?」 |
所有應用程式都隨附預先定義的意圖 "None",這是後援意圖。
預先建置的意圖
LUIS 為其每個預先建置的領域提供預先建置的意圖及其語句。 您可以新增意圖而不新增整個定義域。 新增意圖是將某個意圖及其語句新增至應用程式的程序。 意圖名稱和語句清單都可供修改。
傳回所有意圖的分數
您會指派語句給單一意圖。 當 LUIS 收到語句時,會依預設傳回該語句的最高意圖。
如果您想要語句的所有意圖分數,可以在預測 API 的查詢字串中提供旗標。
預測 API 版本 | 旗標 |
---|---|
V2 | verbose=true |
V3 | show-all-intents=true |
意圖與實體的比較
意圖表示應用程式應該針對使用者採取的動作,是以整個語句為基礎。 一個語句只能有一個最高分的意圖,但可以有許多個實體。
當使用者的意圖會觸發用戶端應用程式中的動作 (例如對上方資料表中的 checkweather() 函式進行呼叫) 時,請建立意圖。 然後建立實體以代表執行此動作所需的參數。
Intent | 實體 | 表達範例 |
---|---|---|
CheckWeather | { "type": "location", "entity": "Seattle" } { "type": "builtin.datetimeV2.date","entity": "tomorrow","resolution":"2018-05-23" } |
Seattle tomorrow 的天氣如何? |
CheckWeather | { "type": "date_range", "entity": "this weekend" } | Show me the forecast for this weekend |
None 意圖
系統會建立 None 但刻意保留空白。 None 意圖是必要的意圖,無法刪除或重新命名。 填入網域外的表達。
None 意圖是後援意圖,而且應該佔總語句的 10%。 其在每個應用程式中都十分重要,因為可用來教導 LUIS 在應用程式網域 (主題領域) 中不重要的語句。 如果您沒有為 None 意圖新增任何語句,LUIS 就會強制讓定義域外的某個語句變成其中一個定義域意圖。 這會教導 LUIS 錯誤的語句意圖而扭曲預測分數。
將語句預測為 None 意圖時,用戶端應用程式可以詢問更多問題,或提供功能表將使用者導向至有效選項。
負面意圖
如果您想要判斷負面或正面意圖,例如「我想要一輛車」和「我不想要一輛車」,您可以建立兩個意圖 (一個正面,一個負面),然後為每個意圖新增適當的語句。 或者,您也可以建立單一意圖,並標示兩個不同的正面和負面字詞作為實體。
意圖和模式
如果您有可在部分或全部中定義為規則運算式的範例語句,請考慮使用與模式配對的規則運算式實體。
使用規則運算式實體可保證資料擷取,使模式相符。 模式比對保證會傳回確切的意圖。
意圖平衡
應用程式定義域應該讓各個意圖之間的語句平衡。 例如,不要讓大部分的意圖具有 10 個語句,而另一個意圖具有 500 個語句。 這樣會造成不平衡。 在這種情況下,您會想要檢閱有 500 個語句的意圖,看看是否可以將許多意圖都重新組織成模式。
此平衡並不包括 None 意圖。 該意圖所包含的語句應該佔應用程式中總語句的 10%。
意圖限制
請檢閱限制,以了解您可以將多少個意圖新增到模型中。
提示
如果您需要的意圖數目超過上限,請考慮您的系統是否使用太多意圖,並判斷多個意圖是否與實體合併成單一意圖。 太相似的意圖會讓 LUIS 更難以區分它們。 意圖應該要有足夠的差異,才能擷取使用者所要求的主要工作,但它們並不需要擷取您程式碼所採取的每個路徑。 例如兩個意圖:BookFlight() 和 FlightCustomerService() 可能是旅遊應用程式中的個別意圖,但 BookInternationalFlight() 和 BookDomesticFlight() 則太相似。 如果您的系統需要區分它們,請使用實體或其他邏輯,而不要使用意圖。
針對含有大量意圖的應用程式要求協助
如果減少意圖數目或將意圖分割成多個應用程式對您並不適用,請與支援人員連絡。 如果您的 Azure 訂用帳戶包含支援服務,請與 Azure 技術支援人員連絡。
意圖的最佳做法:
定義不同的意圖
請確定每個意圖的詞彙都僅適用於該意圖,而未與不同的意圖重疊。 例如,如果您想要有一個處理旅遊安排 (例如航班和飯店) 的應用程式,則可以選擇讓這些主體區域成為語句內具有特定資料實體的個別意圖或相同意圖。
如果兩個意圖之間的詞彙相同,請將意圖結合,然後使用實體。
請思考一下以下的範例語句:
- 預訂班機
- 預訂飯店
"Book a flight" 和 "Book a hotel" 使用相同的 "book a <名詞>" 詞彙。 此格式相同,因此它應該是相同意圖,但是以班機和飯店這兩個不同的字組作為擷取的實體。
務必將特徵新增至意圖
特徵描述意圖的概念。 特徵可以是對該意圖很重要的單字詞語清單,或對該意圖很重要的實體。
請務必找出意圖的最佳點
請使用來自 LUIS 的預測資料來判斷您的意圖是否重疊。 重疊的意圖會混淆 LUIS。 結果會造成最高分的意圖太接近另一個意圖。 由於 LUIS 不會每次都使用完全相同的資料路徑來進行定型,因此重疊的意圖有可能在定型中成為第一或第二。 您會希望每個意圖的語句分數都儘量拉開,以便避免發生此變異數。 良好的意圖區別應該每次都產生預期的最高分意圖。
跨意圖平衡語句
為了讓 LUIS 預測能正確,每個意圖的範例語句數量必須相對相等 (None 意圖除外)。
如果您有一個包含 500 個範例語句的意圖和包含 10 個範例語句的其他所有意圖,500 個語句的意圖會有較高的預測評等。
將範例語句新增至 None 意圖
此意圖是後援意圖,表示應用程式外的所有項目。 請在您 LUIS 應用程式的其餘部分,每 10 個範例語句中,便將一個範例語句新增至 None 意圖。
請勿將許多範例語句新增至意圖
發佈應用程式之後,請只從開發生命週期程序中的主動式學習新增語句。 如果語句太類似,則請新增模式。
請勿混合意圖和實體的定義
請針對您 Bot 將執行的任何動作建立意圖。 使用實體作為促成該動作的參數。
例如,針對將預訂航班的 Bot,建立 BookFlight 意圖。 請勿為每個航空公司或每個目的地都建立意圖。 請使用這些資料片段作為實體,然後在範例語句中標示它們。