你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
训练自定义语音模型
本文介绍如何训练自定义模型,以提高 Microsoft 基础模型中的识别准确度。 即使发布了新的基础模型,自定义语音模型的语音识别准确度和质量也会保持一致。
注意
你将为自定义语音识别模型使用量和终结点托管付费。 如果基础模型创建于 2023 年 10 月 1 日及之后,则还需要为自定义语音识别模型训练付费。 如果基础模型是在 2023 年 10 月之前创建的,则无需支付训练费用。 有关详细信息,请参阅 Azure AI 语音定价和语音转文本 3.2 迁移指南中的适配收费部分。
训练模型通常是一个迭代过程。 首先选择一个基本模型,该模型是新模型的起点。 你需要使用可包含文本和音频的数据集来训练模型,然后进行测试。 如果识别质量或准确度不符合要求,可以使用更多或修改后的训练数据创建新的模型,然后再次进行测试。
在训练自定义模型后,可以在有限时间内使用该模型。 你必须定期从最新的基本模型重新创建和调整自定义模型,以充分利用改进的准确性和质量。 有关详细信息,请参阅模型和终结点生命周期。
重要
如果要使用音频数据训练自定义模型,请选择具备语音数据训练专用硬件的语音资源区域。 训练模型后,可以根据需要将其复制到另一区域中的语音资源。
在具有专用于自定义语音识别训练的硬件的区域中,语音服务将使用长达 100 小时的音频训练数据,并且每天可以处理大约 10 小时的数据。 有关详细信息,请参阅区域表中的脚注。
创建模型
上传训练数据集后,请按以下说明开始训练模型:
登录 Speech Studio。
选择“自定义语音识别”> 你的项目名称 >“训练自定义模型”。
选择“训练新模型”。
在“选择基线模型”页上,选择一个基本模型,然后选择“下一步”。 如果不确定,请从列表顶部选择最新的模型。 基础模型的名称对应于 YYYYMMDD 格式的发布日期。 在 Speech Studio 中,基础模型的自定义功能列在括号中,位于模型名称后面。
重要
记下“适应到期”日期。 这是可以使用基本模型进行训练的最后日期。 有关详细信息,请参阅模型和终结点生命周期。
在“选择数据”页上,选择一个或多个要用于训练的数据集。 如果没有任何可用的数据集,请取消设置,然后转到“语音数据集”菜单来上传数据集。
输入自定义模型的名称和说明,然后选择“下一步”。
或者,选中“在下一步中添加测试”框。 如果跳过此步骤,可以稍后运行相同的测试。 有关详细信息,请参阅测试识别质量和定量测试模型。
选择“保存并关闭”以启动自定义模型的生成。
返回到“训练自定义模型”页。
重要
记下“到期”日期。 这是可以使用自定义模型进行语音识别的最后日期。 有关详细信息,请参阅模型和终结点生命周期。
若要使用数据集创建模型进行训练,请使用 spx csr model create
命令。 根据以下说明构造请求参数:
- 将
project
参数设置为现有项目的 ID。 建议使用此参数,这样你还可以在 Speech Studio 中查看和管理模型。 可以运行spx csr project list
命令来获取可用项目。 - 将所需的
dataset
参数设置为要用于训练的数据集的 ID。 若要指定多个数据集,请设置datasets
(复数)参数,并使用分号分隔 ID。 - 设置所需的
language
参数。 数据集区域设置必须与项目的区域设置一致。 以后无法更改此区域设置。 语音 CLIlanguage
参数对应于 JSON 请求和响应中的locale
属性。 - 设置所需的
name
参数。 此参数是在 Speech Studio 中显示的名称。 语音 CLIname
参数对应于 JSON 请求和响应中的displayName
属性。 - (可选)可设置
base
属性。 例如:--base 5988d691-0893-472c-851e-8e36a0fe7aaf
。 如果没有指定base
,则使用区域设置的默认基础模型。 语音 CLIbase
参数对应于 JSON 请求和响应中的baseModel
属性。
下面是一个示例语音 CLI 命令,该命令使用数据集创建模型进行训练:
spx csr model create --api-version v3.2 --project YourProjectId --name "My Model" --description "My Model Description" --dataset YourDatasetId --language "en-US"
注意
在本示例中,base
未设置,因此使用区域设置的默认基础模型。 基础模型 URI 是在响应中返回的。
应收到以下格式的响应正文:
{
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd",
"baseModel": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/base/5988d691-0893-472c-851e-8e36a0fe7aaf"
},
"datasets": [
{
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/datasets/23b6554d-21f9-4df1-89cb-f84510ac8d23"
}
],
"links": {
"manifest": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd/manifest",
"copy": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd:copy",
"files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd/files"
},
"project": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/projects/0198f569-cc11-4099-a0e8-9d55bc3d0c52"
},
"properties": {
"deprecationDates": {
"transcriptionDateTime": "2026-07-15T00:00:00Z"
},
"customModelWeightPercent": 30,
"features": {
"supportsTranscriptions": true,
"supportsEndpoints": true,
"supportsTranscriptionsOnSpeechContainers": false,
"supportedOutputFormats": [
"Display",
"Lexical"
]
}
},
"lastActionDateTime": "2024-07-14T21:38:40Z",
"status": "Running",
"createdDateTime": "2024-07-14T21:38:40Z",
"locale": "en-US",
"displayName": "My Model",
"description": "My Model Description"
}
重要
记下 adaptationDateTime
属性中的日期。 这是可以使用基本模型进行训练的最后日期。 有关详细信息,请参阅模型和终结点生命周期。
记下 transcriptionDateTime
属性中的日期。 这是可以使用自定义模型进行语音识别的最后日期。 有关详细信息,请参阅模型和终结点生命周期。
响应正文中的顶级 self
属性是模型的 URI。 使用此 URI 可获取有关模型的项目、清单和弃用日期的详细信息。 还可以使用此 URI 来更新或删除模型。
要获取模型的语音 CLI 帮助,请运行以下命令:
spx help csr model
若要使用数据集创建模型进行训练,请使用语音转文本 REST API 的 Models_Create 操作。 根据以下说明构造请求正文:
- 将
project
属性设置为现有项目的 URI。 建议使用此属性,这样你还可以在 Speech Studio 中查看和管理模型。 可以发出 Projects_List 请求来获取可用项目。 - 将所需的
datasets
属性设置为要用于训练的数据集的 URI。 - 设置所需的
locale
属性。 模型区域设置必须与项目和基础模型的区域设置一致。 以后无法更改此区域设置。 - 设置所需的
displayName
属性。 此属性是在 Speech Studio 中显示的名称。 - (可选)可设置
baseModel
属性。 例如:"baseModel": {"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/base/5988d691-0893-472c-851e-8e36a0fe7aaf"}
。 如果没有指定baseModel
,则使用区域设置的默认基础模型。
使用 URI 发出 HTTP POST 请求,如以下示例所示。 将 YourSubscriptionKey
替换为语音资源密钥,将 YourServiceRegion
替换为语音资源区域,并按前文所述设置请求正文属性。
curl -v -X POST -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey" -H "Content-Type: application/json" -d '{
"project": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/projects/0198f569-cc11-4099-a0e8-9d55bc3d0c52"
},
"displayName": "My Model",
"description": "My Model Description",
"baseModel": null,
"datasets": [
{
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/datasets/23b6554d-21f9-4df1-89cb-f84510ac8d23"
}
],
"locale": "en-US"
}' "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.2/models"
注意
在本示例中,baseModel
未设置,因此使用区域设置的默认基础模型。 基础模型 URI 是在响应中返回的。
应收到以下格式的响应正文:
{
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd",
"baseModel": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/base/5988d691-0893-472c-851e-8e36a0fe7aaf"
},
"datasets": [
{
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/datasets/23b6554d-21f9-4df1-89cb-f84510ac8d23"
}
],
"links": {
"manifest": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd/manifest",
"copy": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd:copy",
"files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9e240dc1-3d2d-4ac9-98ec-1be05ba0e9dd/files"
},
"project": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/projects/0198f569-cc11-4099-a0e8-9d55bc3d0c52"
},
"properties": {
"deprecationDates": {
"transcriptionDateTime": "2026-07-15T00:00:00Z"
},
"customModelWeightPercent": 30,
"features": {
"supportsTranscriptions": true,
"supportsEndpoints": true,
"supportsTranscriptionsOnSpeechContainers": false,
"supportedOutputFormats": [
"Display",
"Lexical"
]
}
},
"lastActionDateTime": "2024-07-14T21:38:40Z",
"status": "Running",
"createdDateTime": "2024-07-14T21:38:40Z",
"locale": "en-US",
"displayName": "My Model",
"description": "My Model Description"
}
重要
记下 adaptationDateTime
属性中的日期。 这是可以使用基本模型进行训练的最后日期。 有关详细信息,请参阅模型和终结点生命周期。
记下 transcriptionDateTime
属性中的日期。 这是可以使用自定义模型进行语音识别的最后日期。 有关详细信息,请参阅模型和终结点生命周期。
响应正文中的顶级 self
属性是模型的 URI。 使用此 URI 获取有关模型的项目、清单和弃用日期的详细信息。 还可以使用此 URI 更新或删除模型。
复制模型
可以将模型复制到使用相同区域设置的另一个项目。 例如,使用专用训练硬件在区域中使用音频数据训练模型后,可以根据需要将其复制到另一个区域的语音资源。
按照以下说明将模型复制到另一个区域的项目中:
- 登录 Speech Studio。
- 选择“自定义语音识别”> 你的项目名称 >“训练自定义模型”。
- 选择“复制到”。
- 在“复制语音模型”页上,选择要复制模型的目标区域。
- 选择目标区域中的语音资源,或创建一个新的语音资源。
- 选择要在其中复制模型的项目,或创建一个新项目。
- 选择“复制”。
成功复制模型后,你将收到通知,并可在目标项目中查看它。
语音 CLI 不支持将模型直接复制到另一个区域中的项目。 可以使用 Speech Studio 或语音转文本 REST API 将模型复制到另一个区域的项目中。
若要将模型复制到另一个语音资源,请使用语音转文本 REST API 的 Models_Copy 操作。 根据以下说明构造请求正文:
- 将所需的
targetSubscriptionKey
属性设置为目标语音资源的密钥。
使用 URI 发出 HTTP POST 请求,如以下示例所示。 使用要从中进行复制的模型的区域和 URI。 将 YourModelId
替换为模型 ID,将 YourSubscriptionKey
替换为语音资源密钥,将 YourServiceRegion
替换为语音资源区域,并按前文所述设置请求正文属性。
curl -v -X POST -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey" -H "Content-Type: application/json" -d '{
"targetSubscriptionKey": "ModelDestinationSpeechResourceKey"
} ' "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.2/models/YourModelId:copy"
注意
只有请求正文中的 targetSubscriptionKey
属性具有有关目标语音资源的信息。
应收到以下格式的响应正文:
{
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9df35ddb-edf9-4e91-8d1a-576d09aabdae",
"baseModel": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/base/eb5450a7-3ca2-461a-b2d7-ddbb3ad96540"
},
"links": {
"manifest": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9df35ddb-edf9-4e91-8d1a-576d09aabdae/manifest",
"copy": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/models/9df35ddb-edf9-4e91-8d1a-576d09aabdae:copy"
},
"properties": {
"deprecationDates": {
"adaptationDateTime": "2023-01-15T00:00:00Z",
"transcriptionDateTime": "2024-07-15T00:00:00Z"
}
},
"lastActionDateTime": "2022-05-22T23:15:27Z",
"status": "NotStarted",
"createdDateTime": "2022-05-22T23:15:27Z",
"locale": "en-US",
"displayName": "My Model",
"description": "My Model Description",
"customProperties": {
"PortalAPIVersion": "3",
"Purpose": "",
"VadKind": "None",
"ModelClass": "None",
"UsesHalide": "False",
"IsDynamicGrammarSupported": "False"
}
}
连接模型
模型可能是使用语音 CLI 或 REST API 从一个项目中复制的,而没有连接到另一个项目。 连接模型就是使用对项目的引用来更新模型。
如果在 Speech Studio 中出现提示,可以通过选择“连接”按钮来连接它们。
若要将模型连接到项目,请使用 spx csr model update
命令。 根据以下说明构造请求参数:
- 将
project
参数设置为现有项目的 URI。 建议使用此参数,这样你还可以在 Speech Studio 中查看和管理模型。 可以运行spx csr project list
命令来获取可用项目。 - 将所需的
modelId
参数设置为要连接到项目的模型的 ID。
下面是将模型连接到项目的示例语音 CLI 命令:
spx csr model update --api-version v3.2 --model YourModelId --project YourProjectId
应收到以下格式的响应正文:
{
"project": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/projects/0198f569-cc11-4099-a0e8-9d55bc3d0c52"
},
}
对于模型的语音 CLI 帮助,请运行以下命令:
spx help csr model
若要将新模型连接到复制了模型的语音资源项目,请使用语音转文本 REST API 的 Models_Update 操作。 根据以下说明构造请求正文:
- 将所需的
project
属性设置为现有项目的 URI。 建议使用此属性,这样你还可以在 Speech Studio 中查看和管理模型。 可以发出 Projects_List 请求来获取可用项目。
使用 URI 发出 HTTP PATCH 请求,如以下示例所示。 使用新模型的 URI。 可以从 Models_Copy 响应正文的 self
属性获取新模型 ID。 将 YourSubscriptionKey
替换为语音资源密钥,将 YourServiceRegion
替换为语音资源区域,并按前面所述设置请求正文属性。
curl -v -X PATCH -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey" -H "Content-Type: application/json" -d '{
"project": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/projects/0198f569-cc11-4099-a0e8-9d55bc3d0c52"
},
}' "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.2/models"
你应该会收到以下格式的响应正文:
{
"project": {
"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.2/projects/0198f569-cc11-4099-a0e8-9d55bc3d0c52"
},
}