'Cannot create a ner pipeline in my training model
code
with open('D:/NLP-CV Parser/1BM14TE002_ABISHEK - Abishek Yogesh_text.txt', 'rb') as f:
data = f.read()
# Save as pickle
with open('D:/NLP-CV Parser/1BM14TE002_ABISHEK - Abishek Yogesh_text.pkl', 'wb') as f:
pickle.dump(data, f)
train_data = pickle.load(open('D:/NLP-CV Parser/1BM14TE002_ABISHEK - Abishek Yogesh_text.pkl', 'rb'))
train_data
nlp = spacy.blank('en')
def train_model(train_data):
# Remove all pipelines and add NER pipeline from the model
if 'ner'not in nlp.pipe_names:
ner = nlp.create_pipe('ner')
# adding NER pipeline to nlp model
nlp.add_pipe(ner,last=True)
#Add labels in the NLP pipeline
'''for _, annotation in train_data:
for ent in annotation['entities']:
ner.add_label(ent[2])'''
other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
with nlp.disable_pipes(*other_pipes): # only train NER
optimizer = nlp.begin_training()
for itn in range(10): # train for 10 iterations
print("Starting iteration " + str(itn))
random.shuffle(train_data)
losses = {}
index = 0
for text, annotations in train_data:
try:
nlp.update(
[text], # batch of texts
[annotations], # batch of annotations
drop=0.2, # dropout - make it harder to memorise data
sgd=optimizer, # callable to update weights
losses=losses)
except Exception as e:
pass
print(losses)
train_model(train_data)
I get
ValueError: [E966]
nlp.add_pipe
now takes the string name of the registered component factory, not a callable component. Expected string, but got <spacy.pipeline.ner.EntityRecognizer object at 0x0000022759E567A0> (name: 'None').
If you created your component with
nlp.create_pipe('name')
: remove nlp.create_pipe and callnlp.add_pipe('name')
instead.If you passed in a component like
TextCategorizer()
: callnlp.add_pipe
with the string name instead, e.g.nlp.add_pipe('textcat')
.If you're using a custom component: Add the decorator
@Language.component
(for function components) or@Language.factory
(for class components / factories) to your custom component and assign it a name, e.g.@Language.component('your_name')
. You can then runnlp.add_pipe('your_name')
to add it to the pipeline.
How to resolve this error?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|