执行检测意图请求时,您可以选择提供语音上下文,以向语音识别器提供提示。这些提示有助于在特定对话状态下进行识别。
自动语音自适应
自动语音自适应功能可自动使用会话状态传递相关实体和训练短语作为所有检测意图请求的语音上下文提示,从而提高代理的语音识别准确性。默认情况下,此功能处于启用状态。
启用或停用自动语音自适应
如需启用或停用自动语音自适应,请执行以下操作:
- 转到 Dialogflow ES 控制台
- 在左侧边栏菜单顶部附近选择您的代理
- 点击代理名称旁边的设置 settings 按钮
- 选择语音 (Speech) 标签页
- 滚动到提高语音识别质量 (Improve Speech Recognition Quality) 部分
- 开启或关闭启用自动语音自适应 (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
系统实体
,
最终用户说“我想两个”
可能会识别为“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
- 使用以下条目定义
product
或size
实体: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,则可以使用以下实体和参数构建代理:
- 定义一个包含 10 个实体条目(含同义词)的
digit
实体:0, 0
1, 1
...
9, 9
- 定义一个包含 26 个实体条目(含同义词)的
letter
实体: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”,但仍会为用户返回正确的订单状态。
- 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。请阅读本教程以了解详情。