语音自适应

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

自动语音自适应

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

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

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

  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”)的自动语音自适应。

如需通过语音识别这些序列,请满足以下全部四项要求:

1. 正则表达式条目要求

虽然可以使用任何正则表达式从文本输入中提取实体,但只有某些表达式会指示自动语音自适应在识别语音时偏向拼出的字母数字或数字序列。

在正则表达式实体中,至少有一个条目必须遵守以下所有规则:

  • 应与一些字母数字字符匹配,例如:\d\w[a-zA-Z0-9]
  • 不应包含  \s 空格,但允许使用 \s*\s?
  • 不应包含捕获或非捕获组 ()
  • 应该尝试匹配任何特殊字符或标点符号,例如: ` ~ ! @ # $ % ^ & * ( ) - _ = + , . < > / ? ; ' : " [ ] { } \ |

此条目可以包含字符集 [] 和重复量词,如 *?+{3,5}

请参阅示例

2. 参数定义要求

将正则表达式实体标记为必需的意图参数,以便在槽位填充期间可以收集该实体。这样,自动语音自适应功能会严重偏向于序列识别,而不是尝试同时识别意图和序列。否则,“Where is my package for ABC123”可能会被系统误识别为“Where is my package 4ABC123”。

3. 训练短语注解要求

请勿将正则表达式实体用于意图训练短语注解 这样可确保在槽位填充过程中解析该参数。

4.测试要求

请参阅测试语音自适应

示例

例如,具有单个条目 ([a-zA-Z0-9]\s?){5,9} 的正则表达式实体不会触发语音序列识别器,因为它包含捕获组。如需解决此问题,只需再为 [a-zA-Z0-9]{5,9} 添加一个条目。现在,您在匹配“ABC123”时将受益于序列识别器,但由于原来的规则允许空格,NLU 仍会匹配“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}
正则表达式解决方法

自动语音自适应对正则表达式实体的内置支持因语言而异。检查 Speech 类令牌,了解 $OOV_CLASS_ALPHANUMERIC_SEQUENCE$OOV_CLASS_DIGIT_SEQUENCE 支持的语言。

如果您所用的语言未列出,您可以解决此限制。 例如,如果您希望准确识别由三个字母后跟三位数字组成的员工 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 作为参数。

测试语音自适应

在测试代理针对特定训练短语或实体匹配的语音自适应功能时,您不应直接跳到测试对话中的第一条语音话语的匹配。在要测试的匹配之前,您应该仅使用语音或事件输入在整个对话中。 以这种方式测试时,代理的行为与实际生产对话中的行为类似。

限制

存在以下限制:

  • 语音自适应功能仅适用于部分语音模型和语言组合。请参阅 Cloud Speech 语言支持页面,验证您的语音模型和语言组合是否提供“模型自适应”。
  • 自动语音自适应不适用于 Actions on Google(Google 助理),因为 Actions on Google 会在数据发送到 Dialogflow 之前执行语音识别。
  • 识别长字符序列并非易事。在单个回合中捕获的字符数与输入音频的质量直接相关。 例如,如果您的集成基于手机音频运行,则需要启用增强型语音模型,以可靠地识别长度超过 4 或 5 个字符的字母数字字符序列,或长度超过 10 个字符的数字序列。 如果您遵循了所有正则表达式实体准则,但仍难以在单个回合中捕获整个序列,您可以考虑采用一些对话性更强的替代方案:
    • 在针对数据库验证序列时,请考虑交叉引用其他已收集的参数,例如日期、姓名或电话号码,以允许有不完全匹配项。例如,不要仅要求用户提供订单号,请同时要求提供其电话号码。 现在,当您的网络钩子查询数据库以获取订单状态时,它可能会先从电话号码开始,然后返回该账号中最匹配的订单。这可能会使 Dialogflow 将“ABC”误听为“AVC”,但仍会为用户返回正确的订单状态。
    • 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。请阅读本教程以了解详情。