问题标签 [spacy-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spacy - Spacy:对 1000 个标签进行分类的数据集格式是什么?
我想用spacy对文本进行分类我基于spacy的texcat_demo项目,基于它,json应该是这样的
但是应该如何看待这个 json 到多个类别呢?,像这样
谢谢
python - 更新 Spacy 的内置 NER 模型而不是覆盖
我正在使用 Spacy 的内置模型,en_core_web_lg
并且希望使用我的自定义实体对其进行训练。在这样做的同时,我面临两个问题,
它用旧的数据覆盖新的训练数据,导致无法识别其他实体。例如,在训练之前,它可以识别 PERSON 和 ORG,但在训练之后它不能识别 PERSON 和 ORG。
在训练过程中,它给了我以下错误,
这是我的整个代码,
预期输出:
目前没有识别实体..
请让我知道我在哪里做错了。谢谢!
python - 如何在 spaCy v3 中正确使用变压器模型进行自定义 NER?
我正在尝试使用 spaCy 版本 3 为自定义标签训练命名实体识别 (NER) 模型。我浏览了他们网站上的所有文档,但我不明白创建管道模型的正确方法是什么。显然,如果我尝试使用en_core_web_trf
,我无法添加自己的标签,因为最终的输出分数都是零。但它适用于en_core_web_sm
.
但是,如果我尝试通过创建一个空白的英语模型然后手动添加变压器模型en_core_web_trf
和 ner 模型来做一些临时方法en_core_web_sm
,它可以工作。
我的问题是 - 除了这个临时方法之外,还有更好的方法来初始化我的模型和管道方法吗?我不关心 LOCATION 等预训练实体。我只想根据我在数据集中定义的自定义实体来训练我的模型(使用基于转换器的方法)。
编辑:我使用的确切训练方法已在此python 脚本中fit()
定义类的函数中进行了描述NerModel
。
脚本中的(第load_spacy()
16 行)使用小模型,但我正在试验变压器模型并使用load_spacy()
我在本问题开头定义的定义。
PS:我一直在 Google Colab(又名笔记本)上进行实验,以便将 GPU 用于 Transformer,但源代码和方法几乎相同。
dataset - 如何在 colab 中加载巨大的数据集以转换为 spacy JSON?
我有一个包含 6500 万个 IOB 格式条目的数据集。因此,在使用以下命令将其转换为 spacy 二进制格式时:
!python -m spacy convert /content/train.tsv /content/ -s -c ner
colab 将显示: tcmalloc: large alloc ..... ^C
你能给我一些规避这个问题的方法吗?我没有太多的 colab 经验或对数据科学概念的深入了解。任何参考也可以。
是否可以获取每个文件,然后制作其二进制文件并合并这样的文件?
谢谢!
performance - SpaCy NER 模型的实体级别的 PRF 值
我有一个关于借助函数评估 SpaCy NER 模型的问题scorer
:性能结果是实体级还是令牌级?
如果是后者,我将不胜感激提供一些关于如何在实体级别找到 prf 值的提示。
此外,如果上下文有帮助,这是我实现评估功能的方式: https ://github.com//discussions/8178 。
提前致谢!
spacy - 从匹配器中排除结果
我正在尝试指定一种可以排除某些结果的模式。鉴于此文本:The Territory for the Titles shall be the United States, its territories and possessions, excluding Puerto Rico
我正在寻找一种仅提取 的方法the United States
,就像 a 一样GPE
,并且不被排除在外。
我试着写一个这样的模式,在我看来,应该意味着“只有当除了引理后面跟着一个或多个s[{'LEMMA': 'exclude', 'OP': '!'}, {'ENT_TYPE': 'GPE', 'OP': '+'}]
之外还有其他东西时才匹配。exclude
GPE
但是在我对 spacy 3 的测试中(以及基于规则的 Matcher Explorer),匹配器仍然匹配be the United States
and Puerto Rico
。
有没有办法编写一个专门过滤掉exclude
dGPE
的模式?
machine-learning - 使用 spacy v3 我应该在配置文件中更改哪个参数来解决 CUDA 内存不足问题?batch_size vs max_length vs batcher.size
使用 spacy v3,我尝试使用 camemBert 训练分类器并遇到CUDA out of memory
问题。为了解决这个问题,我读到我应该减少批量大小,但我很困惑我应该改变哪个参数:
- [nlp] 批处理大小
- [components.transformer] max_batch_items
- [corpora.train 或 dev] max_length
- [trainning.batcher] 大小
- [trainning.batcher] 缓冲区
我试图了解每个参数之间的区别:
- [nlp] 批处理大小
管道和评估的默认批量大小。默认为 1000。
培训/评估过程中是否使用了这些功能?
在快速启动小部件 ( https://spacy.io/usage/training#quickstart ) 中,为什么值根据硬件不同?CPU 为 1000,GPU 为 128。
在训练过程中,如果这个值低,评估会变慢吗?
- [components.transformer] max_batch_items
填充批次的最大大小。默认为 4096。
根据警告消息:Token indices sequence length is longer than the specified maximum sequence length for this model (556 > 512). Running this sequence through the model will result in indexing errors
此处解释(https://github.com/explosion/spaCy/issues/6939),卡门培尔模型的指定最大序列长度为512。
参数 max_batch_item 是否重载到该值?我应该将值更改为 512 吗?
- [corpora.train 或 dev] max_length
在我的理解中,这个值应该等于或小于最大序列长度。在快速入门小部件中,此值设置为 500 用于训练集和 0 用于开发集。如果设置为0,是否会过载到transformer模型的最大序列长度?
- spacy.batch_by_padded.v1 的 [trainning.batcher] 大小
将序列批处理到的最大填充大小。也可以是引用时间表的块,例如复利。
如果我不使用复利,这个参数与 max_lentgh 有什么不同?
这是我的配置文件的一些部分
python - 如何评估训练有素的 spaCy 版本 3 模型?
我想使用以下代码使用内置 Scorer 函数评估我训练有素的 spaCy 模型:
当我运行该函数时,我收到以下错误消息:
TypeError: [E978] Tokenizer.score 方法采用示例对象列表,但得到:<class 'spacy.training.example.Example'>
我已经尝试输入像 {"entities": annot} 和其他一些版本的注释。我查了谷歌,但每篇文章似乎都与 spaCy 的 2.xx 版有关。
我究竟做错了什么?如何使用 spacy Score() 计算召回率、准确率和 F1 分数?
python - spaCy 配置文件中参数的解释/解释
config.cfg
关于我们在文件中定义的参数,我有几个问题。尽管 spaCy 的文档确实试图解释它们,但我觉得解释的描述性不够,而且很多东西都散布在文档周围,很难找到你需要的东西,尤其是 spaCy v3,(除非我'我查看了网站的错误部分)这是最近的,因此论坛中的问题/答案确实更少。我基本上是在构建一个命名实体识别 (NER) 模型以及一个转换器组件。我的问题如下:
在下面的部分(同样的问题),和
corpora.train
有什么区别?max_length
limit
对于
max_length
文档说“对训练文档长度的限制”
对于limit
,文档说“对训练示例数量的限制”他们不是或多或少相同的东西吗?我的意思是我可以通过限制文档本身的长度来限制训练示例的数量,对吗?
- 在下面的代码段中,一个“步骤”的含义是什么?我理解
max_steps=0
意味着无限的步骤。但是我怎么知道有多少这样的“步骤”构成一个纪元?1个这样的步骤还涵盖了多少例句?
learn_rate
在训练过程中,下面的代码片段究竟是如何修改的?total_steps
更具体地说,是什么warmup_steps
意思?
- 最后,在训练过程的 CLI 输出中,这个“#”到底是什么?在GitHub 讨论之一中提到“# 列是优化步骤的数量(= 处理的批次)”,但是这 1 个批次或“优化步骤”到底是什么?如果训练过程向我显示了 200 个这样的“批次”之后的分数,我该如何解释它(比如到那时已经处理了多少个例句)?
python - 让相似的词不再在 spacy 中工作
不久前,我有一个 Google Colab 笔记本,它使用 spacy 2.2.4 并成功获取了单词列表中最相似的单词:
输出是:
问题:我刚刚尝试在 RStudio 的不同环境中运行相同的代码(即不使用 Google Colab),其中 spacy 的版本是 3.0.6 并且相似词列表(new_search_terms)是空的。我还注意到单词概率都是相同的 (-20)。
spacy 3.0.6 的输出:
在这个新版本的 spacy 中,我需要做些什么不同的事情才能获得与以前相同的输出?