我很难理解 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 或手套(。在这种情况下,将向模型添加一些通用性。而类似的概念,比如狗猫,会更容易被检测到。