Rasa NLU - 了解训练数据



我很难理解 rasa nlu 中的训练数据。假设我想要训练数据,其中有人通知某人他们可以购买的动物。为了清楚起见,我将使用降价格式:

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

"你想买什么样的动物?">

只有这么多不同的方式来表达你想买东西。 所以以下面的例子为例:

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

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

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

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

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

为什么有必要这样做?这对理解有什么影响?在同一位置出现更多相同的单个单词如何表明这是一个适当的响应,特别是如果你有类似下面的东西,其中同一实体的不同值重复相同的次数?

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

谢谢,任何建议不胜感激。

你想

买东西的方式只有这么多。

您可能会感到惊讶:

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

我相信这个清单还在继续,还有更多的例子。话虽如此,Rasa NLU应该能够学习和适应一些例子。例如,除了一些例外adopt可能与buy没有很强的关系,并且作为示例可能很重要。

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

不,那不是必需的。每个动物值都是一个实体,Rasa 默认使用 CRF 进行实体识别,这就是您在这里谈论的内容。CRF更多的是关于句子的结构,而不是单词的价值。您可以在文档和代码中看到 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这样的工具从模式生成训练数据。但要小心重复模式,因为您可能会过度拟合模型,使其无法泛化超出您训练的模式。

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

你在Rasa数据集中看到了这一点吗?这是默认的餐厅机器人训练数据,我没有看到任何重复。

一遍又一遍地重复一个句子会强化格式/单词很重要的模型,这是一种过度采样的形式。如果您的训练数据很少或训练数据高度不平衡,这可能是一件好事。如果您想处理许多不同的购买宠物的方式,这可能是一件坏事,因为它可能会过度拟合我上面提到的模型。

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

不,您不需要指定每种类型的动物。但是尝试为每个意图添加几种类型的动物。例如,您的训练样本包含以下内容:

- [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分类器。建议为每个意图使用~10-25 个用户样本,以获得来自 ChatBot 的合理响应。

您还可以修改 Rasa 分类器以添加词向量功能(Word2vec 或手套(。在这种情况下,将向模型添加一些通用性。而类似的概念,比如狗猫,会更容易被检测到。

最新更新