Лев Корольков
Руководитель IT-департамента EFSOL Oblako
Время чтения: 14 мин

Токенизатор

Разбиение данных на токены

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

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

После генерации ответа выполняется обратный процесс: идентификаторы токенов преобразуются в текст, который получает пользователь.

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

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

Что такое токен

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

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

Нельзя считать, что один токен всегда равен одному слову. Соотношение между количеством слов, символов и токенов меняется в зависимости от языка, терминологии, форматирования и алгоритма токенизации.

Для модели каждый токен имеет собственный идентификатор. Условно текст может быть преобразован в последовательность:

[1842, 517, 9301, 26]

Сами числа не несут понятного человеку смысла. Они являются индексами элементов словаря токенизатора.

Как работает токенизатор

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

  1. Пользователь передает текст.
  2. Токенизатор анализирует последовательность символов.
  3. Текст разбивается на известные токены.
  4. Каждому токену назначается числовой идентификатор.
  5. Идентификаторы передаются языковой модели.
  6. После генерации выполняется обратное преобразование.

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

Зачем языковой модели нужен токенизатор

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

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

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

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

Из чего состоит словарь токенизатора

Токенизатор обычно имеет словарь, или vocabulary. В нем каждому допустимому токену соответствует числовой идентификатор.

В словаре могут присутствовать:

  • целые слова;
  • части слов;
  • частые сочетания символов;
  • знаки препинания;
  • пробелы или их комбинации;
  • цифры;
  • символы разных языков;
  • элементы программного кода;
  • специальные служебные токены.

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

Почему токен не равен слову

Если использовать каждое слово языка как отдельный токен, словарь получится огромным. Кроме того, невозможно заранее перечислить все фамилии, термины, новые названия продуктов, формы слов и опечатки.

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

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

Такой подход позволяет работать с незнакомыми словами путем комбинации знакомых частей.

Основные способы токенизации

В системах обработки языка применяются разные подходы. В современных больших языковых моделях особенно распространена субсловная токенизация.

ПодходПринципОсобенность
По словамКаждое слово является отдельным токеномПросто, но требуется большой словарь
По символамКаждый символ обрабатывается отдельноМаленький словарь, но длинные последовательности
СубсловнаяИспользуются слова и части словКомпромисс между размером словаря и длиной текста
БайтоваяДанные представляются через байты и их комбинацииПозволяет работать с широким набором символов

Что такое субсловная токенизация

Субсловная токенизация использует элементы меньше целого слова, но обычно больше одного символа. Часто встречающиеся слова или части слов получают собственные токены, а редкие конструкции разбиваются на несколько элементов.

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

Это особенно полезно для языков с большим количеством словоформ, включая русский язык.

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

Что такое BPE

BPE, или Byte Pair Encoding, — один из известных методов построения токенизатора. В упрощенном виде алгоритм начинает с небольших элементов и постепенно объединяет часто встречающиеся пары.

Если определенная последовательность символов постоянно встречается в данных, она может стать отдельным токеном.

В результате распространенные слова и сочетания кодируются компактно, а редкие остаются разбитыми на несколько частей.

Современные реализации могут отличаться от классического алгоритма BPE и использовать дополнительные правила обработки байтов, символов и пробелов.

WordPiece

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

Цель остается похожей: представить распространенные конструкции относительно компактно и сохранить возможность обрабатывать редкие слова.

Для пользователя различия между BPE и WordPiece обычно незаметны. Они становятся важными при разработке или обучении собственной языковой модели.

SentencePiece

SentencePiece — подход и набор инструментов для токенизации, который позволяет работать непосредственно с необработанными текстовыми последовательностями без обязательного предварительного разделения на слова.

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

SentencePiece может использовать разные алгоритмы формирования субсловного словаря.

Токенизатор и русский язык

Количество токенов зависит от того, насколько хорошо словарь токенизатора представляет конкретный язык. Если модель преимущественно ориентирована на один язык, тексты на другом языке могут разбиваться на большее количество элементов.

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

Однако разные токенизаторы могут обрабатывать русскоязычный текст с разной эффективностью. Один и тот же абзац может занимать разное количество токенов в разных моделях.

Это важно при работе с большими документами, RAG и API, где объем контекста и стоимость могут зависеть от количества токенов.

Токенизатор и контекстное окно

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

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

Поэтому нельзя оценивать вместимость контекста только количеством страниц или слов. Два документа одинаковой длины в символах могут занимать разное количество токенов.

Особенно заметна разница для программного кода, таблиц, JSON, редких терминов и текстов на разных языках.

Почему количество токенов влияет на стоимость

Во многих сервисах обработки языковых моделей объем использования измеряется количеством входных и выходных токенов.

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

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

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

Токенизатор в RAG

При создании RAG-систем токенизатор используется сразу на нескольких этапах.

Во-первых, при разбиении документов необходимо учитывать будущий размер контекста. Чанк можно ограничивать не только количеством символов, но и количеством токенов.

Во-вторых, общий размер найденных фрагментов должен помещаться вместе с промптом и пользовательским вопросом в контекст модели.

В-третьих, слишком большой объем найденной информации увеличивает стоимость и может ухудшить способность модели выделить наиболее важный фрагмент.

Поэтому разработчики RAG часто рассчитывают токены до отправки данных языковой модели.

Токенизатор и эмбеддинги

Embedding-модели также получают текст не напрямую. Перед обработкой он токенизируется.

У таких моделей существует собственное ограничение на максимальную длину входной последовательности. Если документ слишком длинный, его приходится разбивать на отдельные части.

Токенизатор embedding-модели может отличаться от токенизатора генеративной языковой модели. Поэтому количество токенов одного текста в двух системах может быть разным.

При проектировании RAG важно учитывать ограничения обеих моделей.

Специальные токены

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

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

ТипНазначение
Начало последовательностиОтмечает начало входных данных
Конец последовательностиМожет сигнализировать о завершении генерации
РазделительРазделяет разные части входных данных
PaddingДополняет последовательности до одинаковой длины
Служебные элементы диалогаПомогают различать системные, пользовательские и другие сообщения

Конкретный набор специальных токенов зависит от модели.

Что такое encode и decode

Encode — операция преобразования текста в последовательность идентификаторов токенов.

Decode — обратное преобразование идентификаторов в читаемый текст.

Условный процесс выглядит так:

Текст → токенизатор → идентификаторы → модель → идентификаторы → токенизатор → текст

При разработке приложений эти операции обычно выполняются библиотекой или API автоматически.

Токенизация программного кода

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

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

Большое количество токенов увеличивает объем контекста, поэтому при работе с крупным проектом обычно передают модели только нужные файлы или фрагменты.

Токенизация JSON и структурированных данных

JSON содержит много повторяющихся символов: кавычки, скобки, запятые и названия полей. Все они также участвуют в токенизации.

Поэтому большой JSON-файл может занимать значительный объем контекста даже при относительно небольшом количестве полезных значений.

Если модели нужны только отдельные поля, предварительная фильтрация данных может быть эффективнее передачи полного объекта.

Почему пробелы влияют на токенизацию

Во многих токенизаторах пробел является частью токена или влияет на выбор элемента словаря. Поэтому слово в начале строки и то же слово после пробела могут кодироваться не полностью одинаково.

Множественные пробелы, табуляция и переносы строк также занимают место в последовательности.

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

Почему разные модели используют разные токенизаторы

Токенизатор обычно разрабатывается вместе с моделью или выбирается перед ее обучением. Словарь становится частью архитектуры: модель учится работать с определенными идентификаторами.

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

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

Из-за этого один текст может занимать условно тысячу токенов в одной системе и другое количество в другой.

Токенизатор при обучении модели

Перед обучением большой языковой модели сначала необходимо определить способ представления текста. На корпусе данных формируется словарь токенизатора.

После этого весь обучающий текст преобразуется в последовательности токенов. Модель учится работать именно с этими идентификаторами.

Выбор токенизатора влияет на эффективность обучения. Если важный язык представлен неудачно, тексты будут разбиваться на слишком мелкие части, увеличивая длину последовательностей.

Поэтому при создании многоязычных моделей состав данных для построения словаря имеет большое значение.

Токенизатор и языковая модель

Токенизатор сам по себе не понимает текст так, как языковая модель. Его задача заключается в определенном преобразовании между строкой и последовательностью идентификаторов.

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

КомпонентЗадача
ТокенизаторРазбивает текст и назначает идентификаторы
Эмбеддинг-слойПреобразует идентификаторы в векторы
НейросетьАнализирует последовательность и формирует внутренние представления
Выходной слойОпределяет вероятности следующих токенов

Как языковая модель генерирует текст по токенам

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

Выбирается следующий токен, он добавляется в последовательность, после чего процесс повторяется.

Постепенно формируется набор идентификаторов, который токенизатор декодирует обратно в текст.

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

Можно ли посчитать токены по количеству слов

Точно — нет. Можно использовать только приблизительную оценку.

Соотношение зависит от языка и типа текста. Обычная проза, программный код, URL, таблицы и профессиональные термины токенизируются по-разному.

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

Это особенно важно при разработке приложений с жесткими ограничениями контекстного окна.

Почему токенизация важна для бизнеса

На первый взгляд токенизатор является низкоуровневым техническим компонентом. Однако его работа влияет на практические характеристики ИИ-сервиса.

ФакторВлияние токенизации
СтоимостьБольшее количество токенов может увеличивать расход ресурсов
КонтекстОпределяет, сколько текста реально помещается в запрос
СкоростьДлинные последовательности требуют больше обработки
ЯзыкиРазные языки могут кодироваться с разной эффективностью
RAGВлияет на размер фрагментов и количество передаваемого контекста
APIПомогает рассчитывать лимиты и стоимость запросов

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

Как уменьшить количество лишних токенов

Оптимизация не должна сводиться к механическому сокращению текста. Главное — не передавать модели информацию, которая не нужна для выполнения задачи.

  • удалять дублирующийся контекст;
  • не передавать полный документ, если нужен один раздел;
  • использовать RAG для поиска релевантных фрагментов;
  • сокращать избыточные системные инструкции;
  • не дублировать одни и те же требования;
  • фильтровать структурированные данные перед передачей модели;
  • контролировать объем истории диалога;
  • удалять ненужную техническую разметку.

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

Типичные ошибки при работе с токенами

  1. Считать, что один токен всегда равен одному слову.
  2. Оценивать лимит модели только по количеству символов.
  3. Использовать приблизительный расчет там, где нужен точный.
  4. Не учитывать системный промпт и историю диалога в общем лимите.
  5. Передавать большие документы целиком без необходимости.
  6. Не учитывать различия токенизации разных языков.
  7. Использовать токенизатор другой модели для точного расчета.
  8. Забывать о токенах генерируемого ответа.
  9. Считать токенизатор компонентом, который определяет фактическую правильность ответа.

Риски неправильного расчета токенов

Если приложение неправильно рассчитывает длину контекста, запрос может превысить допустимый предел модели.

Другой сценарий — система выделяет почти весь лимит под документы и оставляет слишком мало места для генерации ответа.

В RAG неправильный расчет может привести к передаче слишком большого количества чанков или, наоборот, недостаточного контекста.

Также неправильные предположения о токенизации способны искажать расчет стоимости ИИ-сервиса.

Практический пример

Компания создает корпоративного ИИ-помощника по технической документации. В базе находятся длинные инструкции, некоторые из которых содержат десятки страниц.

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

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

Если контекст превышает установленный бюджет, добавляются только наиболее релевантные части. Для ответа также заранее оставляется достаточный резерв.

В результате система обрабатывает меньше лишней информации, а разработчики могут прогнозировать стоимость и размер запросов более точно.

Как использовать токенизатор при разработке приложения

Шаг 1. Определить модель

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

Шаг 2. Рассчитывать входной контекст

Перед отправкой запроса полезно учитывать все составляющие: системные инструкции, историю, пользовательский текст и документы.

Шаг 3. Зарезервировать место для ответа

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

Шаг 4. Контролировать длинные документы

При необходимости материалы разбиваются и предварительно фильтруются.

Шаг 5. Собирать статистику

Для массового сервиса полезно измерять среднее количество входных и выходных токенов на одну задачу.

Когда разработчику важно знать устройство токенизатора

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

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

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

Токенизатор и промпт-инжиниринг

Промпт-инжиниринг связан с токенизацией через объем контекста. Чем длиннее инструкция, тем больше токенов необходимо обработать модели.

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

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

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

Токенизатор и Fine-tuning

При Fine-tuning обычно используется токенизатор, соответствующий базовой модели. Обучающие примеры сначала преобразуются в токены, после чего модель обновляет свои параметры.

Изменение словаря после обучения базовой модели является сложной задачей, потому что идентификаторы токенов связаны с обученными векторными представлениями.

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

Связанные термины

ТерминСвязь с токенизатором
ТокенЭлемент, на который токенизатор разбивает входные данные
Большая языковая модельПолучает и генерирует последовательности токенов
ЭмбеддингВекторное представление, которое модель связывает с токенами или текстовыми объектами
Контекстное окноМаксимальный объем последовательности, обычно измеряемый в токенах
RAGИспользует расчет токенов при выборе объема контекста
BPEОдин из подходов к субсловной токенизации
WordPieceМетод формирования субсловных токенов
SentencePieceПодход и инструменты для создания токенизаторов
ПромптПеред обработкой преобразуется токенизатором в последовательность элементов
Fine-tuningОбучающие данные токенизируются перед дополнительным обучением модели

Краткий итог

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

Токен может представлять целое слово, часть слова, символ или другую последовательность. Поэтому количество токенов нельзя точно определить только по числу слов или символов.

Токенизация влияет на размер контекстного окна, стоимость запросов, скорость обработки и эффективность работы с различными языками и форматами данных. Особенно важно учитывать токены при создании RAG-систем, обработке больших документов, работе через API и оптимизации корпоративных ИИ-сервисов.

Частые вопросы

6 вопросов
Что такое токенизатор простыми словами?

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

Что такое токен?

Токен — это элемент текста, который обрабатывает языковая модель. Им может быть целое слово, часть слова, знак препинания, отдельный символ или сочетание нескольких символов.

Один токен равен одному слову?

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

Почему количество токенов важно при работе с ИИ?

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

Почему один текст занимает разное количество токенов в разных моделях?

Разные модели могут использовать разные словари и алгоритмы токенизации. Поэтому один и тот же текст может разбиваться на разное количество элементов в зависимости от конкретного токенизатора.

Как токенизатор связан с RAG?

В RAG токены учитываются при разбиении документов на фрагменты и формировании контекста для языковой модели. Система должна передать достаточно релевантных данных и одновременно оставить место для промпта и генерируемого ответа.

Была ли статья полезна?
Документ обновляется командой EFSOL. Свяжитесь с нами, если нашли неточность.
Нужна консультация?

Поможем спроектировать, развернуть и сопроводить облачную или гибридную инфраструктуру под задачи вашего бизнеса.

Ответим в течение часа в рабочее время
Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.