【问题标题】:Spacy: Generate generic sentences and then train the model on top of that. Is it a good idea?Spacy:生成通用句子,然后在此基础上训练模型。这是个好主意吗?
【发布时间】:2019-08-14 11:54:37
【问题描述】:

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

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

原训练句:

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

食物清单:

  1. 披萨
  2. 布丁

新生成的训练句:

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

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

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

问题可能是:

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

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

【问题讨论】:

    标签: nlp entity spacy named-entity-extraction


    【解决方案1】:

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

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

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

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

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

    或摘自维基百科 (here)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2020-01-23
      • 2010-09-08
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多