在 spacy v3 中训练 NER 需要在命令行中使用 dev.spacy

问题描述

我正在尝试在 spacy v3 中准备一个自定义的 ner 模型。 从训练的角度来看,V3 与 v2 相比发生了显着变化。

我正在使用 en_web_lg 的认配置。 我已经使用 convert 命令准备了训练数据 (training.spacy)。 但是,训练命令需要一个 dev.spacy 文件

不确定 dev.spacy 中需要哪些数据。 这是在为 training.spacy 文件询问纯文本语料库吗? 但是有没有办法以spacy格式转换纯文本文件..

来自 spacy 站点的命令- python -m spacy train config.cfg --output ./output --paths.train ./train.spacy --paths.dev ./dev.spacy

有人可以帮忙解释一下如何准备 dev.spacy。

解决方法

train.spacy 是“训练”文件集合的占位符 - 通常使用 Spacy 转换实用程序的文件目录。 dev.spacy 是用于收集“验证”文件的占位符 - 格式与训练文件相同,但在训练期间用作验证样本(用于在每次训练迭代后计算预测、召回和 f 分数的 NER)。 通常建议的验证样本“大小”在训练样本的 10% 到 20% 之间。 我倾向于使用 20%,因为我的数据有很大的变化 - 但更大的验证样本会增加训练开销。

,

dev.spacy 文件看起来应该与 train.spacy 文件完全相同,但应该包含训练过程之前没有见过的新示例,以便对模型的性能进行实际评估。

要创建此开发集,您可以先将原始数据拆分为训练/开发部分,然后分别对每个部分运行 convert,分别调用较大的 train.spacy 和较小的 { {1}}。正如@mbrunecky 所建议的,80-20 的分割通常是好的,但这取决于数据集。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...