您可以通过多个实体选项更改实体匹配和数据提取的行为。这些选项是为系统实体预先配置的,因此对于系统实体无法更改,但对于您自己的自定义实体来说,则可进行更改。您可以根据所选的选项创建不同种类的实体:
此外,还有其他选项,这些选项不会确定实体的种类,但会影响实体匹配的行为:
本文档会逐一介绍上述选项。
如何查找此数据
构建代理时,最常见的方法是使用 Dialogflow CX 控制台(访问文档,打开控制台)。以下说明着重介绍如何使用控制台。如需访问实体选项数据,请执行以下操作:
- 打开 Dialogflow CX 控制台。
- 选择您的 Google Cloud 项目。
- 选择您的代理。
- 选择管理标签页。
- 点击实体类型。
- 查看任何现有实体的以下选项(其中一些选项仅在展开高级选项后可见):
- 仅限实体(无同义词)
- 正则表达式实体
- 自动添加实体
- 模糊匹配
- 在日志中隐去
- 实体排除项
如果您要使用 API 而非控制台来构建代理,请参阅 EntityType
类型。API 字段名称与控制台字段名称类似。以下说明重点介绍控制台与 API 之间的重要区别。
为 EntityType 参考选择协议和端口:
协议 | V3 | V3beta1 |
---|---|---|
REST | EntityType 资源 | EntityType 资源 |
RPC | EntityType 接口 | EntityType 接口 |
C++ | EntityTypesClient | 不可用 |
C# | EntityTypesClient | 不可用 |
Go | EntityTypesClient | 不可用 |
Java | EntityTypesClient | EntityTypesClient |
Node.js | EntityTypesClient | EntityTypesClient |
PHP | 不可用 | 不可用 |
Python | EntityTypesClient | EntityTypesClient |
Ruby | 不可用 | 不可用 |
映射实体
映射实体提供从引用值到每个引用值的同义词的映射。每个映射实体条目都包含一个引用值和一个同义词列表。您还可以选择为每个实体设置 DTMF 模式。
例如,以下每一行都是 size
实体类型的实体条目:
实体 | 同义词 | DTMF 模式 |
---|---|---|
S | S, small, tiny, little | |
M | M, medium, average | |
L | L, large, huge, big |
请注意,上述每个实体条目的同义词列表中都包含引用值。为了让引用值得以匹配,需要将其作为同义词本身包含在内。当您最初通过控制台输入引用值时,该值会自动添加为同义词。
如果任何同义词匹配最终用户输入部分,则系统会提取相关引用值作为匹配项,并使用该值来解析关联的参数值。
可以从同义词列表中省略引用值。这只是表示引用值与最终用户输入部分不匹配,但如果引用值的一个同义词匹配,则将引用值用作提取值。当您为最终用户未输入或说出的引用值使用特殊字符串时,这种做法十分可取。
许多系统实体都是映射实体。例如,@sys.date
系统实体匹配常规日期输入内容,如“January 1, 2015”或“The first of January of 2015”。这两项输入都映射到 ISO-8601 格式的引用值:“2015-01-01T12:00:00-03:00”。
如需创建映射实体,请执行以下操作:
- 使用控制台,取消选中正则表达式实体选项,然后取消选中仅限实体选项。
- 使用 API,将
EntityType.kind
字段设置为KIND_MAP
。
列表实体
列表实体提供单值实体条目的列表。这些实体没有引用值和同义词。例如,以下每一行都是 material
实体类型的实体条目:
值 |
---|
fabric |
wood |
金属 |
如果任何值匹配最终用户输入部分,则系统会提取该值作为匹配项,并使用该值来解析关联的参数值。
许多系统实体都是列表实体。例如,@sys.color
系统实体匹配常规颜色输入内容,如“red”或“blue”。当某一颜色匹配时,提取值不会映射到任何引用值。例如,“scarlet”或“crimson”等红色系不会映射到“red”,但会被提取为原始值“scarlet”和“crimson”。
如需创建列表实体,请执行以下操作:
- 使用控制台,取消选中正则表达式实体选项,并选中仅限实体选项。
- 使用 API,将
EntityType.kind
字段设置为KIND_LIST
。
复合实体
复合实体是一种特殊种类的列表实体。列表实体的实体条目通常包含简单的字词或短语,但也可能包含其他实体类型。当某一实体类型被其他实体类型引用时,这种引用称为“别名”。如果某个列表实体包含其他实体类型的别名,则该列表实体称为复合实体。
创建别名时,您需要提供所引用实体类型的名称和所选的属性名称。如果某一复合实体在运行时匹配,则提取值会以 JSON 对象形式返回,其中别名属性名称用作 JSON 属性名称。别名的输入格式如下:
@entity-name:property-name
例如,您可以使用以下实体条目创建匹配城市或州/省/自治区/直辖市的 place
实体类型:
值 |
---|
@sys.geo-city:city |
@sys.geo-state:state |
如果最终用户的输入包含“Nashville”部分,则匹配 place
实体类型。提取值将按如下形式返回:{"city": "Nashville"}
。
您还可以在一个实体条目中使用多个实体别名。请考虑以下 move
自定义实体类型,该类型包含 direction
实体类型和 @sys.number
系统实体类型的别名:
Direction 自定义映射实体类型:
引用值 | 同义词 |
---|---|
forward | forward、forwards |
back | back、backward、backwards |
Move 自定义列表实体类型:
值 |
---|
@sys.number:steps steps @direction:direction |
如果 move
实体与包含“five steps backward”的最终用户输入匹配,则 move
实体将匹配。提取值将按如下形式返回:{"steps": 5, "direction": "back"}
。
许多系统实体都是复合实体。例如,@sys.unit-currency
系统实体用于匹配金额与货币名称。该实体与“50 euros”或“twenty dollars and five cents”之类的最终用户输入匹配。提取值以 JSON 对象形式返回,例如 {"amount": 50, "currency": "EUR"}
正则表达式实体
借助正则表达式实体,您可以提供正则表达式进行匹配。如需了解详情,请参阅正则表达式实体。
要创建正则表达式实体,请执行以下操作:
- 使用控制台,选中正则表达式实体选项。
- 使用 API,将
EntityType.kind
字段设置为KIND_REGEXP
。
自动扩展(自动添加实体)
您可以为自定义实体类型启用自动扩展功能。启用该功能后,您的代理可以识别尚未明确提供的值。例如,考虑一个 shopping list 实体类型:
值 |
---|
面包 |
butter |
milk |
苹果 |
冰淇淋 |
如果最终用户输入为“I need to buy some carrots”,则该实体类型将匹配“carrots”,即使未提供该值也是如此。代理会识别出“carrots”在上下文中与其他值类似。
在考虑使用自动扩展功能时,您应遵循以下最佳做法:
- 启用自动扩展功能并不能保证提取实体。对于有限列表,您应提供完整列表,而不是提供部分列表并启用自动扩展功能。
- 如果您在多个实体中启用自动扩展功能,则可能会导致冲突和意外的分类结果。
- 为了确保更好的参数提取质量,必须提供各种训练数据,这些数据涵盖了在预期代理的流量中可以找到给定实体的所有用例。如果没有足够的示例,则自动实体扩展可能无法按预期运行。
如需启用自动扩展功能,请执行以下操作:
- 使用控制台,选中自动添加实体选项。
- 使用 API,将
EntityType.autoExpansionMode
字段设置为AUTO_EXPANSION_MODE_DEFAULT
。
模糊匹配
您可以为自定义实体启用模糊匹配。启用模糊匹配后,值或同义词中的字词顺序便无关紧要。如需了解详情,请参阅模糊匹配。
如需启用模糊匹配,请执行以下操作:
- 使用控制台,选中模糊匹配选项。
- 使用 API,将
EntityType.enableFuzzyExtraction
字段设置为true
。
在日志中隐去
如果启用实体隐去,则在记录时隐去所有运行时提取的实体类型的参数值。
作为替代方案,您可以隐去各个参数。
实体排除项
您可以添加实体排除项,即不应匹配的短语。 例如,如果您的大小实体类型为实体巨头(形容词),则可以考虑添加巨头(名词)作为排除项。