问题
根据官方指南,我试图添加一个额外的训练数据集,并在本地CPU环境中训练模型。
但我没有更改base_config.cfg和config.cfg文件的内容。
我该如何修复这些错误来构建并评估模型呢?
错误
我不确定第一个是否是一个问题,并且我不知道如何填写config.cfg文件。
-
即使执行了下方“至今的步骤”部分的代码,config.cfg文件仍然为空。
-
执行训练命令时显示了错误消息。
ℹ 使用CPU✘ 解析配置覆盖时出错paths -> train 不是可以被覆盖的部分值
代码
$ python3 -m spacy train config.cfg --output ./output --paths.train train.spacy --paths.dev train.spacy
至今的步骤
$ python3 -m spacy init fill-config base_config.cfg config.cfg#之前的输出configparser.DuplicateSectionError: 读取'<string>'时发生错误 [第90行]: 部分'paths'已存在#当前输出 File "/usr/local/lib/python3.9/site-packages/spacy/util.py", line 137, in get raise RegistryError(catalogue.RegistryError: [E893] 在函数注册表'architectures'中找不到函数'spacy.MultiHashEmbed.v2'。如果您使用的是自定义函数,请确保代码可用。如果该函数由第三方包提供,例如spacy-transformers,请确保包已安装在您的环境中。可用名称: spacy-legacy.MaxoutWindowEncoder.v1, spacy-legacy.MishWindowEncoder.v1, spacy-legacy.TextCatEnsemble.v1, spacy-legacy.Tok2Vec.v1, spacy-legacy.WandbLogger.v1, spacy.CharacterEmbed.v1, spacy.EntityLinker.v1, spacy.HashEmbedCNN.v1, spacy.MaxoutWindowEncoder.v2, spacy.MishWindowEncoder.v2, spacy.MultiHashEmbed.v1, spacy.PretrainCharacters.v1, spacy.PretrainVectors.v1, spacy.Tagger.v1, spacy.TextCatBOW.v1, spacy.TextCatCNN.v1, spacy.TextCatEnsemble.v2, spacy.TextCatLowData.v1, spacy.Tok2Vec.v2, spacy.Tok2VecListener.v1, spacy.TorchBiLSTMEncoder.v1, spacy.TransitionBasedParser.v1, spacy.TransitionBasedParser.v2
即使执行了上述代码,config.cfg文件仍然为空。
base_config.cfg 从官方指南的表格中下载
# 这是一个自动生成的部分配置。要与'spacy train'一起使用,# 您可以运行spacy init fill-config来自动填充所有默认设置:# python -m spacy init fill-config ./base_config.cfg ./config.cfg[paths]train = nulldev = null[system]gpu_allocator = null[nlp]lang = "en"pipeline = ["tok2vec","ner"]batch_size = 1000[components][components.tok2vec]factory = "tok2vec"[components.tok2vec.model]@architectures = "spacy.Tok2Vec.v2"[components.tok2vec.model.embed]@architectures = "spacy.MultiHashEmbed.v2"width = ${components.tok2vec.model.encode.width}attrs = ["ORTH", "SHAPE"]rows = [5000, 2500]include_static_vectors = false[components.tok2vec.model.encode]@architectures = "spacy.MaxoutWindowEncoder.v2"width = 96depth = 4window_size = 1maxout_pieces = 3[components.ner]factory = "ner"[components.ner.model]@architectures = "spacy.TransitionBasedParser.v2"state_type = "ner"extra_state_tokens = falsehidden_width = 64maxout_pieces = 2use_upper = truenO = null[components.ner.model.tok2vec]@architectures = "spacy.Tok2VecListener.v1"width = ${components.tok2vec.model.encode.width}[corpora][corpora.train]@readers = "spacy.Corpus.v1"path = ${paths.train}max_length = 0[corpora.dev]@readers = "spacy.Corpus.v1"path = ${paths.dev}max_length = 0[training]dev_corpus = "corpora.dev"train_corpus = "corpora.train"[training.optimizer]@optimizers = "Adam.v1"[training.batcher]@batchers = "spacy.batch_by_words.v1"discard_oversize = falsetolerance = 0.2[training.batcher.size]@schedules = "compounding.v1"start = 100stop = 1000compound = 1.001[initialize]vectors = ${paths.vectors}
回答:
看起来您是重复粘贴了配置文件还是其他什么原因?从错误信息中可以看出,它提到您有两个[paths]
部分。在您的文件中大约一半的地方有一个这样的注释:
# 这是一个自动生成的部分配置。要与'spacy train'一起使用
尝试删除从那里开始到文件末尾的所有内容,然后再试一次。