Share via


交談語言理解的最佳做法

使用下列指導方針,以交談語言理解建立最佳的可能專案。

選擇一致的結構描述

結構描述是您意圖和實體的定義。 定義您應該建立的內容作為意圖與實體時,您可以採取不同的方法。 您需要問自己一些問題:

  • 我嘗試從使用者擷取什麼動作或查詢?
  • 每個動作中有哪些相關資訊?

您通常可以將動作和查詢視為意圖,而將滿足這些查詢所需的資訊視為實體

例如,假設您希望客戶透過聊天機器人,取消訂用帳戶,不再訂閱您提供的各種產品。 您可以使用各種範例來建立 Cancel 意圖,例如「取消 Contoso 服務」「停止向我收取 Fabrikam 訂用帳戶費用」。這裡的使用者意圖是取消,Contoso 服務Fabrikam 訂用帳戶是他們想要取消的訂用帳戶。 因此,您可以建立訂用帳戶的實體。 然後,您可以建立整個專案的模型,以擷取動作作為意圖,並使用實體填入這些動作。 這可讓您取消定義為實體的任何項目,例如其他產品。 然後,您可以擁有註冊、續約、升級等意圖,這些意圖全都使用訂用帳戶和其他實體。

上述結構描述設計可讓您輕鬆地建立新的實體,將現有功能 (取消、升級、註冊) 延伸至新的目標。

另一種方法是將資訊模型化為意圖,並將動作模型化為實體。 讓我們採用相同的範例,讓客戶透過聊天機器人取消訂用帳戶。 您可以為每個可用的訂用帳戶建立意圖,例如 Contoso,其中包含「取消 Contoso」、「停止向我收取 contoso 服務費用」、「取消 Contoso 訂用帳戶」語句。然後,您會建立實體來擷取動作,取消。您可以為每個動作定義不同的實體,或將動作合併為具有清單元件的一個實體,以區分具有不同索引鍵的動作。

此結構描述設計可讓您藉由新增動作實體或實體元件,輕鬆地將新的動作延伸至現有的目標。

請務必避免嘗試將所有概念歸納為單一意圖,例如不要嘗試建立只有該特定動作用途的取消 Contoso 意圖。 意圖和實體應該搭配運作,以從客戶擷取所有必要的資訊。

建議您避免混合不同的結構描述設計。 請勿以動作為意圖,建置半個應用程式,以資訊為意圖,建置另外半個應用程式。 盡可能確保取得的結果是一致的。

平衡定型數據

在定型數據方面,您應該嘗試保持架構的平衡。 包含大量的一個意圖,而其他意圖很少會導致模型嚴重偏向於特定意圖。

若要解決此問題,您可能需要縮小定型集的取樣,或新增至定型集。 向下取樣可以透過下列其中一項完成:

  • 隨機移除定型數據的特定百分比。
  • 藉由分析數據集,以及移除過度代表的重複專案,以更系統的方式進行。

您也可以在 Language Studio 中選取 [數據卷標] 索引標籤中的 [建議語句] 來新增至定型集。 交談式 Language Understanding 會將呼叫傳送給 Azure OpenAI 以產生類似的語句。

顯示 Language Studio 中語句建議的螢幕快照。

您也應該在定型集中尋找非預期的「模式」。 例如,如果特定意圖的定型集全部是小寫,或以特定片語開頭。 在這種情況下,您定型的模型可能會在定型集中學習這些非預期的偏差,而不是能夠一般化。

建議您在訓練集中引進大小寫和標點符號多樣性。 如果您的模型預期會處理變化,請務必有一個也會反映該多樣性的定型集。 例如,在適當的大小寫中包含一些語句,以及所有小寫的語句。

清楚標示語句

  • 請確定您實體所參考的概念已妥善定義且可分隔。 檢查您是否能夠可靠地判斷差異。 如果無法,這可能表示學習的元件也會有困難。

  • 如果實體之間有相似之處,請確定您的數據有一些層面可提供它們間差異的訊號。

    例如,如果您建置模型來預訂正式發行前小眾測試版,使用者可能會使用類似「我想從波士頓飛往西雅圖的航班」之類的語句。這類語句的 源城市目的地城市 應該類似。 區分“起源城市”的信號可能是,它通常前面加上“來源”一詞。

  • 請確定您在定型和測試數據中標記每個實體的所有實例。 其中一種方法是使用搜尋函式來尋找數據中單字或片語的所有實例,以檢查它們是否已正確加上標籤。

  • 針對沒有 學習元件的 實體加上標籤測試數據,以及針對執行該作業的實體。 這有助於確保您的評估計量正確無誤。

在進階訓練之前使用標準定型

標準定型比進階定 型更快速,因此在建置模型時快速了解變更定型集或架構的效果相當實用。 一旦您滿意架構,請考慮使用進階定型來取得模型的最佳 AIQ。

使用評估功能

當您建置應用程式時,通常有助於提早攔截錯誤。 在建置應用程式時新增測試集通常是很好的作法,因為定型和評估結果在識別架構中的錯誤或問題非常有用。

機器學習元件和組合

請參閱 元件類型

使用「無」分數閾值

如果您看到太多誤判,例如內容外語句標示為有效意圖,請參閱 信賴閾值 ,以取得影響推斷方式的資訊。

  • 清單和 regex 這類非機器學習實體元件的定義並非內容相關。 如果您在非預期的地方看到清單或 regex 實體,請嘗試將清單同義字標示為機器學習元件。

  • 針對實體,您可以使用學習的元件作為「必要」元件,以限制何時應該引發撰寫的實體。

例如,假設您有一個稱為「票證數量」的實體,其會嘗試擷取您想要預訂航班的機票數目,例如「明天預訂兩張票到開羅」等語句。

一般而言,您會為 Quantity.Number 新增預先建置的元件,以擷取語句中的所有數位。 不過,如果您的實體只使用預先建置的元件定義,它也會擷取其他數位作為票證數量實體的一部分,例如「明天下午 3 點預訂開羅的兩張票證」。

若要解決此問題,您會在定型數據中為要作為 票證數量的所有數位加上標籤學習的元件。 實體現在有兩個元件:

  • 可解譯所有數位的預先建置元件,以及
  • 可預測 票證數量 在句子中的學習元件。

如果您需要學習的元件,請確定 只有在學習的元件在正確的內容中預測票證數量 時才會傳回。 如果您也需要預先建置的元件,則可以保證傳 回的票證數量 實體既是數位,又位於正確的位置。

解決大小寫不一致的問題

如果您的 AI 品質不佳,並判斷定型數據中使用的大小寫與測試數據不同,您可以使用 normalizeCasing 項目設定。 這會將定型和測試模型時的語句大小寫正規化。 如果您已從 LUIS 移轉,則根據預設,您可能會辨識 LUIS 執行這項作業。

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      "confidenceThreshold": 0.5,
      "normalizeCasing": true
    }
...

尋址模型過度確認

如果模型不正確,客戶可以使用LoraNorm配方版本。 其中一個范例如下所示(請注意,模型會預測不正確的意圖,且信賴度為 100%。 這可讓信賴閾值項目設定無法使用。

Text 預測意圖 信賴分數
神秘 建造了埃菲爾鐵塔? Sports 1.00
我今天看起來很好嗎? QueryWeather 1.00
我希望你有一個美好的夜晚。 Alarm 1.00

若要解決此問題,請使用 2023-04-15 將信賴分數正規化的組態版本。 然後可以調整信賴閾值項目設定,以達到所需的結果。

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2023-04-15",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

傳送要求之後,您可以如往常一樣追蹤 Language Studio 中的訓練作業進度。

注意

更新項目設定之後 confidenceThreshold ,您必須重新定型模型。 之後,您必須重新發佈應用程式,讓新的閾值生效。

模型版本 2023-04-15 中的正規化

模型版本 2023-04-15,對話式語言理解會在不會影響定型的推斷層中提供正規化。

正規化層會將分類信賴分數正規化為限制範圍。 目前選取的範圍是 「 [-a,a] a」 是意圖數目的平方根目錄。 因此,正規化取決於應用程式中的意圖數目。 如果意圖數目非常低,正規化層的範圍非常小。 使用相當大量的意圖,正規化會更有效率。

如果這種正規化似乎沒有説明超出範圍的意圖,信賴閾值可用來篩選超出範圍語句的範圍,則可能與應用程式中的意圖數目有關。 請考慮將更多意圖新增至應用程式,或者如果您使用協調的架構,請考慮將屬於相同網域的應用程式合併在一起。

偵錯組成實體

實體是函式,會發出具有相關聯型別之輸入中的範圍。 函式是由一或多個元件所定義。 您可以視需要標記元件,並決定是否要啟用 合併元件 設定。 當您合併元件時,重疊的所有範圍都會合併成單一範圍。 如果未使用設定,則會發出每個個別元件範圍。

若要進一步瞭解個別元件的執行方式,您可以停用設定,並將每個元件設定為「不需要」。 這可讓您檢查發出的個別範圍,並實驗移除元件,以便只產生有問題的元件。

使用多個測試集評估模型

交談語言理解項目中的數據可以有兩個數據集。 「測試」集和「訓練」集。 如果您想要使用多個測試集來評估模型,您可以:

  • 提供測試集不同的名稱(例如“test1” 和 “test2”。
  • 匯出您的專案以取得 JSON 檔案及其參數和組態。
  • 使用 JSON 匯入新專案,並將第二個所需的測試集重新命名為 「test」。。
  • 使用您的第二個測試集將模型定型以執行評估。

目標應用程式和子應用程式的自定義參數

如果您使用 協調的應用程式,您可能會想要傳送各種子應用程式的自定義參數覆寫。 欄位 targetProjectParameters 可讓使用者傳送代表每個目標項目參數的字典。 例如,請考慮名為 Orchestrator 協調對話式語言理解應用程式與名為CQA1的自定義問題解答應用程式CLU1之間的協調器應用程式。 如果您想要將名為 「top」 的參數傳送至問題解答應用程式,您可以使用上述參數。

curl --request POST \
   --url 'https://<your-language-resource>.cognitiveservices.azure.com/language/:analyze-conversations?api-version=2022-10-01-preview' \
   --header 'ocp-apim-subscription-key: <your subscription key>' \
   --data '{
     "kind": "Conversation",
     "analysisInput": {
         "conversationItem": {
             "id": "1",
             "text": "Turn down the volume",
             "modality": "text",
             "language": "en-us",
             "participantId": "1"
         }
     },
     "parameters": {
         "projectName": "Orchestrator",
         "verbose": true,
         "deploymentName": "std",
         "stringIndexType": "TextElement_V8",
"targetProjectParameters": {
            "CQA1": {
                "targetProjectKind": "QuestionAnswering",
                "callingOptions": {
                    "top": 1
                }
             }
         }
     }
 }'

跨語言資源複製專案

通常您可以使用 Azure Language Studio 中的 [複製] 按鈕,將交談式語言理解專案從一個資源複製到另一個資源。 不過在某些情況下,使用 API 複製專案可能比較容易。

首先,識別:

  • 來源項目名稱
  • 目標項目名稱
  • 來源語言資源
  • 目標語言資源,這是您想要複製的目標語言資源。

呼叫 API 以授權複製動作,並在稍後取得 accessTokens 實際複製作業的 。

curl --request POST \ 
  --url 'https://<target-language-resource>.cognitiveservices.azure.com//language/authoring/analyze-conversations/projects/<source-project-name>/:authorize-copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>' \ 
  --data '{"projectKind":"Conversation","allowOverwrite":false}' 

呼叫 API 以完成複製作業。 使用您稍早取得的回應作為承載。

curl --request POST \ 
  --url 'https://<source-language-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<source-project-name>/:copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>\ 
  --data '{ 
"projectKind": "Conversation", 
"targetProjectName": "<target-project-name>", 
"accessToken": "<access-token>", 
"expiresAt": "<expiry-date>", 
"targetResourceId": "<target-resource-id>", 
"targetResourceRegion": "<target-region>" 
}'

解決網域語句外的問題

如果模型在網域語句不足的情況下,客戶可以使用新的配方版本 『2024-06-01-preview』。 使用預設配方的範例,如下所示,模型具有 3 個意圖的 Sports、QueryWeather 和 Alarm。 測試語句來自領域語句,模型會將語句分類為 InDomain,信賴分數相對較高。

Text 預測意圖 信賴分數
神秘 建造了埃菲爾鐵塔? Sports 0.90
我今天看起來很好嗎? QueryWeather 1.00
我希望你有一個美好的夜晚。 Alarm 0.80

若要解決此問題,請使用 2024-06-01-preview 專為解決此問題而建置的組態版本,同時在網域語句上維持相當良好的品質。

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2024-06-01-preview",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

傳送要求之後,您可以如往常一樣追蹤 Language Studio 中的訓練作業進度。

警告:

  • 使用此配方時,應用程式 [無分數] 臨界值 (信賴閾值低於 topIntent 標示為 None)應設定為 0。 這是因為這個新配方會將領域內特定部分屬性設為網域外,讓模型在定義域語句中不正確地過度信服。 因此,相較於生產配方,使用者可能會看到網域語句中信賴分數略有降低。
  • 對於只有兩個 (2) 意圖的應用程式,例如 IntentA 和 None,不建議使用此配方。
  • 對於每個意圖語句數目低的應用程式,不建議使用此配方。 強烈建議每個意圖至少 25 個語句。