我很难理解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)
感谢您的任何建议。
答案 0 :(得分:2)
说要买东西的方式有很多。
您可能会感到惊讶:
,我相信该列表还会继续列出更多示例。话虽这么说,但Rasa NLU应该能够学习和借鉴少量示例。例如,adopt
可能与buy
关系不大,因此举个例子可能很重要。
我需要为打算处理的每种动物重复此操作吗?像下面吗?
否,这不是必需的。每个动物值都是一个实体,Rasa默认使用CRF进行实体识别,这就是您在此处所说的。 CRF与其说是单词的价值,不如说是关于句子结构的。您可以在docs和code中看到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)。在这种情况下,某些通用性将添加到模型中。而且类似的概念,例如狗猫,将更容易被检测到。