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 训练而不是编写自己的训练循环。
我有描述要从中提取颜色。因此我想我会通过 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 训练而不是编写自己的训练循环。