交談語言理解的最佳做法
使用下列指導方針,以交談語言理解建立最佳的可能專案。
選擇一致的結構描述
結構描述是您意圖和實體的定義。 定義您應該建立的內容作為意圖與實體時,您可以採取不同的方法。 您需要問自己一些問題:
- 我嘗試從使用者擷取什麼動作或查詢?
- 每個動作中有哪些相關資訊?
您通常可以將動作和查詢視為意圖,而將滿足這些查詢所需的資訊視為實體。
例如,假設您希望客戶透過聊天機器人,取消訂用帳戶,不再訂閱您提供的各種產品。 您可以使用各種範例來建立 Cancel 意圖,例如「取消 Contoso 服務」或「停止向我收取 Fabrikam 訂用帳戶費用」。這裡的使用者意圖是取消,Contoso 服務或 Fabrikam 訂用帳戶是他們想要取消的訂用帳戶。 因此,您可以建立訂用帳戶的實體。 然後,您可以建立整個專案的模型,以擷取動作作為意圖,並使用實體填入這些動作。 這可讓您取消定義為實體的任何項目,例如其他產品。 然後,您可以擁有註冊、續約、升級等意圖,這些意圖全都使用訂用帳戶和其他實體。
上述結構描述設計可讓您輕鬆地建立新的實體,將現有功能 (取消、升級、註冊) 延伸至新的目標。
另一種方法是將資訊模型化為意圖,並將動作模型化為實體。 讓我們採用相同的範例,讓客戶透過聊天機器人取消訂用帳戶。 您可以為每個可用的訂用帳戶建立意圖,例如 Contoso,其中包含「取消 Contoso」、「停止向我收取 contoso 服務費用」、「取消 Contoso 訂用帳戶」等語句。然後,您會建立實體來擷取動作,取消。您可以為每個動作定義不同的實體,或將動作合併為具有清單元件的一個實體,以區分具有不同索引鍵的動作。
此結構描述設計可讓您藉由新增動作實體或實體元件,輕鬆地將新的動作延伸至現有的目標。
請務必避免嘗試將所有概念歸納為單一意圖,例如不要嘗試建立只有該特定動作用途的取消 Contoso 意圖。 意圖和實體應該搭配運作,以從客戶擷取所有必要的資訊。
建議您避免混合不同的結構描述設計。 請勿以動作為意圖,建置半個應用程式,以資訊為意圖,建置另外半個應用程式。 盡可能確保取得的結果是一致的。
平衡定型數據
在定型數據方面,您應該嘗試保持架構的平衡。 包含大量的一個意圖,而其他意圖很少會導致模型嚴重偏向於特定意圖。
若要解決此問題,您可能需要縮小定型集的取樣,或新增至定型集。 向下取樣可以透過下列其中一項完成:
- 隨機移除定型數據的特定百分比。
- 藉由分析數據集,以及移除過度代表的重複專案,以更系統的方式進行。
您也可以在 Language Studio 中選取 [數據卷標] 索引標籤中的 [建議語句] 來新增至定型集。 交談式 Language Understanding 會將呼叫傳送給 Azure OpenAI 以產生類似的語句。
您也應該在定型集中尋找非預期的「模式」。 例如,如果特定意圖的定型集全部是小寫,或以特定片語開頭。 在這種情況下,您定型的模型可能會在定型集中學習這些非預期的偏差,而不是能夠一般化。
建議您在訓練集中引進大小寫和標點符號多樣性。 如果您的模型預期會處理變化,請務必有一個也會反映該多樣性的定型集。 例如,在適當的大小寫中包含一些語句,以及所有小寫的語句。
清楚標示語句
請確定您實體所參考的概念已妥善定義且可分隔。 檢查您是否能夠可靠地判斷差異。 如果無法,這可能表示學習的元件也會有困難。
如果實體之間有相似之處,請確定您的數據有一些層面可提供它們間差異的訊號。
例如,如果您建置模型來預訂正式發行前小眾測試版,使用者可能會使用類似「我想從波士頓飛往西雅圖的航班」之類的語句。這類語句的 源城市 和 目的地城市 應該類似。 區分“起源城市”的信號可能是,它通常前面加上“來源”一詞。
請確定您在定型和測試數據中標記每個實體的所有實例。 其中一種方法是使用搜尋函式來尋找數據中單字或片語的所有實例,以檢查它們是否已正確加上標籤。
針對沒有 學習元件的 實體加上標籤測試數據,以及針對執行該作業的實體。 這有助於確保您的評估計量正確無誤。
在進階訓練之前使用標準定型
標準定型比進階定 型更快速,因此在建置模型時快速了解變更定型集或架構的效果相當實用。 一旦您滿意架構,請考慮使用進階定型來取得模型的最佳 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 個語句。