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

时间:2019-07-15 03:04:30

标签: python speech-recognition chatbot spacy rasa-nlu

我正在开发一个客户关系聊天机器人。用户可以输入问候语,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。但是数据库包含更多用户,每个用户具有唯一的userId,因此我无法将所有ID添加到训练示例中。

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

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

我会因为总是对你说Need more training data而陷入困境,但我想在这里也能起到一定作用。

我相信您可以采取一些行动:

  • 提供更多的培训数据,我从来没有见过少于10个培训示例的良好意图。意向的每个可能排列以及更多相似的意向,都会增加该数字。
  • 使用预构建的实体识别器,例如Duckling或spaCy。他们不一定知道1234是userId,但是他们可以自动提取数字。

如果您将new_crf与Rasa一起使用,则必须意识到它实际上是在学习发声模式,并根据该实体周围的内容而不是实际值来识别实体。

您也可以在Rasa中使用正则表达式,但是正则表达式功能化器不仅是查找工具。无论令牌是否匹配该模式,都会向CRF添加标志。鉴于此,它仍然需要足够的训练数据来学习该令牌对于该实体很重要。