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

测试自定义语音识别模型的准确性

本文介绍如何以定量方式度量和提高 Microsoft 的语音转文本模型或你自己的自定义模型的准确度。 测试准确性需要音频 + 人工标记的口述文本数据。 应提供 30 分钟到 5 小时的代表性音频。

重要

测试时,系统将执行听录。 请务必记住这一点,因为定价因服务产品和订阅级别而异。 请始终参阅官方 Azure 认知服务定价获取最新详细信息

创建测试

可以通过创建测试来测试自定义模型的准确性。 测试需要一系列音频文件及其相应的听录内容。 可以比较自定义模型、Microsoft 语音转文本基础模型或其他自定义模型的准确性。 获取测试结果后,对比语音识别结果评估单词错误率 (WER)。

按照以下步骤创建测试:

  1. 登录 Speech Studio

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

  3. 选择“创建新测试”。

  4. 选择“评估准确度”>“下一步”。

  5. 选择一个音频 + 人为标记的听录内容数据集,然后选择“下一步”。 如果没有任何可用的数据集,请取消设置,然后转到“语音数据集”菜单来上传数据集

    注意

    选择的声学数据集必须不同于你对自己的模型使用的数据集。 此方法可以提供真正有意义的模型性能。

  6. 选择最多两个要评估的模型,然后选择“下一步”。

  7. 输入测试名称和描述,然后选择“下一步”。

  8. 查看测试详细信息,然后选择“保存并关闭”。

若要创建测试,请使用 spx csr evaluation create 命令。 根据以下说明构造请求参数:

  • project 参数设置为现有项目的 ID。 建议这样做,以便还可以在 Speech Studio 中查看测试。 可以运行 spx csr project list 命令来获取可用项目。
  • 将所需的 model1 参数设置为要测试的模型的 ID。
  • 将所需的 model2 参数设置为要测试的另一个模型的 ID。 如果不想比较两个模型,请同时对 model1model2 使用相同的模型。
  • 将所需的 dataset 参数设置为要用于测试的数据集的 ID。
  • 设置 language 参数,否则语音 CLI 将默认设置为“en-US”。 这应该是数据集内容的区域设置。 以后无法更改此区域设置。 语音 CLI language 参数对应于 JSON 请求和响应中的 locale 属性。
  • 设置所需的 name 参数。 这是 Speech Studio 中显示的名称。 语音 CLI name 参数对应于 JSON 请求和响应中的 displayName 属性。

下面是创建测试的语音 CLI 命令的示例:

spx csr evaluation create --project 9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226 --dataset be378d9d-a9d7-4d4a-820a-e0432e8678c7 --model1 ff43e922-e3e6-4bf0-8473-55c08fd68048 --model2 1aae1070-7972-47e9-a977-87e3b05c457d --name "My Evaluation" --description "My Evaluation Description"

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

{
  "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
  "model1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
  },
  "model2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "dataset": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
  },
  "transcription2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
  },
  "transcription1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
  },
  "links": {
    "files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
  },
  "properties": {
    "wordErrorRate2": -1.0,
    "wordErrorRate1": -1.0,
    "sentenceErrorRate2": -1.0,
    "sentenceCount2": -1,
    "wordCount2": -1,
    "correctWordCount2": -1,
    "wordSubstitutionCount2": -1,
    "wordDeletionCount2": -1,
    "wordInsertionCount2": -1,
    "sentenceErrorRate1": -1.0,
    "sentenceCount1": -1,
    "wordCount1": -1,
    "correctWordCount1": -1,
    "wordSubstitutionCount1": -1,
    "wordDeletionCount1": -1,
    "wordInsertionCount1": -1
  },
  "lastActionDateTime": "2022-05-20T16:42:43Z",
  "status": "NotStarted",
  "createdDateTime": "2022-05-20T16:42:43Z",
  "locale": "en-US",
  "displayName": "My Evaluation",
  "description": "My Evaluation Description"
}

响应正文中的顶级 self 属性是评估的 URI。 使用此 URI 获取有关项目和测试结果的详细信息。 还可以使用此 URI 更新或删除评估。

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

spx help csr evaluation

若要创建测试,请使用语音转文本 REST APICreateEvaluation 操作。 根据以下说明构造请求正文:

  • project 属性设置为现有项目的 URI。 建议这样做,以便还可以在 Speech Studio 中查看测试。 可以提出 GetProjects 请求来获取可用项目。
  • customProperties 内将 testingKind 属性设置为 Evaluation。 如果未指定 Evaluation,则该测试将被视为质量检查测试。 无论 testingKind 属性设置为 EvaluationInspection,还是未设置,都可以通过 API 访问准确度分数,但不能在 Speech Studio 中访问。
  • 将所需的 model1 属性设置为要测试的模型的 URI。
  • 将所需的 model2 属性设置为要测试的另一个模型的 URI。 如果不想比较两个模型,请同时对 model1model2 使用相同的模型。
  • 将所需的 dataset 属性设置为要用于测试的数据集的 URI。
  • 设置所需的 locale 属性。 这应该是数据集内容的区域设置。 以后无法更改此区域设置。
  • 设置所需的 displayName 属性。 这是将在 Speech Studio 中显示的名称。

使用 URI 发出 HTTP POST 请求,如以下示例所示。 将 YourSubscriptionKey 替换为语音资源密钥,将 YourServiceRegion 替换为语音资源区域,并按前面所述设置请求正文属性。

curl -v -X POST -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey" -H "Content-Type: application/json" -d '{
  "model1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
  },
  "model2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "dataset": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
  },
  "displayName": "My Evaluation",
  "description": "My Evaluation Description",
  "customProperties": {
    "testingKind": "Evaluation"
  },
  "locale": "en-US"
}'  "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations"

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

{
  "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
  "model1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
  },
  "model2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "dataset": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
  },
  "transcription2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
  },
  "transcription1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
  },
  "links": {
    "files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
  },
  "properties": {
    "wordErrorRate2": -1.0,
    "wordErrorRate1": -1.0,
    "sentenceErrorRate2": -1.0,
    "sentenceCount2": -1,
    "wordCount2": -1,
    "correctWordCount2": -1,
    "wordSubstitutionCount2": -1,
    "wordDeletionCount2": -1,
    "wordInsertionCount2": -1,
    "sentenceErrorRate1": -1.0,
    "sentenceCount1": -1,
    "wordCount1": -1,
    "correctWordCount1": -1,
    "wordSubstitutionCount1": -1,
    "wordDeletionCount1": -1,
    "wordInsertionCount1": -1
  },
  "lastActionDateTime": "2022-05-20T16:42:43Z",
  "status": "NotStarted",
  "createdDateTime": "2022-05-20T16:42:43Z",
  "locale": "en-US",
  "displayName": "My Evaluation",
  "description": "My Evaluation Description",
  "customProperties": {
    "testingKind": "Evaluation"
  }
}

响应正文中的顶级 self 属性是评估的 URI。 使用此 URI 获取有关评估的项目和测试结果的详细信息。 还可以使用此 URI 更新删除评估。

获取测试结果

你应获取测试结果,并对比语音识别结果评估单词错误率 (WER)。

按照以下步骤获取测试结果:

  1. 登录 Speech Studio
  2. 选择“自定义语音识别”> 你的项目名称 >“测试模型”。
  3. 按测试名称选择链接。
  4. 测试完成后,状态设置为“成功”指示,应会看到包含每个测试模型的 WER 编号的结果。

此页面会列出数据集中的所有语句和识别结果,以及提供的数据集中的听录。 可以切换各种错误类型,包括插入、删除和替换。 通过听音频并比较每个列中的识别结果,你可以确定哪个模型符合自己的需求,以及确定需要在哪些方面进行更多的训练和改进。

若要获取测试结果,请使用 spx csr evaluation status 命令。 根据以下说明构造请求参数:

  • 将所需的 evaluation 参数设置为要获取测试结果的评估的 ID。

下面是获取测试结果的语音 CLI 命令示例:

spx csr evaluation status --evaluation 8bfe6b05-f093-4ab4-be7d-180374b751ca

单词错误率和更多详细信息将在响应正文中返回。

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

{
	"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
	"model1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
	},
	"model2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
	},
	"dataset": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
	},
	"transcription2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
	},
	"transcription1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
	},
	"project": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
	},
	"links": {
		"files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
	},
	"properties": {
		"wordErrorRate2": 4.62,
		"wordErrorRate1": 4.6,
		"sentenceErrorRate2": 66.7,
		"sentenceCount2": 3,
		"wordCount2": 173,
		"correctWordCount2": 166,
		"wordSubstitutionCount2": 7,
		"wordDeletionCount2": 0,
		"wordInsertionCount2": 1,
		"sentenceErrorRate1": 66.7,
		"sentenceCount1": 3,
		"wordCount1": 174,
		"correctWordCount1": 166,
		"wordSubstitutionCount1": 7,
		"wordDeletionCount1": 1,
		"wordInsertionCount1": 0
	},
	"lastActionDateTime": "2022-05-20T16:42:56Z",
	"status": "Succeeded",
	"createdDateTime": "2022-05-20T16:42:43Z",
	"locale": "en-US",
	"displayName": "My Evaluation",
	"description": "My Evaluation Description",
	"customProperties": {
		"testingKind": "Evaluation"
	}
}

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

spx help csr evaluation

若要获取测试结果,首先使用语音转文本 REST APIGetEvaluation 操作。

使用 URI 发出 HTTP GET 请求,如以下示例所示。 将 YourEvaluationId 替换为评估 ID,将 YourSubscriptionKey 替换为语音资源密钥,将 YourServiceRegion 替换为语音资源区域。

curl -v -X GET "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/YourEvaluationId" -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey"

单词错误率和更多详细信息将在响应正文中返回。

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

{
	"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
	"model1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
	},
	"model2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
	},
	"dataset": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
	},
	"transcription2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
	},
	"transcription1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
	},
	"project": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
	},
	"links": {
		"files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
	},
	"properties": {
		"wordErrorRate2": 4.62,
		"wordErrorRate1": 4.6,
		"sentenceErrorRate2": 66.7,
		"sentenceCount2": 3,
		"wordCount2": 173,
		"correctWordCount2": 166,
		"wordSubstitutionCount2": 7,
		"wordDeletionCount2": 0,
		"wordInsertionCount2": 1,
		"sentenceErrorRate1": 66.7,
		"sentenceCount1": 3,
		"wordCount1": 174,
		"correctWordCount1": 166,
		"wordSubstitutionCount1": 7,
		"wordDeletionCount1": 1,
		"wordInsertionCount1": 0
	},
	"lastActionDateTime": "2022-05-20T16:42:56Z",
	"status": "Succeeded",
	"createdDateTime": "2022-05-20T16:42:43Z",
	"locale": "en-US",
	"displayName": "My Evaluation",
	"description": "My Evaluation Description",
	"customProperties": {
		"testingKind": "Evaluation"
	}
}

评估字词错误率

用于度量模型准确度的行业标准是误字率 (WER)。 WER 计算在识别过程中标识的错误单词的数量,并将总和除以人工标记的听录中提供的单词总数 (N)。

错误标识的单词分为三个类别:

  • 插入 (I):在假设脚本中错误添加的单词
  • 删除 (D):在假设脚本中未检测到的单词
  • 替换 (S):在引用和假设之间替换的单词

在 Speech Studio 中,商乘以 100,显示为百分比。 语音 CLI 和 REST API 结果不乘以 100。

$$ WER = {{I+D+S}\over N} \times 100 $$

以下示例显示了与人工标记的口述文本相比的错误识别的单词:

显示错误标识的单词示例的屏幕截图。

语音识别结果错误如下:

  • 插入 (I):添加了单词“a”
  • 删除 (D):删除了单词“are”
  • 替换 (S):用单词“Jones”代替“John”

上述示例中的单词错误率为 60%。

如果要在本地复制 WER 度量,可使用 NIST 评分工具包 (SCTK) 中的 sclite 工具。

解决错误并降低 WER

可以使用机器识别结果中的 WER 计算来评估与应用、工具或产品配合使用的模型的质量。 WER 为 5-10% 表明质量好,可以使用。 WER 为 20% 可以接受,但可能需要考虑进行更多的训练。 WER 为 30% 或以上表明质量差,需要自定义和训练。

错误的分布情况很重要。 如果遇到许多删除错误,通常是因为音频信号强度弱。 若要解决此问题,需要在收集音频数据时更靠近源。 插入错误意味着音频是在嘈杂环境中记录的,并且可能存在串音,导致识别问题。 如果以人为标记的听录或相关文本形式提供特定于领域的术语样本不足,则通常会遇到替换错误。

可以通过分析单个文件来确定存在的错误的类型,以及哪些错误是特定文件独有的。 在文件级别了解问题将有助于你确定改进目标。

示例方案结果

语音识别场景因音频质量和语言(词汇和说话风格)而异。 下表考察了四种常见的场景:

方案 音频质量 词汇 说话风格
呼叫中心 低,8 kHz,可以是 1 个音频通道上的 2 个人,可以压缩 窄,特定于域和产品 会话,松散结构
语音助理(如 Cortana 或驾车通过式窗口) 高音,16 kHz 实体拥堵(歌曲名、产品、位置) 明确表述的单词和短语
听写(即时消息、笔记、搜索) 高音,16 kHz Varied 笔记记录
视频隐藏式字幕 各式各样,包括各种麦克风使用、添加的音乐 各式各样,包括会议、诵读演讲、音乐歌词 阅读、准备或松散结构

不同场景会产生不同的质量结果。 下表检查了如何用 WER 计算这四种方案中内容的错误率。 下表显示了每个场景中最常见的错误类型。 插入、替换和删除错误率有助于确定要添加哪种数据来改进模型。

方案 语音识别质量 插入错误 删除错误 替换错误
呼叫中心
(< 30% WER)
低,但其他人在后台对话时除外 可能很高。 呼叫中心可能会有噪音,说话人声音重叠可能会对模型造成混淆 中等。 产品和人员的名称可能会导致这些错误
语音助手
(可以 < 10% WER)
中,由于歌曲名称、产品名称或位置
听写
(可以 < 10% WER)
视频隐藏式字幕 根据视频类型而定(可能 < 50% WER) 可能由于音乐、噪音、麦克风质量而较高 专门术语可能导致这些错误

后续步骤