我正在训练自定义ner模型,以在地址中标识组织名称。我的训练循环如下所示:-
for itn in range(100):
random.shuffle(TRAIN_DATA)
losses = {}
batches = minibatch(TRAIN_DATA, size=compounding(15., 32., 1.001))
for batch in batches
texts, annotations = zip(*batch)
nlp.update(texts, annotations, sgd=optimizer,
drop=0.25, losses=losses)
print('Losses', losses)
有人可以解释参数“ drop”,“ sgd”,“ size”并给出一些想法,让我知道如何更改这些值,以使模型性能更好。
您可以在spaCy文档中找到详细信息和提示:
https://spacy.io/usage/training#tips-batch-size:
增加批量大小的技巧开始变得非常流行...在训练各种spaCy模型时,我们并未发现降低学习率会带来很多好处-但是从小批量开始肯定有帮助。]
batch_size = compounding(1, max_batch_size, 1.001)
这会将批次大小设置为1,然后增加每个批次,直到达到最大大小。
对于小型数据集,首先设置较高的辍学率,然后将其衰减至更合理的值非常有用。这有助于避免网络立即过度拟合,同时仍鼓励网络学习数据中一些更有趣的东西。 spaCy带有衰减的效用函数以简化此操作。您可以尝试设置:
dropout = decaying(0.6, 0.2, 1e-4)
sgd
:优化器,即可调用的更新器,用于更新模型的权重。如果未设置,spaCy将创建一个新的文件并将其保存以备将来使用。