将Regex与Rasa一起使用(如何识别训练示例中未包含的实体)

时间:2020-03-04 11:17:34

标签: rasa-nlu rasa nlu

我正在开发一个客户关系聊天机器人。用户可以输入问候语,用户名,电话号码等,

我创建了一些培训示例(50多个名称)来帮助nlu.md文件中的聊天机器人。但是问题在于,如果在训练数据(nlu.md)文件中未指定user_name,那么聊天机器人将无法将user_name识别为实体。

我也写了一个正则表达式,但是即使我改了个名字,nlu引擎也无法识别它。

我正在使用rasa 1.0.7,并且具有管道:supervised_embeddings

例如

nlu.md文件:

##regex.names
- [a-zA-Z\s]+$


##intent:inform
- John
- Roshan
- Sanvi
–> have few more

如果用户使用任何新名称表示,则我的实体为空。还要附加 rasa交互式消息。

您的输入->约翰
意图“通知”是否正确[John](姓名),并且所有实体的标签都正确吗? (是/否)
您的输入->肾上腺素
您的NLU模型的意图是“告知”,分类为“肾上腺”,没有任何实体,对吗? (是/否)

当指定用户名时,我应该怎么做才能使机器人理解?我在某处看到可以使用查找表。但是当我尝试使用查找表时,它仍然无法识别出不是培训示例一部分的user_name。

我引用的以下链接。
https://forum.rasa.com/t/regex-entity-names/11739/10
How rasa_nlu using lookup_tables for entity extraction?
但是我的运气不好。我也可以接受任何选择。

谢谢。

1 个答案:

答案 0 :(得分:1)

对于该特定实体,您可以使用尺寸为SpaCyEntityExtractor的{​​{1}}而不是PERSON。对于个人名称识别,这几乎总会给您带来更好的结果,因为存在太多的名称可能性。 AFAIK CRFEntityExtractor SpaCy模型本身区分大小写。您仍然可以使用PERSON提取其他自定义实体。在您的管道中,它看起来像:

CRFEntityExtractor