Добрый день,
да, верно, если набор меток новый, то модель придется обучать заново.
Обучение модели на своих данных обсуждалось например вот тут:
Обратите внимание на изменение параметра save/load_path и у модели и словарей меток (для нового набора меток нужен свой словарь).
Если да, сколько нужно данных для такой задачи?
общее правило, что чем больше тем лучше. Можно начать с сотни на каждый класс и посмотреть как будет работать модель, если качество не удовлетворит, то размечать данные еще.
“Обратите внимание на изменение параметра save/load_path и у модели и словарей меток (для нового набора меток нужен свой словарь)”
Не понял, что вы имеете в виду. Мне надо создать словарь с метками и поместить его куда-то? Если да, то куда его помещать / есть ли пример?
Читал, что bert с нуля тренируют на большом количестве данных - десятки и сотни гигабайт, и с использованием большого количестве вычислительных ресурсов и времени.
На сколько в принципе жизнеспособная идея: тренировать на сотне примеров на класс в google colab?
Сейчас команды выглядят следующим образом:
import json
from deeppavlov import configs, build_model, train_model
with configs.ner.ner_rus_bert.open(encoding=‘utf8’) as f:
ner_config = json.load(f)
Корректный ли данный скрипт, если я тренирую с нуля на своих данных?
Если ставлю dowload=False, выдает ошибку
Или если с нуля тренируешь все равно надо ставить download=True?
Как тренировать в google colab на gpu?
Не нашел в config параметра “device”
А если ставить как у вас написано в документации:
pip install tensorflow-gpu==1.15.2
import os
os.environ[“CUDA_VISIBLE_DEVICES”]=“3”
Не работает
Понимаю, что вопросы базовые, но с текстом работаю в первый раз и в интернете примеры в google colab с deeppavlov для моей задачи с уточнением параметров не нашел
Не понял, что вы имеете в виду. Мне надо создать словарь с метками и поместить его куда-то? Если да, то куда его помещать / есть ли пример?
Нет, новый словарь сам создастся во время запуска команды на обучение. Нужно только поменять пути, чтобы не подгружать словарь меток от стандартного датасета.
Читал, что bert с нуля тренируют на большом количестве данных - десятки и сотни гигабайт, и с использованием большого количестве вычислительных ресурсов и времени.
На сколько в принципе жизнеспособная идея: тренировать на сотне примеров на класс в google colab?
Идея жизнеспособная. Вы не будете обучать Bert совсем с нуля, он уже предобучен, но только не на задаче извлечения сущностей.
В коде вы меняете переменную ner_config, а используете configs.ner.ner_rus_bert в команде train_model. Попробуйте подставить ner_config в вызов train_model c download=False.
Ошибка:
NotFoundError: /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/vocab.txt; No such file or directory
Если ставлю True или делаю !python -m deeppavlov download paraphraser_rubert
Модель запускается на обучение
но по факту не учится, по-моему:
{“valid”: {“eval_examples_count”: 2, “metrics”: {“ner_f1”: 0, “ner_token_f1”: 0}, “time_spent”: “0:00:03”, “epochs_done”: 0, “batches_seen”: 0, “train_examples_seen”: 0, “impatience”: 0, “patience_limit”: 100}}
2021-06-28 13:48:50.296 INFO in ‘deeppavlov.core.data.simple_vocab’[‘simple_vocab’] at line 115: [loading vocabulary from /content/drive/MyDrive/Models/Test/tag.dict] 2021-06-28 13:49:16.685 INFO in ‘deeppavlov.models.bert.bert_sequence_tagger’[‘bert_sequence_tagger’] at line 251: [initializing model with Bert from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt]
2021-06-28 13:49:38.444 INFO in ‘deeppavlov.core.data.simple_vocab’[‘simple_vocab’] at line 115: [loading vocabulary from /content/drive/MyDrive/Models/Test/tag.dict] 2021-06-28 13:50:05.308 INFO in ‘deeppavlov.models.bert.bert_sequence_tagger’[‘bert_sequence_tagger’] at line 251: [initializing model with Bert from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt]
INFO:tensorflow:Restoring parameters from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt
У вас в валидации всего два примера, этого недостаточно чтобы судить о качестве модели. Чтобы проверить, что модель учится в принципе посмотрите на метрики на train подвыборке во время обучения, получаются ли там значения f1 больше 0.
оно запускается только, если я ставлю download=True или устанавливаю
!python -m deeppavlov download paraphraser_rubert
Если ставить в команде train параметр download=False, ошибка:
NotFoundError: /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/vocab.txt; No such file or directory
Так у меня это с самого начала стояло:
ner_config[‘metadata’][‘variables’][‘NER_PATH’] = ‘/content/drive/MyDrive/Models/Test/’
Это логи с
ner_model = train_model(ner_config, download=True):
2021-06-28 16:09:52.198 INFO in ‘deeppavlov.download’[‘download’] at line 138: Skipped http://files.deeppavlov.ai/deeppavlov_data/bert/rubert_cased_L-12_H-768_A-12_v1.tar.gz download because of matching hashes 2021-06-28 16:09:52.206 INFO in ‘deeppavlov.core.trainers.fit_trainer’[‘fit_trainer’] at line 68: NNTrainer got additional init parameters [‘pytest_max_batches’, ‘pytest_batch_size’, ‘learning_rate’, ‘device’] that will be ignored: 2021-06-28 16:09:52.666 INFO in ‘deeppavlov.core.data.simple_vocab’[‘simple_vocab’] at line 115: [loading vocabulary from /content/drive/MyDrive/Models/Test/tag.dict] 2021-06-28 16:09:52.669 INFO in ‘deeppavlov.core.data.simple_vocab’[‘simple_vocab’] at line 101: [saving vocabulary to /content/drive/MyDrive/Models/Test/tag.dict] 2021-06-28 16:10:21.307 INFO in ‘deeppavlov.models.bert.bert_sequence_tagger’[‘bert_sequence_tagger’] at line 251: [initializing model with Bert from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt]
INFO:tensorflow:Restoring parameters from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt
2021-06-28 16:10:26.152 INFO in ‘deeppavlov.core.trainers.nn_trainer’[‘nn_trainer’] at line 199: Initial best ner_f1 of 0
2021-06-28 16:11:18.89 INFO in ‘deeppavlov.core.data.simple_vocab’[‘simple_vocab’] at line 115: [loading vocabulary from /content/drive/MyDrive/Models/Test/tag.dict] 2021-06-28 16:11:44.267 INFO in ‘deeppavlov.models.bert.bert_sequence_tagger’[‘bert_sequence_tagger’] at line 251: [initializing model with Bert from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt]
2021-06-28 16:11:50.974 INFO in ‘deeppavlov.core.data.simple_vocab’[‘simple_vocab’] at line 115: [loading vocabulary from /content/drive/MyDrive/Models/Test/tag.dict] 2021-06-28 16:12:16.722 INFO in ‘deeppavlov.models.bert.bert_sequence_tagger’[‘bert_sequence_tagger’] at line 251: [initializing model with Bert from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt]
INFO:tensorflow:Restoring parameters from /root/.deeppavlov/downloads/bert_models/rubert_cased_L-12_H-768_A-12_v1/bert_model.ckpt
Это точно все логи?
Должны быть быть логи с метриками на train подвыборке, типа вот таких:
{"train": {"eval_examples_count": 16, "metrics": {"ner_f1": 0, "ner_token_f1": 0}, "time_spent": "0:00:30", "epochs_done": 0, "batches
_seen": 20, "train_examples_seen": 320, "head_learning_rate": 0.0010000000474974513, "bert_learning_rate": 2.0000000949949027e-05, "lo
ss": 31.20499219894409}}
2021-07-07 13:07:42.173 INFO in 'deeppavlov.core.trainers.nn_trainer'['nn_trainer'] at line 212: Did not improve on the ner_f1 of 3.27
37
{"valid": {"eval_examples_count": 2153, "metrics": {"ner_f1": 0, "ner_token_f1": 0}, "time_spent": "0:00:40", "epochs_done": 0, "batches_seen": 20, "train_examples_seen": 320, "impatience": 1, "patience_limit": 100}}
{"train": {"eval_examples_count": 16, "metrics": {"ner_f1": 0, "ner_token_f1": 0}, "time_spent": "0:00:54", "epochs_done": 0, "batches
_seen": 40, "train_examples_seen": 640, "head_learning_rate": 0.0010000000474974513, "bert_learning_rate": 2.0000000949949027e-05, "loss": 19.26974368095398}}
2021-07-07 13:08:06.547 INFO in 'deeppavlov.core.trainers.nn_trainer'['nn_trainer'] at line 212: Did not improve on the ner_f1 of 3.27
37 {"valid": {"eval_examples_count": 2153, "metrics": {"ner_f1": 0, "ner_token_f1": 0.0823}, "time_spent": "0:01:04", "epochs_done": 0, "
batches_seen": 40, "train_examples_seen": 640, "impatience": 2, "patience_limit": 100}}
{"train": {"eval_examples_count": 16, "metrics": {"ner_f1": 24.0, "ner_token_f1": 44.4444}, "time_spent": "0:01:18", "epochs_done": 0, "batches_seen": 60, "train_examples_seen": 960, "head_learning_rate": 0.0010000000474974513, "bert_learning_rate": 2.0000000949949027
e-05, "loss": 13.49337329864502}}
2021-07-07 13:08:30.635 INFO in 'deeppavlov.core.trainers.nn_trainer'['nn_trainer'] at line 207: Improved best ner_f1 of 9.3835 2021-07-07 13:08:30.635 INFO in 'deeppavlov.core.trainers.nn_trainer'['nn_trainer'] at line 209: Saving model
2021-07-07 13:08:30.694 INFO in 'deeppavlov.core.models.tf_model'['tf_model'] at line 75: [saving model to /home/yurakuratov/data/deep
pavlov_download/models/ner_rus_bert/model_1] {"valid": {"eval_examples_count": 2153, "metrics": {"ner_f1": 9.3835, "ner_token_f1": 19.7751}, "time_spent": "0:01:28", "epochs_done"
: 0, "batches_seen": 60, "train_examples_seen": 960, "impatience": 0, "patience_limit": 100}}
{"train": {"eval_examples_count": 16, "metrics": {"ner_f1": 45.614, "ner_token_f1": 45.3608}, "time_spent": "0:01:44", "epochs_done": 0, "batches_seen": 80, "train_examples_seen": 1280, "head_learning_rate": 0.0010000000474974513, "bert_learning_rate": 2.0000000949949
027e-05, "loss": 9.65506112575531}}
В вашем случае модель не смогла на валидационных данных получить скор больше 0.0 и загрузила лучший свой чекпойнт с самого начала обучения (случайный).
Если метрики на train растут, то это будет признаком того, что модель обучается. Если нет, то надо разбираться дальше.