#python #nlp #spacy-3
#python #nlp #spacy-3
Вопрос:
С 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 . Но в сообщении об ошибке говорится, что это кортеж. Я также безуспешно пытался преобразовать его в список. Что я делаю не так?
Точная ошибка:
Обратная трассировка ошибки типа (последний последний вызов) в 22 23 для пакета в мини-пакете (примеры, размер = 8): —> 24 nlp.update(пакет, sgd= optimizer, drop= 0.35, потери = потери) 25 26 print(«Потери ({} / {})».формат (эпоха 1, эпохи), потери)
~/nlp_learn/statbot/.statbot/библиотека/python3.8/site-пакеты/spacy/язык.py в обновлении(self, examples, _, drop, sgd, потери, component_cfg, исключить) 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()
Ошибка типа: [E978] Метод Language.update принимает список примеров объектов, но получил: {<class ‘tuple’>}
Here the first line of TRAIN_DATA as an example: (‘Auf Bauer Lehmanns Hof wird an beiden Pfingsttagen Brot im Backofen gebacken.’, {‘entities’: [(10, 18, ‘PER’)]})
Ответ №1:
Вам необходимо преобразовать TRAIN_DATA
в Example
type . Вероятно, самый простой способ — использовать 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)
Комментарии:
1. из примера импорта spacy.training
2. Спасибо за решение! Но таким образом он не может быть обучен многопроцессорной обработке. Есть ли у вас какая-либо информация о том, что нужно изменить, чтобы это заработало?