首页 > 解决方案 > 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_steps更具体地说,是什么warmup_steps意思?
[training.optimizer.learn_rate]
@schedules = "warmup_linear.v1"
warmup_steps = 250
total_steps = 200
initial_rate = 0.00005
  1. 最后,在训练过程的 CLI 输出中,这个“#”到底是什么?在GitHub 讨论之一中提到“# 列是优化步骤的数量(= 处理的批次)”,但是这 1 个批次或“优化步骤”到底是什么?如果训练过程向我显示了 200 个这样的“批次”之后的分数,我该如何解释它(比如到那时已经处理了多少个例句)?

标签: pythonnlpspacynamed-entity-recognitionspacy-3

解决方案


在以下部分(对于 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 的,它们广泛用于机器学习。

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

这是来自 Thinc,请参阅那里的文档

去引用:

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

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

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

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


推荐阅读