语音自适应

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

自动语音自适应

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

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

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

控制台

  1. 打开 Dialogflow CX 控制台
  2. 选择 GCP 项目。
  3. 选择您的代理。
  4. 点击代理设置
  5. 点击语音和 IVR (Speech and IVR) 标签页。
  6. 开启或关闭启用自动语音自适应
  7. 点击保存

API

请参阅 Agent 类型的 getpatch/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
    • 使用以下条目定义 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}
正则表达式权宜解决方法

自动语音自适应对正则表达式实体的内置支持因语言而异。如需了解 $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 作为参数。

手动语音自适应

借助手动语音自适应,您可以为流程或页面手动配置语音自适应短语。它还会替换自动语音自适应(如果启用)生成的隐式语音上下文。

流级和页面级语音自适应设置具有层次关系,这意味着页面默认会继承流级语音自适应设置,如果页面具有自定义设置,则更精细的页面级设置始终会覆盖流级设置。

对于语音自适应设置,流级设置和页面级设置可以单独启用。如果未启用流程级自适应设置,您仍然可以在页面级别选择自定义,为该特定页面启用手动语音自适应。同样,如果您在流程级设置中停用手动语音自适应,则流程中选择了自定义的页面将不会受到影响。

不过,您无法单独停用流程级设置和网页级设置。如果某个流已启用手动语音自适应,您将无法通过 Customize(自定义)选项为该流下的页面停用此功能。因此,如果您想对流程内的页面混合使用手动语音自适应和自动语音自适应,则不应在流程级启用手动语音自适应,而应改为仅使用页面级自适应设置。您可以参阅下表,了解应针对您的自适应场景使用哪种流程和页面设置组合。

目标效果 建议的适应设置用法
为数据流停用自动自适应 启用了流程,但没有短语集(流程中的页面默认使用流程设置)。
为网页停用自动自适应 流程已停用,网页已启用(已选择自定义),没有短语集。
仅对流程中的所有页面使用手动语音自适应 流已启用。自定义需要使用与流程不同的短语集的页面。
在流程中混合使用自动和手动自适应 流已停用。自定义要应用手动自适应的页面。
仅对流程内的所有页面使用自动语音自适应 流已停用。

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

如需在流程级别或页面级别启用或停用手动语音自适应,请执行以下操作:

流设置

  1. 打开 Dialogflow CX 控制台
  2. 选择 GCP 项目。
  3. 将鼠标悬停在 Flows 部分中的流上。
  4. 点击“选项”图标
  5. 在下拉菜单中选择流设置
  6. 选中或取消选中启用手动语音自适应复选框。
  7. 在短语集表格中修改、添加或删除短语集
  8. 点击保存

网页设置

  1. 打开 Dialogflow CX 控制台
  2. 选择 GCP 项目。
  3. 将鼠标悬停在页面部分上的页面。
  4. 点击“选项”图标
  5. 在下拉菜单中选择页面设置
  6. 系统会默认选择使用流程级,如果选择此选项,系统会针对此页面重复使用流程级自适应短语。您可以选择自定义,以配置与流程级设置不同的自适应短语。即使在流程级别停用了手动语音自适应,您仍然可以通过自定义选项为该流程中的页面启用和配置手动语音自适应。
  7. 在“自适应短语集”表中修改、添加或删除短语集
  8. 点击保存

手动短语集配置,以改进语音识别

1. 字词和短语

在自适应短语集中,您可以定义单字词或多字词短语,并可选择引用语音类令牌。例如,您可以添加“优惠率”“跟踪编号为 $OOV_CLASS_ALPHANUMERIC_SEQUENCE”或“$FULLPHONENUM”等字词。提供这些短语后,系统会优先将其转写出来,而不是其他发音相似的短语。如果您添加的多字词短语没有任何增强,则偏差会同时应用于整个短语和短语中的连续部分。一般来说,短语数量应保持较少,并且您应仅添加在未进行语音自适应的情况下语音识别难以正确识别的短语。如果 Speech-to-Text 功能已经可以正确识别某个短语,则无需将该短语添加到语音自适应设置中。如果您发现某个网页或流程中有几个词组经常被 Speech-to-Text 功能误识别,则可以将正确的词组添加到相应的自适应设置中。

识别错误更正示例

以下示例展示了如何使用语音自适应来修正识别问题。假设您正在设计一个手机设备交易代理,在代理问出第一个问题“您需要什么帮助?”后,用户可能会说出包含“卖手机”或“手机”字词的回答。那么,我们如何使用语音自适应来提高这两个短语的识别准确性?

如果您在自适应设置中添加这两个短语,由于它们听起来很相似,因此 Speech-to-Text 功能可能仍会感到困惑。如果您只提供其中一个短语,Speech-to-Text 可能会将一个短语误认为另一个短语。为了提高这两个短语的语音识别准确性,您需要为 Speech-to-Text 提供更多上下文线索,以便它区分何时应该听到“sell phones”,何时应该听到“cell 手机”。例如,您可能会注意到,用户在“如何销售手机”“想销售手机”或“您销售手机吗”等语句中经常使用“销售手机”一词,而在“购买手机”“手机账单”和“手机服务”等语句中使用“手机”一词。如果您向模型提供这些更精确的短语,而不是原始的简短短语“手机”和“卖手机”,Speech-to-Text 会学习到,作为动词短语的“卖手机”更有可能紧随“如何”“想”和“你”等字词出现,而作为名词短语的“手机”更有可能紧随“购买”等字词出现,或者紧随“账单”或“服务”等字词出现。因此,在配置自适应字词时,一般来说,提供更精确的字词(例如“如何销售手机”或“您销售手机吗”)比仅包含“销售手机”更为合适。

2. 语音类令牌

除了自然语言字词之外,您还可以将对语音类别令牌的引用嵌入到短语中。语音类令牌代表通常遵循特定书写格式的常见概念。例如,对于“123 Main Street”这样的地址中的门牌号,人们通常希望看到地址中门牌号的数字格式“123”,而不是完整拼写的版本“一百二十三”。如果您希望转写结果采用特定格式(尤其是对于字母数字序列),请参阅支持的类令牌列表,了解您的语言和用例支持哪些令牌。

如果网页已有引用系统实体的意图路线或参数,请参阅下表,了解常见系统实体与语音类令牌之间的映射:

系统实体 语音类令牌
@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 的值时,系统会应用额外的偏差。当 boost 为空或 0 时,默认的偏向效果有助于识别整个短语以及短语中的连续部分。例如,非提升词组“are you open to sell phones”有助于识别该词组,以及“I sell phones”和“Hi are you open”等类似词组。

应用正向提升后,偏向性更强,但仅适用于完全匹配的字词。例如,提升后的词组“sell phones”(销售手机)有助于识别“can you sell phones”(您可以销售手机吗?),但无法识别“do you sell any phones”(您销售手机吗?)。

因此,如果您同时提供启用和未启用增强型功能的短语,将会获得最佳结果。

较高的增强值可以减少假负例,假负例是指音频中出现的字词或短语未被 Speech-to-Text 正确识别的情况(过低偏差)。但是,增强型功能也会增加出现假正例的可能性;假正例是指音频中不包含的字词或短语出现在转写中的情况(过度偏向)。您通常需要微调偏向性短语,以便在两个偏向性问题之间找到合适的折衷点。

如需详细了解如何微调字词的增强值,请参阅 Cloud Speech 文档中的增强部分

何时使用自动或手动语音自适应

一般来说,如果您不确定语音自适应能否提高代理的语音识别质量(无法明确指出转写错误模式),建议您先尝试自动语音自适应,然后再改用手动语音自适应。如需做出更细致的决策,请考虑以下因素,以便在自动语音自适应和手动语音自适应之间做出选择:

1. 表单填充

自动语音自适应非常适合表单填充,因为它会为表单参数使用 ABNF 语法上下文,并根据实体类型强制执行语法规则。由于手动语音自适应尚不支持 ABNF 语法,因此对于表单填充页面,通常首选自动语音自适应。不过,对于仅包含系统实体参数和语音类令牌支持的简单正则表达式实体的网页,您还可以使用手动语音自适应来实现与自动语音自适应类似的偏向效果,而无需调整正则表达式实体

2. 页面或流程转换复杂性

对于包含少量 intent 路线的简单页面或流程,自动语音自适应功能可能会生成代表性的偏向性短语,并且效果相当不错。

不过,如果某个网页或流程包含大量 intent 路线(对于网页,请同时考虑流程级路线的数量),或者任何 intent 都包含过长或过短且不重要的训练短语(例如,一个完整的句子或只有一个或两个音节的单词),语音自适应模型很可能无法很好地处理这些短语。您应先尝试为复杂度较高的开放式网页停用语音自适应,方法是启用包含空字词集的手动语音自适应(空自适应替换项)。然后,评估是否仍需要向 Speech-to-Text 提供一些特殊的非歧义短语,以提高识别质量。

此复杂性问题的另一个症状是,启用自动语音自适应后,会出现各种过度偏向或欠缺偏向问题。与上述情况类似,您还需要先为特定网页停用语音自适应功能,然后再进行测试。如果停用语音自适应后错误行为仍然存在,您可以将要更正的短语添加到语音自适应设置中,甚至可以添加增强值,以在必要时进一步增强偏向性效果。

测试语音自适应

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

限制

存在以下限制:

  • 语音自适应功能不适用于所有语音模型和语言组合。请参阅 Cloud Speech 语言支持页面,验证您的语音模型和语言组合是否支持“模型自适应”。
  • 目前,手动语音自适应尚不支持自定义类ABNF 语法。您可以启用自动语音自适应,也可以使用运行时检测 intent 请求来使用这些自适应功能。

  • 相同的增强值在不同语音模型和语言中的效果可能会有所不同,因此,请谨慎为使用多种语言或语音模型的客服人员手动配置增强值。目前,手动语音自适应适用于代理中的所有语言,因此多语言代理应仅使用不依赖于语言的短语,或将每种语言拆分为单独的代理。由于默认的偏向行为(不提供增强或增强值为 0)通常适用于所有语言和模型,因此除非您的识别用例需要更强的偏向,否则您无需配置特定于语言的增强值。如需详细了解如何微调增强值,请参阅这份 Cloud Text-to-Speech 指南

  • 识别长字符序列并非易事。单次对话中捕获的字符数与输入音频的质量直接相关。 如果您已遵循所有正则表达式实体准则,并尝试在手动语音自适应设置中使用相关语音类令牌,但仍无法在单个回合中捕获整个序列,则可以考虑使用一些更具对话性的方法:
    • 在针对数据库验证序列时,请考虑交叉引用其他已收集的参数,例如日期、姓名或电话号码,以允许有不完全匹配项。例如,不要仅要求用户提供订单号,请同时要求提供其电话号码。 现在,当您的网络钩子查询数据库以获取订单状态时,它可能会先从电话号码开始,然后返回该账号中最匹配的订单。这可能会使 Dialogflow 将“ABC”误听为“AVC”,但仍会为用户返回正确的订单状态。
    • 如果要添加较长的序列,请考虑设计一个可鼓励最终用户在中间暂停的流程,以便聊天机器人在您学习时进行确认。