执行检测 intent 请求时,您可以选择提供 phrase_hints,以便向语音识别器提供提示。这些提示有助于在特定对话状态下进行识别。
自动语音自适应
自动语音自适应功能可自动使用会话状态传递相关实体和训练短语作为所有检测意图请求的语音上下文提示,从而提高代理的语音识别准确性。默认情况下,此功能处于停用状态。
启用或停用自动语音自适应
如需启用或停用自动语音自适应,请执行以下操作:
控制台
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 点击代理设置。
- 点击语音和 IVR (Speech and IVR) 标签页。
- 开启或关闭启用自动语音自适应。
- 点击保存。
API
请参阅 Agent 类型的 get 和 patch/update 方法。
为代理参考选择协议和版本:
| 协议 | V3 | V3beta1 |
|---|---|---|
| REST | 代理资源 | 代理资源 |
| RPC | 智能体界面 | 智能体界面 |
| C++ | AgentsClient | 不可用 |
| C# | AgentsClient | 不可用 |
| Go | AgentsClient | 不可用 |
| Java | AgentsClient | AgentsClient |
| Node.js | AgentsClient | AgentsClient |
| PHP | 不可用 | 不可用 |
| Python | AgentsClient | AgentsClient |
| Ruby | 不可用 | 不可用 |
旨在改进语音识别的代理设计
启用自动语音自适应后,您能够以可充分利用代理的方式构建自己的代理。以下部分介绍了如何通过对代理的训练短语和实体进行某些更改来改进语音识别功能。
训练短语
- 如果使用诸如“stuffy nose”之类的短语来定义训练短语,则类似的最终用户话语会被准确地识别为“stuffy nose”,而不是“stuff he knows”。
- 如果您有必需参数,该参数会强制 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实体:zeroone...twenty - 使用以下条目定义
product或size实体:sixteen packtwo 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 支持的语言的语音类令牌。
如果您的语言未列出,您可以解决此限制。 例如,如果您希望准确识别由三个字母后跟三个数字组成的员工 ID,则可以使用以下实体和参数构建代理:
- 定义一个包含 10 个实体条目(带有同义词)的
digit实体:0, 01, 1...9, 9 - 定义一个包含 26 个实体条目(带有同义词)的
letter实体:A, AB, B...Z, Z - 定义一个包含单个实体条目(不含同义词)的
employee-id实体:@letter @letter @letter @digit @digit @digit - 在训练短语中使用
@employee-id作为参数。
手动语音自适应
通过手动语音自适应,您可以为流程或页面手动配置语音自适应短语。如果启用了自动语音自适应,它还会覆盖由自动语音自适应生成的隐式语音上下文。
流级和页面级语音自适应设置具有层次关系,这意味着页面默认从流级继承语音自适应设置,如果页面具有自定义设置,则更精细的页面级始终会覆盖流级。
对于语音自适应设置,可以单独启用流级设置和页面级设置。如果未启用流级自适应设置,您仍然可以在页面级选择自定义,为该特定页面启用手动语音自适应。同样,如果您在流级设置中停用手动语音自适应,则流中已选择自定义的页面不会受到影响。
但是,无法单独停用流级设置和页面级设置。 如果某个流程启用了手动语音自适应,您将无法通过自定义选项为该流程下的页面停用此功能。因此,如果您想在流程中的页面上混合使用手动语音自适应和自动语音自适应,则不应在流程级层启用手动语音自适应,而应仅使用页面级自适应设置。您可以参考下表,了解应针对您的适配情况使用哪种流程和页面设置组合。
| 目标效果 | 建议使用的自适应设置 |
|---|---|
| 为流程停用自动调整 | 已启用流程,但未设置短语集(默认情况下,流程中的页面使用流程设置)。 |
| 为页面停用自动调整功能 | 流程已停用,页面已启用(选择了自定义),没有短语集。 |
| 仅对流中的所有页面使用手动语音自适应 | 已启用流程。自定义需要使用与流程不同的短语集的页面。 |
| 在同一流程中混合使用自动和手动适配 | 工作流已停用。自定义您要应用手动调整的页面。 |
| 仅对流程中的所有页面使用自动语音自适应 | 流程已停用。 |
启用或停用手动语音自适应
如需在 flow 或 page 级别启用或停用手动语音自适应,请执行以下操作:
流程设置
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 将鼠标悬停在 Flows 部分中的流上。
- 点击选项 按钮。
- 在下拉菜单中选择流程设置。
- 选中或取消选中启用手动语音自适应复选框。
- 在短语集表格中修改、添加或删除短语集
- 点击保存。
页面设置
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 将鼠标悬停在页面部分上的页面。
- 点击选项 按钮。
- 在下拉菜单中选择页面设置。
- 默认情况下,系统会选择使用流级,选择后,系统会为此页面重复使用流级自适应短语。您可以选择自定义,以配置与流级设置不同的自适应短语。即使在流级别停用了手动语音自适应,您仍然可以通过自定义选项为该流中的页面启用和配置手动语音自适应。
- 在自适应短语集表格中修改、添加或删除短语集
- 点击保存。
手动配置短语集以改进语音识别
1. 字词和短语
在自适应短语集中,您可以定义单字词或多字词短语,并可选择引用语音类 token。例如,您可以添加“great rate”“跟踪编号 is $OOV_CLASS_ALPHANUMERIC_SEQUENCE”或“$FULLPHONENUM”等短语。与语音相似的其他短语相比,这些提供的短语被转写的概率更高。如果您添加了不带任何增强的多字词短语,则偏向会应用于整个短语以及短语中的连续部分。一般来说,短语数量应保持在较小的范围内,并且您应该只添加语音识别在没有语音自适应的情况下难以正确识别的短语。如果 Speech-to-Text 已经可以正确识别某个短语,则无需将此短语添加到语音自适应设置中。如果您在某个页面或流程中看到 Speech-to-Text 经常无法识别的几个短语,则可以将正确的短语添加到其相应的自适应设置中。
识别错误更正示例
以下示例展示了如何使用语音自适应功能来更正识别问题。假设您正在设计一个手机交易代理,在代理提出第一个问题“您需要什么帮助?”后,用户可能会说出包含“sell phones”或“cell phone”短语的内容。那么,我们如何使用语音自适应来提高这两个短语的识别准确率?
如果您在自适应设置中同时包含这两个短语,Speech-to-Text 仍可能会混淆,因为它们听起来很相似。如果您只提供两个短语中的一个,则 Speech-to-Text 可能会将一个短语误识别为另一个短语。为了提高这两个短语的语音识别准确率,您需要为 Speech-to-Text 提供更多上下文线索,以便区分何时应听到“sell phones”,何时应听到“cell 手机”。例如,您可能会注意到,人们经常在“如何卖手机”“想卖手机”或“你们卖手机吗”等话语中使用“卖手机”,而在“购买手机”“手机账单”和“手机服务”等话语中使用“手机”。如果您向模型提供这些更精确的短语,而不是简短的原始短语“cell 手机”和“sell phones”,Speech-to-Text 将了解到,作为动词短语的“sell phone”更有可能出现在“how to”“want to”和“do you”等字词之后,而作为名词短语的“cell 手机”更有可能出现在“purchase”等字词之后,或后跟“bill”或“service”等字词。因此,根据配置自适应短语的经验法则,提供更精确的短语(例如“如何销售手机”或“您是否销售手机”)通常比仅包含“销售手机”更好。
2. 语音类令牌
除了自然语言字词之外,您还可以在短语中嵌入对语音类标记的引用。语音类词元代表在书写时通常遵循特定格式的常见概念。例如,对于“123 Main Street”这样的地址中的门牌号,人们通常希望在地址中看到门牌号的数字格式“123”,而不是其完整拼写版本“one-hundred twenty-three”。如果您希望转录结果采用特定格式(尤其是字母数字序列),请参阅支持的类 token 列表,了解您的语言和使用场景支持哪些 token。
如果页面已有意图路由或参数,且其中包含对系统实体的引用,请参阅下表,了解常见系统实体与语音类令牌之间的映射:
| 系统实体 | 语音类令牌 |
|---|---|
@sys.date |
$MONTH $DAY $YEAR |
@sys.date-time |
$MONTH $DAY $YEAR |
@sys.date-period |
$MONTH $DAY $YEAR |
@sys.time |
$TIME |
@sys.time-period |
$TIME |
@sys.age |
$OPERAND |
@sys.number |
$OPERAND |
@sys.number-integer |
$OPERAND |
@sys.cardinal |
$OPERAND |
@sys.ordinal |
$OPERAND |
@sys.percentage |
$OPERAND |
@sys.duration |
$OPERAND |
@sys.currency-name |
$MONEY |
@sys.unit-currency |
$MONEY |
@sys.phone-number |
$FULLPHONENUM |
@sys.zip-code |
$POSTALCODE 或 $OOV_CLASS_POSTALCODE |
@sys.address |
$ADDRESSNUM $STREET $POSTALCODE |
@sys.street-address |
$ADDRESSNUM $STREET $POSTALCODE |
@sys.temperature |
$OOV_CLASS_TEMPERATURE |
@sys.number-sequence |
$OOV_CLASS_DIGIT_SEQUENCE |
@sys.flight-number |
$OOV_CLASS_ALPHANUMERIC_SEQUENCE |
3. 提升值
如果添加不带增强值的短语无法提供足够强的偏向效果,您可以使用增强值来进一步增强语音自适应偏向效果。
如果设置为大于 0 且不大于 20 的值,则提升会应用额外的偏差。当提升值为 0 或为空时,默认偏置效果有助于识别整个短语以及短语中的连续部分。例如,未提升的短语“你们开门卖手机吗”有助于识别该短语以及类似短语,例如“我卖手机”和“嗨,你们开门吗”。
应用正向提升后,偏向效果会更强,但仅适用于确切短语。例如,提升短语“卖手机”有助于识别“你能卖手机吗”,但无法识别“你卖手机吗”。
因此,如果您同时提供使用和不使用增强型功能的短语,则会获得最佳结果。
较高的增强值可以减少假负例,假负例是指音频中出现的字词或短语未被 Speech-to-Text 正确识别的情况(欠偏置)。但是,增强型功能也会增加出现假正例的可能性;假正例是指音频中不包含的字词或短语出现在转写中的情况(过度偏向)。您通常需要微调偏向短语,以便在两个偏向问题之间找到一个良好的平衡点。
如需详细了解如何微调短语的提升值,请参阅有关提升的 Cloud Speech 文档。
Speech-to-Text V2 chirp_3 每次请求最多支持 1,000 个短语,并会忽略数字 boost 值。如需了解 chirp_3 自适应限制和指南,请参阅通过模型自适应提高准确率。
何时使用自动或手动语音自适应
一般来说,如果您不确定语音自适应是否会提高代理的语音识别质量(没有明确的转录错误模式),建议您先尝试自动语音自适应,然后再采用手动语音自适应。如需做出更细致的决策,请考虑以下因素,以在自动语音自适应或手动语音自适应之间做出选择:
1. 表单填充
自动语音自适应非常适合表单填充,因为它会为表单参数使用 ABNF 语法上下文,并根据其实体类型强制执行语法规则。由于手动语音自适应尚不支持 ABNF 语法,因此对于表单填写页面,自动语音自适应通常优于手动语音自适应。不过,对于仅包含系统实体参数和语音类令牌支持的简单正则表达式实体的页面,您也可以使用手动语音自适应来实现类似于自动语音自适应的偏向效果,而无需调整正则表达式实体。
2. 页面或流程转换复杂度
对于具有少量 intent 路由的简单页面或流程,自动语音自适应可能会生成具有代表性的偏向短语,并表现得相当出色。
但是,如果页面或流具有大量 intent 路由(对于页面,还请考虑流级层路由的数量),或者任何 intent 具有过长或过短的不重要训练短语(例如,整个句子或只有一个或两个音节的单个字词),则语音自适应模型很可能无法很好地处理这些短语。您应首先尝试为高度复杂的开放式页面停用语音自适应,方法是使用空短语集启用手动语音自适应(空自适应替换)。之后,评估是否仍需要向 Speech-to-Text 提供特殊的非歧义短语,以提高识别质量。
此复杂性问题的另一个症状是,在启用自动语音自适应功能时,会出现各种偏见不足或偏见过度问题。与上述情况类似,您还需要先在停用语音自适应功能的情况下测试特定页面。 如果停用语音自适应后错误行为仍然存在,您可以将要更正的短语添加到语音自适应设置中,甚至可以在必要时添加提升值,以进一步增强偏向效果。
测试语音自适应
在测试代理针对特定训练短语或实体匹配的语音自适应功能时,您不应直接跳到使用对话的第一个语音话语测试匹配。在您要测试的匹配之前,您应该仅在整个对话中使用语音或事件输入。 以这种方式测试时,代理的行为将与实际生产对话中的行为类似。
限制
存在以下限制:
- 语音自适应功能不适用于所有语音模型和语言组合。 请参阅 Cloud Speech 语言支持页面,验证您的语音模型和语言组合是否支持“模型自适应”。
目前,手动语音自适应尚不支持自定义类或 ABNF 语法。您可以启用自动语音自适应功能,也可以使用运行时检测 intent 请求来利用这些自适应功能。
相同的提升值在不同的语音模型和语言中可能会有不同的效果,因此在为使用多种语言或语音模型的代理手动配置提升值时,请务必谨慎。目前,手动语音自适应适用于代理中的所有语言,因此多语言代理应仅使用与语言无关的短语,或将每种语言拆分为单独的代理。由于默认偏向行为(不提供增强或 0 增强)通常对所有语言和模型都表现良好,因此您无需配置特定于语言的增强值,除非您的识别用例需要更强的偏向。如需详细了解如何微调提升值,请参阅此 Cloud Speech-to-Text 指南。
- 识别长字符序列并非易事。单轮对话中捕获的字符数与输入音频的质量直接相关。
如果您已遵循所有正则表达式实体准则,并尝试在手动语音自适应设置中使用相关的语音类令牌,但仍难以在单轮对话中捕获整个序列,则可以考虑一些更具对话性的替代方案:
- 在针对数据库验证序列时,请考虑交叉引用其他已收集的参数,例如日期、姓名或电话号码,以允许有不完全匹配项。例如,不要仅要求用户提供订单号,请同时要求提供其电话号码。 现在,当您的网络钩子查询数据库以获取订单状态时,它可能会先从电话号码开始,然后返回该账号中最匹配的订单。这可能会使 Dialogflow 将“ABC”误听为“AVC”,但仍会为用户返回正确的订单状态。
- 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。