1

在 RASA 框架中构建我的 NLP 模型以构建聊天机器人时,我使用了两种不同的实体提取方法 ( https://rasa.com/docs/nlu/entities/ )。该机器人应该处理具有自定义实体以及一些一般问题(如位置或组织)的不同问题。所以我使用 ner_spacy 和 ner_crf 两个组件来创建模型。之后,我在 python 中构建了一个小帮助脚本来评估模型性能。在那里我注意到模型很难选择正确的实体。

例如,对于单词“X”,它从 SpaCy 中选择了预定义的实体“ORG”,但它应该被识别为我在训练数据中定义的自定义实体。

如果我只使用 ner_crf 提取器,我在识别像首都这样的位置实体时会遇到巨大的问题。我最大的问题之一也是单一答案实体。

问:“你最喜欢的动物是什么?”

一只狗

我的模型无法为这个单一答案提取这个单一实体“动物”。如果我用“The Dog”这样的两个词来回答这个问题,那么模型在提取值为“Dog”的动物实体方面没有问题。

所以我的问题是,使用两个不同的组件来提取实体是否聪明?一个用于自定义实体,另一个用于预定义实体。如果我使用两种方法,使用哪个提取器的模型中的机制是什么?

顺便说一句,目前我只是在测试,所以我的训练样本并没有应该的那么大(少于 100 个样本)。如果我有更多的训练示例,问题是否可以解决?

4

1 回答 1

2

您在这里面临两个问题。我提出了一些我觉得有帮助的方法。

1.自定义实体识别: 要解决这个问题,您需要添加更多具有所有可能长度的实体的训练句子。ner_crf当实体周围有可识别的标记(例如介词)时,会更好地预测

2.从单个单词答案中提取实体: 作为一种解决方法,我建议您在客户端进行以下操作。

当您发送类似 的问题时,请在问题What´s your favorite animal?上附加一个标记,以向客户表明需要一个答案。例如,您可以发送##SINGLE## What´s your favorite animal?给客户。

客户可以##SINGLE##从问题中删除并将其显示给用户。但是当客户端将用户的响应发送到服务器时,它不会发送Dog,它会发送类似User responded with single answer as Dog

您可以训练您的模型从此类答案中提取实体。

于 2019-03-06T05:51:17.560 回答