То́кен (от  — знак, символ) — дискретная единица текста или служебных данных, получаемая в результате токенизации и используемая большой языковой моделью (LLM) как элемент входной или выходной последовательности. Минимальная неделимая единица текста, с которой работает языковая модель. В зависимости от токенизатора токен может соответствовать целому слову, подслову (части слова), отдельному символу (включая пробелы), знаку пунктуации или специальному управляющему маркеру.

В конкретном токенизаторе каждому токену соответствует числовой идентификатор (token ID), используемый для представления токена в последовательности, передаваемой модели. Токенизатор преобразует исходный текст в последовательность токенов и соответствующих им идентификаторов; после этого идентификаторы используются моделью для дальнейшей обработки.

Этимология и эволюция понятия Слово токен происходит от староанглийского tācen («знак», «символ», «признак»). В логику и философию языка термин ввёл американский философ и семиотик Чарльз Пирс в рамках концепции «соотношения типа и экземпляра» (). В этой оппозиции абстрактная единица языка (например, слово как словарная статья) называется типом (type), а её конкретное воплощение или появление в тексте — токеном (token).

Понятие «токен» последовательно развивалось по мере усложнения методов обработки информации:

В лексическом анализе (компиляторах): С развитием информатики термин стал обозначать минимальную категорию символов (лексему), выделяемую лексером при разборе исходного кода программ (например, ключевое слово, идентификатор или оператор). В традиционной обработке естественного языка (NLP): В задачах классического NLP под токеном понималось конкретное вхождение целого слова или знака препинания в текст. Так, в предложении «мама мыла раму, мама устала» содержит 5 токенов-слов, но только 4 уникальных типа слов (слово «мама» встречается как 2 разных токена одного типа). В современных языковых моделях (LLM): С переходом к нейросетевым архитектурам и алгоритмам подсловного членения (таким как Byte-Pair Encoding, WordPiece и Unigram) понятие токена окончательно оторвалось от границ целых слов. В контексте LLM токен стал минимальной дискретной единицей текста — подсловом, отдельным символом или байтом, — имеющей собственный цифровой идентификатор в словаре модели.

Специфика единицы Языковая модель не «видит» отдельные буквы или символы внутри токена. Для нее это единый блок.

Токен в контексте языковых моделей является прежде всего технической единицей представления текста и не тождественен лингвистическим единицам, таким как морфема, слово или слог. Токенизация может производить последовательности, напоминающие морфемное членение слова, однако алгоритм токенизации не обязан учитывать морфологическую структуру языка. Например, одно слово может быть представлено одним токеном, а редкое или длинное слово — несколькими подсловными токенами. При этом границы токенов могут не совпадать с границами морфем.

Например, одно слово может быть представлено одним токеном, а редкое или длинное слово — несколькими подсловными токенами. При этом границы токенов могут не совпадать с границами морфем.

Возможные варианты токенизации одного и того же фрагмента:

Фрагмент Возможное представление слово один токен или несколько токенов длинное или редкое слово несколько подсловных токенов часть слова отдельный токен знак препинания отдельный токен или часть другого токена пробел самостоятельный элемент, часть токена или специальный маркер — в зависимости от токенизатора

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

Зависимость от токенизатора Токенизатор () — это специализированный алгоритм или программный модуль, выполняющий разбиение входного текста на последовательность токенов (индексов словаря) перед их передачей в нейросеть, а также обратное преобразование сгенерированных токенов в человекочитаемый текст.

Каждый токенизатор имеет собственный словарь (vocabulary) токенов и соответствующих им числовых идентификаторов. Словарь и правила токенизации могут быть получены в процессе обучения токенизатора на текстовом корпусе. Один и тот же токенизатор может использоваться несколькими моделями, поэтому словарь не обязательно является уникальным для каждой модели.

Один и тот же текст может разбиваться на разное количество токенов в зависимости от используемого токенизатора, модели, кодировки и языка. Соответственно, числовой идентификатор токена также нельзя считать универсальным: один и тот же token ID в разных словарях может соответствовать разным токенам.

Некоторые токенизаторы учитывают положение пробелов как часть токенов. Например, в некоторых вариантах пробел может входить в состав следующего токена, поэтому последовательности  the и the могут иметь разное представление. В SentencePiece пробелы могут представляться специальным символом (U+2581), который входит в словарь токенизатора.

Специальные токены Помимо токенов, непосредственно соответствующих фрагментам исходного текста, конкретный токенизатор или модель могут использовать специальные токены (special tokens). Они предназначены для передачи модели дополнительной структурной информации.

К ним могут относиться, например:

BOS (beginning of sequence) — маркер начала последовательности; EOS (end of sequence) — маркер конца последовательности; PAD (padding — прокладка) — токен-заполнитель, используемый для выравнивания последовательностей; UNK (unknown) — специальный токен для представления неизвестных элементов; специальные токены, обозначающие структуру входных данных или границы сообщений, например начало и конец реплик в некоторых диалоговых моделях.

Набор специальных токенов зависит от конкретного токенизатора и модели. Они не являются обязательной частью каждого словаря. Например, в моделях семейства BERT используются специальные токены [CLS], [SEP], [PAD], [MASK] и [UNK].

В некоторых современных токенизаторах, основанных на байтовом представлении, необходимость в специальном токене неизвестного элемента может отсутствовать: например, byte-level BPE способен представить любой текст через последовательность байтов.

Применение в моделях Токенизация является одним из первых этапов обработки текста языковой моделью. Исходная строка преобразуется в последовательность токенов, которым соответствуют числовые идентификаторы. Эти идентификаторы затем используются для получения векторных представлений токенов и последующей обработки нейронной сетью.

Совокупность токенов, которые способен распознавать конкретный токенизатор, образует его словарь (vocabulary). Размер словаря является одним из параметров токенизатора и зависит от используемого алгоритма и его конфигурации. Например, в byte-level BPE словарь может включать базовые байтовые значения и результаты последующих объединений.

Алгоритмы токенизации В современных языковых моделях широко применяется подсловная токенизация (subword tokenization), занимающая промежуточное положение между токенизацией на уровне целых слов и отдельных символов. Она позволяет хранить часто встречающиеся слова или их части как отдельные токены, а редкие и неизвестные слова представлять комбинациями известных подсловных единиц.

Наиболее распространённые алгоритмы подсловной токенизации:

Byte Pair Encoding (BPE) — алгоритм, который начинает с базовых единиц и итеративно объединяет наиболее часто встречающиеся соседние пары, формируя более крупные токены. В языковой обработке BPE был предложен для представления редких и неизвестных слов последовательностями подсловных единиц. WordPiece — подсловный алгоритм, используемый, в частности, в моделях семейства . В отличие от классического BPE, критерий выбора объединяемых единиц основан на вероятностной оценке их совместной встречаемости. Unigram — подсловный алгоритм, который использует набор кандидатов с вероятностными оценками и выбирает наиболее вероятное разбиение текста на токены.

SentencePiece представляет собой библиотеку для подсловной токенизации, которая может применять алгоритмы BPE или Unigram непосредственно к исходному тексту, без обязательной предварительной сегментации по пробелам. Это позволяет использовать единый подход для языков, в которых пробелы не обозначают границы слов, например для китайского или японского.

Подсловная токенизация позволяет языковым моделям работать с редкими и ранее не встречавшимися словами, представляя их комбинацией известных подсловных единиц, вместо необходимости включать каждое слово целиком в словарь.

Единица измерения производительности Количество токенов является одной из основных количественных характеристик при оценке работы больших языковых моделей (LLM). В отличие от количества слов или символов, число токенов непосредственно связано с тем, сколько дискретных единиц текста должна обработать модель.

Токен в LLM — это не только единица представления текста, но и ключевая мера функционирования модели: через количество токенов описываются ёмкость контекста, объём обрабатываемой информации, скорость генерации и итоговая стоимость её работы.

Токен выступает универсальной единицей измерения не только при выполнении текущих запросов пользователей, но и на этапе предварительного обучения модели, где объёмы обучающих датасетов исчисляются миллиардами и триллионами токенов.

Контекстное окно () — это максимальный объём информации, который большая языковая модель (LLM) способна удерживать в памяти и учитывать одновременно при обработке запроса и генерации ответа («краткосрочная память» нейросети). Объём контекстного окна задаётся в токенах и включает не только текст последнего запроса пользователя, но также предыдущие сообщения диалога, системные инструкции, результаты использования инструментов и другие переданные модели данные.

Таким образом, ограничение контекстного окна задаётся в токенах, а не в словах или символах. Один и тот же по количеству символов текст может занимать разное количество токенов в зависимости от языка и используемого токенизатора.

Вычислительная нагрузка Количество токенов напрямую определяет объём вычислений при работе с моделью. При увеличении длины текста растёт нагрузка на фазе считывания, а при генерации ответа каждый новый токен требует выполнения отдельного шага вычислений.

Особенно критична длина контекста для моделей на архитектуре трансформер. В классическом механизме самовнимания (self-attention) при обработке текста модель сопоставляет каждый токен с каждым из уже имеющихся. Из-за этого при увеличении длины текста в два раза количество внутренних связей и объём вычислений возрастают примерно в четыре раза. В результате работа с длинными текстами требует значительно больше ресурсов и памяти GPU, хотя современные методы оптимизации позволяют снижать эту нагрузку.

При генерации текста вычислительная нагрузка зависит как от количества уже обработанных входных токенов, так и от количества генерируемых токенов. В современных реализациях для уже обработанных токенов обычно используется KV-кэш (Key-Value Cache), позволяющий не вычислять их представления заново при генерации каждого следующего токена.

Скорость генерации Для оценки скорости работы LLM часто используется количество генерируемых токенов в секунду (tokens per second, tok/s или TPS). Эта величина показывает, сколько выходных токенов модель способна генерировать за единицу времени.

Скорость генерации зависит не только от количества токенов, но и от размера и архитектуры модели, используемого оборудования, размера пакета (batch size), длины контекста, режима квантования и других параметров. Поэтому показатель токенов в секунду имеет смысл прежде всего при сравнении моделей или конфигураций в одинаковых либо сопоставимых условиях.