您可以通过多个实体选项更改实体匹配和数据提取的行为。这些选项是为系统实体预先配置的,因此对于系统实体无法更改,但对于您自己的自定义实体来说,则可进行更改。您可以根据所选的选项创建不同种类的实体:
此外,还有以下两个选项,这些选项不会确定实体的种类,但会影响实体匹配的行为:
本文档会逐一介绍上述选项。
如何查找此数据
构建代理时, 最常用的方法是使用 Dialogflow ES 控制台(访问文档,打开控制台)。 以下说明着重介绍如何使用控制台。如需访问实体选项数据,请执行以下操作:
- 转到 Dialogflow ES 控制台。
- 选择一个代理。
- 在左侧边栏菜单中选择实体 (Entities)。
- 选择自定义 (Custom) 标签页(对于为您的代理定义的自定义实体)或系统 (System) 标签页(对于您的代理使用的系统实体)。
- 查看任何现有实体的以下复选框选项:
- 定义同义词 (Define synonyms)
- 正则表达式实体 (Regexp entity)(仅限自定义实体)
- 允许自动展开 (Allow automated expansion)(仅限自定义实体)
- 模糊匹配 (Fuzzy matching)(仅限自定义实体)
如果您要使用 API 而非控制台来构建代理,请参阅 EntityTypes 参考。 API 字段名称与控制台字段名称类似。 以下说明重点介绍控制台与 API 之间的重要差异。
映射实体
映射实体提供从引用值到每个引用值的同义词的映射。每个映射实体条目都包含一个引用值和一个同义词列表。例如,以下每一行都是 size
实体类型的实体条目:
引用值 | 同义词 |
---|---|
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”。
如需创建映射实体,请执行以下操作:
- 使用控制台,取消选中正则表达式实体 (Regexp entity) 选项,并选中定义同义词 (Define synonyms) 选项。
- 使用 API,将
EntityType
kind
字段设置为KIND_MAP
。
列表实体
列表实体提供单值实体条目的列表。这些实体没有引用值和同义词。例如,以下每一行都是 material
实体类型的实体条目:
值 |
---|
fabric |
wood |
金属 |
如果任何值匹配最终用户表述部分,则系统会提取该值作为匹配项,并使用该值来解析关联的参数值。
许多系统实体都是列表实体。例如,@sys.color
系统实体匹配常规颜色输入内容,如“red”或“blue”。当某一颜色匹配时,提取值不会映射到任何引用值。例如,“scarlet”或“crimson”等红色系不会映射到“red”,但会被提取为原始值“scarlet”和“crimson”。
如需创建列表实体,请执行以下操作:
- 使用控制台,取消选中正则表达式实体 (Regexp entity) 选项,并取消选中定义同义词 (Define synonyms) 选项。
- 使用 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"}
正则表达式实体
借助正则表达式实体,您可以提供正则表达式进行匹配。如需了解详情,请参阅正则表达式实体。
如需创建正则表达式实体,请执行以下操作:
- 使用控制台,选中正则表达式实体 (Regexp entity) 选项。
- 使用 API,将
EntityType
kind
字段设置为KIND_REGEXP
。
自动扩展
您可以为自定义实体类型启用自动扩展功能。启用该功能后,您的代理可以识别尚未明确提供的值。例如,考虑一个 shopping list 实体类型:
值 |
---|
面包 |
butter |
milk |
苹果 |
冰淇淋 |
如果最终用户表述为“I need to buy some carrots”,则该实体类型将匹配“carrots”,即使未提供该值也是如此。代理会识别出“carrots”在上下文中与其他值类似。
在考虑使用自动扩展功能时,您应遵循以下最佳做法:
- 启用自动扩展功能并不能保证提取实体。对于有限列表,您应提供完整列表,而不是提供部分列表并启用自动扩展功能。
- 如果您在多个实体中启用自动扩展功能,则可能会导致冲突和意外的分类结果。
- 为了确保更好的参数提取质量,必须提供各种训练数据,这些数据涵盖了在预期代理的流量中可以找到给定实体的所有用例。如果没有足够的示例,则自动实体扩展可能无法按预期运行。
如需启用自动扩展功能,请执行以下操作:
- 使用控制台,选中允许自动扩展 (Allow automated expansion) 选项。
- 使用 API,将
EntityType
autoExpansionMode
字段设置为AUTO_EXPANSION_MODE_DEFAULT
。
模糊匹配
您可以为自定义实体启用模糊匹配。启用模糊匹配后,值或同义词中的字词顺序便无关紧要。如需了解详情,请参阅模糊匹配。
如需启用模糊匹配,请执行以下操作:
- 使用控制台,选中模糊匹配选项。
- 使用 API,将
EntityType
enableFuzzyExtraction
字段设置为true
。