训练对话语言理解模型
完成标记语句后,可以开始训练模型。 训练是模型从标记的语句进行学习的过程。
若要训练模型,请启动训练作业。 只有已成功完成的作业才能创建模型。 训练作业将在七天后过期,此时间后将无法再检索作业详细信息。 如果成功完成训练作业并创建了模型,则作业过期不会影响该模型。 一次只能运行一个训练作业,并且无法在同一项目中启动其他作业。
处理简单项目时训练时间可能是几秒钟,达到语句最大限制时训练时间可能是几小时。
成功完成训练后,将自动触发模型评估。 评估过程首先使用经过训练的模型对测试集中的语句运行预测,并将预测结果与提供的标签进行比较(这确立了真实性的基线)。
先决条件
平衡训练数据
在训练数据方面,应尽量保持架构均衡。 如果具有大量某一个意向,而只有极少数另一个意向,则会导致模型严重偏向于特定意向。
若要解决此问题,可能需要缩减训练集样本。 或者可能需要补充训练集样本。 若要缩减采样,可以:
- 随机删除特定百分比的训练数据。
- 分析数据集并删除过多的重复条目,这是一种更系统的方式。
若要补充训练集,请在 Language Studio 中的“数据标签”选项卡上选择“建议语句”。
还应在训练集中查找意外的“模式”。 例如,检查特定意向的训练集是否全为小写,或以特定短语开头。 在这种情况下,训练的模型可能会学习训练集中的这些意外偏差,而不是变得通用化。
建议在训练集中引入大小写和标点符号多样性。 如果期望模型预期处理变体,请确保有一个也反映这种多样性的训练集。 例如,添加一些采用正确大小写的语句,再添加一些全部小写的语句。
数据拆分
开始训练过程之前,项目中标记的语句会划分为训练集和测试集。 每个集合都有不同的功能。
训练集用于训练模型,模型通过该集学习标记的语句。
测试集是一个盲集,它不是在训练期间引入到模型的,而是在评估期间引入的。
成功训练模型后,可将其用于根据测试集中的语句进行预测。 这些预测用于计算评估指标。
建议确保所有意向和实体在训练集和测试集中均已充分表示。
对话语言理解支持两种数据拆分方法:
- 自动从训练数据拆分测试集:系统将根据所选百分比将标记的数据拆分为训练集和测试集。 建议的拆分百分比为 80% 用于训练,20% 用于测试。
注意
如果选择“自动从训练数据拆分测试集”选项,则只有分配给训练集的数据会按照提供的百分比拆分。
- 使用手动拆分训练和测试数据:此方法使用户能够定义语句应分别属于哪个集合。 仅当在标记期间已将语句添加到测试集时,才会启用此步骤。
训练模式
CLU 支持两种模型训练模式
标准训练使用快速机器学习算法来以相对较快的速度训练模型。 此模式目前仅适用于英语,对于不使用“英语(美国)”或“英语(英国)”作为主要语言的任何项目,将禁用此模式。 此训练选项是免费的。 使用标准训练可以免费添加语句并快速对其进行测试。 显示的评估分数可以引导你在项目中的适当位置进行更改以及添加更多语句。 迭代几次并做出增量改进后,可以考虑使用高级训练来训练模型的另一个版本。
高级训练使用最新的机器学习技术基于数据来自定义模型。 此模式预期会为模型显示更好的性能评分,同时还让你能够使用 CLU 的多语言功能。 高级训练的定价不同。 有关详细信息,请参阅定价信息。
请参考评估分数做出决定。 与使用标准训练模式相比,在高级训练中有时可能会错误地预测特定的示例。 但是,如果使用高级训练可以获得更好的整体评估结果,则建议使用最终模型。 如果情况并非如此,并且你不寻求使用任何多语言功能,则可以继续使用以标准模式训练的模型。
注意
在选择不同的训练模式时,预期会在意向置信度评分中看到行为差异,因为每种算法以不同的方式校准其评分。
定型模型
若要在 Language Studio 中开始训练模型,请执行以下操作:
在左侧菜单中,选择“训练模型”。
从顶部菜单中选择“启动训练作业”。
选择“训练新模型”,然后在文本框中输入新模型名称。 但要将现有模型替换为已针对新数据训练的模型,请选择“覆盖现有模型”,然后选择现有模型。 覆盖已训练的模型是不可逆的,但这在部署新模型之前不会影响已部署的模型。
选择训练模式。 可以选择“标准训练”以加快训练速度,但此模式仅适用于英语。 或者,可以选择其他语言和多语言项目支持的“高级训练”,但此模式需要更长的训练时间。 详细了解训练模式。
选择一种数据拆分方法。 可以选择“从训练数据中自动拆分测试集”,系统将根据指定的百分比在训练集和测试集之间拆分语句。 或者,可以选择“使用手动拆分训练和测试数据”,仅当在标记语句期间已将语句添加到测试集时才会启用此选项。
选择“训练”按钮。
从列表中选择训练作业 ID。 出现一个面板,在该面板中可以检查此作业的训练进度、作业状态和其他详细信息。
注意
- 只有成功完成的训练作业才会生成模型。
- 训练时间从几分钟到几个小时不等,具体取决于语句数量。
- 一次只能运行一个训练作业。 在运行的作业完成之前,无法在同一项目中启动其他训练作业。
- 用于训练模型的机器学习会定期更新。 如果要在以前的配置版本上进行训练,请在“启动训练作业”页中选择“选择此处进行更改”,然后选择以前的版本。
启动训练作业
使用以下 URL、标头和 JSON 正文创建 POST 请求以提交训练作业。
请求 URL
创建 API 请求时,请使用以下 URL。 将占位符值替换为你自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:train?api-version={API-VERSION}
占位符 |
值 |
示例 |
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 |
https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 |
EmailApp |
{API-VERSION} |
要调用的 API 的版本。 |
2023-04-01 |
使用以下标头对请求进行身份验证。
键 |
值 |
Ocp-Apim-Subscription-Key |
资源密钥。 用于对 API 请求进行身份验证。 |
请求正文
在请求中使用以下对象。 训练完成后,模型将以用于 modelLabel
参数的值命名。
{
"modelLabel": "{MODEL-NAME}",
"trainingMode": "{TRAINING-MODE}",
"trainingConfigVersion": "{CONFIG-VERSION}",
"evaluationOptions": {
"kind": "percentage",
"testingSplitPercentage": 20,
"trainingSplitPercentage": 80
}
}
密钥 |
占位符 |
值 |
示例 |
modelLabel |
{MODEL-NAME} |
模型名称。 |
Model1 |
trainingConfigVersion |
{CONFIG-VERSION} |
训练配置模型版本。 默认情况下将使用最新的模型版本。 |
2022-05-01 |
trainingMode |
{TRAINING-MODE} |
用于训练的训练模式。 支持的模式为“标准训练”(训练速度更快,但仅适用于英语)和“高级训练”(受其他语言和多语言项目的支持,但训练时间更长)。 详细了解训练模式。 |
standard |
kind |
percentage |
拆分方法。 可能的值为 percentage 或 manual 。 有关详细信息,请参阅如何训练模型。 |
percentage |
trainingSplitPercentage |
80 |
要包含在训练集中的已标记数据的百分比。 建议的值为 80 。 |
80 |
testingSplitPercentage |
20 |
要包含在测试集中的已标记数据的百分比。 建议的值为 20 。 |
20 |
注意
仅当 Kind
设置为 percentage
时 trainingSplitPercentage
和 testingSplitPercentage
才是必需的,并且两个百分比的总和应等于 100。
当你发送 API 请求后,将收到指示成功的 202
响应。 在响应头中,提取 operation-location
值。 其格式如下:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
可以使用此 URL 获取训练作业状态。
获取训练作业状态
训练可能需要一些时间,具体取决于训练数据的大小和架构的复杂性。 可以使用以下请求持续轮询训练作业的状态,直到成功完成训练作业。
发送成功的训练请求后,用于检查作业状态的完整请求 URL(包括终结点、项目名称和作业 ID)会包含在响应的 operation-location
标头中。
使用以下 GET 请求来获取模型在训练过程中的状态。 请将以下占位符值替换为你自己的值。
请求 URL
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
占位符 |
值 |
示例 |
{YOUR-ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 |
https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 |
EmailApp |
{JOB-ID} |
用于查找模型训练状态的 ID。 |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx |
{API-VERSION} |
要调用的 API 的版本。 |
2023-04-01 |
使用以下标头对请求进行身份验证。
键 |
值 |
Ocp-Apim-Subscription-Key |
资源密钥。 用于对 API 请求进行身份验证。 |
响应正文
发送请求后,你将获得以下响应。 继续轮询此终结点,直到“状态”参数变为“已成功”。
{
"result": {
"modelLabel": "{MODEL-LABEL}",
"trainingConfigVersion": "{TRAINING-CONFIG-VERSION}",
"trainingMode": "{TRAINING-MODE}",
"estimatedEndDateTime": "2022-04-18T15:47:58.8190649Z",
"trainingStatus": {
"percentComplete": 3,
"startDateTime": "2022-04-18T15:45:06.8190649Z",
"status": "running"
},
"evaluationStatus": {
"percentComplete": 0,
"status": "notStarted"
}
},
"jobId": "xxxxx-xxxxx-xxxx-xxxxx-xxxx",
"createdDateTime": "2022-04-18T15:44:44Z",
"lastUpdatedDateTime": "2022-04-18T15:45:48Z",
"expirationDateTime": "2022-04-25T15:44:44Z",
"status": "running"
}
密钥 |
值 |
示例 |
modelLabel |
模型名称 |
Model1 |
trainingConfigVersion |
训练配置版本。 默认使用最新版本。 |
2022-05-01 |
trainingMode |
你选择的训练模式。 |
standard |
startDateTime |
开始训练的时间 |
2022-04-14T10:23:04.2598544Z |
status |
训练作业的状态 |
running |
estimatedEndDateTime |
预计的训练作业完成时间 |
2022-04-14T10:29:38.2598544Z |
jobId |
训练作业 ID |
xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx |
createdDateTime |
训练作业创建日期和时间 |
2022-04-14T10:22:42Z |
lastUpdatedDateTime |
训练作业上次更新日期和时间 |
2022-04-14T10:23:45Z |
expirationDateTime |
训练作业过期日期和时间 |
2022-04-14T10:22:42Z |
取消训练作业
使用以下 URL、标头和 JSON 正文创建 POST 请求,以取消训练作业。
请求 URL
创建 API 请求时,请使用以下 URL。 请将以下占位符值替换为你自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}/:cancel?api-version={API-VERSION}
占位符 |
值 |
示例 |
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 |
https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 |
EmailApp |
{JOB-ID} |
这是训练作业 ID。 |
XXXXX-XXXXX-XXXX-XX |
{API-VERSION} |
要调用的 API 的版本。 |
2023-04-01 |
使用以下标头对请求进行身份验证。
键 |
值 |
Ocp-Apim-Subscription-Key |
资源密钥。 用于对 API 请求进行身份验证。 |
发送 API 请求后,你将收到指示成功的 202 响应,这表示你的训练作业已取消。 带有用于检查作业状态的 Operation-Location
标头的成功调用结果。
后续步骤