Специальные токены

Разбираем служебные токены, которые модель использует для разметки границ и структуры.

Специальные токены — служебные метки (например, [CLS], [SEP], [PAD]), которые токенизатор добавляет к тексту, чтобы дать модели структурную информацию.

Зачем нужны служебные токены

Модели нужно знать, где начинается и заканчивается предложение, где граница между двумя текстами, и чем заполнить пустоту при выравнивании батча. Для этого в словаре есть особые токены, не соответствующие реальным словам.

ТокенНазначение
[CLS]метка начала, её вектор используют для классификации (BERT)
[SEP]разделитель между двумя текстами или концом
[PAD]заполнитель для выравнивания длины в батче
[UNK]неизвестный токен
<s> / </s>начало/конец последовательности (BOS/EOS)

Как они появляются в тексте

При кодировании токенизатор сам добавляет нужные служебные токены. Например, BERT оборачивает текст так:

вход:  "я люблю код"
стало: [CLS] я люблю код [SEP]

Токен [CLS] в начале особенный: после прогона через модель его итоговый вектор содержит «сводку» всего текста и используется для классификации.

Padding и attention mask

Чтобы обработать несколько текстов разом (батч), их выравнивают до одной длины токеном [PAD]. Но модель не должна «обращать внимание» на заполнители — для этого передаётся attention_mask: единицы у настоящих токенов, нули у padding.

input_ids:      [101, 1045, 2293, 102,   0,   0]
attention_mask: [  1,    1,    1,   1,   0,   0]

Как работает под капотом

Механизм внимания (attention) суммирует информацию по токенам с весами. Если бы padding участвовал на равных, он искажал бы результат. Поэтому в местах, где attention_mask равна нулю, веса внимания принудительно зануляются — модель «не видит» заполнители. Токены BOS и EOS у генеративных моделей сообщают, где начать и где остановить генерацию.

Частые ошибки

  • Добавлять спецтокены вручную. Токенизатор делает это сам; дублирование ломает вход.
  • Терять attention_mask при ручном батчинге. Тогда padding влияет на предсказание.
  • Считать [CLS] обычным словом. Это служебный токен с особой ролью.

Итог

  • Спецтокены размечают структуру: начало, разделитель, заполнитель, неизвестное.
  • [CLS] у BERT агрегирует смысл всего текста для классификации.
  • [PAD] выравнивает длины в батче, а attention_mask прячет его от модели.
  • Токенизатор добавляет спецтокены автоматически.
Проверьте себя
1. Для чего служит токен [PAD]?
AОбозначает конец текста
BЗаполняет короткие тексты до общей длины в батче
CПомечает неизвестные слова
DХранит сводку текста
2. Зачем нужна attention_mask?
AЧтобы ускорить токенизацию
BЧтобы модель игнорировала padding-токены
CЧтобы перевести текст
DЧтобы хранить веса
3. Какую роль играет токен [CLS] в BERT?
AЭто конец предложения
BЕго итоговый вектор используется как сводка текста для классификации
CЭто разделитель
DЭто неизвестное слово