【问题标题】:What is the meaning of "drop" and "sgd" while training custom ner model using spacy?使用 spacy 训练自定义 ner 模型时,“drop”和“sgd”是什么意思?
【发布时间】:2020-08-14 00:01:16
【问题描述】:

我正在训练一个自定义 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”,并就我应该如何更改这些值给出一些想法,以便我的模型表现更好。

【问题讨论】:

    标签: neural-network nlp nltk spacy named-entity-recognition


    【解决方案1】:

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

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

    增加批量大小的技巧开始变得非常流行......在训练各种 spaCy 模型时,我们没有发现降低学习率有多大优势——但从小批量开始肯定有帮助

    batch_size = compounding(1, max_batch_size, 1.001)

    这会将批次大小设置为从 1 开始,并增加每个批次,直到达到最大大小。

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

    对于小型数据集,首先设置较高的 dropout 率很有用,然后将其衰减到更合理的值。这有助于避免网络立即过度拟合,同时仍然鼓励它学习数据中一些更有趣的东西。 spaCy 带有一个衰减的效用函数来促进这一点。您可以尝试设置:

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

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

    sgd:优化器,即更新模型权重的可调用对象。如果未设置,spaCy 将创建一个新的并保存以供进一步使用。

    【讨论】:

      【解决方案2】:

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

      drop 用于改变 dropout 的值。

      size用来改变batch的大小

      sgd 用于改变各种超参数,例如学习率、Adam beta1 和 beta2 参数、梯度裁剪和 L2 正则化。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-16
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        相关资源
        最近更新 更多