如何识别不在训练示例中的实体

How to recognize entities not in training examples

我正在开发客户关系聊天机器人。用户可以输入问候语、inital_query 或与产品相关的查询。初始查询是当用户将他们的 user_id 提供给聊天机器人时。这样做是为了从数据库中过滤结果。

我创建了一些训练示例来帮助聊天机器人将 initial_query 与其他机器人进行分类。但问题是,如果未在训练数据中指定,聊天机器人无法将 user_id 识别为实体。 例如

## intent:initial_query
- My name is [Karthik](name) and my user ID is [0234](UserID)

这是 initial_query 的一个例子。这里指定的 userId 是 0234。但数据库包含更多用户,每个用户都有唯一的 userIds,我不可能将所有 ID 添加到训练示例中。

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

这是我用来在我的代码中尝试查找表的

intent_entity_featurizer_regex 似乎对我不起作用。我被困在这里,因为这是机器人的关键部分。如果查找表不是解决此问题的最佳方法,我也愿意接受其他想法。

谢谢

我会因为总是说你而得到一个糟糕的包装,但我想他们也在这里发挥了作用。

我相信你有几个可能的行动方案:

  • 提供更多的训练数据,我从未见过少于10个训练样本的好意。这个数字随着意图的每一种可能排列以及更多相似的意图而增加。
  • 使用 pre-built 实体识别器,例如 Duckling 或 spaCy。他们不一定知道 1234 是一个用户 ID,但他们可以自动提取数字。

如果您将 new_crf 与 Rasa 一起使用,那么重要的是要意识到它实际上是在学习话语模式,并通过实体周围的事物而不是实际值来识别实体。

您也可以将 regex 与 Rasa 结合使用,但 regex featurizer 不仅仅是一个查找工具。无论令牌是否匹配该模式,它都会向 CRF 添加一个标志。鉴于此,它仍然需要足够的训练数据来了解该令牌对该实体很重要。