python - 为 NER 创建 Spacy Doc Bin

标签 python spacy named-entity-recognition

我正在尝试为自定义 NER 创建 doc bin 对象。我有大约 100 个标记数据用于训练(只是作为开始)

我在创建时跳过实体消息。

 54%|██████████████████████▊                   | 43/79 [00:00<00:00, 216.47it/s]

Skipping entity
Skipping entity
Skipping entity
Skipping entity
Skipping entity
Skipping entity
Skipping entity
Skipping entity

100%|██████████████████████████████████████████| 79/79 [00:00<00:00, 251.36it/s]

我的疑问是:

  1. 这个跳跃实体是什么意思(跨度怎么可以是None)。
  2. 这是一个严重的问题吗?
  3. 这会如何影响性能以及我们如何克服这个问题?
  4. 如果有 100 个数据可供使用,我们可以采用什么比例来进行训练和评估?

代码

import pandas as pd
import os
from tqdm import tqdm
import spacy
from spacy.tokens import DocBin
nlp = spacy.blank("en") # load a new spacy model

db = DocBin() # create a DocBin object

for text, annot in tqdm(train_data): # data in previous format
    doc = nlp.make_doc(text) # create doc object from text
    ents = []
    for start, end, label in annot["entities"]: # add character indexes
        span = doc.char_span(start, end, label=label, alignment_mode="contract")
        if span is None:
            print("Skipping entity")
        else:
            ents.append(span)
    doc.ents = ents # label the text with the ents
    db.add(doc)

db.to_disk("./train.spacy") # save the docbin object

最佳答案

如果alignment_mode="contract"导致没有标记的 token ,则范围可以是None。因此,如果您有一个 token good 并尝试将 oo 标记为带有 contract 的跨度,那么它将返回 None。使用expand,您应该始终得到至少一个 token 。

关于python - 为 NER 创建 Spacy Doc Bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70184009/

相关文章:

c# - 将实体添加到 Stanford NLP NER 分类器

python - 如何在NLTK中调用ClassifierBasedTagger()

python - 从字符串文字设置变量名时如何编写 DRY 代码?

python - 双击 python 文件与通过 cmd 运行的结果不同

python - 在 EntityRuler 中将 RegEx 用于短语模式

python - 使用 spacy 删除停用词

python - 斯坦福 NER 未标记日期和时间

python - mongodb:查询列表中的值(而不是对象)

python - 如何在 Python OpenCV 中连接两个矩阵?

spacy - 使用 Spacy 进行 NER 增量训练