Spacy:生成通用句子,然后在此基础上训练模型。这是个好主意吗?

Spacy: Generate generic sentences and then train the model on top of that. Is it a good idea?

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

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

原始训练句子:

  1. "Tesco sold fifty thousand pizza last year. " --- 食物 = 披萨
  2. "He loves to eat pudding when he is alone." --- 食物 = 布丁 通用句子:
  3. "Tesco sold fifty thousand last year. "
  4. "He loves to eat when he is alone."

食物清单:

  1. 披萨
  2. 布丁

新生成的训练句子:

  1. "Tesco sold fifty thousand pizza last year. " --- 食物 = 披萨
  2. "Tesco sold fifty thousand pudding last year. " --- 食物=布丁
  3. "He loves to eat pizza when he is alone." --- 食物 = 披萨
  4. "He loves to eat pudding when he is alone." --- 食物=布丁

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

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

问题可能是:

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

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

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

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

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

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

或摘自维基百科 (here)

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