nlp.update issue with Spacy 3.0: TypeError: [E978] The Language.update method takes a list of Example objects, but got: {<class 'tuple'>}
nlp.update issue with Spacy 3.0: TypeError: [E978] The Language.update method takes a list of Example objects, but got: {<class 'tuple'>}
Spacy 3.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)
当我执行 type(batch) 时,它表明 batch 是 list 类型。但是错误消息说它是一个元组。我也尝试将其转换为列表但没有成功。我做错了什么?
准确的错误是:
TypeError Traceback(最后一次调用)
在
22
小批量中的批次为 23(示例,大小 = 8):
---> 24 nlp.update(batch, sgd=optimizer, drop=0.35, losses=losses)
25
26 print("损失 ({}/{})".format(epoch + 1, epochs), losses)
~/nlp_learn/statbot/.statbot/lib/python3.8/site-packages/spacy/language.py in update(self, examples, _, drop, sgd, losses, component_cfg, exclude )
1090 如果 len(示例)== 0:
1091 return 损失
-> 1092 validate_examples(示例,“Language.update”)
1093 个示例 = _copy_examples(示例)
1094 如果 sgd 是 None:
~/nlp_learn/statbot/.statbot/lib/python3.8/site-packages/spacy/training/example.pyx 在spacy.training.example.validate_examples()
TypeError: [E978] Language.update 方法获取了一个 Example 对象列表,但得到了:{}
这里以TRAIN_DATA第一行为例:
('Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen Brot im Backofen gebacken.',
{'entities': [(10, 18, 'PER')]})
您需要将 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)
Spacy 3.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)
当我执行 type(batch) 时,它表明 batch 是 list 类型。但是错误消息说它是一个元组。我也尝试将其转换为列表但没有成功。我做错了什么?
准确的错误是:
TypeError Traceback(最后一次调用) 在 22 小批量中的批次为 23(示例,大小 = 8): ---> 24 nlp.update(batch, sgd=optimizer, drop=0.35, losses=losses) 25 26 print("损失 ({}/{})".format(epoch + 1, epochs), losses)
~/nlp_learn/statbot/.statbot/lib/python3.8/site-packages/spacy/language.py in update(self, examples, _, drop, sgd, losses, component_cfg, exclude ) 1090 如果 len(示例)== 0: 1091 return 损失 -> 1092 validate_examples(示例,“Language.update”) 1093 个示例 = _copy_examples(示例) 1094 如果 sgd 是 None:
~/nlp_learn/statbot/.statbot/lib/python3.8/site-packages/spacy/training/example.pyx 在spacy.training.example.validate_examples()
TypeError: [E978] Language.update 方法获取了一个 Example 对象列表,但得到了:{
这里以TRAIN_DATA第一行为例: ('Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen Brot im Backofen gebacken.', {'entities': [(10, 18, 'PER')]})
您需要将 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)