问题描述
在 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) 时,它表示批处理是列表类型。但是错误消息说它是一个元组。我也尝试将其转换为列表但没有成功。我做错了什么?
确切的错误是:
TypeError Traceback(最近一次调用最后一次) 在 22 23 用于 minibatch 中的批处理(示例,大小 = 8): ---> 24 nlp.update(batch,loss=losses) 25 26 print("Losses ({}/{})".format(epoch + 1,epochs),loss)
~/nlp_learn/statbot/.statbot/lib/python3.8/site-packages/spacy/language.py in update(self,examples,_,drop,sgd,loss,component_cfg,exclude) 第 1090 章 1091回损 -> 1092 validate_examples(examples,"Language.update") 1093个例子=_copy_examples(例子) 1094 如果 sgd 为无:
~/nlp_learn/statbot/.statbot/lib/python3.8/site-packages/spacy/training/example.pyx in spacy.training.example.validate_examples()
TypeError: [E978] Language.update 方法接受一个 Example 对象列表,但得到:{
这里以TRAIN_DATA的第一行为例: ('Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen brot im Backofen gebacken。', {'实体':[(10,18,'PER')]})
解决方法
您需要将 RDOEncryptedMessage.GetDecryptedMessage
类型转换为 TRAIN_DATA
类型。可能最简单的方法是使用 Example
方法。
Example.from_dict()