解析配置覆盖时出错 - `nlp.tokenizer` 部分不存在

Error parsing config overrides - `nlp.tokenizer` sections does not exist

我在 Spacy 中遇到了一个奇怪的问题,我不确定是我做错了什么还是一个真正的错误。

我使用 Spacy 项目并通过以下方式创建默认配置文件:

python -m spacy init config spacy.cfg

然后我尝试使用此配置加载 NLP 对象:

import spacy
config = spacy.util.load_config('./spacy.cfg')
nlp = spacy.load("en_core_web_sm", config=config)

执行此操作时出现以下错误:

ConfigValidationError: 

Error parsing config overrides

nlp -> tokenizer -> @tokenizers   not a section value that can be overwritten

通过 PDB 查看内部发生的情况,我注意到未创建部分 nlp.tokenizer。相反,配置在 NLP 部分中存储了以下丑陋的项目:

'tokenizer': '{"@tokenizers":"spacy.Tokenizer.v1"}'

这看起来不太对劲。

我在 Ubuntu 20.04.2 LTS 上使用 Spacy v3.0.3。

分词器设置没有问题。 en_core_web_sm 已经包含它自己的配置,包括一个标记器,这是你不能覆盖的。

您想从空白管道而不是预训练管道开始加载您的配置:

nlp = spacy.blank("en", config=config)

请注意,此处的语言 en 需要与 spacy init config 语言设置相匹配,否则将无法加载配置。