执行检测意图请求时,您可以选择提供 phrase_hints,以便为语音识别器提供提示。这些提示有助于在特定对话状态下进行识别。
自动语音自适应
自动语音自适应功能可自动使用会话状态传递相关实体和训练短语作为所有检测意图请求的语音上下文提示,从而提高代理的语音识别准确性。默认情况下,此功能处于停用状态。
启用或停用自动语音自适应
如需启用或停用自动语音自适应,请执行以下操作:
控制台
- 打开 Dialogflow CX 控制台。
- 选择 GCP 项目。
- 选择您的代理。
- 点击代理设置。
- 点击语音和 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
实体: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,则可以使用以下实体和参数构建代理:
- 定义一个
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
作为参数。
手动语音自适应
手动语音自适应允许您为流或页面手动配置语音自适应短语。当自动语音自适应启用后,它还会覆盖由自动语音自适应生成的隐式语音上下文。
流级别和页面级别的语音自适应设置具有层次关系,这意味着页面默认从流级别继承语音自适应设置,如果页面具有自定义设置,则更精细的页面级别始终会替换流级别。
对于语音自适应设置,您可以单独启用流级别设置和页面级别设置。如果未启用流级别自适应设置,您仍然可以在页面级别选择自定义,为该特定页面启用手动语音自适应。同样,如果您在流程级别设置中停用手动语音自适应,则流程中选择了自定义的页面不会受到影响。
但是,不能单独停用流级设置和页面级设置。 如果流启用了手动语音自适应,您无法通过自定义选项为该流下的页面停用该功能。因此,如果您希望在一个流中的页面同时使用手动语音自适应和自动语音自适应,则不应在流级别启用手动语音自适应,而应仅使用页面级自适应设置。您可以参考下表,了解在自适应情况下应该使用哪种流程和页面设置组合。
目标效果 | 建议使用自适应设置 |
---|---|
为数据流停用自动自适应 | 流启用但未设置短语(流中的页面默认使用流设置)。 |
为网页停用自动自适应 | 流停用且已启用页面(选择了自定义),且未设置短语集。 |
仅对一个流中的所有网页使用手动语音自适应 | 流已启用。自定义需要使用不同于 flow 的短语集的页面。 |
在一个流中混合使用自动和手动自适应 | 数据流已停用。自定义要应用手动调整的页面。 |
仅对一个流中的所有页面使用自动语音自适应 | 数据流已停用。 |
启用或停用手动语音自适应
如需在流程或页面级别启用或停用手动语音自适应,请执行以下操作:
流设置
- 打开 Dialogflow CX 控制台。
- 选择 GCP 项目。
- 将鼠标悬停在 Flows 部分中的流上。
- 点击选项 按钮。
- 从下拉菜单中选择流设置。
- 选中启用手动语音自适应复选框或取消选中。
- 在词组集表格中修改、添加或删除词组集
- 点击保存。
页面设置
- 打开 Dialogflow CX 控制台。
- 选择 GCP 项目。
- 将鼠标悬停在页面部分上的页面。
- 点击选项 按钮。
- 从下拉菜单中选择页面设置。
- Use flow level(使用流级别)默认处于选中状态,选择此选项后,系统会为此页面重复使用流级别自适应短语。您可以选择自定义来配置与流级别设置不同的自适应短语。即使在流程级别停用了手动语音自适应,您仍然可以通过自定义选项为该流程中的页面启用和配置手动语音自适应。
- 在自适应短语集表格中修改、添加或删除短语集
- 点击保存。
用于改进语音识别的手动短语集配置
1. 字词和短语
在自适应短语集中,您可以通过对语音类令牌的可选引用来定义单字词或多字词短语。例如,您可以添加“超大率”、“跟踪编号为 $OOV_CLASS_ALPHANUMERIC_SEQUENCE”或“$FULLPHONENUM”等短语。相较于其他发音相似的短语,这些提供的短语更容易被转录。如果您添加不带任何增强效果的多字词短语,则偏差将同时应用于整个短语和短语中的连续部分。一般来说,应尽量减少短语的数量,并且只应添加语音识别功能在没有语音自适应的情况下难以处理的短语。如果 Speech-to-Text 已经可以正确识别某个短语,则无需将此短语添加到语音自适应设置中。如果您看到 Speech-to-Text 在网页或流中经常无法识别的一些短语,您可以将正确的短语添加到相应的自适应设置中。
识别纠错示例
以下示例说明了如何使用语音自适应更正识别问题。假设您正在设计一个手机设备交易代理,用户可能会在代理询问第一个问题“您需要什么帮助?”后说出包含“卖手机”或“手机”之类的短语。那么我们如何使用语音自适应来提高两个短语的识别准确率呢?
如果您在自适应设置中添加这两个短语,Speech-to-Text 可能仍会混淆,因为它们听起来相似。如果您仅提供两个短语中的一个,则 Speech-to-Text 可能会将一个短语误识别为另一个短语。如需提高这两个短语的语音识别准确度,您需要为 Speech-to-Text 提供更多上下文线索,以区分它应何时听到“销售手机”和何时应听到“手机”。例如,您可能会注意到,人们经常在“如何销售手机”“想销售手机”或“你卖手机吗”等话语中使用“销售手机”,而“手机”在“购买手机”“手机账单”和“手机服务”等话语中使用。如果您向模型提供这些更精确的短语,而不是原始的简短短语“cell 手机”和“sell phone”,则 Speech-to-Text 会学习,将“sell 手机”作为动词短语后,更有可能跟在“how to”“ want to”和“do you”等字词后面,而将“cell 手机”作为名词短语作为名词短语后更像“purchase”或“purchase因此,根据经验来配置自适应短语时,提供“如何销售手机”或“您是否销售手机”等更为精确的短语通常会比仅包含“销售手机”更好。
2. 语音类令牌
除了自然语言单词之外,您还可以在短语中嵌入对语音类词法单元的引用。语音类令牌表示常见概念,通常遵循特定的书面形式。例如,对于类似“123 Main Street”这样的地址号码,人们通常希望在地址中看到地址号码的数字格式为“123”,而不是完整拼写形式的“one-hundredtwo-three”。如果您预计转录结果中有特定格式,尤其是字母数字序列,请参阅支持的类令牌列表,了解在您的语言和用例中可以使用哪些令牌。
如果页面已包含对系统实体的引用的 intent 路由或参数,请参考以下参考表,了解常见系统实体和语音类令牌之间的映射:
系统实体 | 语音类令牌 |
---|---|
@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 时,默认的自定义调整效果有助于识别整个短语和短语中的连续部分。例如,非肯定的短语“are you open to sell devices”有助于识别该短语以及“I sell phone”和“Hi are you open”等类似的短语。
应用正值提升时,自定义调整效果更强,但仅适用于确切的短语。例如,提升短语“sell phone”有助于识别“can you sell phone”这个“can you sales phone”,但不能助我们识别“do you seller any phone”
因此,如果您同时提供启用和停用增强的短语,则可获得最佳效果。
较高的增强值可以减少假负例,假负例是指字词或短语出现在音频中,但 Speech-to-Text 没有正确识别(欠偏)的情况。但是,增强还会增加出现假正例的可能性;假正例是指字词或短语即使没有出现在音频中,但也出现在转录中(过度偏差)。您通常需要对自定义调整短语进行微调,以便在两个自定义调整问题之间找到一个适当的权衡点。
如需详细了解如何微调短语的增强值,请参阅有关增强的 Cloud Speech 文档。
何时使用自动或手动语音自适应
一般来说,如果您不确定语音自适应是否可以提高代理的语音识别质量(没有明确的转录错误模式),建议您先尝试自动语音自适应,然后再尝试手动语音自适应。如需进行更精细的决策,请考虑以下因素来决定是采用自动语音自适应还是手动语音自适应:
1. 表单填充
自动语音自适应与表单填充功能非常契合,因为它使用 ABNF 语法上下文作为表单参数,并根据其实体类型强制执行语法规则。由于手动语音自适应尚不支持 ABNF 语法,因此对于表单填写页面,自动语音自适应通常优于手动语音自适应。仍然适用于仅包含系统实体参数和受语音类令牌支持的简单正则表达式实体的网页,您还可以使用手动语音自适应实现类似于自动语音自适应的偏差效果,而无需调优正则表达式实体。
2. 页面或流程转换复杂性
对于包含几个意图路由的简单页面或流程,自动语音自适应可能会生成具有代表性的偏向短语,并且效果相当不错。
但是,如果某个网页或流包含大量意图路由(对于一个页面,还应考虑流级路由的数量),或者如果任何意图具有过长或过短的不重要训练短语(例如,整个句子或单个单词,只有一两个音节),那么语音自适应模型很有可能无法很好地处理这些短语。您应该首先尝试为高度复杂的开放式页面停用语音自适应,方法是启用包含空短语集的手动语音自适应(空自适应替换)。之后,评估是否仍需要向 Speech-to-Text 提供特殊的非模糊短语以提高识别质量。
这种复杂性问题的另一个表现是,启用自动语音自适应后,会出现各种弱偏见或过度偏向问题。与上述情况类似,您还需要先在特定页面停用语音自适应的情况下进行测试。如果在停用语音自适应后错误行为仍然存在,那么您可以将要更正的短语添加到语音自适应设置中,甚至可以添加增强值,以在必要时进一步增强偏差效果。
测试语音自适应
在测试代理针对特定训练短语或实体匹配的语音自适应功能时,您不应直接跳到测试对话中的第一条语音话语的匹配。在要测试的匹配之前,您应该仅使用语音或事件输入在整个对话中。 以这种方式测试时,代理的行为与实际生产对话中的行为类似。
限制
存在以下限制:
- 语音自适应功能仅适用于部分语音模型和语言组合。请参阅 Cloud Speech 语言支持页面,验证您的语音模型和语言组合是否提供“模型自适应”。
目前,手动语音自适应尚不支持自定义类或 ABNF 语法。您可以启用自动语音自适应,或使用运行时检测意图请求来利用这些自适应功能。
同一增强值对于不同的语音模型和语言的表现可能会有所不同,因此在为使用多种语言或语音模型的代理手动配置它们时,请务必小心。目前,手动语音自适应适用于代理中的所有语言,因此多语言代理应该仅使用与语言无关的短语,或者将每种语言拆分为单独的代理。由于默认的自定义调整行为(不提供增强或 0 增强)通常对所有语言和模型表现良好,因此除非您的识别用例需要更强的偏差调整,否则您无需配置特定于语言的增强值。如需详细了解如何微调提升值,请参阅此 Cloud Speech-to-Text 指南。
- 识别长字符序列并非易事。在单个回合中捕获的字符数与输入音频的质量直接相关。
如果您遵循了所有正则表达式实体准则,并尝试在手动语音自适应设置中使用相关的语音类别令牌,但仍难以在单个回合中捕获整个序列,可以考虑采用更多对话性替代方案:
- 在针对数据库验证序列时,请考虑交叉引用其他已收集的参数,例如日期、姓名或电话号码,以允许有不完全匹配项。例如,不要仅要求用户提供订单号,请同时要求提供其电话号码。 现在,当您的网络钩子查询数据库以获取订单状态时,它可能会先从电话号码开始,然后返回该账号中最匹配的订单。这可能会使 Dialogflow 将“ABC”误听为“AVC”,但仍会为用户返回正确的订单状态。
- 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。