1

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

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

我也写了一个正则表达式,但如果我给一个新名称,nlu 引擎仍然无法识别它。

我正在使用 rasa 1.0.7 并且我有管道:受监督的_embeddings

例如

nlu.md 文件:

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


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

如果用户提供任何新名称意味着,我的实体是空的。还附上rasa交互式消息。

您的输入 -> John
[John](姓名)的意图“通知”是否正确,所有实体标记是否正确?(是/否)
您的输入 -> adrena
您的 NLU 模型将“adrena”分类为意图“通知”并且没有实体,这是正确的吗?(是/否)

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

我提到的以下链接。
https://forum.rasa.com/t/regex-entity-names/11739/10
rasa_nlu 如何使用lookup_tables 进行实体提取?
但我的问题没有运气。我也可以接受任何选择。

谢谢。

4

2 回答 2

1

您可以将SpaCyEntityExtractor与维度一起使用,PERSON而不是CRFEntityExtractor用于该特定实体。对于个人姓名识别,这几乎总是会给你更好的结果,因为有很多名字的可能性。AFAIK PERSONSpaCy 模型本身是区分大小写的。您仍然可以使用 提取其他自定义实体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"]

于 2020-03-04T11:44:06.027 回答
0

晚了,但可能对其他人有用,使用 RASA 2:

我会尝试:

  1. 将自定义实体配置name为 RASA 查找表,
  2. name在包含包含对象实体的句子的专用意图中提供示例:
version: "2.0"

nlu:

  - lookup: name
    examples: |
      - John
      - Roshan
      - Sanvi
      - Anita
      - Anna
      # many others names (hundreds)

  - intent: name
    examples: |
      - [John](name)
      - call me [Roshan](name)
      - [Sanvi](name) is my name
      - my name is [Paola](name)
      - I'm [Annabelle](name)
      # etc etc.

查看类似的问题解决方案: https ://stackoverflow.com/a/68793356/1786393

顺便说一句,@Melina 使用 SpacyPERSON预定义实体的解决方案也是一个可能的好解决方案(对于属于单个选定的 Spacy 语言模型的名称),它可能与自定义实体/意图解决方案合作,只需命名自定义意图PERSON(待验证/我'不确定)。

于 2021-08-18T08:53:48.250 回答