Как мне сохранить мой точно настроенный bert для токенизатора и конфигурации модели классификации последовательностей?

#model #save #bert-language-model

#Модель #Сохранить #bert-language-model

Вопрос:

Я хочу сохранить всю обученную модель после такой точной настройки в папке:

 config.json
added_token.json
special_tokens_map.json
tokenizer_config.json
vocab.txt
pytorch_model.bin
  

Я мог сохранить только pytorch_model.bin, но другие детали, которые я не смог сохранить, Как я мог сохранить всю конфигурацию, токенизатор и т. Д. Моей модели?

Я использовал

 tokenizer.save_pretrained('results/tokenizer/')
  

но earror apears

 AttributeError: 'BertTokenizer' object has no attribute 'save_pretrained'
  

Я сохранил файл двоичной модели с помощью следующего кода

 torch.save(model_to_save.state_dict(), output_model_file)
  

но когда я использовал его для сохранения токенизатора или файла конфигурации, я не смог этого сделать, потому что я не знаю, какое расширение файла я должен сохранить tokenizer, и я не смог добраться до файла cofig,
Есть ли какой-нибудь способ сохранить все детали моей модели?
заранее благодарю

Ответ №1:

Я не знаю, как вы определили токенизатор и для чего вы назначили переменную «tokenizer», но это может быть решением вашей проблемы:

 from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(...)
tokenizer.save_pretrained('results/tokenizer/')
  

Это сохраняет все о токенизаторе и с your_model.save_pretrained('results/tokenizer/') полученным:

 config.json
added_token.json
special_tokens_map.json
tokenizer_config.json
vocab.txt
pytorch_model.bin
  

ОБНОВЛЕНИЕ после комментария:

Если вы используете from pytorch_pretrained_bert import BertForSequenceClassification , то этот атрибут недоступен (как вы можете видеть из кода).

Что вам следует сделать, так это использовать трансформаторы, которые также интегрируют эту функциональность.

Пример:

 from transformers import BertForSequenceClassification

model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
model.save_pretrained('results/tokenizer/')
  

Другим решением было бы использовать автоклассы.

Комментарии:

1. Я попробовал ваш код your_model.save_pretrained(‘results/tokenizer/’), но появляется эта ошибка torch.nn.modules.module. ModuleAttributeError: объект ‘BertForSequenceClassification’ не имеет атрибута ‘save_pretrained’

2. Да, конечно, теперь я пытаюсь обновить свой ответ, сделав его более полным, чтобы лучше объяснить

3. Я попробовал ваше обновленное решение, но появляется ошибка torch.nn.modules.module. ModuleAttributeError: объект ‘BertForSequenceClassification’ не имеет атрибута ‘save_pretrained’

4. Вы не используете код из моего обновленного ответа. Вы продолжаете использовать pytorch_pretrained_bert вместо transformers этого . Пожалуйста, скопируйте и вставьте мои последние три строки, и вы увидите, что это работает.

5. учитывая, что я точно настроил модель, и я хочу сохранить точно настроенную версию, а не импортированную версию, и я мог бы сохранить файл .bin моей модели, используя этот код model_to_save = model.module if hasattr(model, ‘module’) else model # Только сохранить модель самостоятельно output_model_file =os.path.join(args.output_dir, «pytorch_model_task.bin»), но я не смог сохранить другие файлы конфигурации