1. Основы токенизации и векторизации текста
Основы токенизации и векторизации текста
Представьте, что вы приехали в страну, где никто не говорит по-русски, а вы не знаете местного языка. Первое, что вам нужен — переводчик, который превратит ваши слова в понятные местным жителям символы. Именно такую роль выполняет токенизация — процесс, без которого ни одна языковая модель не смогла бы обработать ни единого слова. И если вы думаете, что компьютер «читает» текст так же, как вы, — вас ждёт сюрприз.
Почему компьютер не понимает слова напрямую
Компьютер работает с числами. Совсем. Он не видит букву «к» — он видит число 1072 в кодировке UTF-8. Но для языковой модели этого мало: ей нужно не просто закодировать символы, а захватить смысловые единицы языка. Именно поэтому на вход LLM текст поступает не посимвольно и не пословно, а через токены — промежуточные единицы, которые могут быть целым словом, частью слова или даже отдельной буквой.
Зачем нужна эта сложность? Если разбивать текст на слова, словарь английского языка потребует сотни тысяч записей, а редкие формы слов вроде «антидискриминационный» будут встречаться единожды и не дадут модели ничего полезного. Если разбивать на символы — модель будет думать слишком долго, обрабатывая каждую букву отдельно. Токенизация — это компромисс между размером словаря и информативностью каждой единицы.
Как работает BPE: алгоритм, который строит словарь сам
Самый распространённый метод токенизации в современных LLM — Byte Pair Encoding (BPE), адаптированный из алгоритма сжатия данных 1990-х годов. Принцип работы удивительно прост:
Допустим, в корпусе часто встречается слово «трансформер». На первой итерации алгоритм может объединить «т» и «р» в «тр», затем «а» и «н» в «ан», затем «тр» и «ан» в «тран» и так далее. В итоге частотные слова целиком попадут в словарь как один токен, а редкие будут разбиты на знакомые подслова.
> BPE — это не магия, а статистика. Алгоритм не знает русского или английского языка. Он просто считает, какие кусочки текста слипаются чаще остальных.
На практике размер словаря современных моделей составляет от 32 000 до 128 000 токенов. Для сравнения: словарь русского языка Ожегова содержит около 80 000 слов. Но токены — это не слова: один токен может быть словом «и», а другой — подстрокой «ционный».
От токена к числу: эмбеддинги
После токенизации каждый токен получает уникальный числовой идентификатор — индекс в словаре. Слово «привет» может стать числом 45 217. Но это число — просто адрес в словаре, оно не несёт никакой информации о смысле. Число 45 217 не «близко» к числу 45 218 по значению — это просто соседние строки в таблице.
Здесь в игру вступают эмбеддинги — векторные представления токенов. Каждому индексу из словаря сопоставляется вектор из сотен или тысяч вещественных чисел (типичная размерность — от 768 до 12 288). Эти векторы хранятся в матрице эмбеддингов — по сути, в гигантской таблице размером «размер словаря × размерность».
| Параметр | Типичное значение | |---|---| | Размер словаря | 32 000 – 128 000 | | Размерность эмбеддинга | 768 – 12 288 | | Размер матрицы эмбеддингов | от 25 млн до 1,5 млрд чисел |
Матрица эмбеддингов — это обучаемый параметр. В начале обучения векторы инициализируются случайно, а затем корректируются градиентным спуском. Через миллиарды примеров модель «настраивает» эти векторы так, что семантически близкие слова оказываются рядом в многомерном пространстве.
Многомерное пространство смыслов
Что значит «рядом» в пространстве из тысяч измерений? Представьте карту метро, но вместо двух осей (север-юг, запад-восток) у вас тысячи осей. Каждая ось — это некое абстрактное свойство: «животность», «размер», «цвет», «эмоциональная окраска», «формальность» и так далее. Вектор слова «кот» будет близок к вектору «собака» (оба — домашние животные), но далёк от вектора «квантовая механика».
Классический пример: если взять вектор «король», вычесть вектор «мужчина» и прибавить вектор «женщина», результат окажется рядом с вектором «королева». Это не случайность — модель действительно выучила гендерное измерение как одну из осей пространства.
Но эмбеддинги — это только начало пути. Векторы из матрицы эмбеддингов ещё не учитывают контекст: слово «банк» получает одинаковый вектор и в «банк реки», и в «банк данных». Именно для этого существует механизм внимания, который мы разберём в следующей статье.
Позиционные эмбеддинги: порядок имеет значение
Есть ещё одна проблема. Архитектура трансформера обрабатывает все токены одновременно, а не последовательно. Это даёт огромное преимущество в скорости, но создаёт вопрос: как модель узнает, что «собака укусила человека» — это не то же самое, что «человек укусил собаку»?
Ответ — позиционные эмбеддинги. К каждому токену прибавляется дополнительный вектор, кодирующий его позицию в последовательности. В оригинальной статье «Attention Is All You Need» использовались синусоидальные функции, но в современных моделях чаще применяются обучаемые позиционные эмбеддинги — отдельная матрица, где каждой позиции (от 0 до максимальной длины контекста) соответствует свой вектор.
Итоговый вектор, поступающий в трансформер, — это сумма семантического эмбеддинга токена и его позиционного эмбеддинга. Только после этой операции данные готовы к обработке механизмом внимания.