【问题标题】:How to train completely new entities instead of pre-trained entities using Spacy NER model?如何使用 Spacy NER 模型训练全新的实体而不是预训练的实体?
【发布时间】:2020-05-06 17:28:11
【问题描述】:

如何进行迁移学习,即采用预训练的 Spacy NER 模型并使其学习特定于我的用例的新实体?

为此,我有 100 个新的带注释的训练样本。新的再训练模型应该只预测新实体,而不是预训练的 spacy 模型中的任何现有实体。只是在现有模型中添加/更新新实体并在预测期间忽略旧实体是没有意义的。

这个official example 描述了如何向现有的预训练实体添加新实体,但这不是我想要的。我也有很少的例子,即 100 个从头开始完全构建新的 NER 模型。

编辑:我想识别非结构化文档中的所有帐号。

示例 ("我想更改我的账户 12345 对应的地址。请告诉我怎么做。" [34, 39, 'accountnumber'])

【问题讨论】:

  • 需要更多信息来回答这个问题 - 您正在使用什么类型的实体?地名、人名等?您能否举例说明新实体及其训练数据?
  • 谢谢。已添加到帖子中

标签: python deep-learning nlp spacy named-entity-recognition


【解决方案1】:

你提到你只想预测新实体,而不是旧实体。因此,没有理由从预先训练的NER模型开始。无论如何都不会使用/转移到其他实体类型的特征(您不想)。因此,您只需从头开始培训模型。

你提到你只有几个训练的例子(100),所以(如你提到),实现足够高精度的挑战将是一个挑战。也许你可以考虑首先运行@ 987654321,然后手动整理来自该匹配步骤的命中,以更快地增加培训数据。

【讨论】:

  • +1。你的意思是说这个,即收集新的例子,并应用“基于规则的匹配”步骤来标记新示例中的实体而不是手动注释?如果是这样,我只需将培训的模型应用于100个示例,并在新收集的示例上应用它以生成更多的培训示例,而不是使用“规则的匹配”? span>
  • 为什么您认为现有的净化模型是有用的,用于识别帐号i.e.只需用仅重新删除输出层? ISNT在转移学习背后的整个想法? span>
  • 哦,当然,如果您有资源做更多的手动注释,那将比规则+策划更好! span>
  • 好的。使用基于规则的匹配相比,使用现有100示例上的模型自动注释新样本的基于规则的匹配的优缺点是什么?当我应该使用匹配者 span>时,我正在尝试了解
  • 如果您觉得数据集中存在很少的词汇/句法变体,我就会建议使用匹配器。如果您可以通过少数规则捕获80%的“黄金”案例,它可能是值得第一个快速“扫描”的匹配器,然后进行手动注释。 span>
【解决方案2】:

对于您的用例,您正在添加一个新实体类型,因此不应与现有实体类型混淆。如果您将新实体称为“帐号”,您应该能够使用您链接的训练脚本来训练模型。

对于提取阶段,使用code in the documentation,但只过滤结果中的“帐号”(即 ent.label_ 字段)并忽略其他现有实体。

【讨论】:

  • 按照解释的方式构建的模型将比仅训练识别帐号的模型弱。预测的概率也没有意义,我想进一步使用概率。
  • 你说模型会变弱的依据是什么?您的新实体类型不与现有实体重叠。 SpaCy 正在使用依赖解析和其他语言分析来查找实体。只要你没有重叠的例子,你应该没问题。您是否尝试过此操作并发现性能不足?
  • spacy 正在构建一个残差 CNN 来进行更精细的预测。根据您所说的最后一层,即目标包含 1000 个实体,但我只想在最后一层输入 account_type。由于训练为仅预测 account_type 的模型将比为预测 aacount_type 和 999 个其他类训练的模型更准确。
  • 唯一的判断方法是实际尝试,但我认为 NER 是一个两步问题。第一部分是将感兴趣的实体与文本的其余部分(例如动词、介词等)区分开来。第二步是识别它是什么类型的实体。第一步是我看到预训练模型的价值。如果您有更大的数据集,则可以从头开始训练模型。
猜你喜欢
  • 2020-04-28
  • 1970-01-01
  • 2020-07-28
  • 2020-02-20
  • 1970-01-01
  • 2019-01-02
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多