Spacy cust 实体训练 returns 无

Spacy cust entity training returns nothing

我有描述要从中提取颜色。因此我想我会通过 spacy 使用 NER。 我有 8000 行这样的数据

import spacy
nlp=spacy.load('en_core_web_sm')

# Getting the pipeline component
ner=nlp.get_pipe("ner")

Train_data = 
[
("Bermuda shorts anthracite/black",{"entities" : [(15,31,"COL")]}),
("Acrylic antique white",{"entities" : [(8,22,"COL")]}),
("Pincer black",{"entities" : [(8,13,"COL")]}),
("Cable tie black",{"entities" : [(10,15,"COL")]}),
("Water pump pliers blue",{"entities" : [(18,22,"COL")]})
]

我的密码是

for _, annotations in Train_data:
    for ent in annotations.get("entities"):
        ner.add_label(ent[2])

pipe_exceptions = ["ner", "trf_wordpiecer", "trf_tok2vec"]
unaffected_pipes = [pipe for pipe in nlp.pipe_names if pipe not in pipe_exceptions]


from spacy.training.example import Example

for batch in spacy.util.minibatch(Train_data, size=2):
    for text, annotations in batch:
        # create Example
        doc = nlp.make_doc(text)
        example = Example.from_dict(doc, annotations)
        # Update the model
        nlp.update([example], losses=losses, drop=0.3)

当我测试模型时,我什么也没得到。


doc = nlp("Bill Gates has a anthracite house worth 10 EUR.")
print("Entities", [(ent.text, ent.label_) for ent in doc.ents])

为什么我做错了? 请帮忙...

当我尝试运行你的例子时:

for batch in spacy.util.minibatch(Train_data, size=2):
    for text, annotations in batch:
        # create Example
        doc = nlp.make_doc(text)
        example = Example.from_dict(doc, annotations)
        # Update the model
        nlp.update([example], drop=0.3)     # I took off losses from the code

当我 运行 下面的代码时,我得到:

doc = nlp("Bill Gates has a anthracite house worth 10 EUR.")
print("Entities", [(ent.text, ent.label_) for ent in doc.ents])

#output

Entities [('Bill Gates', 'PERSON'), ('10', 'CARDINAL'), ('EUR', 'ORG')]

你的代码有几个问题。

你的模型保存在哪里?

您的代码中没有任何内容表明您保存并重新加载了您的模型。当您训练这样的模型时,您并不是在修改磁盘上的现有模型。如果您在训练后不保存模型,它就会消失,这意味着您没有颜色注释。

您的输入看起来不像您的训练数据!

您输入的是一个完整的句子,但您的训练数据是孤立的短语。这将导致性能不佳,因为模型不确定如何处理颜色和动词。 (不过您可能仍会得到一些注释。)


我强烈建议您完成 the spaCy course,其中包括训练您自己的 NER 模型。我还强烈建议您使用 v3 config-based 训练而不是编写自己的训练循环。