为 SpaCy 模型创建训练数据的方法?

Methods for creating training data for SpaCy models?

我最近开始了使用 SpaCy 的 NLP 之旅,我有大约 5,500 个要标记的字符串。对于前 100 个,我使用带有自定义列的 spreadsheet 来完成此操作,然后通过脚本 运行 生成 Python 词典。在sheet中,我存储了字符串、标签类型、标签值。然后脚本从字符串中计算出标签值的位置。

以这种方式生成训练数据相当耗时,而且容易出错。

是否有任何工具可以帮助解决这个问题?我实际上只需要能够突出显示子字符串,然后选择标签类型。我可以自己构建它,但我觉得它可能已经存在了。

我是 spaCy 的维护者之一,我们实际上一直在思考这个问题!因此,我们构建了 Prodigy,一个与 spaCy 集成并将模型置于循环中的注释工具,以帮助您更快地训练和评估模型。它目前处于测试阶段,但您可以注册以获得免费邀请。 Prodigy 采用了与其他注释工具的点击-拖动-突出显示-select 概念略有不同的方法。它使用循环中的模型来建议具有最相关梯度的注释以进行训练,并且只要求您提供简单的二元反馈:接受或拒绝。这使您可以快速浏览示例。当你注释时,循环中的模型会更新,它的预测将影响 Prodigy 接下来要问的内容。

如果您希望改进 spaCy 模型中存在的现有实体类型,或者如果您正在处理要用于注释的大量示例文本,这会特别有效。

如果您正在寻找一种更专门用于突出显示和注释文本范围的工具,您还应该查看 Brat. I'm not 100% sure what the output looks like, but you should definitely be able to convert it to spaCy's training format. There's also a trainable version of the displaCy ENT visualizer,由社区中的某个人开发。

除了使用 excel sheet,您还可以使用 Mongo 数据库等任何文档数据库来将话语和标签保存在 JSON 结构中。 像

 { "text": "who is John", "entities" : [ { "type": "PER" "startPos" :7 "endPos" :11 } ] }

Spacy 同样有 PhraseMatcher which can be used to code matching tokens. Note that it returns the position of tokens. You would still need to convert that to start and end indices for making it compatible with training format. I referred to this