执行检测意图请求时,您可以选择提供语音上下文,以向语音识别器提供提示。这些提示有助于在特定对话状态下进行识别。
自动语音自适应
自动语音自适应功能可自动使用会话状态传递相关实体和训练短语作为所有检测意图请求的语音上下文提示,从而提高代理的语音识别准确性。默认情况下,此功能处于启用状态。
启用或停用自动语音自适应
如需启用或停用自动语音自适应,请执行以下操作:
- 前往 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
系统实体的训练短语,那么当最终用户说出“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
- 使用以下条目定义
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}
正则表达式权宜解决方法
自动语音自适应对正则表达式实体的内置支持因语言而异。如需了解 $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
作为参数。
测试语音自适应
在测试代理针对特定训练短语或实体匹配的语音自适应功能时,您不应直接跳转到使用对话的第一个语音语句来测试匹配。在您要测试的匹配之前,您应仅针对整个对话使用语音或事件输入。以这种方式测试时,代理的行为将与实际生产对话中的行为类似。
限制
存在以下限制:
- 语音自适应功能不适用于所有语音模型和语言组合。请参阅 Cloud Speech 语言支持页面,验证您的语音模型和语言组合是否支持“模型自适应”。
- 自动语音自适应不适用于 Actions on Google(Google 助理),因为 Actions on Google 会在数据发送到 Dialogflow 之前执行语音识别。
- 识别长字符序列并非易事。单次对话中捕获的字符数与输入音频的质量直接相关。
例如,如果您的集成基于通话音频运行,则需要启用增强型语音模型,以可靠地识别超过 4 个或 5 个字符的字母数字序列或超过 10 个字符的数字序列。
如果您已遵循所有正则表达式实体准则,但仍难以在单个对话回合中捕获整个序列,不妨考虑采用一些更具对话性的方式:
- 在针对数据库验证序列时,请考虑交叉引用其他已收集的参数,例如日期、姓名或电话号码,以允许有不完全匹配项。例如,不要仅要求用户提供订单号,请同时要求提供其电话号码。 现在,当您的网络钩子查询数据库以获取订单状态时,它可能会先从电话号码开始,然后返回该账号中最匹配的订单。这可能会使 Dialogflow 将“ABC”误听为“AVC”,但仍会为用户返回正确的订单状态。
- 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。请阅读本教程以了解详情。