rasa_tutorial_depth_nlu_background.png
Rasa NLU 高级版第一部分:意图分类,介绍了 Rasa NLU 的不同意图分类组件和哪些组件最适合自己的个人上下文 AI 助手。了解用户意图仅仅是问题的一部分,从用户消息中提取相关信息(例如:日期、地址)同样重要。提取不同的所需信息的过程称为实体识别。根据你要提取的实体,Rasa NLU 提供了不同的组件,本文将详细介绍所有可用的选项和最佳实践,主要包括:
- 实体提取组件用于哪种实体类型
- 如何解决常见问题:模糊实体、提取地址、提取实体的映射
本文的目录结构:
- 实体提取
- 常见问题
- 总结
1. 实体提取
作为开源框架,Rasa NLU 特别重视完全可定制化,因此,Rasa NLU 为你提供了多个实体识别组件,它们可以满足你的自定义要求:
- 使用 SpaCy 语言模型进行实体识别:
ner_spacy - 使用 Facebook 的
Duckling 进行基于规则的实体识别:ner_http_duckling - 训练自定义实体提取器:
ner_crf
1.1 SpaCy
spaCy 库提供了经过预训练的实体提取器。与词嵌入一样,仅支持某些语言。如果要支持你想要的语言,则推荐使用
1.2 Duckling
1.3 NER_CRF
1 2 3 | ## intent:check_balance - what is my balance <!-- no entity --> - how much do I have on my [savings](source_account) <!-- entity "source_account" has value "savings" --> |
在不能使用基于规则或者预训练组件时,可以使用
- 为每个实体提供足够多的示例(>20)以便条件随机场可以泛化并提取数据
- 标注训练数据中的所有示例(即使该实体可能与意图无关)
1.4 正则表达式/查找表
为了支持
1 2 3 4 5 6 7 8 9 10 | ## regex:zipcode - [0-9]{5} ## lookup:currencies <!-- lookup table list --> - Yen - USD - Euro ## lookup:additional_currencies <!-- no list to specify lookup table file --> path/to/currencies.txt |
正则表达式和查找表向
如果你还是不太确定哪个实体提取组件最适合你的上下文 AI 助手,请使用以下流程图快速做出决策:
rasa_tutorial_depth_nlu_01.png
2. 常见问题
2.1 实体未泛化
如果你提取的实体未泛化到该实体看不见的值,则可能有两个原因:缺少训练数据或
2.2 提取地址
如果要提取地址,我们建议使用带有查找表功能的
2.3 将提取的实体映射到不同的值
有时,提取的实体对于相同的值具有不同的表示形式。例如:如果你要提取国家/地区,例如:中国,中华人民共和国,则都指同一国家/地区。如果要将它们映射到一个指定值,则可以使用组件
1 2 | ## intent:check_balance - how much do I have on my [savings account](source_account:savings) <!-- synonyms, method 1 --> |
或作为单独的部分:
1 2 | ## synonym:savings <!-- synonyms, method 2 --> - pink pig |
3. 总结
本文介绍了我们的最佳实践和建议,以充分利用 Rasa NLU 的不同实体提取组件。通过组合预训练提取器,基于规则的方法以及在需要的地方训练自己的提取器,你可以使用强大的工具集来提取用户传递给上下文 AI 助手的信息。
作者:Kevin Tao (www.taominze.com/index.php/about-me/)
知乎号:Kevin陶民泽 (https://www.zhihu.com/people/taominze/)
备注:转载请注明出处。
如发现错误,欢迎留言指正。