ТРАНСФОРМЕРЫ: запрашивается дополнение, но у токенизатора нет заполняющего токена.Python

Программы на Python
Ответить
Anonymous
 ТРАНСФОРМЕРЫ: запрашивается дополнение, но у токенизатора нет заполняющего токена.

Сообщение Anonymous »

При попытке последовательно оценить несколько моделей трансформаторов с одним и тем же набором данных, чтобы проверить, какая из них работает лучше.
Список моделей следующий:

Код: Выделить всё

MODELS = [
('xlm-mlm-enfr-1024'   ,"XLMModel"),
('distilbert-base-cased', "DistilBertModel"),
('bert-base-uncased'     ,"BertModel"),
('roberta-base'        ,"RobertaModel"),
("cardiffnlp/twitter-roberta-base-sentiment","RobertaSentTW"),
('xlnet-base-cased'     ,"XLNetModel"),
#('ctrl'                ,"CTRLModel"),
('transfo-xl-wt103'    ,"TransfoXLModel"),
('bert-base-cased'       ,"BertModelUncased"),
('xlm-roberta-base'     ,"XLMRobertaModel"),
('openai-gpt'           ,"OpenAIGPTModel"),
('gpt2'                 ,"GPT2Model")
Все они работают нормально, пока не появится модель «ctrl», которая возвращает эту ошибку:

Код: Выделить всё

Asking to pad, but the tokenizer does not have a padding token. Please select a token to use as 'pad_token' '(tokenizer.pad_token = tokenizer.eos_token e.g.)' or add a new pad token via 'tokenizer.add_special_tokens({'pad_token': '[PAD]'})'.
При токенизации предложений моего набора данных.
Код токенизации:

Код: Выделить всё

SEQ_LEN = MAX_LEN #(50)

for pretrained_weights, model_name in MODELS:

print("***************** INICIANDO " ,model_name,", weights ",pretrained_weights, "********* ")
print("carganzo el tokenizador ()")
tokenizer = AutoTokenizer.from_pretrained(pretrained_weights)
print("creando el modelo preentrenado")
transformer_model = TFAutoModel.from_pretrained(pretrained_weights)
print("aplicando el tokenizador al dataset")

##APLICAMOS EL TOKENIZADOR##

def tokenize(sentence):

tokens = tokenizer.encode_plus(sentence, max_length=MAX_LEN,
truncation=True, padding='max_length',
add_special_tokens=True, return_attention_mask=True,
return_token_type_ids=False, return_tensors='tf')
return tokens['input_ids'], tokens['attention_mask']

# initialize two arrays for input tensors
Xids = np.zeros((len(df), SEQ_LEN))
Xmask = np.zeros((len(df), SEQ_LEN))

for i, sentence in enumerate(df['tweet']):
Xids[i, :], Xmask[i, :] = tokenize(sentence)
if i % 10000 == 0:
print(i)  # do this so we can see some progress

arr = df['label'].values  # take label column in df as array

labels = np.zeros((arr.size, arr.max()+1))  # initialize empty (all zero) label array
labels[np.arange(arr.size), arr] = 1  # add ones in indices where we have a value`
Я пытался определить маркеры заполнения, как подсказывает мне решение, но затем появляется эта ошибка

Код: Выделить всё

could not broadcast input array from shape (3,) into shape (50,)
в строке

Код: Выделить всё

Xids[i, :], Xmask[i, :] = tokenize(sentence)
Я тоже пробовал это решение, и оно тоже не работает.
Если вам удалось дочитать до этого места, спасибо.< /p>
Нужна любая помощь.

Подробнее здесь: https://stackoverflow.com/questions/705 ... ding-token
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»