Ошибка загрузки предварительно обученной модели BERT — ошибка не найден файл с именем [‘pytorch_model.bin’, ‘tf_model.h5’]

#huggingface-transformers

#huggingface-transformers

Вопрос:

Я думаю, что моя проблема здесь связана с несоответствием версии transformer… но я хотел бы получить некоторую помощь в этом…

Ранее я использовал библиотеку huggingface для точной настройки языковой модели. Для этого требуется корпус, существующая модель BERT, и точная настройка этой модели с использованием этого корпуса. Моя команда была

 python run_language_modelling.py --output_dir=lm_finetune --model_type=bert --model_name_or_path=bert-base-uncased --do_train --train_data_file=thread0_wdc20.txt --do_eval --eval_data_file=wiki.test.raw --mlm --save_total_limit=1 --save_steps=2 --line_by_line --num_train_epochs=2
 

Я успешно настроил модели, и это создало папку, содержащую следующие файлы:

 checkpoint-183236  config.json  eval_results_lm.txt  lm_finetune  pytorch_model.bin  special_tokens_map.json  tokenizer_config.json  training_args.bin  vocab.txt
 

И я также успешно загрузил эту точно настроенную языковую модель для последующих задач.

Проблема в том, что я не помню версии библиотек, которые я использовал для всего этого — pytorch, transformers, tensorflow…

Недавно я экспериментировал с чем-то, что потребовало от меня переустановки этих библиотек. Их версии теперь:

 tensorflow-gpu 2.2.0
transformers 3.0.2
pytorch 1.4.0
torchtext 0.5.0
 

И когда я использую эту среду для перезагрузки этих ранее настроенных языковых моделей, я получаю эту ошибку:

   File "/home/li1zz/.conda/envs/tensorflow-gpu/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/li1zz/.conda/envs/tensorflow-gpu/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/li1zz/wop_matching/src/exp/run_bert_standard.py", line 313, in <module>
    bert_model = transformers.TFBertModel.from_pretrained(bert_model)
  File "/home/li1zz/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/transformers/modeling_tf_utils.py", line 437, in from_pretrained
    [WEIGHTS_NAME, TF2_WEIGHTS_NAME], pretrained_model_name_or_path
OSError: Error no file named ['pytorch_model.bin', 'tf_model.h5'] found in directory /home/li1zz/bert/lm_finetune_proddesc/lm_finetune_part00 or `from_pt` set to False
 

Очевидно, что файл, который сейчас отсутствует, является

 tf_model.h5
 

Я не понимаю, как у меня возникла эта ошибка — точно настроенные модели работали раньше. И единственное, о чем я могу думать, это несоответствие версий. Т.Е. Я доработал эти модели, используя версию библиотек, которые несовместимы с теми, которые я сейчас использую, поскольку отсутствует один файл.

Кто-нибудь может дать некоторое представление об этом? Я использую неправильные версии библиотек? Как я могу это исправить, не выполняя заново всю настройку языковой модели, используя эту новую среду снова?

Ответ №1:

Я обнаружил, что решением должно быть добавление ‘from_pt = True’ в строку, которая загружает модель:

         bert_model = transformers.TFBertModel.from_pretrained(bert_model, from_pt=True)
 

На самом деле это указано в сообщении об ошибке. И это должно быть дополнительной функцией, потому что я четко помню, что мой предыдущий код работал, и у него не было этого параметра.

Ответ №2:

Файлы, которые вы упомянули выше, указывают на то, что вы обучили PyTorch model ( pytorch_model.bin ) , но в вашем собственном ответе вы пытаетесь загрузить модель TensorFlow с помощью:

 bert_model = transformers.TFBertModel.from_pretrained(bert_model, from_pt=True)
 

Как вы уже выяснили, вы можете создать модель тензорного потока из PyTorch state_dict, установив from_pt=True . Но в случае, если для вас не имеет значения, используете ли вы PyTorch или TensorFlow, вы можете сразу инициализировать модель PyTorch с помощью:

 bert_model = transformers.BertModel.from_pretrained(bert_model)
 

Я не пробовал, но предполагаю, что это будет быстрее. В документации также упоминается, что быстрее преобразовать PyTorch state_dict с помощью одного из предоставленных сценариев преобразования и последующей загрузки модели как using from_pt=True .