问题描述
在 Spacy 管道中预训练自定义权重会出错。
当我使用 jupyter notebook 运行它时:
!python -m spacy pretrain config.cfg ./output_pretrain --paths.raw_text ./data.jsonl
出现以下错误:
[i] Using cpu
[i] Loading config from: config.cfg
[x] Error parsing config overrides
paths -> raw_text not a section value that can be overwritten
我的环境
- 操作系统:Windows 10.0.19041
- 使用的 Python 版本:3.8.8
- 使用的 spaCy 版本:3.0.5
解决方法
spacy pretrain
命令的工作方式是这样的:您为其提供一个 config 文件和一个输出目录。或者,您可以在命令行上覆盖配置文件中的某些设置。例如,如果您的配置文件将包含此块:
[paths]
train = null
dev = null
raw_text = "path/to/toy_data"
然后在命令行上,您可以执行 --raw_text="path/to/production_data"
来更改该特定值。
现在,您收到此错误消息似乎是因为您在 raw_text
块中没有条目 paths
,因此您无法覆盖它。
事实上,我想知道您是否在配置文件中定义了 pretraining
块?
如果没有 - 看看 spacy init config
。您可以为它提供选项 -pt
,该选项将填充 pretraining step 的默认值,特别是它会创建如下内容(在其他“正常”设置中):
[paths]
raw_text = null
...
[pretraining]
max_epochs = 1000
dropout = 0.2
n_save_every = null
component = "tok2vec"
layer = ""
corpus = "corpora.pretrain"
[pretraining.batcher]
@batchers = "spacy.batch_by_words.v1"
size = 3000
discard_oversize = false
tolerance = 0.2
get_length = null
[pretraining.objective]
@architectures = "spacy.PretrainCharacters.v1"
maxout_pieces = 3
hidden_size = 300
n_characters = 4
[pretraining.optimizer]
@optimizers = "Adam.v1"
beta1 = 0.9
beta2 = 0.999
L2_is_weight_decay = true
L2 = 0.01
grad_clip = 1.0
use_averages = true
eps = 0.00000001
learn_rate = 0.001
...
[corpora.pretrain]
@readers = "spacy.JsonlCorpus.v1"
path = ${paths.raw_text}
min_length = 5
max_length = 500
limit = 0
注意 raw_text
变量是如何被语料库阅读器使用的,它将为您的预训练步骤流式传输原始文本。因此,在运行预训练之前,您需要确保所有这些都正确连接。