Rasa NLU-了解培训数据

时间:2018-08-22 04:01:28

标签: machine-learning rasa-nlu rasa-core

我很难理解rasa nlu中的训练数据。假设我想获得训练数据,以便有人告知某人可以购买的动物。为了清楚起见,我将使用markdown格式:

假设用户正在回答一个问题:

“您想购买哪种动物?”

您想购买的东西只有这么多种。 因此,请看以下示例:

$clients = Client::select(
           DB::raw("CONCAT(first_name,' ',last_name) as name"), 'id')
           ->pluck('name', 'id');

我需要为打算处理的每种动物重复此操作吗?像下面吗?

##intent:inform
- [cat](animal)
- buy [cat](animal)
- I would like to buy a [cat](animal)

此外,我注意到在rasa的餐厅机器人中,他们有时一遍又一遍地重复相同的示例,有时最多重复七次,如下所示:

##intent:inform
- [cat](animal)
- [dog](animal)
- [parrot](animal)
- buy [cat](animal)
- buy [dog](animal)
- buy [parrot](animal)
- I would like to buy a [cat](animal)
- I would like to buy a [dog](animal)
- I would like to buy a [parrot](animal)

那为什么有必要?这对理解有什么影响?在同一位置出现相同单词的次数越多,这如何表明它是一个适当的响应,特别是如果您遇到以下类似情况,其中相同实体的不同值重复相同的次数?

##intent:inform
- [cat](animal)
- [cat](animal)
- [cat](animal)
- [cat](animal)
- [cat](animal)
- buy [cat](animal)
- I would like to buy a [cat](animal)

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

  

说要买东西的方式有很多。

您可能会感到惊讶:

  • 我可以买狗吗?
  • 我想买一条狗。
  • 我真的想要一只狗。
  • 如果我有狗,我会喜欢的。
  • 我正在寻找宠物,也许是狗。
  • 购买狗
  • 领养狗
  • 养狗
  • 带狗回家

,我相信该列表还会继续列出更多示例。话虽这么说,但Rasa NLU应该能够学习和借鉴少量示例。例如,adopt可能与buy关系不大,因此举个例子可能很重要。

  

我需要为打算处理的每种动物重复此操作吗?像下面吗?

否,这不是必需的。每个动物值都是一个实体,Rasa默认使用CRF进行实体识别,这就是您在此处所说的。 CRF与其说是单词的价值,不如说是关于句子结构的。您可以在docscode中看到CRF的功能:

  # Available features are:
  # ``low``, ``title``, ``suffix5``, ``suffix3``, ``suffix2``,
  # ``suffix1``, ``pos``, ``pos2``, ``prefix5``, ``prefix2``,
  # ``bias``, ``upper`` and ``digit``
  features: [["low", "title"], ["bias", "suffix3"], ["upper", "pos", "pos2"]]

也就是说,为实体使用不同的值可能是获取额外训练数据的好方法。您可以使用chatito之类的工具根据模式生成训练数据。但是请注意重复模式,因为您可以overfit将模型推广到无法超出您训练的模式的范围。

  

有时他们会一遍又一遍地重复同样的例子

您在Rasa数据集中看到了此内容吗?这是默认的restaurant bot training data,我看不到任何重复。

一遍又一遍地重复一个句子将增强模型的重要性,即格式/单词很重要,这是oversampling的一种形式。如果您的训练数据很少或训练数据非常不平衡,那么这可能是一件好事。如果您想以多种不同的方式来购买宠物,那可能是一件坏事,因为它可以overfit像我上面提到的那样。

答案 1 :(得分:1)

  

我需要对每种打算重复的动物重复此步骤吗?   处理?像下面吗?

否,您无需指定每种动物。但是,请尝试为每种意图添加少量动物。例如,您的训练样本包含以下内容:

 - [cat](animal)
 - [dog](animal)
 - [parrot](animal)
 - buy [cat](animal)
 - I would like to buy a [parrot](animal)

当您有一些背景信息时,例如:I would like to buy a [animal],不必定义每种动物。相似度算法基于其他关键字查找项目。但是,当上下文较少(单个单词)时,有必要定义不同类型的用户输入。

Rasa使用StarSpace classifier。建议使用〜10-25个用户样本来表示每个意图,以从ChatBot获得合理的响应。

您还可以修改Rasa classifier以添加单词向量功能(Word2vec或Glove)。在这种情况下,某些通用性将添加到模型中。而且类似的概念,例如狗猫,将更容易被检测到。

相关问题