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

训练和测试数据

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

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

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

数据类型

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

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

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

提示

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

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

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

按方案考虑数据集

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

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

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

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

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

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

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

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

重要说明

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

如果音频来自目标用例,那么带有人工标注转录的音频可以最大程度地提高准确性。 示例必须涵盖整个语音范围。 例如,零售商店的呼叫中心在夏季会接到最多的关于泳装和太阳镜的咨询电话。 确保样本包含要检测的全部语音范围。

考虑以下细节:

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

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

音频文件开头和结尾可能会有静音部分。 如果可能,请在每个示例文件中于语音前后各保留至少半秒的静音。 录音音量小或具有干扰性背景噪音的音频没什么用,但不应限制或降低自定义模型性能。 在采集音频样本之前,务必考虑升级麦克风和信号处理硬件。

重要说明

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

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

重要说明

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

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

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

用于训练的纯文本数据

可以添加相关文本的纯文本句子,以提高特定于领域的字词和短语的识别能力。 相关文本句子可通过在上下文中显示常见字词和领域特定字词,来减少与错误识别这些字词相关的替换错误。 领域特定词汇可以是不常用的词汇或自造词,但它们的发音必须简单易懂才能被识别。

在单个文本文件中提供与域相关的句子。 使用较接近预期口头言语的文本数据。 言语不一定要是完整的或者语法正确的,但必须准确反映希望模型识别的语音输入。 尽可能将每个句子或关键词放在单独的一行上。 若要增加产品名称等术语的权重,请添加包含该术语的多个句子。 但不要复制太多 - 这可能会影响整体识别率。

注意

避免使用包含干扰信息(例如无法识别的字符或单词)的相关文本句子。

使用此表确保正确设置纯文本数据集文件的格式:

properties
文本编码 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 行。

用于训练的结构化文本数据

注意

用于训练的结构化文本数据处于公共预览版。

当你的数据在特定语句中遵循特定模式,而这些语句的不同之处只在于一个列表中的字词或短语时,请使用结构化文本数据。 若要简化训练数据的创建并在自定义语言模型内实现更好的建模,可以使用 Markdown 格式的结构化文本来定义项列表和字词的语音发音。 然后,你可以在你的训练话语内引用这些列表。

预期的话语通常遵循特定模式。 一种常见的模式是,话语的不同之处仅限于一个列表中的字词或短语。 此模式的示例如下:

  • “我有一个关于 product 的问题”,其中 product 是可能的产品的列表。
  • “使该 object 成为 color”,其中 object 是几何形状的列表,color 是颜色的列表。

有关使用结构化文本进行训练的受支持基本模型和区域设置的列表,请参阅语言支持。 对于这些区域设置,必须使用最新的基础模型。 对于不支持使用结构化文本进行训练的区域设置,服务将在使用纯文本数据进行训练时采用不引用任何类的任何训练句子。

结构化文本文件应具有 .md 扩展名。 最大文件大小为 200 MB,文本编码必须为 UTF-8 BOM。 Markdown 的语法与 Azure 语言理解模型中的语法相同,尤其是列表实体和示例言语。 有关完整的 Markdown 语法的详细信息,请参阅语言理解 Markdown

以下是有关支持的 Markdown 格式的关键详细信息:

properties 说明 限制
@list 可以在示例句子中引用的项列表。 最多 20 个列表。 每个列表最多 35,000 项。
speech:phoneticlexicon 根据通用电话集的语音发音列表。 发音会针对列表或训练句子中出现的每一例字词进行调整。 例如,如果有一个听起来像“cat”的单词,并且你想将发音调整为“k ae t”,则可以将 - cat/k ae t 添加到 speech:phoneticlexicon 列表中。 最多 15,000 个条目。 每个字词最多 2 个发音。
#ExampleSentences 井号 (#) 分隔一段示例句子。 部分标题只能包含字母、数字和下划线。 示例句子应反映模型应预期的语音范围。 训练句子可以通过使用左右大括号 ({@list name}) 来引用 @list 下的项。 可以在同一个训练句子中引用多个列表,或者根本不引用。 文件大小上限为 200 MB。
// 注释跟在双斜杠 (//) 之后。 不适用

以下是一个示例结构化文本文件:

// This is a comment because it follows a double slash (`//`).

// Here are three separate lists of items that can be referenced in an example sentence. You can have up to 10 of these.
@ list food =
- pizza
- burger
- ice cream
- soda

@ list pet =
- cat
- dog
- fish

@ list sports =
- soccer
- tennis
- cricket
- basketball
- baseball
- football

// List of phonetic pronunciations
@ speech:phoneticlexicon
- cat/k ae t
- fish/f ih sh

// Here are two sections of training sentences. 
#TrainingSentences_Section1
- you can include sentences without a class reference
- what {@pet} do you have
- I like eating {@food} and playing {@sports}
- my {@pet} likes {@food}

#TrainingSentences_Section2
- you can include more sentences without a class reference
- or more sentences that have a class reference like {@pet} 

用于训练的发音数据

专业化或杜撰的字词可能具有独特的发音。 如果可以将这类字词分解为更小的字词进行发音,则可以识别这些字词。 例如,若要识别“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

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

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

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

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

注意

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

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

重要说明

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

properties
文件格式 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

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

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

自动语音识别输出显示格式对于下游任务至关重要,单一尺寸并不适合所有情况。 添加自定义显示格式规则允许用户定义自己的词汇到显示格式规则,以提高 Microsoft 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

Next steps