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

Abh*_*wal 0 entity nlp named-entity-extraction spacy

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

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

原始训练句子:

  1. “特易购去年售出了五万个比萨饼。” ---食物=比萨饼
  2. “他一个人时喜欢吃布丁。” ---食物=布丁通用句:
  3. “乐购去年卖了五万。”
  4. “他一个人时喜欢吃东西。”

食物清单:

  1. 比萨
  2. 布丁

新生成的训练语句:

  1. “特易购去年售出了五万个比萨饼。” ---食物=比萨饼
  2. “乐购去年卖了五万布丁。” ---食品=布丁
  3. “他一个人时喜欢吃披萨。” -食物=披萨
  4. “他一个人时喜欢吃布丁。” -食物=布丁

因此生成这样的训练语句是否很好?我认为的好处:

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

问题可能是:

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

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

DBa*_*ker 5

这种方法称为用综合数据扩充训练数据。

当您的训练数据有限时,它绝对是一种非常有用的技术。但是,以我的经验,应该谨慎使用或适度使用它,否则可能会冒使模型过度拟合训练数据的风险。换句话说,您的模型可能难以推广到食物清单中的实体之外,因为它在训练过程中已经看过那么多次了,并且可以期待这些。就像您提到的那样,过拟合可能通过重复的句子结构而出现。

该合成排列数据应尽可能随机地生成。可以在python随机库中使用sample()方法。
对于初始训练数据集中的每个句子,请从列表中抽取一小份食物样本,然后将每个样本食物用该食物替代该句子中的食物以产生新的句子。

一种略有不同的方法(可以将其更好地推广到看不见的食物实体上)是下载食物列表并使用它,而不是使用500个训练语句中的食物列表。

食物列表可以在github上找到,例如: here 或here

或摘自维基百科(此处

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