这在 Spacy 的自定义 NER 训练代码中是如何工作的?



我正在编写一段代码,用于在Spacy的NER引擎中训练自定义实体。我一直在理解在线教程中的一小部分代码。这是教程的链接。以下是代码,我一直在理解注释# add labels下的两个for循环。我是蟒蛇的新手。

import spacy
################### Train Spacy NER.###########
def train_spacy():
TRAIN_DATA = convert_dataturks_to_spacy("dataturks_downloaded.json");
nlp = spacy.blank('en')  # create blank Language class
# create the built-in pipeline components and add them to the pipeline
# nlp.create_pipe works for built-ins that are registered with spaCy
if 'ner' not in nlp.pipe_names:
ner = nlp.create_pipe('ner')
nlp.add_pipe(ner, last=True)
# add labels
for _, annotations in TRAIN_DATA:
for ent in annotations.get('entities'):
ner.add_label(ent[2])

显然,这个for循环是在向NER添加自定义标签。我的问题是:;

  1. 什么是"注释",它的数据类型是什么?(我在谷歌上搜索"spacy annotation",但找不到答案(
  2. 为什么在'in',('_'和'annotation'(的左边有两个变量
  3. ent[2]返回什么?2号位置有什么

您的问题大多可以通过理解函数convert_dataturks_to_spacy来回答。这方面的代码与下面的教程在同一个repo中。

  1. 函数返回元组列表,其中每个元组由(text, {"entities" : entities})组成。CCD_ 4是每个元组的第二个元素
  2. 从输出中分配多个变量称为元组拆包。基本上,for循环是指对于训练数据中的每个元组,将元组的第一个元素分配给_,将第二个元素分配到annotations,然后做一些事情。在python中,_经常被用作丢弃变量,即代码中其他地方没有使用但数据中存在的变量
  3. ent[2]是被标记的实体的标签。从代码来看,dataturks中的实体是一个包含3个元素的元组——字符串中的起始位置、字符串中的结束位置和标签

相关内容

  • 没有找到相关文章

最新更新