Spacy 3.0 的 nlp.update 问题:TypeError: [E978] Language.update 方法采用示例对象列表,但得到:{<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) 时,它表示批处理是列表类型。但是错误消息说它是一个元组。我也尝试将其转换为列表但没有成功。我做错了什么?

确切的错误是:


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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...