Невозможно загрузить модель SpanBert с пакетом трансформаторов - PullRequest
1 голос
/ 03 мая 2020

У меня есть несколько вопросов относительно загрузки SpanBert с использованием пакетов трансформаторов.

Я скачал предварительно обученный файл с SpanBert GitHub Repo и vocab.txt с Берта. Вот код, который я использовал для загрузки:

model = BertModel.from_pretrained(config_file=config_file,
                                  pretrained_model_name_or_path=model_file,
                                  vocab_file=vocab_file)
model.to("cuda")

, где

  • config_file -> config.json
  • model_file -> pytorch_model.bin
  • vocab_file -> vocab.txt

Но я получил UnicodeDecoderError с приведенным выше кодом, говорящим, что 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

Я также попытался загрузить SpanBert с упомянутым методом здесь . Но он вернулся OSError: file SpanBERT/spanbert-base-cased not found.

Есть ли у вас какие-либо предложения по правильной загрузке предварительно обученной модели? Любые предложения очень ценятся. Спасибо!

1 Ответ

3 голосов
/ 03 мая 2020
  1. Загрузите предварительно обученные веса со страницы Github.

https://github.com/facebookresearch/SpanBERT

SpanBERT (базовый и корпус): 12-слойный, 768-скрытый, 12-головочный, параметры 110M

SpanBERT (большой и корпус): 24 слоя, 1024 скрытых, 16 головок, 340M параметров

Извлеките их в папку, например, я извлек в папку spanbert_hf_base, которая содержит файл .bin и файл config.json.

Вы можете использовать AutoModel для загрузки модели и простого токенайзера Bert. Из репозитория:

Эти модели имеют тот же формат, что и модели HuggingFace BERT, поэтому вы можете легко заменить их на наши модели SpanBET.

import torch
from transformers import AutoModel
model = AutoModel.from_pretrained('spanbert_hf_base/') # the path to .bin and config.json

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

b = torch.tensor(tokenizer.encode('hi this is me, mr. meeseeks', add_special_tokens=True, max_length = 512)).unsqueeze(0)

out = model(b)

Out:

(tensor([[[-0.1204, -0.0806, -0.0168,  ..., -0.0599, -0.1932, -0.0967],
          [-0.0851, -0.0980,  0.0039,  ..., -0.0563, -0.1655, -0.0156],
          [-0.1111, -0.0318,  0.0141,  ..., -0.0518, -0.1068, -0.1271],
          [-0.0317, -0.0441, -0.0306,  ..., -0.1049, -0.1940, -0.1919],
          [-0.1200,  0.0277, -0.0372,  ..., -0.0930, -0.0627,  0.0143],
          [-0.1204, -0.0806, -0.0168,  ..., -0.0599, -0.1932, -0.0967]]],
        grad_fn=<NativeLayerNormBackward>),
 tensor([[-9.7530e-02,  1.6328e-01,  9.3202e-03,  1.1010e-01,  7.3047e-02,
          -1.7635e-01,  1.0046e-01, -1.4826e-02,  9.2583e-
         ............
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...