Tokenization
Токенизация разбивает текст, изображения или аудио на токены, которые модель преобразует в эмбеддинги. Рассматриваются BPE и другие методы разбиения на части слов, фрагменты изображений и стоимость токенов.
Токенизация преобразует исходные данные в последовательность токенов — дискретных единиц, которые считывает модель, — и присваивает каждому токену целочисленный идентификатор из фиксированного словаря. Токенизатор текста преобразует фразу «The bus stopped.» в четыре идентификатора. Затем модель ищет для каждого из них вектор эмбеддинга, поэтому токенизатор определяет, что большая языковая модель (LLM) считает одной единицей. Токены также служат единицей контекстного окна, задержки инференса при генерации текста и стоимости API. Та же идея применима не только к тексту: визуальный трансформер (ViT) разбивает изображение на патчи, а речевые модели токенизируют аудио в короткие фрагменты.
Как работает субсловная токенизация#
Ранние методы обработки естественного языка (NLP) разбивали текст по пробелам и знакам препинания, из-за чего редкие и новые слова оказывались вне словаря, тогда как посимвольная токенизация приводила к очень длинным последовательностям. Современные трансформеры используют субсловные токенизаторы, которые сохраняют частые слова целиком, а редкие разбивают на повторно используемые фрагменты. Кодирование пар байтов (BPE), которое Сеннрих и соавторы адаптировали для машинного перевода в 2015 году, формирует словарь на основе обучающего корпуса: алгоритм начинает с отдельных символов или байтов и многократно объединяет наиболее часто встречающуюся пару соседних элементов в новый токен, пока словарь не достигнет заданного размера. При кодировании нового текста алгоритм повторно выполняет изученные операции слияния в заданном порядке.
BPE на уровне байтов, используемое начиная с GPT-2, начинается с 256 возможных значений байтов, поэтому можно закодировать любую строку, эмодзи или файл с исходным кодом без неизвестного токена. Другие алгоритмы выбирают фрагменты по-другому. WordPiece, используемый в BERT, объединяет пару, которая сильнее всего повышает вероятность обучающих данных, а метод Unigram из библиотеки SentencePiece от Google начинает с большого набора возможных токенов и сокращает его. При этом пробел обрабатывается как обычный символ, поэтому один токенизатор подходит для языков, которые пишутся без пробелов. Со временем словари увеличились: BERT использует 30 522 токена, GPT-2 и GPT-3 — 50 257, Llama 3 — 128 256, а o200k_base от OpenAI — около 200 000. Библиотека tiktoken от OpenAI сравнивает самый старый и самый новый из этих словарей:
import tiktoken
# Byte-level BPE vocabularies from GPT-2 (2019) and GPT-4o (2024)
for name in ["gpt2", "o200k_base"]:
encoding = tiktoken.get_encoding(name)
print(f"{name}: {encoding.n_vocab:,} tokens in the vocabulary")
for text in ["Ultralytics YOLO26 detects buses.", "バスが止まった。"]:
ids = encoding.encode(text)
# Decode each ID on its own to see where the tokenizer split the text
pieces = [encoding.decode([i]) for i in ids]
print(f" {len(ids)} tokens: {pieces}")В словаре GPT-2 на английское предложение приходится 11 токенов: слово «Ultralytics» разбивается на Ult, ral, y и tics, а o200k_base использует 9 токенов. Для японского предложения «the bus stopped» GPT-2 нужно 9 токенов. Символ 止 разбивается на два байтовых токена, каждый из которых при отдельном декодировании превращается в символ замены �, а o200k_base использует 7 токенов.
Токенизация и связанные понятия#
- Токен: единица, которую создаёт токенизация, например слово, субсловный фрагмент, байт, патч изображения или аудиофрагмент.
- Эмбеддинги: обученные векторы, которые модель находит для каждого идентификатора токена. Они обучаются вместе с остальной сетью на основе словаря, заранее заданного токенизатором.
- Сегментация слов в классической NLP: библиотеки, например spaCy и NLTK, разделяют текст на слова и знаки пунктуации для синтаксического анализа и разметки; часто за этим следуют стемминг или лемматизация для лингвистического анализа.
- Токенизация в сфере безопасности данных: В платежах и защите данных токенизация заменяет конфиденциальное значение, например номер карты, случайным суррогатным значением, которое хранится в защищённом хранилище.
Почему важно количество токенов#
В англоязычном тексте средняя длина токена в токенизаторах OpenAI составляет около четырёх символов, но для других языков и кода на тот же объём текста может потребоваться гораздо больше токенов. Petrov et al. (2023) обнаружили, что длина токенизированной версии одного и того же текста может различаться в зависимости от языка перевода вплоть до 15 раз, что повышает расходы на API и сокращает объём доступного контекста для этих языков. Границы токенов также влияют на то, что может увидеть модель. LLM, которая воспринимает «strawberry» как несколько многобуквенных токенов, не видит отдельные буквы напрямую, а o200k_base разбивает «3.14159» на 3, ., 141 и 59, что затрудняет арифметические вычисления на уровне цифр. Архитектуры без токенизатора, такие как Byte Latent Transformer от Meta, обходятся без фиксированного словаря, группируя исходные байты в патчи, размер которых зависит от предсказуемости следующего байта.
Токенизация изображений, аудио и видео#
ViT разбивает изображение на патчи фиксированного размера: например, изображение 224×224 с патчами 16×16 пикселей превращается в 196 токенов-патчей. Каждый патч уплощается и линейно проецируется в эмбеддинг перед применением self-attention. Модели «зрение — язык» (VLM) передают эмбеддинги патчей в LLM вместе с текстовыми токенами, поэтому повышение разрешения изображения увеличивает количество токенов в запросе. Генераторы изображений часто используют дискретные визуальные токены: кодовая книга векторного квантования заменяет каждый патч идентификатором ближайшего кодового вектора, что позволяет визуальным авторегрессионным моделям генерировать изображения токен за токеном, как текст. Слияние токенов сокращает их количество в длинных последовательностях изображений и видео, объединяя похожие токены.
Модели компьютерного зрения также токенизируют текст. Когда YOLOE-26 получает названия классов через set_classes, Ultralytics обрабатывает каждое название с помощью байтового BPE-токенизатора CLIP, дополняя последовательность или усекая её до 77 токенов. Затем текстовый энкодер MobileCLIP2 от Apple преобразует результат в эмбеддинг, который голова детекции сопоставляет с областями изображения. При распознавании речи Whisper от OpenAI преобразует каждое 30-секундное аудиоокно в кадры логарифмической мел-спектрограммы, которые энкодер обрабатывает как последовательность из 1500 позиций.










