Представьте, что ваш компьютер или нейросеть не «читает» слова так, как это делаем мы – как цельные понятия. Для компьютера язык – это набор сигналов, чисел. Токен (Token) – это самый маленький «кирпичик» смысла, с которым работают языковые модели, такие как DeepSeek. Это единица, которую модель понимает и обрабатывает.
В самом простом виде: Токен – это либо слово, либо часть слова, либо знак препинания, либо даже специальный символ, который модель преобразует в числовой вектор.
Почему не просто слова?
Управление Словарным Запасом: Если бы модель обрабатывала каждое возможное слово, ее “словарь” был бы астрономически огромным. Многие редкие слова, имена собственные, технические термины, или слова с ошибками просто не попали бы в обучение.
Обработка Незнакомых Слов (Out-of-Vocabulary, OOV): Что делать, если встретилось слово, которого нет в словаре? Можно его проигнорировать? Или сломается вся модель? Токенизация на уровне подслов позволяет “разбирать” незнакомые слова на известные части. Например, “нейросетевой” может быть разбит на “нейросеть” + “евой”.
Эффективность: Работа с токенами (которые представляют собой более управляемый набор единиц) гораздо эффективнее с точки зрения вычислений и памяти.
Улавливание Морфологии: Многие языки (включая русский) имеют богатую морфологию – окончания, приставки, суффиксы, которые меняют смысл слова. Токенизация может сохранять эти части отдельно, помогая модели понять грамматику.
Существуют разные подходы к тому, как именно текст превращается в токены. DeepSeek, как и большинство современных LLM, использует продвинутые методы.
1. Токенизация на Уровне Слов (Word Tokenization)
Принцип: Каждое слово – это отдельный токен. Знаки препинания обычно тоже выделяются в отдельные токены.
Пример: “Привет, мир!” -> ["Привет", ",", "мир", "!"]
Проблемы:
Огромный словарь.
Плохо работает с незнакомыми словами (OOV).
Не учитывает морфологию (одно и то же слово с разными окончаниями – разные токены).
2. Токенизация на Уровне Символов (Character Tokenization)
Принцип: Каждый символ (буква, цифра, знак) – это отдельный токен.
Пример: “Привет!” -> ["П", "р", "и", "в", "е", "т", "!"]
Преимущества:
Маленький словарь (только алфавит, цифры, знаки).
Нет проблем с OOV.
Легко обрабатывает морфологию.
Проблемы:
Очень длинные последовательности токенов для одного предложения.
Модели труднее улавливать смысл целых слов, приходится “собирать” их из символов.
3. Токенизация на Уровне Подслов (Subword Tokenization)
Это золотая середина, которую используют большинство современных LLM, включая DeepSeek. Цель – получить баланс между размером словаря и длиной последовательности, а также справиться с OOV и морфологией.
Существует несколько популярных алгоритмов:
a) Byte Pair Encoding (BPE)
Принцип: Алгоритм начинается с того, что каждый символ текста считается отдельным токеном. Затем он итеративно ищет самую частую пару соседних токенов и объединяет их в новый, более длинный токен. Этот процесс повторяется заданное количество раз или до достижения определенного размера словаря.
Как это работает (аналогия): Представьте, что у вас есть куча отдельных LEGO-кирпичиков.
Вы ищете два самых часто встречающихся одинаковых кирпичика, стоящих рядом (например, красные).
Вы их склеиваете и получаете новую, уже более крупную деталь (например, “красная пара”).
Теперь вы ищете самые частые пары уже из новых деталей (например, “красная пара” + “синий кирпичик”).
Так продолжается, пока вы не получите набор “строительных блоков”, которые хорошо покрывают весь ваш текст.
Пример:
Исходный текст: “low lower newest newest”
Начинаем с символов: ["l", "o", "w"] ["l", "o", "w", "e", "r"] ["n", "e", "w", "e", "s", "t"] ["n", "e", "w", "e", "s", "t"]
Чаще всего встречается пара “e”, “s”. Объединяем: ["l", "o", "w"] ["l", "o", "w", "e", "r"] ["n", "e", "w", "es", "t"] ["n", "e", "w", "es", "t"]
Чаще всего встречается пара «es», «t». Объединяем: [«l», «o», «w»] [«l», «o», «w», «e», «r»] [«n», «e», «w», «est»] [«n», «e», «w», «est»]
Чаще всего встречается пара “new”, “est”. Объединяем: ["l", "o", "w"] ["l", "o", "w", "e", "r"] ["newest"] ["newest"]
Чаще всего встречается пара “l”, “o”. Объединяем: ["lo", "w"] ["lo", "w", "e", "r"] ["newest"] ["newest"]
…и так далее, пока не получим желаемый словарь токенов.
b) WordPiece (используется в BERT)
Принцип: Похож на BPE, но вместо того, чтобы всегда объединять самую частую пару, WordPiece объединяет пару, которая дает максимальную вероятность (или минимизирует потери при предсказании следующего токена). Более того, он часто добавляет префикс к частям слов, которые не являются началом слова.