如何为自定义语音准备显示文本格式训练数据

Azure AI 语音服务可被视为两个组件:语音识别和显示文本格式设置。 语音识别将音频转录为词法文本,然后将词法文本转换为显示文本。

Diagram of the flow of speech recognition to lexical to display text.

以下区域设置支持“显示文本格式”功能:da-DK、de-DE、en-AU、en-CA、en-GB、en-HK、en-IE、en-IN、 en-NG、en-NZ、en-PH、en-SG、en-US、es-ES、es-MX、fi-FI、fr-CA、fr-FR、hi-IN、it-IT、ja-JP、ko-KR、nb-NO、nl-NL、pl-PL、pt-BR、pt-PT、sv-SE、tr-TR、zh-cn、zh-HK。

默认显示文本格式设置

显示文本管道由一系列显示格式生成器组成。 每个生成器对应于一个显示格式任务,例如 ITN、大写和不雅内容筛选。

  • 反向文本规范化 (ITN) - 将口语形式数字的文本转换为显示形式。 例如:"I spend twenty dollars" -> "I spend $20"
  • 大写 - 大写实体名称、首字母缩写词或句子的第一个字母。 例如:"she is from microsoft" -> "She is from Microsoft"
  • 不雅内容筛选 - 屏蔽或去除句子中的不雅字词。 例如,假设“abcd”是一个不雅字词,则该字词将被不雅内容掩码 "I never say abcd" -> "I never say ****" 屏蔽

Azure 维护显示文本管道的基本生成器,以便执行常规用途的显示处理任务。 使用语音服务时,默认情况下会获得基本生成器。 有关现成格式设置的详细信息,请参阅显示文本格式

自定义显示文本格式设置

除了 Azure 维护的基本生成器之外,还可以定义自定义显示文本格式规则,以自定义特定方案的显示文本格式管道。 自定义显示文本格式设置规则将在自定义显示文本格设置文件中进行定义。

  • 自定义 ITN - 通过应用客户提供的基于规则的自定义 ITN 模型来扩展基础 ITN 的功能。
  • 自定义重写 - 根据客户提供的基于规则的模型将一个短语重写为另一个短语。
  • 自定义不雅内容筛选 - 根据客户提供的不雅字词列表执行不雅内容处理。

此图显示了显示文本格式设置管道的顺序。

Diagram of the display format builders.

自定义 ITN

基于模式的自定义 ITN 的理念是,你可以指定想要看到的最终输出。 语音服务确定字词的发音方式,并将预测的口语表达映射到指定的输出格式。

自定义 ITN 模型基于一组 ITN 规则生成。 ITN 规则是一个类似于模式字符串的正则表达式,用于描述:

  • 输入字符串的匹配模式
  • 输出字符串的所需格式

会首先应用 Azure 提供的默认 ITN 规则。 默认 ITN 模型的输出将用作自定义 ITN 模型的输入。 自定义 ITN 模型内的匹配算法不区分大小写。

有四类模式与自定义 ITN 规则匹配。

具有文字的模式

例如,开发人员可能有一个以字母数字形式 JO:500 命名的项目(如产品)。 语音服务断定用户可能会将字母部分读作 J Ojoe,将数字部分读作 five hundredfive zero zerofive oh ohfive double zero,然后构建一个模型,用于将所有这些可能性映射到 JO:500(包括插入冒号)。

通过在显示文本格式设置文件中为每一行指定一条规则,可以并行应用多个模式。 下面是一个显示文本格式设置文件的示例,该文件指定了两个规则:

JO:500
MM:760

具有通配符的模式

你可以引用一整套字母数字项(如 JO:500JO:600JO:700),而无需以多种方式拼出所有可能性。

可以使用表示法 [...] 指定字符范围,因此 JO:[5-7]00 等效于写出了三种模式。

还有一组通配符项可供使用。 其中一个是 \d,该项代表任何数字。 因此,JO:\d00 包括了从 JO:000JO:100 直至 JO:900 的所有模式。

与正则表达式一样,ITN 规则有多个预定义的字符类:

  • \d - 匹配“0”到“9”的数字,并将其直接输出
  • \l - 匹配字母(不区分大小写),并将其转换为小写
  • \u - 匹配字母(不区分大小写),并将其转换为大写
  • \a - 匹配字母(不区分大小写),并将其直接输出

还有一些转义表达式用于引用具有特殊语法意义的字符:

  • \\ - 匹配并输出字符 \
  • \(\)
  • \{\}
  • \|
  • \+\?\*

具有正则表达式样式的表示法的模式

为了增强模式编写的灵活性,支持使用了替代项和克林闭包的正则表达式式结构短语。

  • 短语用括号表示,如 (...) - 括号并不按字面算作要匹配的字符。
  • 可以使用 | 字符来指示短语中的替代项,如 (AB|CDE)
  • 可以为短语添加后缀 ?,以指示短语是可选的,添加后缀 + 以指示短语可重复,也可以添加后缀 * 来指示这两者。 你只能使用这些字符(而不是单个字符)作为短语的后缀,这比大多数正则表达式实现更具限制性。

例如,(AB|CD)-(\d)+ 模式将表示“AB-9”或“CD-22”之类的构造,并将扩展为口语 A B nineC D twenty two(或 C D two two)。

具有显式替换的模式

一般的理念是“你向我们展示输出应该是什么样子,语音服务则确定人们如何说出来。”但这一套理念并非总能奏效,因为某些场景可能有奇怪的、不可预知的说话方式,或者语音服务后台规则可能存在漏洞。 例如,首字母缩写和首字母缩略词可能有口语发音 -- ZPI 可能被说成 zippy。 在这种情况下,对于 ZPI-\d\d 之类的模式,如果用户说 zippy twenty two,则不太可能讲得通。 对于这种情况,有一个显示文本格式表示法 {spoken>written}。 此特定案例可以写出为 {zippy>ZPI}-\d\d

这对于处理有语音映射规则但尚不支持的内容非常有用。 例如,你可能会编写一个模式 \d0-\d0,希望系统理解“-”可代表一个范围,并且应该发音为 to,就像在 twenty to thirty 中一样。 但系统也许不会这样做。 因此,你可以编写更明确的模式(例如 \d0{to>-}\d0),告诉系统你希望其如何读出短划线。

你还可以省略 > 及其后面的书写形式,以指示应识别但忽略的字词。 因此,{write} (\u.)+ 之类的模式可识别为 write A B C 并输出为 A.B.C(删除了 write 部分)。

自定义 ITN 示例

将数字分组

将 6 个数字分成两组,并在两组之间添加“-”字符:

ITN 规则:\d\d\d-\d\d\d 示例:"cadence one oh five one fifteen" -> "cadence 105-115"

设置电影名称的格式

Space: 1999 是一部著名的电影,支持该短语的方式为:

ITN 规则:Space: 1999 示例:"watching space nineteen ninety nine" -> "watching Space: 1999"

具有替换的模式

ITN 规则:\d[05]{ to >-}\d[05] 示例:fifteen to twenty -> 15-20

自定义重写

一般情况下,对于输入字符串,重写模型会尝试将输入字符串中的 original phrase 替换为每个重写规则的相应 new phrase。 重写模型是重写规则的集合。

  • 重写规则是一对短语:原始短语和新短语。
  • 这两个短语由制表符分隔。 例如,original phrase{TAB}new phrase
  • 原始短语将匹配(不区分大小写)并替换为新短语(区分大小写)。 匹配期间,将忽略原始短语中的语法标点符号字符
  • 如果有任何重写规则冲突,则使用 original phrase 较长的重写规则作为匹配项。

重写模型默认支持语法大写,即在 en-US 之类的区域设置中将句子的第一个字母大写。 如果在语音识别请求中关闭显示文本格式设置的大写功能,则会关闭该功能。

语法标点符号

语法标点符号字符用于分隔句子或短语,并明确应如何读出句子或短语。

. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،

下面是语法标点符号规则:

  • 如果后面跟有空格,或者位于句子或短语的开头或结尾,则支持的标点符号字符是语法标点符号。 例如,x. y 中的 ..y 之间有一个空格)是语法标点符号。
  • 单词中间的标点符号字符(zh-cnja-jp 除外)不是语法标点符号。 在这种情况下,它们是普通字符。 例如,x.y 中的 . 不是语法标点符号。
  • 对于 zh-cnja-jp(非空格型区域设置),标点符号字符始终用作语法标点符号,即使其位于字符之间也是如此。 例如,中.文 中的 . 是语法标点符号。

自定义重写示例

拼写更正

名称 COVID-19 可能被识别为 covered 19。 若要确保显示 COVID-19 is a virus 而不是 covered 19 is a virus,请使用以下重写规则:

#rewrite
covered 19{TAB}COVID-19

名称大写

Gottfried Wilhelm Leibniz 是一位德国数学家。 为了确保 Gottfried Wilhelm Leibniz 大写,请使用以下重写规则:

#rewrite
gottfried leibniz{TAB}Gottfried Leibniz

自定义不雅内容

自定义不雅内容模型的行为与基本不雅内容模型相同,只不过前者使用自定义不雅短语列表。 此外,自定义不雅内容模型会尝试匹配在显示文本格式设置文件中定义的所有不雅短语(不区分大小写)。

  • 不雅短语匹配(不区分大小写)。
  • 如果有任何不雅短语规则冲突,则最长的短语将用作匹配项。
  • 不雅短语中不支持以下标点符号字符:. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،
  • 对于 zh-cnja-JP 区域设置,不支持英语不雅短语, 但支持英语不雅单词。 支持 zh-cnja-JP 区域设置的不雅短语。

系统将根据你的语音识别请求设置删除或屏蔽不雅内容。

在将不雅内容添加到显示文本格式规则文件并训练自定义模型后,它将用于批量语音转文本和实时语音转文本的默认输出。

自定义不雅内容示例

下面是有关如何在显示文本格式设置文件中屏蔽不雅字词和短语的一些示例。

屏蔽单个不雅单词的示例

假设 xyz 是一个不雅单词。 请添加该单词:

#profanity
xyz

下面是一个测试示例:Turned on profanity masking to mask xyz -> Turned on profanity masking to mask ***

屏蔽不雅短语

假设 abc lmn 是一个不雅短语。 请添加该短语:

#profanity
abc lmn

下面是一个测试示例:Turned on profanity masking to mask abc lmn -> Turned on profanity masking to mask *** ***

后续步骤