将正则表达式与Rasa一起使用(如何识别不在训练示例中的实体)

问题描述 投票:0回答:1

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

我创建了一些培训示例(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模型将“ adrena”归类为“ inform”,没有实体,这是正确的吗? (Y / n)

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

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

谢谢。

rasa-nlu rasa
1个回答
1
投票

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

language: "en"

pipeline:
- name: "WhitespaceTokenizer"
- name: "RegexFeaturizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "CountVectorsFeaturizer"
- name: "EmbeddingIntentClassifier"
- name: "SpacyNLP"
  model: "en_core_web_md"
- name: "SpacyEntityExtractor"
  dimensions: ["PERSON"]

© www.soinside.com 2019 - 2024. All rights reserved.