语音自适应

执行检测意图请求时,您可以选择提供 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. 训练短语注解要求

切勿使用正则表达式实体作为 intent 训练短语注解的欢迎。 这可确保在表单填充过程中解析该参数。

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
  • 定义一个 letter 实体,其中包含 26 个实体条目(含同义词):
    A, A
    B, B
    ...
    Z, Z
  • 定义包含单个实体条目的 employee-id 实体 (不含同义词):
    @letter @letter @letter @digit @digit @digit
  • 在训练短语中使用 @employee-id 作为参数。

手动语音自适应

通过手动语音自适应,您可以手动配置语音自适应短语 指定流或页面它还会覆盖由 Google 提供的 自动语音自适应。

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

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

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

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

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

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

流设置

  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 提供更多上下文线索,以便它区分何时应该听到“sell phones”(销售手机),何时应该听到“cell phone”(手机)。例如,您可能会注意到,用户在“如何销售手机”“想销售手机”或“您销售手机吗”等语句中经常使用“销售手机”一词,而在“购买手机”“手机账单”和“手机服务”等语句中使用“手机”一词。如果您向模型提供这些更精确的短语,而不是原始的简短短语“手机”和“销售手机”,Speech-to-Text 会学习到,作为动词短语的“销售手机”更有可能紧随“如何”“想”和“你”等字词之后,而作为名词短语的“手机”更有可能紧随“购买”等字词之后,或者紧随“账单”或“服务”等字词之后。因此,根据经验, 通常最好提供更为精确的词组,例如 "如何销售手机"或“你们是否销售手机”而不仅仅是“销售手机号码”

2. Speech 类令牌

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

如果页面已有具有 对系统实体的引用, 这是一个参考表,其中介绍了常见系统实体和 语音类令牌:

系统实体 Speech 类令牌
@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” 帮助识别“您能否销售手机”而不是“你们卖手机吗?”

出于这些原因,同时提供两个词组可以得到最准确的结果

较高的增强值可以减少假负例(即字词或短语 但 Speech-to-Text 无法正确识别(偏置偏差)。 但是,这种提升也会增加出现假正例的可能性。即 单词或短语出现在转写文稿中的情况 尽管它没有出现在音频中(过偏见)。 您通常需要微调偏向性短语,以便在两个偏向性问题之间找到合适的折衷点。

如需详细了解如何微调短语的增强值,请参阅 关于增强的 Cloud Speech 文档

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

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

1. 表单填充

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

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

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

不过,如果某个网页或流程包含大量 intent 路线(对于网页,请同时考虑流程级路线的数量),或者任何 intent 都包含过长或过短且不重要的训练短语(例如,一个完整的句子或只有一个或两个音节的单词),语音自适应模型很可能无法很好地处理这些短语。您应先尝试为开放式页面停用语音自适应 可以实现手动语音自适应, 包含空词组集(空自适应覆盖)。之后 评估是否存在特殊的非模糊短语 来提升识别质量。

这种复杂性问题的另一个表现是, 启用自动语音自适应时出现的过偏见或过偏问题。 与上述情况类似,您还需要使用语音自适应进行测试 已停用该功能 如果停用语音自适应后错误行为仍然存在,您可以将要更正的短语添加到语音自适应设置中,甚至可以添加增强值,以在必要时进一步增强偏向性效果。

测试语音自适应

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

限制

存在以下限制:

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

  • 对于不同的语音模型和 因此在为使用 或语音模型。目前,手动语音自适应 适用于代理中的所有语言,因此多语言代理应 仅使用与语言无关的词组或将每种语言拆分为单独的 。由于默认的自定义调整行为(不提供增强或 0 增强) 在所有语言和模型中通常都能取得相当不错的效果, 您需要配置特定于语言的增强值,除非 识别应用场景所需的参数。如需详细了解如何微调增强值,请参阅这份 Cloud Text-to-Speech 指南

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