0

我正在从头开始训练一个模型来从文本中预测食物。我已经标记了大约 500 个句子来训练我的模型,并且准确性非常好。但是,我有点担心看不见的真实世界数据,所以我想出了一个有趣的想法。所以我想知道一些有经验的人在这个有趣的想法中的想法。

所以这个想法是将 500 个句子转换成 10000 个句子。为此,我首先用标签替换了实际实体,然后填充了可能的实体。示例如下:

原训练句:

  1. “乐购去年卖了五万比萨。”——食物=比萨
  2. “他一个人的时候喜欢吃布丁。” --- 食物 = 布丁
  3. “乐购去年卖了五万。”
  4. “他一个人的时候喜欢吃东西。”

食物清单:

  1. 比萨
  2. 布丁

新生成的训练句子:

  1. “乐购去年卖了五万比萨。”——食物=比萨
  2. “乐购去年卖了五万布丁。”——食物=布丁
  3. “他喜欢在一个人的时候吃披萨。” --- 食物 = 比萨
  4. “他一个人的时候喜欢吃布丁。” --- 食物 = 布丁

那么生成这样的训练句子是不是很好。我认为的好处:

  1. 更多的句子。
  2. 单个实体将有更多示例而不是一两个。
  3. 可能精度很高。

问题可能是:

  • 充满相似句型的训练数据。

谢谢,请让我知道这种方法的想法。

4

1 回答 1

5

这种方法称为用合成数据增强训练数据。

当您的训练数据有限时,它绝对是一种非常有用的技术。然而,根据我的经验,它应该谨慎使用或适度使用,否则你会冒着将模型过度拟合到训练数据的风险。换句话说,您的模型可能难以泛化超出食物列表中的实体,因为它在训练期间已经多次看到这些实体,并且期待这些实体。同样正如您所提到的,过度拟合可能是通过重复的句子结构引起的。

该合成排列数据应尽可能随机生成。可以使用python 随机库中的 sample() 方法。
对于初始训练数据集中的每个句子,从您的列表中抽取一小部分食物样本,并为每个样本食物替换句子中的食物以生成一个新句子。

一种稍微不同的方法(可能可以更好地概括看不见的食物实体)不是使用 500 个训练句子中的食物列表,而是下载食物列表并使用它。

食物清单可以在 github 上找到,例如: here 或 here

或摘自维基百科(此处

在这两种情况下,使用 n 的样本大小都会使训练数据增加 n 倍。

于 2019-08-14T13:12:26.917 回答