使用spacy训练自定义ner模型时,“ drop”和“ sgd”是什么意思?

时间:2020-04-29 18:58:50

标签: neural-network nlp nltk spacy 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”,并对如何更改这些值给出一些想法,以便我的模型表现更好。

2 个答案:

答案 0 :(得分:2)

您可以在spaCy文档中找到详细信息和提示:

https://spacy.io/usage/training#tips-batch-size

增加批量大小的技巧开始变得非常流行...在训练各种spaCy模型时,我们并未发现降低学习率会带来很多优势-但是从小批量开始肯定有帮助< / p>

batch_size = compounding(1, max_batch_size, 1.001)

这会将批次大小设置为1,然后增加每个批次直到达到最大大小。

https://spacy.io/usage/training#tips-dropout

对于小型数据集,首先设置较高的辍学率,然后将其衰减至更合理的值非常有用。这有助于避免网络立即过度拟合,同时仍鼓励网络学习数据中一些更有趣的东西。 spaCy带有衰减的效用函数以简化此操作。您可以尝试设置:

dropout = decaying(0.6, 0.2, 1e-4)

https://spacy.io/usage/training#annotations

sgd:优化程序,即可调用的更新程序,用于更新模型的权重。如果未设置,spaCy将创建一个新的文件并将其保存以备将来使用。

答案 1 :(得分:0)

drop,sgd和size是您可以自定义以优化训练的一些参数。

drop用于更改dropout的值。

size用于更改批次的大小

sgd用于更改各种超参数,例如学习率,Adam beta1和beta2参数,梯度削波和L2正则化。

我认为sgd是一个非常重要的实验依据。 为了帮助您,我写了一篇简短的博客文章,展示了如何通过python解释器(例如jupyter笔记本)自定义任何spaCy参数。不需要命令行界面。