首页 > 解决方案 > Spacy-3 预训练永无止境

问题描述

我正在尝试对我的 NER 项目使用 Spacy-3 预训练。但是(使用开箱即用的)设置,我的预训练不会收敛。在一种情况下,我让它运行了 3 天,完成了 40 多个 epoch,但它似乎没有收敛。

具体到我的数据是它来自 OCR(英语,法律文件),因此包含大量拼写错误的单词和/或 AOV 单词 - 噪音(垃圾)。例如(其中一个)我的数据集将包含 4,903,282 个标记,其中 123,105 个标记是唯一的。

但频率为 5 或更高的代币只有 10,543 个。频率最高的标记是“,”,出现 336,643 次

我觉得我达到了一些“限制”——预训练仅限于一些“N”个单词,并且通过我的样本只是不断地冲洗掉好的(频繁的)标记。

从我的 config.cfg 中:

...
[corpora.pretrain]
@readers = "spacy.JsonlCorpus.v1"
path = ${paths.raw_text}
min_length = 5
max_length = 0
limit = 0
...

[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

[initialize]
vectors = "en_core_web_lg"
init_tok2vec = ${paths.init_tok2vec}
vocab_data = null
lookups = null
before_init = null
after_init = null

标签: machine-learningtraining-data

解决方案


推荐阅读