rasa_nlu如何使用lookup_tables进行实体提取?


问题内容

我正在尝试使用rasa nlu和rasa
core开发一个聊天机器人。但是我没有获得如何使用lookup_tables进行实体提取的rasa_nlu链接。我已经通过(http://blog.rasa.com/improving-
entity-extraction/
)链接了,但是没有得到。lookup_table应该如何用于提取实体?


问题答案:

要求

如果要使用查找表,请确保:

  • 您的NLU管道中具有intent_entity_featurizer_regexner_crf组件
  • 您要匹配的实体范围明确且范围狭窄
    • 诸如食物名称,公司名称,汽车品牌之类的实体不太可能出现在您不希望与它们匹配的上下文中。因此,查找表对他们来说是一个很好的用例。
    • 诸如对象之类的实体(例如“汽车”,“房屋”,“纸张”)出现在您根本不想匹配它们的各种上下文中。因此,使用查找表甚至可能导致更糟的结果。

在您的训练数据中

为了使用查找表,您可以直接在训练数据中定义它们,例如:

## intent:check_balance
- what is my balance <!-- no entity -->
- Could I pay in [yen](currency)?  <!-- entity matched by lookup table -->

## lookup:currency   <!-- lookup table list -->
- Yen
- USD
- Euro

或者,您可以将它们写在文本文件中:

Yen
USD
Euro

然后在训练数据中包含文本文件的路径:

## intent:check_balance
   ... like before

## lookup:food
    <path to your look up table text file>.txt

输入像 我可以用欧元付款吗? ,然后Rasa NLU将广告位的值设置currencyEuro

他们如何工作

查找表中的单个项目将添加到正则表达式(regex)中,该正则表达式将应用于用户发送给机器人的消息。但是,如果您的用户输入错字,则查找表Pesos将不起作用,例如,查找表条目将不匹配Peesos。要匹配这些情况,您可以尝试模糊匹配,这在您链接的博客文章中有介绍。确保您的查询表不会太大,因为Rasa
NLU必须检查每个句子是否与您的查询表项之一匹配。

也许Rasa NLU文档也可以为您提供帮助。