0

在 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
4

1 回答 1

0

spacy pretrain命令的工作方式是这样的:您为其提供一个配置文件和一个输出目录。或者,您可以在命令行上覆盖配置文件中的某些设置。例如,如果您的配置文件将包含此块:

[paths]
train = null
dev = null
raw_text = "path/to/toy_data"

然后在命令行上,您可以--raw_text="path/to/production_data"更改该特定值。

现在,您似乎收到此错误消息,因为您raw_textpaths块中没有条目,因此您无法覆盖它。

事实上,我想知道你是否pretraining在你的配置文件中定义了一个块?如果没有 - 看看spacy init config。您可以为其提供选项,该选项-pt将填充预训练步骤的默认值,特别是它将创建类似这样的内容(在其他“正常”设置中):

[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使用该变量,它将为您的预训练步骤流式传输原始文本。因此,您需要确保所有这些都正确连接,然后才能运行预训练。

于 2021-04-15T15:47:26.280 回答