你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

训练自定义语音模型

本文介绍如何训练自定义模型,以提高 Microsoft 基础模型中的识别准确度。 即使发布了新的基础模型,自定义语音模型的语音识别准确度和质量也会保持一致。

注意

你将为自定义语音识别模型使用量和终结点托管付费。 如果基础模型创建于 2023 年 10 月 1 日及之后,则还需要为自定义语音识别模型训练付费。 如果基础模型是在 2023 年 10 月之前创建的,则无需支付训练费用。 有关详细信息,请参阅 Azure AI 语音定价语音转文本 3.2 迁移指南中的适配收费部分

训练模型通常是一个迭代过程。 首先选择一个基本模型,该模型是新模型的起点。 你需要使用可包含文本和音频的数据集来训练模型,然后进行测试。 如果识别质量或准确度不符合要求,可以使用更多或修改后的训练数据创建新的模型,然后再次进行测试。

在训练自定义模型后,可以在有限时间内使用该模型。 你必须定期从最新的基本模型重新创建和调整自定义模型,以充分利用改进的准确性和质量。 有关详细信息,请参阅模型和终结点生命周期

重要

如果要使用音频数据训练自定义模型,请选择具备语音数据训练专用硬件的语音资源区域。 训练模型后,可以根据需要将其复制到另一区域中的语音资源

在具有专用于自定义语音识别训练的硬件的区域中,语音服务将使用长达 20 小时的音频训练数据,并且每天可以处理大约 10 小时的数据。 在其他区域中,语音服务最多使用 8 小时的音频数据,每天处理大约 1 小时的数据。 有关详细信息,请参阅区域表中的脚注。

创建模型

上传训练数据集后,请按以下说明开始训练模型:

  1. 登录 Speech Studio

  2. 选择“自定义语音识别”> 你的项目名称 >“训练自定义模型”。

  3. 选择“训练新模型”。

  4. 在“选择基线模型”页上,选择一个基本模型,然后选择“下一步”。 如果不确定,请从列表顶部选择最新的模型。 基础模型的名称对应于 YYYYMMDD 格式的发布日期。 在 Speech Studio 中,基础模型的自定义功能列在括号中,位于模型名称后面。

    重要

    记下“适应到期”日期。 这是可以使用基本模型进行训练的最后日期。 有关详细信息,请参阅模型和终结点生命周期

  5. 在“选择数据”页上,选择一个或多个要用于训练的数据集。 如果没有任何可用的数据集,请取消设置,然后转到“语音数据集”菜单来上传数据集

  6. 输入自定义模型的名称和说明,然后选择“下一步”。

  7. 或者,选中“在下一步中添加测试”框。 如果跳过此步骤,可以稍后运行相同的测试。 有关详细信息,请参阅测试识别质量定量测试模型

  8. 选择“保存并关闭”以启动自定义模型的生成。

  9. 返回到“训练自定义模型”页。

    重要

    记下“到期”日期。 这是可以使用自定义模型进行语音识别的最后日期。 有关详细信息,请参阅模型和终结点生命周期

若要使用数据集创建模型进行训练,请使用 spx csr model create 命令。 根据以下说明构造请求参数:

  • project 参数设置为现有项目的 ID。 建议使用此参数,这样你还可以在 Speech Studio 中查看和管理模型。 可以运行 spx csr project list 命令来获取可用项目。
  • 将所需的 dataset 参数设置为要用于训练的数据集的 ID。 若要指定多个数据集,请设置 datasets(复数)参数,并使用分号分隔 ID。
  • 设置所需的 language 参数。 数据集区域设置必须与项目的区域设置一致。 以后无法更改此区域设置。 语音 CLI language 参数对应于 JSON 请求和响应中的 locale 属性。
  • 设置所需的 name 参数。 此参数是在 Speech Studio 中显示的名称。 语音 CLI name 参数对应于 JSON 请求和响应中的 displayName 属性。
  • (可选)可设置 base 属性。 例如:--base 1aae1070-7972-47e9-a977-87e3b05c457d。 如果没有指定 base,则使用区域设置的默认基础模型。 语音 CLI base 参数对应于 JSON 请求和响应中的 baseModel 属性。

下面是一个示例语音 CLI 命令,该命令使用数据集创建模型进行训练:

spx csr model create --api-version v3.1 --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.1/models/86c4ebd7-d70d-4f67-9ccc-84609504ffc7",
  "baseModel": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "datasets": [
    {
      "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/69e46263-ab10-4ab4-abbe-62e370104d95"
    }
  ],
  "links": {
    "manifest": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/86c4ebd7-d70d-4f67-9ccc-84609504ffc7/manifest",
    "copyTo": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/86c4ebd7-d70d-4f67-9ccc-84609504ffc7:copyto"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/5d25e60a-7f4a-4816-afd9-783bb8daccfc"
  },
  "properties": {
    "deprecationDates": {
      "adaptationDateTime": "2023-01-15T00:00:00Z",
      "transcriptionDateTime": "2024-07-15T00:00:00Z"
    }
  },
  "lastActionDateTime": "2022-05-21T13:21:01Z",
  "status": "NotStarted",
  "createdDateTime": "2022-05-21T13:21:01Z",
  "locale": "en-US",
  "displayName": "My Model",
  "description": "My Model Description"
}

重要

记下 adaptationDateTime 属性中的日期。 这是可以使用基本模型进行训练的最后日期。 有关详细信息,请参阅模型和终结点生命周期

记下 transcriptionDateTime 属性中的日期。 这是可以使用自定义模型进行语音识别的最后日期。 有关详细信息,请参阅模型和终结点生命周期

响应正文中的顶级 self 属性是模型的 URI。 使用此 URI 可获取有关模型的项目、清单和弃用日期的详细信息。 还可以使用此 URI 来更新或删除模型。

要获取模型的语音 CLI 帮助,请运行以下命令:

spx help csr model

若要使用数据集创建模型进行训练,请使用语音转文本 REST APIModels_Create 操作。 根据以下说明构造请求正文:

  • project 属性设置为现有项目的 URI。 建议使用此属性,这样你还可以在 Speech Studio 中查看和管理模型。 可以发出 Projects_List 请求来获取可用项目。
  • 将所需的 datasets 属性设置为要用于训练的数据集的 URI。
  • 设置所需的 locale 属性。 模型区域设置必须与项目和基础模型的区域设置一致。 以后无法更改此区域设置。
  • 设置所需的 displayName 属性。 此属性是在 Speech Studio 中显示的名称。
  • (可选)可设置 baseModel 属性。 例如:"baseModel": {"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"}。 如果没有指定 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.1/projects/5d25e60a-7f4a-4816-afd9-783bb8daccfc"
  },
  "displayName": "My Model",
  "description": "My Model Description",
  "baseModel": null,
  "datasets": [
    {
      "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/69e46263-ab10-4ab4-abbe-62e370104d95"
    }
  ],
  "locale": "en-US"
}'  "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.1/models"

注意

在本示例中,baseModel 未设置,因此使用区域设置的默认基础模型。 基础模型 URI 是在响应中返回的。

应收到以下格式的响应正文:

{
  "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/86c4ebd7-d70d-4f67-9ccc-84609504ffc7",
  "baseModel": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "datasets": [
    {
      "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/69e46263-ab10-4ab4-abbe-62e370104d95"
    }
  ],
  "links": {
    "manifest": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/86c4ebd7-d70d-4f67-9ccc-84609504ffc7/manifest",
    "copyTo": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/86c4ebd7-d70d-4f67-9ccc-84609504ffc7:copyto"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/5d25e60a-7f4a-4816-afd9-783bb8daccfc"
  },
  "properties": {
    "deprecationDates": {
      "adaptationDateTime": "2023-01-15T00:00:00Z",
      "transcriptionDateTime": "2024-07-15T00:00:00Z"
    }
  },
  "lastActionDateTime": "2022-05-21T13:21:01Z",
  "status": "NotStarted",
  "createdDateTime": "2022-05-21T13:21:01Z",
  "locale": "en-US",
  "displayName": "My Model",
  "description": "My Model Description"
}

重要

记下 adaptationDateTime 属性中的日期。 这是可以使用基本模型进行训练的最后日期。 有关详细信息,请参阅模型和终结点生命周期

记下 transcriptionDateTime 属性中的日期。 这是可以使用自定义模型进行语音识别的最后日期。 有关详细信息,请参阅模型和终结点生命周期

响应正文中的顶级 self 属性是模型的 URI。 使用此 URI 获取有关模型的项目、清单和弃用日期的详细信息。 还可以使用此 URI 更新删除模型。

复制模型

可以将模型复制到使用相同区域设置的另一个项目。 例如,使用专用训练硬件在区域中使用音频数据训练模型后,可以根据需要将其复制到另一个区域的语音资源。

按照以下说明将模型复制到另一个区域的项目中:

  1. 登录 Speech Studio
  2. 选择“自定义语音识别”> 你的项目名称 >“训练自定义模型”。
  3. 选择“复制到”。
  4. 在“复制语音模型”页上,选择要复制模型的目标区域。 Speech Studio 中应用的短语列表的屏幕截图。
  5. 选择目标区域中的语音资源,或创建一个新的语音资源。
  6. 选择要在其中复制模型的项目,或创建一个新项目。
  7. 选择“复制”。

成功复制模型后,你将收到通知,并可在目标项目中查看它。

语音 CLI 不支持将模型直接复制到另一个区域中的项目。 可以使用 Speech Studio语音转文本 REST API 将模型复制到另一个区域的项目中。

若要将模型复制到另一个语音资源,请使用语音转文本 REST APIModels_CopyTo 操作。 根据以下说明构造请求正文:

  • 将所需的 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.1/models/YourModelId:copyto"

注意

只有请求正文中的 targetSubscriptionKey 属性具有有关目标语音资源的信息。

应收到以下格式的响应正文:

{
  "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/9df35ddb-edf9-4e91-8d1a-576d09aabdae",
  "baseModel": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/eb5450a7-3ca2-461a-b2d7-ddbb3ad96540"
  },
  "links": {
    "manifest": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/9df35ddb-edf9-4e91-8d1a-576d09aabdae/manifest",
    "copyTo": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/9df35ddb-edf9-4e91-8d1a-576d09aabdae:copyto"
  },
  "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.1 --model YourModelId --project YourProjectId

应收到以下格式的响应正文:

{
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/e6ffdefd-9517-45a9-a89c-7b5028ed0e56"
  },
}

对于模型的语音 CLI 帮助,请运行以下命令:

spx help csr model

若要将新模型连接到复制了模型的语音资源项目,请使用语音转文本 REST APIModels_Update 操作。 根据以下说明构造请求正文:

  • 将所需的 project 属性设置为现有项目的 URI。 建议使用此属性,这样你还可以在 Speech Studio 中查看和管理模型。 可以发出 Projects_List 请求来获取可用项目。

使用 URI 发出 HTTP PATCH 请求,如以下示例所示。 使用新模型的 URI。 可以从 Models_CopyTo 响应正文的 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.1/projects/e6ffdefd-9517-45a9-a89c-7b5028ed0e56"
  },
}'  "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.1/models"

你应该会收到以下格式的响应正文:

{
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/e6ffdefd-9517-45a9-a89c-7b5028ed0e56"
  },
}

后续步骤