Гайд · TNWS AI

Как не потерять конец текста при truncation и padding в Transformers

5 мин—

max_length, truncation и padding для пары сообщений: проверяем, что юридически важная оговорка не исчезает до вызова модели.

Задача и применимость

Запрос читателя: «почему transformers tokenizer обрезает конец текста как проверить truncation». Ниже разобрана одна воспроизводимая задача на Python и Transformers 4.57.1. Действия относятся к checkpoint google-bert/bert-base-multilingual-cased, а не ко всем нейросетям с похожим названием. Код не отправляет запросы к админ-панели и не меняет чужие данные. Для первого запуска требуется загрузить модель из Hugging Face Hub; модель может требовать памяти и иметь собственные лицензионные условия. Проверяйте карточку checkpoint до применения к пользовательскому контенту. Демонстрационные предсказания не выдаются здесь за фактически выполненный инференс: в доступной проверке сверены документация и синтаксис Python, но веса модели не запускались.

Факт из документации, на который опирается инструкция: Документация 4.57.1 различает padding="longest" и padding="max_length"; truncation=True обычно удаляет токены из самой длинной последовательности, а only_first/only_second задают сторону пары. max_length относится к токенам, включая служебные токены, а не к числу букв. Если версия вашей библиотеки или конфигурация checkpoint отличается, повторите короткий тест перед массовым использованием. Код показывает механизм, а не результат промышленной оценки качества на вашем корпусе.

Порядок действий

  1. Запишите исходный документ и точную контрольную фразу из его конца.
  2. Выберите tokenizer от той же модели, которая будет принимать вход.
  3. Сравните число токенов без обрезки и после явного max_length.
  4. Декодируйте усечённый ввод и убедитесь, что отрицание и число сохранились.
  5. Если нужный факт потерян, разбейте документ на окна с перекрытием и проверьте поиск по каждому.

Для установки в отдельном окружении используйте совместимую версию пакета и backend PyTorch: pip install "transformers==4.57.1" torch. Наличие команды не означает, что все веса доступны именно вашей системе или что GPU настроен. Секреты и персональные данные не помещайте в демонстрационные входы. Для быстрой диагностики перед первым большим прогоном проверьте import transformers; print(transformers.__version__).

Готовый шаблон Python

from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained("google-bert/bert-base-multilingual-cased")
text = "Доставка завтра. " * 80 + "Исключение: возврат запрещён."
full = tok(text, truncation=False)
short = tok(text, truncation=True, max_length=64)
decoded = tok.decode(short["input_ids"], skip_special_tokens=True)
print("before", len(full["input_ids"]), "after", len(short["input_ids"]))
print("exception_present", "запрещ" in decoded)
print(decoded[-140:])

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

Пример входных данных и ожидаемой проверки

Вход: 80 повторений строки «Доставка завтра» и окончание «Исключение: возврат запрещён». При max_length=64 проверка exception_present может показать False: смысловая оговорка исчезла, хотя код не упал. Ожидаемый исправленный процесс — индексировать также окно, содержащее исключение, и находить его контрольным запросом.

Важно различать ожидаемую структуру ответа и непроверенное заранее содержимое нейросетевого предсказания. Если устройство или модель вернули иное значение, не «подгоняйте» скрипт под рассказ статьи. Сохраните фактический вывод, сопоставьте его с контрольным примером и запишите, какой слой дал отличие: вход, токенизация, checkpoint или постобработка. Так тест остается полезным после обновления окружения.

Как принимать решение по реальным данным

Усечение — одна из самых незаметных причин ложных ответов по документам. Модель не знает, что приложение выбросило хвост, и может уверенно сообщить правило без исключения. Часто ошибаются, считая max_length длиной строки в символах: токенизация кириллицы и артикулов даёт другое число элементов. Параметр padding=True при списке строк доводит их до самой длинной строки текущего batch, а padding="max_length" заполняет до установленного предела; он сам по себе не сохраняет потерянный хвост. В одиночном вызове padding до самой длинной строки практически не добавляет элементов, поэтому проверяйте фактические input_ids и attention_mask. Для пар «вопрос + документ» стратегия only_second может сохранить вопрос и резать документ; это полезно только при контроле того, какой аргумент действительно передан вторым.

Дополнительный тест перед внедрением

Протестируйте документ с критическим запретом в начале, середине и самом конце. Для каждой позиции печатайте длины, декодированный текст и булевы проверки контрольных фраз. Если факт оказался обрезан, не увеличивайте max_length сверх возможностей выбранной архитектуры: используйте осмысленные чанки, overlap и поиск релевантного окна. У модели с разной tokenizer_config может отличаться реальный лимит; зафиксируйте model ID, revision и установленную версию библиотеки. Паддинг полезен для пакетного тензора, но чрезмерный padding расходует память и время. Сравнивайте padding="longest" с фиксированным пределом на измеренных длинах своего корпуса. Для production не записывайте весь приватный исходный документ в логи: достаточно длины, флага потери тестовой фразы и идентификатора тестового файла.

Критерии готовности

  • Количество токенов после обрезки не превышает 64.
  • Критическая фраза проверена именно в декодированном вводе модели.
  • Сохранение оговорки подтверждено после разбиения на окна.

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

Типичные ошибки и что не делать

  • Не путать число токенов с числом символов.
  • Не считать padding защитой от truncation.
  • Не индексировать только первый chunk юридического документа.

Не путайте демонстрационный вывод с обещанием точности и не подменяйте источники сведений ответом модели. Для автоматического действия с последствиями для человека добавляйте независимую проверку. Изменения языка, объёма текста и домена применения требуют новой оценки качества. В документации производителя описан интерфейс инструмента, но показатели вашей задачи можно узнать только на вашей контрольной выборке.

FAQ

Как понять, что хвост исчез?

Декодировать input_ids и проверить контрольный факт.

Что делает padding=True?

Дополняет последовательности до самого длинного элемента текущего batch.

Что значит only_second?

При парном вводе усекает вторую последовательность.

Официальные источники

Частые вопросы

Как понять, что хвост исчез?

Декодировать input_ids и проверить контрольный факт.

Что делает padding=True?

Дополняет последовательности до самого длинного элемента текущего batch.

Что значит only_second?

При парном вводе усекает вторую последовательность.

Читайте также

Комментарии

Пока тихо. Скажите первое слово