【问题标题】:Rasa NLU - Understanding Training DataRasa NLU - 理解训练数据
【发布时间】:2018-08-22 04:01:27
【问题描述】:

我很难理解 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)

谢谢你,任何建议都值得赞赏。

【问题讨论】:

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


    【解决方案1】:

    表达你想买东西的方式只有这么多种。

    你可能会感到惊讶:

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

    而且我相信该列表还会继续列出更多示例。话虽如此,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 上面提到的模型。

    【讨论】:

      【解决方案2】:

      我是否需要对我打算使用的每种动物重复此操作 处理?像下面这样?

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

       - [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)。在这种情况下,模型会增加一些通用性。并且类似的概念,例如 dog-cat 将更容易被检测到。

      【讨论】:

      • 嗯,谢谢你,这正是我正在寻找的答案。你知道为什么在 rasas 示例中他们在训练数据中多次指定同一个单词吗?例如,他们可能只定义了多次“[cat](animal)”。
      • @CoffeeIsProgramming,请给我这些例子的链接。在官方示例中,在他们的 github 中,单个单词只出现了一次。 github.com/RasaHQ/rasa_nlu/blob/master/data/examples/rasa/…
      • 当然,它在他们的 frankendata.json (旧格式)中多次存在。例如,快速搜索“文本”:“便宜”github.com/RasaHQ/rasa_core/blob/master/examples/restaurantbot/… 我想知道是否以某种方式为这些词添加“权重”,而不是英语中的其他词,但这可能只是写得不好的培训数据。我真的不确定。
      • @CoffeeIsProgramming,据我所知,没有办法增加示例的权重。在分类器中重复一些示例只是允许分类器了解更多关于它们的信息(有时在该训练示例上过度拟合)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多