Проблема nlp.update в Spacy 3.0: TypeError: [E978] Метод Language.update принимает список объектов Example, но получает: {<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)
Когда я набираю (пакет), это означает, что пакет относится к списку типов. Но в сообщении об ошибке говорится, что это кортеж. Я также безуспешно пытался преобразовать его в список. Что я делаю не так?
Точная ошибка:
TypeError Traceback (последний вызов последним) в 22 23 для пакета в мини-пакете (примеры, size = 8): ---> 24 nlp.update (batch, sgd = optimizer, drop = 0.35, loss = loss) 25 26 print ( "Потери ({} / {})". Формат (эпоха + 1, эпохи), убытки)
~ / nlp_learn / statbot / .statbot / lib / python3.8 / site-packages / spacy / language.py в обновлении (self, examples, _, drop, sgd, loss, component_cfg, exclude) 1090 если 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 принимает список объектов Example, но получает: {<class 'tuple'>}
Вот первая строка TRAIN_DATA в качестве примера:('Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen Brot im Backofen gebacken.',{'Entity': [(10, 18, 'PER')]})
1 ответ
Вам нужно конвертировать
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(text)
example = Example.from_dict(doc, annotations)
nlp.update([example], drop=0.35, sgd=optimizer, losses=losses)