时间:2018-10-31 13:34:18

标签: python chatbot rasa-nlu rasa-core

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

1 个答案:

答案 0 :(得分:1)

要求

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

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

在您的训练数据中

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

## 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将currency插槽的值设置为Euro

它们如何工作

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

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