Spacy 3.1执行spacy train命令时触发KeyError: 'train'错误的求助
解决spaCy训练DistilBERT自定义模型时的KeyError: 'train'问题
我帮你排查了这个问题,核心原因出在你的config.cfg配置里的训练语料库指向错误,导致spaCy找不到对应的配置项。
错误原因分析
看你提供的config.cfg里的[training]部分:
[training] accumulate_gradient = 3 dev_corpus = "dev.spacy" train_corpus = "train.spacy" # ...其他配置
这里的dev_corpus和train_corpus应该指向你在[corpora]部分定义的语料库key,也就是"corpora.dev"和"corpora.train",而不是直接写文件名。spaCy在初始化时会去读取corpora下的配置来加载数据,你直接写文件名的话,它会误以为要找一个叫train的顶层配置项,所以抛出了KeyError: 'train'。
另外还有个小细节:你的[nlp]部分设置的lang = "it"(意大利语),但你用的是IMDB英文数据,后续训练可能会有tokenizer匹配问题,建议改成lang = "en"。
修复步骤
- 修改
config.cfg里的[training]部分,修正语料库指向:
[training] accumulate_gradient = 3 dev_corpus = "corpora.dev" train_corpus = "corpora.train" seed = ${system.seed} gpu_allocator = ${system.gpu_allocator} dropout = 0.1 patience = 1600 max_epochs = 0 max_steps = 20000 eval_frequency = 200 frozen_components = [] annotating_components = [] before_to_disk = null
- (可选但推荐)修改
[nlp]里的语言设置:
[nlp] lang = "en" pipeline = ["transformer","textcat"] batch_size = 128 disabled = [] before_creation = null after_creation = null after_pipeline_creation = null tokenizer = {"@tokenizers":"spacy.Tokenizer.v1"}
额外检查
你的数据转换代码是没问题的,已经正确生成了train.spacy和dev.spacy文件,修改完配置后重新运行训练命令应该就能正常初始化 pipeline 了。
内容的提问来源于stack exchange,提问作者Nazareno De Francesco
相关产品推荐
相关产品推荐

