训练和测试数据

在自定义语音识别项目中,可以上传数据集以进行训练、定性检查和定量测量。 本文介绍了可用于自定义语音识别的训练和测试数据类型。

用来测试和训练自定义模型的文本和音频应包含需要你的模型来识别的来自各种说话人和场景的示例。 收集进行自定义模型测试和训练所需的数据时,请考虑以下因素:

  • 包括文本和音频数据,以涵盖用户在与你的模型互动时所用的各种语言陈述。 例如,一个能升高和降低温度的模型需要针对人们在请求进行这种更改时会用的陈述进行训练。
  • 包含你希望模型识别的所有语音差异。 许多因素可能会改变语音,包括口音、方言、语言混合、年龄、性别、语音音调、紧张程度和当日时间。
  • 包括来自你的模型的各种使用环境(例如室内、户外和公路噪音)的样本。
  • 使用生产系统使用的硬件设备录制音频。 如果你的模型必须识别在不同质量的设备上录制的语音,则你提供的用来训练模型的音频数据也必须能够代表这些不同的场景。
  • 使数据集保持多样性并且能够代表你的项目要求。 以后可以向模型中添加更多数据。
  • 只包含模型需要转录的数据。 包含不在自定义模型识别要求范围内的数据可能会损害整体识别质量。

数据类型

下表列出了接受的数据类型、何时使用每种数据类型,以及建议的数量。 创建模型不一定要用到每种数据类型。 数据要求根据是要创建测试还是训练模型而异。

数据类型 用于测试 建议用于测试 用于训练 建议用于训练
仅音频 是(视觉检测) 5 个以上的音频文件 是(en-US 的预览版) 1-100 小时的音频
音频和人为标记的听录内容 是(准确度评估) 0.5-5 小时的音频 1-100 小时的音频
纯文本 不适用 1-200 MB 的相关文本
发音 不适用 1 KB 到 1 MB 的发音文本
显示格式 不适用 对于 ITN 最多 200 行,对于重写最多 1000 行,对于亵渎内容筛选器 最多 1000 行

使用纯文本或结构化文本进行的训练通常在几分钟内完成。

提示

从纯文本数据或结构化文本数据开始。 此数据将改进对特殊词语和短语的识别。 使用文本进行训练比使用音频进行训练的速度快得多(分钟与天的对比)。

请从与模型将要使用的语言、声效和硬件相匹配的小型示例数据集着手。 具有代表性的数据的小型数据集可能会在你投入精力收集更大的数据集进行训练之前暴露一些问题。 有关自定义语音识别数据示例,请参阅此 GitHub 存储库

如果要使用音频数据训练自定义模型,请选择具备语音数据训练专用硬件的语音资源区域。 有关详细信息,请参阅区域表中的脚注。 在具有专用于自定义语音识别训练的硬件的区域中,语音服务使用长达 100 小时的音频训练数据,并且每天可以处理大约 10 小时的数据。 训练模型后,可以根据需要使用 Models_CopyTo REST API 将模型复制到另一个区域。

按方案考虑数据集

基于部分场景训练的模型只能在这些场景中很好地执行。 请仔细选择能够代表你要求自定义模型识别的全部场景范围的数据。 下表显示了可以考虑用于某些语音识别方案的数据集:

方案 纯文本数据和结构化文本数据 音频和人为标记的听录内容 带有发音的新字词
呼叫中心 与呼叫中心活动相关的营销文档、网站和产品评审 呼叫中心通话采用人工转录 发音模糊的术语(请参阅前面部分的 Xbox 示例)
语音助手 使用命令和实体的各种组合的句子列表 将语音命令录制到设备中,转录到文本中 具有独特发音的名称(电影、歌曲、产品)
听写 书面输入内容,例如即时消息或电子邮件 与前面的示例类似 与前面的示例类似
视频隐藏式字幕 电视节目脚本、电影、营销内容、视频摘要 视频的确切脚本 与前面的示例类似

若要确定用于解决问题的数据集,请参阅下表:

使用案例 数据类型
提高特定于行业的词汇和语法(例如医疗术语或 IT 行话)的识别准确度。 纯文本或结构化文本数据
定义发音不标准的字词或术语(例如产品名或首字母缩写)的语音和显示形式。 以结构化文本表示的发音数据或语音发音
提高说话风格、口音或特定背景杂音的识别准确度。 音频和人为标记的听录内容

用于训练或测试的音频 + 人为标记的听录内容数据

可以将音频 + 人为标记的听录内容数据用于训练测试目的。 必须提供人为标记的听录内容(逐字)进行比较:

  • 改进轻微口音、说话风格和背景噪音等声学方面。
  • 测量 Azure 在处理音频文件时的语音转文本准确性的准确度。

有关支持使用音频数据进行训练的基础模型的列表,请参阅语言支持。 即使基本模型确实支持使用音频数据进行训练,该服务也可能只使用部分音频。 它仍然使用所有口述文本。

重要

如果基础模型不支持使用音频数据进行自定义,则仅使用听录文本进行训练。 如果切换到支持使用音频数据进行自定义的基础模型,则训练时间可能会从几小时增加到几天。 当切换到不使用专用硬件进行训练的区域中的基础模型时,训练时间的变化最为明显。 如果不需要音频数据,则应将其删除,以减少训练时间。

如果音频来自目标用例,则带有人为标记的脚本的音频可提供最大的准确性改进。 示例必须涵盖整个语音范围。 例如,零售商店的呼叫中心会在夏季接到大量有关泳装和太阳镜的电话。 确保示例包括要检测的整个语音范围。

考虑以下细节:

  • 如果音频对人们来说也很难理解,那么通过音频进行训练将提供最大优势。 在大多数情况下,你应该只使用相关文本开始训练。
  • 如果使用最常使用的语言之一(如美国英语),则不太可能需要使用音频数据进行训练。 对于此类语言,基本模型在大多数方案中已提供非常好的识别结果,因此使用相关文本进行训练可能足矣。
  • 自定义语音识别只能捕获字词上下文来减少替换错误,而不会减少插入或删除错误。
  • 避免使用包含脚本错误的示例,但使用包含各种音频质量的示例。
  • 避免使用与问题领域无关的句子。 不相关的句子可能损坏模型。
  • 当脚本质量参差不齐时,可以复制非常好的句子(例如包含关键短语的极好听录内容)以增加其权重。
  • 语音服务会自动使用脚本来改进对领域特定字词和短语的识别,就像它们被添加作为相关文本一样。
  • 完成训练操作可能需要几天时间。 为了加快训练速度,请确保在具有专用硬件的区域中创建语音服务订阅来进行训练。

需要大型训练数据集才能提高识别能力。 通常,我们建议为 1 到 100 小时的音频提供逐字听录(对于不收取训练费用的较旧模型,最多 20 小时)。 不过,即使是短至 30 分钟的音频,也可以帮助改善识别结果。 虽然创建人为标记的听录内容可能耗费时间,但识别方面的改进会很大,具体取决于你提供的数据。 应仅上传高质量的脚本。

音频文件在录音开始和结束时可以保持静音。 如果可能,请在每个示例文件中的语音前后包含至少半秒的静音。 录音音量小或具有干扰性背景噪音的音频没什么用,但不应限制或降低自定义模型性能。 收集音频示例之前,请务必考虑升级麦克风和信号处理硬件。

重要

有关准备人为标记脚本的最佳做法的详细信息,请参阅带有音频的人为标记脚本

自定义语音识别项目需要具有以下属性的音频文件:

重要

这些是对音频 + 人工标记脚本的训练和测试的要求。 它们不同于对仅限音频的训练和测试的要求。 如果要使用仅限音频的训练和测试,请参阅此部分

属性
文件格式 RIFF (WAV)
采样速率 8,000 Hz 或 16,000 Hz
声道 1(单音)
每个音频的最大长度 2 小时(测试)/ 40 秒(训练)

使用音频进行训练时,每个文件的最大音频长度为 40 秒(对于 Whisper 自定义,最长为 30 秒)。 对于超过 40 秒的音频文件,将仅使用听录文件中的相应文本进行训练。 如果所有音频文件都超过 40 秒,训练将失败。
示例格式 PCM,16 位
存档格式 .zip
最大 zip 大小 2 GB 或 10,000 个文件

用于训练的纯文本数据

可以添加相关文本的纯文本句子,以提高对特定于领域的字词和短语的识别能力。 相关文本句子可通过在上下文中显示常见字词和领域特定字词,来减少与错误识别这些字词相关的替换错误。 特定领域的字词可能不太常见或者属于杜撰的字词,但其发音必须易于识别。

在单个文本文件中提供与领域相关的句子。 使用接近预期口语的文本数据。 话语不需要是完整的或语法正确的,但必须准确反映此模型预期能够识别的语音输入。 如果可能,尽量将一个句子或关键字控制在单独的一行中。 若要增加某个术语(如产品名称)的权重,请添加多个包含该术语的句子。 但不要复制太多 - 这可能会影响整体识别率。

注意

避免相关的文本句子包含无法识别的字符或字词等干扰因素。

参考下表来确保正确设置纯文本数据集文件的格式:

属性
文本编码 UTF-8 BOM
每行的话语数 1
文件大小上限 200 MB

还必须遵守以下限制:

  • 请避免将字符、单词或词组重复三次以上。 例如,不要使用“aaaa”、“yeah yeah yeah yeah”或“that's it that's it that's it that's it”。语音服务可能会删除包含太多重复项的行。
  • 请勿使用特殊字符或编码在 U+00A1 以后的 UTF-8 字符。
  • 将会拒绝 URI。
  • 对于某些语言(例如日语或韩语),导入大量文本数据可能需要很长时间,或者可能会超时。请考虑将数据集拆分为多个文本文件(每个文件最多 20,000 行)。

用于训练的发音数据

专用或杜撰的字词可能有独特的发音。 如果可以将这类字词分解为更小的字词进行发音,则可以识别这些字词。 例如,若要识别“Xbox”,可以将它念成“X box”。 此方法不会提高总体准确性,但可以增加此关键字和其他关键字的识别度。

你可以提供自定义发音文件来提高识别能力。 不要使用自定义发音文件来改变常用字的发音。 有关支持自定义发音的语言的列表,请参阅语言支持

口述形式是拼写的拼音顺序。它可以由字母、单词、音节或三者的组合组成。 下表包含一些示例:

已识别的显示形式 口头形式
3CPO three c p o
CNTK c n t k
IEEE i triple e

在单个文本文件中提供发音。 包含口述言语以及每个言语的自定义发音。 文件中的每一行都应以已识别的形式开始,接着是制表符,然后是空格分隔的语音序列。

3CPO    three c p o
CNTK    c n t k
IEEE    i triple e

请参阅下表,确保发音数据集文件有效且格式正确。

属性
文本编码 UTF-8 BOM(英语还支持 ANSI)
每行的发音数 1
文件大小上限 1 MB(在免费层中为 1 KB)

用于训练或测试的音频数据

音频数据最适合用于测试 Microsoft 基线语音转文本模型或自定义模型的准确度。 请记住,音频数据用于检查语音的准确度,反映特定模型的性能。 如果要量化模型的准确性,请使用音频 + 人为标记的听录内容

注意

用于训练的仅限音频的数据可用于 en-US 区域设置的预览版。 对于其他区域设置,若要使用音频数据进行训练,还必须提供人工标记的脚本

自定义语音识别项目需要具有以下属性的音频文件:

重要

这些是对仅限音频的训练和测试的要求。 它们不同于对音频 + 人工标记脚本的训练和测试的要求。 如果要使用音频 + 人工标记脚本的训练和测试,请参阅此部分

属性
文件格式 RIFF (WAV)
采样速率 8,000 Hz 或 16,000 Hz
声道 1(单音)
每个音频的最大长度 两小时
示例格式 PCM,16 位
存档格式 .zip
最大存档大小 2 GB 或 10,000 个文件

注意

上传训练和测试数据时,.zip 文件大小不能超过 2 GB。 如果需要更多数据来进行训练,请将其划分为多个 .zip 文件并分别上传。 稍后,可选择从多个数据集进行训练。 但是,只能从单个数据集进行测试。

使用 SoX 来验证音频属性,或将现有音频转换为适当的格式。 下面是一些 SoX 命令示例:

活动 SoX 命令
检查音频文件格式。 sox --i <filename>
将音频文件转换为单声道 16 位 16 KHz。 sox <input> -b 16 -e signed-integer -c 1 -r 16k -t wav <output>.wav

用于训练的自定义显示文本格式设置数据

详细了解准备显示文本格式设置数据语音转文本的显示文本格式设置

自动语音识别输出显示格式对于下游任务至关重要,单一尺寸并不适合所有情况。 添加自定义显示格式规则后,用户就可以定义自己的从词汇到显示的格式规则,以提高基于 Azure 自定义语音服务的语音识别服务质量。

它允许你完全自定义显示输出,例如添加重写规则以大写和重新格式化某些单词、添加脏话和输出掩码、为某些模式(如数字、日期、电子邮件地址)定义高级 ITN 规则;或保留一些短语,使它们不参与任何显示进程。

例如:

自定义格式设置 显示文本
我的 contoso 财务号码是 8BEV3
将“Contoso”大写(通过 #rewrite 规则)
设置财务号码格式(通过 #itn 规则)
我的 Contoso 财务号码是 8B-EV-3

有关使用结构化文本进行训练的受支持基本模型和区域设置的列表,请参阅语言支持。 显示格式化文件应具有 .md 扩展名。 最大文件大小为 10 MB,文本编码必须为 UTF-8 BOM。 若要详细了解如何自定义显示格式规则,请参阅“显示格式设置规则最佳做法”。

properties 说明 限制
#ITN 用于定义某些显示模式(例如数字、地址和日期)的反转文本规范化规则列表。 最多 200 行
#rewrite 出于大写和拼写更正等原因替换某些单词的重写对列表。 最多 1,000 行
#profanity 不需要的单词的列表,这些单词将在“显示和屏蔽”输出中被屏蔽为 ******,位于 Microsoft 内置脏话列表的顶部。 最多 1,000 行
#test 用于验证显示规则是否有效的单元测试用例的列表,包括词法格式输入和预期显示格式输出。 文件大小上限为 10 MB

下面是显示格式化文件的示例:

// this is a comment line
// each section must start with a '#' character
#itn
// list of ITN pattern rules, one rule for each line
\d-\d-\d
\d-\l-\l-\d
#rewrite
// list of rewrite rules, each rule has two phrases, separated by a tab character
old phrase	new phrase
# profanity
// list of profanity phrases to be tagged/removed/masked, one line one phrase
fakeprofanity
#test
// list of test cases, each test case has two sentences, input lexical and expected display output
// the two sentences are separated by a tab character
// the expected sentence is the display output of DPP+CDPP models
Mask the fakeprofanity word	Mask the ************* word

后续步骤