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