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

How rasa_nlu using lookup_tables for entity extraction?

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

要求:

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

  • 你有组件 intent_entity_featurizer_regex and ner_crf in your NLU pipeline
  • 您要匹配的实体具有定义明确且范围狭窄的实体
    • 食品名称、公司名称、汽车品牌等实体不太可能出现在您不想匹配它们的上下文中。因此,查找 table 对他们来说是一个很好的用例。
    • 像对象这样的实体(例如 "car"、"house"、"paper")出现在各种您根本不想匹配它们的上下文中。因此,使用查找 tables 甚至可能导致更糟糕的结果。

在你的训练数据中

为了使用 look up tables,您可以直接在训练数据中定义它们,例如:

## 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

它们是如何工作的

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

也许 Rasa NLU documentation 也能帮到你。