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 (last last call last) in 22 23 for batch in minibatch(examples, size=8): ---> 24 nlp.update(batch, sgd=optimizer, drop=0.35, loss=losses) 25 26 print( "损失 ({}/{})".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 if len(examples) = = 0: 1091 返回损失 -> 1092 validate_examples(examples, "Language.update") 1093 examples = _copy_examples(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 方法采用示例对象列表,但得到:{<class 'tuple'>}
这里以 TRAIN_DATA 的第一行为例:('Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen Brot im Backofen gebacken.', {'entities': [(10, 18, 'PER')]})