在Spacy3.0版中,nlp.update似乎有一些变化。我完全被这个简单的代码搞糊涂了:
examples = TRAIN_DATA
random.shuffle(examples)
losses = {}
for batch in minibatch(examples, size=8):
nlp.update(batch, sgd=optimizer, drop=0.35, losses=losses)
当我输入( batch )时,它表明batch的类型是list。但是错误消息说它是一个元组。我还尝试将其转换为列表,但没有成功。我做错了什么?
确切的错误是:
小批量批处理(示例,size=8) 22 23中的批次回溯(最近一次调用):-> 24 nlp.update( TypeError,sgd=optimizer,drop=0.35,losses=losses) 25 26 print("Losses ({}/{})".format(epoch + 1,epochs),losses)~/nlp_更新中的learn/statbot/.statbot/lib/python3.8/site-packages/spacy/language.py (self,examples,_,drop,sgd,losses,component_配置,排除) 1090 if len(示例) == 0: 1091 return losses -> 1092验证_examples( examples,"Language.update") 1093个examples=_复制_示例(示例) 1094如果sgd为None:
~/nlp_spacy.training.example.validate中的learn/statbot/.statbot/lib/python3.8/site-packages/spacy/training/example.pyx_示例()TypeError:E978Language.update方法接受示例对象的列表,但得到:{}
这里是第一列火车_以数据为例:('Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen im Backofen gebacken.',{'entities':(10,18,'PER')})
发布于 2021-02-24 12:58:52
您需要转换TRAIN_DATA
至Example
类型。可能最简单的方法是使用Example.from_dict()
方法。
TRAIN_DATA = # your data
random.shuffle(TRAIN_DATA)
losses = {}
for batch in minibatch(TRAIN_DATA, size=8):
for text, annotations in batch:
doc = nlp.make_doc(text)
example = Example.from_dict(doc, annotations)
nlp.update([example], drop=0.35, sgd=optimizer, losses=losses)
https://stackoverflow.com/questions/66342359
复制相似问题