训练是模型从标记的语句进行学习的过程。 训练完成后,可以查看 模型性能。
若要训练模型,请启动训练作业。 只有已成功完成的作业才能创建模型。 训练作业在七天后过期,之后你将无法再检索作业详细信息。 如果训练作业成功完成并创建了模型,作业过期将不会影响模型。 你在同一时间只能有一个训练作业处于运行状态,并且无法在同一项目中启动其他作业。
处理简单项目时训练时间可能是几秒钟,达到语句最大限制时训练时间可能是几小时。
成功完成训练后,将自动触发模型评估。 评估过程首先使用经过训练的模型对测试集中的语句运行预测,并将预测结果与提供的标签进行比较(这确立了真实性的基线)。 返回结果,以便可以查看 模型的性能。
先决条件
- 一个成功创建的项目,并配置了 Azure Blob 存储帐户
请参阅 项目开发生命周期。
数据拆分
开始训练过程之前,项目中标记的语句会划分为训练集和测试集。 其中的每一个都有不同的功能。
训练集用于训练模型。 模型从该数据集中学习带标签的话语。
测试集是一个盲集,它不是在训练期间引入到模型的,而是在评估期间引入的。
成功训练模型后,可将其用于根据测试集中的语句进行预测。 这些预测用于计算评估指标。
我们建议在训练集和测试集中全面表示所有意图。
业务流程工作流支持两种数据拆分方法:
- 根据所选的百分比,自动从训练数据拆分测试集:系统会根据所选的百分比在训练集和测试集之间拆分标记的数据。 建议的拆分百分比为 80% 用于训练,20% 用于测试。
注释
如果选择自动将测试集从训练数据中拆分选项,则仅根据提供的百分比拆分分配为训练集的数据。
- 使用手动拆分训练和测试数据:此方法使用户能够定义语句应分别属于哪个集合。 只有在 标记期间向测试集添加了话语时,才启用此步骤。
定型模型
启动训练作业
若要从 Language Studio 中开始训练模型,请执行以下操作:
在左侧菜单中,选择“训练作业”。
从顶部菜单中选择“启动训练作业”。
然后选择“训练新模型”并在文本框中键入模型名称。 还可以通过选择“覆盖现有模型”选项并从下拉菜单中选择要覆盖的模型来覆盖现有模型。 覆盖已训练模型的操作不可逆,但在部署新模型之前,不会影响已部署的模型。
如果在标记陈述时启用项目手动拆分数据功能,则会看到两个数据拆分选项:
-
从训练数据自动拆分测试集:标记的语句将根据选择的百分比在训练集和测试集之间随机拆分。 默认拆分百分比为 80% 用于训练,20% 用于测试。 若要更改这些值,请选择要更改的集并键入新值。
注释
如果选择“自动从训练数据拆分测试集”选项,则只有训练集中的语句会按照提供的百分比拆分。
-
手动拆分训练和测试数据:在项目的标记步骤期间,将每个语句分配到训练集或测试集。
注释
只有在向标记数据页中的测试集中添加语句时,才启用“手动拆分训练和测试数据”选项。 否则,它处于禁用状态。
选择“训练”按钮。
注释
- 只有成功完成的训练作业才会生成模型。
- 训练时间从几分钟到几个小时不等,具体取决于标记数据的大小。
- 一次只能运行一个训练作业。 在运行的作业完成之前,无法在同一项目中启动其他训练作业。
使用以下 URL、标头和 JSON 正文创建 POST 请求以提交训练作业。
请求的 URL
创建 API 请求时,请使用以下 URL。 将占位符中的值替换为您自己的值。
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:train?api-version={API-VERSION}
| Placeholder |
价值 |
Example |
{ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 |
https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 |
EmailApp |
{API-VERSION} |
要调用的 API 的版本。 |
2023-04-01 |
使用以下标头对请求进行身份验证。
| Key |
价值 |
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
请求主体
在请求中使用以下对象。 完成训练后,该模型将被命名为 MyModel。
{
"modelLabel": "{MODEL-NAME}",
"trainingMode": "standard",
"trainingConfigVersion": "{CONFIG-VERSION}",
"evaluationOptions": {
"kind": "percentage",
"testingSplitPercentage": 20,
"trainingSplitPercentage": 80
}
}
| Key |
Placeholder |
价值 |
Example |
modelLabel |
{MODEL-NAME} |
模型名称。 |
Model1 |
trainingMode |
standard |
训练模式。 业务流程中只有一种可用的训练模式,即 standard。 |
standard |
trainingConfigVersion |
{CONFIG-VERSION} |
训练配置模型版本。 默认情况下将使用最新的模型版本。 |
2022-05-01 |
kind |
percentage |
拆分方法。 可能的值为 percentage 或 manual。 有关详细信息,请参阅如何训练模型。 |
percentage |
trainingSplitPercentage |
80 |
要包含在训练集中的已标记数据的百分比。 建议的值为 80。 |
80 |
testingSplitPercentage |
20 |
要包含在测试集中的已标记数据的百分比。 建议的值为 20。 |
20 |
注释
仅当 trainingSplitPercentage 设置为 testingSplitPercentage 时 Kind 和 percentage 才是必需的,并且两个百分比的总和应等于 100。
发送 API 请求后,会收到指示 202 成功的响应。 在响应标头中,提取 operation-location 格式如下的值:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
可以使用此 URL 获取训练作业状态。
获取训练作业状态
从列表中选择训练作业 ID,将显示一个侧窗格,可在其中检查此作业的 训练进度、 作业状态和其他详细信息。
训练可能需要一些时间,具体取决于训练数据的大小和架构的复杂性。 可以使用以下请求不断轮询训练作业的状态,直至成功完成。
使用以下 GET 请求来获取模型在训练过程中的状态。 将占位符中的值替换为您自己的值。
请求的 URL
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
| Placeholder |
价值 |
Example |
{YOUR-ENDPOINT} |
用于对 API 请求进行身份验证的终结点。 |
https://<your-custom-subdomain>.cognitiveservices.azure.cn |
{PROJECT-NAME} |
项目名称。 此值区分大小写。 |
EmailApp |
{JOB-ID} |
用于查找模型训练状态的 ID。 它位于 location 提交训练作业时收到的标头值中。 |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx |
{API-VERSION} |
要调用的 API 的版本。 |
2023-04-01 |
使用以下标头对请求进行身份验证。
| Key |
价值 |
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
响应正文
发送请求后,会收到以下响应。 继续轮询该端点,直到状态参数变为“已成功”。
{
"result": {
"modelLabel": "{MODEL-LABEL}",
"trainingConfigVersion": "{TRAINING-CONFIG-VERSION}",
"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": "xxxxxx-xxxxx-xxxxxx-xxxxxx",
"createdDateTime": "2022-04-18T15:44:44Z",
"lastUpdatedDateTime": "2022-04-18T15:45:48Z",
"expirationDateTime": "2022-04-25T15:44:44Z",
"status": "running"
}
| Key |
价值 |
Example |
modelLabel |
模型名称 |
Model1 |
trainingConfigVersion |
训练配置版本。 默认使用最新版本。 |
2022-05-01 |
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}
| Placeholder |
价值 |
Example |
{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 |
使用以下标头对请求进行身份验证。
| Key |
价值 |
Ocp-Apim-Subscription-Key |
资源的键。 用于对 API 请求进行身份验证。 |
发送 API 请求后,会收到 202 响应,指示成功,这意味着训练作业已取消。 带有用于检查作业状态的 Operation-Location 标头的成功调用结果。
后续步骤