Загрузите предварительно обученную модель с диска с помощью Huggingface Transformers

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

  - a path to a `directory` containing vocabulary files required by the tokenizer, for instance saved using the :func:`~transformers.PreTrainedTokenizer.save_pretrained` method, e.g.: ``./my_model_directory/``.
  - (not applicable to all derived classes, deprecated) a path or url to a single saved vocabulary file if and only if the tokenizer only requires a single vocabulary file (e.g. Bert, XLNet), e.g.: ``./my_model_directory/vocab.txt``.

Итак, я зашел в модельный хаб:

Я нашел нужную модель:

Я скачал его по ссылке, которую они предоставили в этот репозиторий:

Предварительно обученная модель по английскому языку с использованием задачи моделирования маскированного языка (MLM). Он был представлен в этой статье и впервые выпущен в этом репозитории. Эта модель чувствительна к регистру: она делает разницу между английским и английским.

Хранится в:

  /my/local/models/cased_L-12_H-768_A-12/

Который содержит:

 ./
 ../
 bert_config.json
 bert_model.ckpt.data-00000-of-00001
 bert_model.ckpt.index
 bert_model.ckpt.meta
 vocab.txt

Итак, теперь у меня есть следующее:

  PATH = '/my/local/models/cased_L-12_H-768_A-12/'
  tokenizer = BertTokenizer.from_pretrained(PATH, local_files_only=True)

И я получаю такую ​​ошибку:

>           raise EnvironmentError(msg)
E           OSError: Can't load config for '/my/local/models/cased_L-12_H-768_A-12/'. Make sure that:
E           
E           - '/my/local/models/cased_L-12_H-768_A-12/' is a correct model identifier listed on 'https://huggingface.co/models'
E           
E           - or '/my/local/models/cased_L-12_H-768_A-12/' is the correct path to a directory containing a config.json file

Аналогично, когда я напрямую связываюсь с config.json:

  PATH = '/my/local/models/cased_L-12_H-768_A-12/bert_config.json'
  tokenizer = BertTokenizer.from_pretrained(PATH, local_files_only=True)

        if state_dict is None and not from_tf:
            try:
                state_dict = torch.load(resolved_archive_file, map_location="cpu")
            except Exception:
                raise OSError(
>                   "Unable to load weights from pytorch checkpoint file. "
                    "If you tried to load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True. "
                )
E               OSError: Unable to load weights from pytorch checkpoint file. If you tried to load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True.

Что мне нужно сделать по-другому, чтобы huggingface использовал мою локальную предварительно обученную модель?

Обновите, чтобы учесть комментарии

YOURPATH = '/somewhere/on/disk/'

name = 'transfo-xl-wt103'
tokenizer = TransfoXLTokenizerFast(name)
model = TransfoXLModel.from_pretrained(name)
tokenizer.save_pretrained(YOURPATH)
model.save_pretrained(YOURPATH)

>>> Please note you will not be able to load the save vocabulary in Rust-based TransfoXLTokenizerFast as they don't share the same structure.
('/somewhere/on/disk/vocab.bin', '/somewhere/on/disk/special_tokens_map.json', '/somewhere/on/disk/added_tokens.json')

Так что все спасено, но потом ....

YOURPATH = '/somewhere/on/disk/'
TransfoXLTokenizerFast.from_pretrained('transfo-xl-wt103', cache_dir=YOURPATH, local_files_only=True)

    "Cannot find the requested files in the cached path and outgoing traffic has been"
ValueError: Cannot find the requested files in the cached path and outgoing traffic has been disabled. To enable model look-ups and downloads online, set 'local_files_only' to False.

person Mittenchops    schedule 21.09.2020    source источник
comment
Не знаю, откуда у вас эти файлы. Когда я проверяю ссылку, я могу скачать следующие файлы: config.json, flax_model.msgpack, modelcard.json, pytorch_model.bin, tf_model.h5, vocab.txt. Кроме того, лучше сохранять файлы через tokenizer.save_pretrained('YOURPATH') и model.save_pretrained('YOURPATH'), а не загружать их напрямую.   -  person cronoik    schedule 05.10.2020
comment
Спасибо. Я обновил вопрос, чтобы отразить, что я пробовал это, но, похоже, это не сработало.   -  person Mittenchops    schedule 05.10.2020
comment
Пожалуйста, используйте TransfoXLTokenizerFast.from_pretrained(YOURPATH).   -  person cronoik    schedule 06.10.2020
comment
@Mittenchops вы когда-нибудь решали это? У меня аналогичная проблема с загрузкой модели с диска.   -  person Evan Zamir    schedule 04.03.2021


Ответы (3)


Где находится файл относительно папки вашей модели? Я считаю, что это должен быть относительный ПУТЬ, а не абсолютный. Итак, если ваш файл, в котором вы пишете код, находится в 'my/local/', тогда ваш код должен быть таким:

PATH = 'models/cased_L-12_H-768_A-12/'
tokenizer = BertTokenizer.from_pretrained(PATH, local_files_only=True)

Вам просто нужно указать папку, в которой находятся все файлы, а не файлы напрямую. Я думаю, что это определенно проблема с PATH. Попробуйте изменить стиль косой черты: / vs \, они разные в разных операционных системах. Также попробуйте использовать., Например, ./models/cased_L-12_H-768_A-12/ и т. Д.

person Sameer Zahid    schedule 22.09.2020
comment
Извините, это на самом деле был абсолютный путь, просто искаженный, когда я изменил его для примера. Обновил вопрос. - person Mittenchops; 23.09.2020

У меня была такая же потребность, и я только что получил эту работу с Tensorflow на моем Linux-компьютере, поэтому решил, что поделюсь.

Мой requirements.txt файл для моей кодовой среды:

tensorflow==2.2.0
Keras==2.4.3
scikit-learn==0.23.1
scipy==1.4.1
numpy==1.18.1
opencv-python==4.5.1.48
seaborn==0.11.1
tensorflow-hub==0.12.0
nltk==3.6.2
tqdm==4.60.0
transformers==4.6.0
ipywidgets==7.6.3

Я использую Python 3.6.

Я зашел на этот сайт, который показывает дерево каталогов для конкретной модели huggingface Я хотел. Мне понадобилась модель без корпуса, но эти шаги должны быть аналогичными для вашей версии с корпусом. Также обратите внимание, что моя ссылка ведет на очень конкретную фиксацию этой модели, просто для воспроизводимости - очень вероятно, что к тому времени, когда кто-то это прочитает, будет более свежая версия.

Я вручную загрузил (или мне пришлось скопировать / вставить в блокнот ++, потому что кнопка загрузки привела меня к необработанной версии txt / json в некоторых случаях ... странно ...) следующие файлы:

  • config.json
  • tf_model.h5
  • tokenizer_config.json
  • tokenizer.json
  • vocab.txt

ПРИМЕЧАНИЕ. Еще раз, все, что я использую, это Tensorflow, поэтому я не загружал веса Pytorch. Если вы используете Pytorch, вы, вероятно, захотите загрузить эти веса вместо файла tf_model.h5.

Затем я помещаю эти файлы в этот каталог на своем Linux-компьютере:

/opt/word_embeddings/bert-base-uncased/

Вероятно, неплохо было бы убедиться, что для всех этих файлов есть хотя бы разрешения на чтение с помощью быстрого ls -la (мои разрешения для каждого файла - -rw-r--r--). У меня также есть разрешения на выполнение в родительском каталоге (указанном выше), поэтому люди могут cd в этот каталог.

Оттуда я могу загрузить модель следующим образом:

токенизатор:

# python
from transformers import BertTokenizer
# tokenizer = BertTokenizer.from_pretrained("bert-base-cased")
tokenizer = BertTokenizer.from_pretrained("/opt/word_embeddings/bert-base-uncased/")

вес слоя / модели:

# python
from transformers import TFAutoModel
# bert = TFAutoModel.from_pretrained("bert-base-uncased")
bert = TFAutoModel.from_pretrained("/opt/word_embeddings/bert-base-uncased/")
person TaylorV    schedule 13.05.2021

вы можете использовать библиотеку simpletransformers. проверьте ссылку для более подробного объяснения.

    model = ClassificationModel(
    "bert", "dir/your_path"
)

Здесь я использовал модель классификации в качестве примера. Вы можете использовать его для многих других задач, например, для ответов на вопросы и т. Д.

person Sankha Jayalath    schedule 15.07.2021