spaCy 配置文件中参数的解释/解释

问题描述

关于我们在 config.cfg 文件中定义的参数,我有几个问题。尽管 spaCy 的文档确实试图解释它们,但我觉得解释的描述不够充分,而且文档中散布着很多东西,因此很难准确找到您需要的内容,尤其是使用 spaCy v3,(除非我我查看了网站的错误部分)这是最近的,因此论坛中的问题/答案确实较少。 我基本上是在构建一个命名实体识别 (NER) 模型和一个转换器组件。我的问题如下:

  1. 在下面的部分(对 corpora.train 也有同样的问题),max_lengthlimit 之间有什么区别?

    对于 max_length,文档说“训练文档长度的限制”
    对于 limit,文档说“训练示例数量限制”

    它们是不是或多或少是一回事?我的意思是我可以通过限制文档本身的长度来限制训练示例的数量,对吗?

[corpora.dev]
@readers = "spacy.Corpus.v1"
path = ${paths.dev}
max_length = 0
gold_preproc = false
limit = 0
augmenter = null
  1. 在下面的代码段中,“一步”是什么意思?我了解 max_steps=0 表示无限步。但是我怎么知道一个时代有多少这样的“步骤”呢?另外,在 1 个这样的步骤中涵盖了多少个例句?
[training]
train_corpus = "corpora.train"
dev_corpus = "corpora.dev"
seed = ${system.seed}
gpu_allocator = ${system.gpu_allocator}
dropout = 0.1
accumulate_gradient = 1
patience = 1600
max_epochs = 10
max_steps = 0
eval_frequency = 200
frozen_components = []
before_to_disk = null
  1. 在训练过程中,以下代码片段中的 learn_rate 究竟是如何修改的?更具体地说,total_stepswarmup_steps 是什么意思?
[training.optimizer.learn_rate]
@schedules = "warmup_linear.v1"
warmup_steps = 250
total_steps = 200
initial_rate = 0.00005
  1. 最后,在训练过程的 CLI 输出中,这个“#”究竟是什么?在 GitHub discussions 之一中提到 “# 列是优化步骤的数量(= 处理的批次)”,但是这 1 个批次或“优化步骤”究竟是什么?如果训练过程向我显示了 200 个这样的“批次”后的分数,我该如何解释它(例如到那时已经处理了多少例句)?

解决方法

在下面的部分(corpora.train 也有同样的问题),max_length 和 limit 有什么区别? 对于 max_length,文档说“训练文档长度的限制” 对于限制,文档说“限制训练示例的数量” 他们不是或多或少是一回事吗?我的意思是我可以通过限制文档本身的长度来限制训练示例的数量,对吗?

这些是不同的东西,您似乎对“文档”是什么感到困惑。您可以将“文档”视为 spaCy 中的单个对象。不同的文档对彼此一无所知。文档基于单个字符串。以普通 Python 字符串为例:

["cat","dog","fish"] # this is three strings
["cat dog fish"] # this is one string

您可以看到“从列表中取出三个字符串”和“取出长度不超过三个字符的字符串”是非常不同的事情。 spaCy 中的值就是这样。

在下面的片段中,“一步”是什么意思?我明白 max_steps=0 意味着无限步。但是我怎么知道一个时代有多少这样的“步骤”呢?还有1个这样的步骤涵盖了多少个例句?

“步骤”是“批次”。 “批次”正在对一些示例进行训练并更新模型权重一次。您可以控制批次的大小,使其可以是任意数量的示例。一个“epoch”是指训练一次看到每个例子需要多长时间,所以如果你每批有 5 个文档和 30 个训练文档,那么 6 个步骤就是一个 epoch。

spaCy 不一定了解训练中的“句子”,文档是批处理的基本单位。您的训练示例可能都是单个句子,但这不是必需的。

这些术语不是特定于 spaCy 的,它们广泛用于机器学习。

在训练过程中,下面代码片段中的学习率究竟是如何修改的?更具体地说,total_steps 和warmup_steps 是什么意思?

来自 Thinc,see the docs there

引用:

生成一个序列,从初始速率开始,然后是预热期,然后是线性下降。用于学习率。

total_steps 结束时,学习率停止变化。

最后,在训练过程的 CLI 输出中,这个“#”究竟是什么?在 GitHub 的一次讨论中提到“# 列是优化步骤的数量(= 处理的批次)”,但是这 1 个批次或“优化步骤”究竟是什么?如果训练过程向我显示了 200 个这样的“批次”之后的分数,我该如何解释它(例如到那时已经处理了多少例句)?

步骤与#2 中的相同,它是一个批次。批量大小用文档表示,而不是用句子表示。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...