Что делает токенизатор
Понимаем, почему нейросеть не видит букв и слов, а работает только с числами.
Токенизатор — компонент, который превращает текст в последовательность чисел (token ids) и обратно.
Зачем нужен токенизатор
Нейросеть умеет работать только с числами. Текст «привет» для неё бессмысленен, пока его не превратят в числа. Токенизатор делает именно это: разбивает текст на токены (кусочки) и заменяет каждый его номером в словаре. Этот процесс называется кодированием (encoding), обратный — декодированием.
текст: "учить модели"
токены: ["учить", "модел", "и"]
id: [4521, 8830, 18]Токен — не всегда слово
Токеном может быть слово, часть слова или даже один символ. Современные токенизаторы дробят редкие слова на части, а частые оставляют целиком. Это позволяет небольшим словарём (например, 30 000 токенов) закодировать любой текст, включая слова, которых модель не видела.
Имитация токенизации на Python
Чтобы почувствовать идею, сделаем игрушечный «токенизатор» на чистом Python (стандартная библиотека, реально запускается):
vocab = {"<unk>": 0, "я": 1, "люблю": 2, "код": 3}
def encode(text):
return [vocab.get(w, 0) for w in text.split()]
def decode(ids):
inv = {i: w for w, i in vocab.items()}
return " ".join(inv[i] for i in ids)
ids = encode("я люблю код")
print("ids:", ids)
print("назад:", decode(ids))
print("неизвестное:", encode("я люблю Python"))Вывод:
ids: [1, 2, 3] назад: я люблю код неизвестное: [1, 2, 0]
Слово «Python» не нашлось в словаре и заменилось на 0 — токен «неизвестное» (<unk>). Настоящие токенизаторы решают эту проблему хитрее, разбивая неизвестное слово на знакомые части.
Как работает под капотом
У каждой модели — свой токенизатор, обученный вместе с ней. Нельзя взять токенизатор от одной модели и веса от другой: номера токенов не совпадут, и модель получит бессмыслицу. Поэтому в transformers токенизатор всегда загружают из того же репозитория, что и модель. Кроме input_ids токенизатор обычно возвращает attention_mask — маску, которая указывает модели, где настоящие токены, а где добавленный заполнитель (padding).
Частые ошибки
- Смешивать токенизатор и модель из разных репозиториев. Это даёт неверные предсказания.
- Считать, что токен = слово. Часто это часть слова, и счёт токенов не равен счёту слов.
- Игнорировать attention_mask. При батчинге без неё модель «увидит» padding как настоящий текст.
Итог
- Токенизатор превращает текст в числа (token ids) и обратно.
- Токен может быть словом, частью слова или символом.
- У каждой модели свой токенизатор — их нельзя путать.
- Кроме
input_idsтокенизатор возвращаетattention_mask.