Длина последовательности индексов токенов Проблема
Я использую модель преобразователя предложений и пытаюсь усечь свои токены, но, похоже, она не работает. Мой код
from transformers import AutoModel, AutoTokenizer
model_name = "sentence-transformers/paraphrase-MiniLM-L6-v2"
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
text_tokens = tokenizer(text, padding=True, truncation=True, return_tensors="pt")
text_embedding = model(**text_tokens)["pooler_output"]
Я получаю следующее предупреждение:
Token indices sequence length is longer than the specified maximum sequence length
for this model (909 > 512). Running this sequence through the model will result in
indexing errors
Мне интересно, зачем устанавливать
truncation=True
не обрезает мой текст до желаемой длины?
1 ответ
Вам нужно добавить параметр при создании токенизатора, как показано ниже:
text_tokens = tokenizer(text, padding=True, max_length=512, truncation=True, return_tensors="pt")
Причина:
truncation=True
без
max_length
Параметр принимает длину последовательности равной максимально допустимой входной длине модели.
это
1e30
или
1000000000000000019884624838656
для этой модели. Вы можете проверить, распечатав
tokenizer.model_max_length
.
Согласно документации Huggingface о
truncation
,
Истина или only_first усекает до максимальной длины, указанной аргументом max_length, или максимальной длины, принятой моделью, если max_length не указан (max_length=None).