自动语音自适应

执行检测意图请求时,您可以选择提供语音上下文,以向语音识别器提供提示。这些提示有助于在特定对话状态下进行识别。

自动语音自适应功能可自动使用会话状态传递相关实体和训练短语作为所有检测意图请求的语音上下文提示,从而提高代理的语音识别准确性。默认情况下,此功能处于启用状态。

启用或停用自动语音自适应

如需启用或停用自动语音自适应,请执行以下操作:

  1. 转到 Dialogflow ES 控制台
  2. 在左侧边栏菜单顶部附近选择您的代理
  3. 点击代理名称旁边的设置 按钮
  4. 选择语音 (Speech) 标签页
  5. 滚动到提高语音识别质量 (Improve Speech Recognition Quality) 部分
  6. 开启或关闭启用自动语音自适应 (Enable Auto Speech Adaptation)

语音识别改进示例

启用自动语音自适应后,您能够以可充分利用代理的方式构建自己的代理。以下几个部分介绍如何通过对代理的训练短语、上下文和实体进行某些更改来改进语音识别功能。

训练短语和上下文

  • 如果使用诸如“stuffy nose”之类的短语来定义训练短语,则类似的最终用户话语会被准确地识别为“stuffy nose”,而不是“stuff he knows”。
  • 当会话具有活跃上下文时,自动语音自适应将极大地偏向于输入上下文都处于活跃状态的意图的训练短语。例如,如果有两个活跃上下文“pay-bill”和“confirmation”,则以下所有意图都会影响自动语音自适应:具有单个输入上下文“pay-bill”的意图,具有单个意图输入上下文“confirmation”的意图,以及具有两个输入上下文“pay-bill”和“confirmation”的意图。

  • 当会话没有活跃上下文时,自动语音自适应将极大地偏向于没有输入上下文的意图的训练短语。

  • 如果您拥有一个强制 Dialogflow 采用槽位填充提示的必需参数,则自动语音自适应会严重偏向于正在填充的实体。

在任何情况下,自动语音自适应只会使语音识别产生偏差,而不会对其进行限制。例如,即使 Dialogflow 提示用户提供必需参数,用户仍然可以触发其他意图,例如顶级“talk to an agent”意图。

系统实体

如果定义了使用 @sys.number 系统实体的训练短语,那么当最终用户说出“I want two”时,可能会被识别为“to”、“too”、“2”或“two”。

启用自动语音自适应后,Dialogflow 在语音识别过程中会使用 @sys.number 实体作为提示,并更有可能将该参数提取为“2”。

自定义实体

  • 如果您为贵公司提供的产品或服务名称定义了实体,那么当最终用户在话语中提及这些字词时,更有可能被识别出来。训练短语“I love Dialogflow”(其中“Dataflow”会注释为“@product 实体”)将告诉自动语音自适应偏向于“I love Dialogflow”、“I love Cloud Speech”以及 @product 实体中的其他条目。

  • 使用 Dialogflow 检测语音时,定义简洁实体同义词尤为重要。假设您有两个 @product 实体条目,即“Dialogflow”和“Dataflow”。您的“Dialogflow”的同义词可能是“Dialogflow”、“dialogue flow”、“dialogue builder”、“Speaktoit”、“speak to it”、“API.ai”、“API dot AI”。这些是很好的同义词,因为它们涵盖了最常见的变体形式。您无需添加“the dialogue flow builder”,因为“dialogue flow”对话流已经涵盖了这一点。

  • 具有连续但不同数量实体的用户话语可能不明确。例如,“I want two sixteen packs”可能意思是 2 个16 包或 216 包。如果您使用逐字母拼读出的值设置实体,语音自适应可以帮助消除这些情况的不明确之处:
    • 使用以下条目定义 quantity 实体:
      zero
      one
      ...
      twenty
    • 使用以下条目定义 productsize 实体:
      sixteen pack
      two ounce
      ...
      five liter
    • 在语音自适应中仅使用实体同义词,因此您可以通过引用值 1 和单个同义词 one 来定义实体,从而简化 fulfillment 逻辑。

正则表达式实体

如果配置正确,正则表达式实体可以针对字母数字序列和数字序列(例如“ABC123”或“12345”)触发自动语音自适应。虽然任何正则表达式都可用于提取 NLP 中的实体,但只有特定表达式会指示自动语音自适应在识别语音时偏向于字母数字序列或数字序列。

如果要通过语音识别这些序列,请检查您是否遵循以下所有要求:

  1. 至少有一个正则表达式实体条目遵循所有以下规则:

    • 可以使用字符集 []
    • 可以使用重复限定符,例如 *?+{3,5}
    • 不包含空格或 \s,但允许使用 \s*\s?
    • 不包含捕获组 ()
    • 不会尝试匹配任何特殊字符或标点符号,例如:` ~ ! @ # $ % ^ & * ( ) - _ = + , . < > / ? ; ' : " [ ] { } \ |
  2. 在您的意图中,将正则表达式实体标记为必需参数,以便在槽位填充期间收集该实体。这样,自动语音自适应功能会严重偏向于序列识别,而不是尝试同时识别意图和序列。否则,“Where is my package for ABC123”可能会被系统误识别为“Where is my package 4ABC123”。

  1. 如果您的传入音频为 8 kHz 的通话质量,则需要启用增强型语音模型,以可靠地识别超过 4 个或 5 个字符的字母数字序列或超过 10 个字符的数字序列。或者,请考虑收集较小的子序列,并使用后续意图或高级网络钩子逻辑将它们组合在一起。

例如,具有单个条目 ([a-zA-Z0-9]\s?){5,9} 的正则表达式实体不会触发语音序列识别器,因为它包含捕获组。如需解决此问题,只需再为 [a-zA-Z0-9]{5,9} 添加一个条目。现在,当为“ABC123”进行槽位填充时,您会受益于序列识别器,但是由于原始规则允许空格,因此 NLP 仍将匹配“ABC 123”之类的输入。

以下正则表达式示例适用于字母数字序列:

^[A-Za-z0-9]{1,10}$
WAC\d+
215[2-8]{3}[A-Z]+
[a-zA-Z]\s?[a-zA-Z]\s?[0-9]\s?[0-9]\s?[0-9]\s?[a-zA-Z]\s?[a-zA-Z]

以下正则表达式示例适用于数字序列:

\d{2,8}
^[0-9]+$
2[0-9]{7}
[2-9]\d{2}[0-8]{3}\d{4}

另外,请考虑将 @sys.number-sequence 用于接受任何数字序列,并将 @sys.phone-number 用于本地化电话号码识别器。即使没有所需的槽位填充提示,系统实体和非正则表达式自定义实体也能很好地使用自动语音自适应。

限制

存在以下限制:

  1. 自动语音自适应不适用于 Actions on Google(Google 助理),因为 Actions on Google 会在数据发送到 Dialogflow 之前执行语音识别。
  1. 识别长字符序列并非易事。例如,在采用 8kHz 音频的手机频道中,您未必能始终识别超过 16 位数字或 10 个字母数字的序列。即使使用增强型语音模型,这也仍然适用。不妨考虑使用更多的对话替代方案,例如:

    • 在针对数据库验证序列时,请考虑交叉引用其他已收集的参数,例如日期、姓名或电话号码,以允许有不完全匹配项。例如,不要仅要求用户提供订单号,请同时要求提供其电话号码。 现在,当您的网络钩子查询数据库以获取订单状态时,它可能会先从电话号码开始,然后返回该帐号中最匹配的订单。这可能会使 Dialogflow 将“ABC”误听为“AVC”,但仍会为用户返回正确的订单状态。
    • 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。请阅读本教程以了解详情。
  2. 自动语音自适应对系统和正则表达式实体的内置支持因语言而异。如需了解 $OOV_CLASS_ALPHANUMERIC_SEQUENCE$OOV_CLASS_DIGIT_SEQUENCE 支持的语言,请查看 Speech 类令牌。如果其中未列出您的语言,您可以解决此限制。例如,如果您希望能准确识别由三个字母后跟三个数字组成的员工ID,则可以使用以下实体和参数构建代理:

    • 定义一个 digit 实体,其中包含 10 个实体条目(含同义词):
      0, 0
      1, 1
      ...
      9, 9
    • 定义一个 letter 实体,其中包含 26 个实体条目(含同义词):
      A, A
      B, B
      ...
      Z, Z
    • 定义一个 employee-id 实体,其中包含单个实体条目(不含同义词):
      @letter @letter @letter @digit @digit @digit
    • 在训练短语中使用 @employee-id 作为参数。