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

Сдерживает ли токенизация потенциал больших языковых моделей? Несмотря на свою популярность, этот подход имеет ряд ограничений, которые становятся всё более заметными с развитием LLM. В статье мы разберём, почему токенизация является костылём, какие проблемы она создаёт и какие альтернативные методы предлагают исследователи для их решения. От байтовых моделей до работы с концептами — как пытаются улучшить ситуацию и что это может означать для будущего языковых моделей.

Небольшой экскурс в современную токенизацию

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

Токенизация по пробелам

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

Пример:

text = "Привет, мир! Это NLP."
tokens = text.split()
# Результат: ["Привет,", "мир!", "Это", "NLP."]

Токенизация на основе правил

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

Пример:

import re
text = "Цена составляет $100.50."
tokens = re.findall(r'\w+|\$[\d.]+', text)
# Результат: ["Цена", "составляет", "$100.50"]

Byte Pair Encoding

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

Алгоритм:

  1. Инициализировать словарь отдельными символами.

  2. Подсчитать частоту всех соседних пар.

  3. Объединить наиболее частую пару и добавить её в словарь.

  4. Повторять до достижения нужного размера словаря.

WordPiece

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

Алгоритм:

  1. Инициализировать словарь отдельными символами.

  2. Обучить языковую модель для оценки последовательностей токенов.

  3. Объединить пару, которая максимизирует правдоподобие обучающих данных.

Формула правдоподобия:

\text{Score}(x, y) = \frac{\text{Count}(xy)}{\text{Count}(x) \cdot \text{Count}(y)}, \quad \text{где } x \text{ и } y \text{ — соседние токены.}

Unigram Language Model

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

Алгоритм:

  1. Инициализировать словарь большим набором возможных токенов.

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

  3. Итеративно удалять токены с наименьшей вероятностью.

Формулы вероятности:

P(x_1, x_2, \dots, x_n) = \prod_{i=1}^n P(x_i),P(x_i) = \frac{\text{Count}(x_i)}{\sum_{j=1}^n \text{Count}(x_j)},

где x_i — отдельный токен, n — количество токенов, на которые разбит текст.

Различные вариации

Многие современные LLM используют модификации данных методов. Например, в Llama используется адаптированный BPE: в первой и второй версии через библиотеку SentencePiece, в третьей — через tiktoken.

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

Проблемы токенизации

Токенизация была разработана как способ упростить обработку текста, и для моделей классического машинного обучения она действительно становится первым и часто лучшим решением (в связи со своей простотой). Однако в контексте больших языковых моделей (LLM) токенизация становится узким местом. Далее будут описаны ее основные проблемы:

  • Токенизаторы обучаются относительно простыми алгоритмами отдельно от основного end-to-end обучения модели. В итоге качество обученной LLM во многом ограничено самим токенизатором, и при выборе (или создании) лучшего токенизатора модель без изменения архитектуры может показать значительно лучшие результаты.

  • Конечный словарь токенов, являющийся плюсом в классическом машинном обучении, становится минусом для более «толстых» нейронных сетей. Это сильно упрощает работу с текстом в числовом представлении, но в случае LLM нам важнее не легкость, а качество. Проблемы возникают при обработке новых или редких терминов. Кроме того, обновление словаря токенов часто требует переобучения модели, что является затратным процессом.

  • Методы токенизации обычно разбивают текст на слова или части слов, что приводит к потере информации на уровне символов или частей слов. Например, именно с этим связана знаменитая проблема с количеством букв «r» в слове «raspberry».

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

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

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

Byte-level модели

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

ByT5

ByT5 — это модификация архитектуры mT5 (Massively Multilingual Text‑to‑Text Transfer Transformer). Модель mT5 рассматривает каждую задачу NLP как проблему «текст‑в-текст», где и вход, и выход представляют собой текстовые строки. ByT5 идет дальше, работая непосредственно с байтами, а не с токенами.

f4dca73e44bf2ff7201f2b20ca59b172.png

Подробности работы ByT5:

  1. Байтовое представление входных данных.

  2. Слой эмбеддингов преобразует каждый байт в вектор фиксированного размера, с размером словаря 256

  3. Позиционное кодирование (как в стандартных трансформерах)

  4. Стандартную архитектуру «кодировщик-декодировщик» с несколькими слоями трансформера, каждый из которых включает механизм self-attention и полносвязный слой. Кодировщик обрабатывает входную последовательность байтов, а декодировщик генерирует выходную последовательность.

  5. ByT5 обучается с использованием задачи Denoising autoencoder, где модель восстанавливает исходную последовательность байтов из её зашумленной версии.

Преимущества, предлагаемые моделью:

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

  • Отсутствие ограничений словаря токенов. Так как мы обрабатываем все варианты байтов (всего 256 возможных значений), то не будет символов вне словаря (OOV) и лучшая обработка редких\новых слов.

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

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

Однако, несмотря на все преимущества, ByT5 обладает огромным недостатком — очень высокая потребность в ресурсах. Поскольку ByT5 работает на уровне байтов, длина обрабатываемых последовательностей значительно увеличивается по сравнению с моделями, использующими токенизацию. Из этого следует другая проблема — контекст также становится более ограниченным. Всё это существенно ограничивает масштабируемость. Для решения этой проблемы могут применяться оптимизационные техники вроде разреженного внимания, но их использование часто приводит к компромиссам в качестве модели.

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

Byte Latent Transformer (BLT)

3ea3dd126fe8e48c873d45f2b3933e06.png

Byte Latent Transformer — это tokenizer‑free архитектура, которая работает напрямую необработанными байтами. Основная идея данного метода — динамическое распределение вычислительных ресурсов в зависимости от сложности данных. BLT эффективно управляет ресурсами, группируя байты в патчи различного размера. Это гарантирует, что больше вычислительных мощностей направляется на сложные и непредсказуемые сегменты данных.

BLT состоит из трех модулей:

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

    • Байтовые эмбеддинги и обогащение n‑граммами: Для каждого байта считаются n‑граммы от предыдущих байт (для n от 3 до 8). Эти n‑граммы преобразуются в эмбеддинги с помощью хэш‑функции, которая отображает их в таблицу эмбеддингов фиксированного размера, и добавляются к байтовым эмбеддингам. Этот шаг позволяет энкодеру учитывать не только отдельные байты, но и их локальные контексты.

    • Кросс‑внимание для формирования патчей: После каждого слоя трансформера добавлен слой кросс‑внимания, который служит для агрегации представлений байтов в представления патчей. Эти патчи динамически изменяются в размере на основе энтропии предсказания следующего байта. Байты с высокой энтропией, которые являются более неопределенными и сложными, получают новые патчи, что гарантирует, что вычислительно сложные области получают больше внимания.

  1. Латентный глобальный трансформер — обычный авторегрессионный трансформер, который преобразует последовательность латентных (скрытых) представлений патчей в последовательность выходных представлений патчей. Его основная задача — обрабатывать сложные зависимости и контекст на уровне всего документа или длинных последовательностей патчей. Эта модель использует block‑causal attention mask, которая ограничивает внимание позициями до текущего патча в текущем документе, включительно. Потребляет большую часть вычислительных ресурсов.

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

Такой подход позволяет BLT работать end-to-end, начиная с необработанных байтов и предсказывая следующие байты без использования фиксированного словаря токенов.

Существует несколько алгоритмов для группировки байтов:

  1. Strided Patching: Группирует байты в патчи фиксированного размера (например, каждые 4 байта). Хотя метод прост, он не обеспечивает динамического распределения вычислений и приводит к непоследовательному и неконтекстному разделению похожих последовательностей байтов.

  2. Space Patching: Создает патчи после пробелов, что обеспечивает естественные границы лингвистических единиц. Однако метод плохо справляется с языками, где пробелы не используются, и, что важнее, он не позволяет варьировать размер патча.

  3. Entropy Patching: Использует небольшую языковую модель на уровне байтов для оценки энтропии следующего байта. Патчи разделяются на основе высокоэнтропийных предсказаний, что гарантирует выделение вычислений там, где это наиболее необходимо. Как можно заметить, это самый интересный подход.

Для третьего метода обучают небольшую авторегрессионную языковую модель на уровне байтов на данных для BLT и вычисляем энтропию следующего байта в соответствии с распределением p_e​ модели над словарем байтов V:

H(x_i) = \sum_{v \in \mathcal{V}} p_e(x_i = v \mid x_{<i}) \log p_e(x_i = v \mid x_{<i})

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

\text{Глобальное ограничение:}\quad H(x_t)>\theta_g» src=«https://habrastorage.org/getpro/habr/upload_files/25d/b43/43f/25db4343f6bfc126ec614ea9dcf26a45.svg» /><img alt=\theta_r» src=«https://habrastorage.org/getpro/habr/upload_files/a01/f1c/1f7/a01f1c1f7935d4085cfb103fe70fc074.svg» />

Патчи принципиально отличаются от токенов (например, генерируемых BPE) тем, что в случае токенов модель не имеет прямого доступа к побайтовым фичам. Более того, BPE не удовлетворяет свойству инкрементальности патчинга, поскольку он определяет границы токенов, заглядывая в последовательность вперед. В частности, один и тот же префикс может быть помечен по‑разному в зависимости от продолжения последовательности. Это несовместимо с требованием BLT о том, чтобы границы патчей определялись сразу.

Подход BLT предлагает несколько преимуществ по сравнению с традиционными моделями на основе токенизации:

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

  • Динамическое распределение вычислений: В отличие от токенизации, которая выделяет одинаковое количество вычислений для каждого токена, BLT динамически регулирует вычисления в зависимости от сложности предсказания.

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

Тенденции масштабируемости

Тенденции масштабируемости

Также создатели архитектуры провели интересный эксперимент с инициализацией глобального трансформера в BLT из предобученной (на токенах) Llama 3.1. Он показал, что такой BLT существенно превосходит BLT или Llama 3, обученные с нуля (соответственно на байтах и токенах), при том же бюджете FLOPS. Это открывает возможности для конвертирования моделей с токенизатором в BLT.

Сравнения качества моделей на нескольких бенчмарках

Сравнения качества моделей на нескольких бенчмарках

Другие интересные подходы

Трансформеры испытывают проблемы с моделированием длинных последовательностей, а обработка на уровне байтов лишь усугубляет проблему. С такой идеей MambaByte предлагают использовать state space model (SSM), обеспечивающие линейную вычислительную сложность относительно длины последовательности. Или более конкретно — модифицировать модель Mamba для этой задачи. Если интересно подробнее узнать про SSM и Mamba на хабре есть статья.

Все формы информации кодируются и обрабатываются в двоичном формате. Значит, модель, предсказывающая байтовые последовательности, способна моделировать и понимать цифровые системы на более глубоком уровне. Именно с такой идеей и была создана bGPT. Результаты тоже достаточно многообещающие: модель хорошо показывает себя не только в работе с текстом, аудио и изображениями, но и в таких задачах как конвертирование ABC нотации (текстовый язык разметки, предназначенный для записи музыкальных произведений) в MIDI формат или моделирование поведения центрального процессора.

И под конец пункта я не могу не упомянуть MegaByte и SpaceByte, две архитектуры, которые вдохновили авторов архитектуры Byte Latent Transformer. В предыдущем разделе, посвященном BLT, основное внимание было уделено методу группировки байтов на основе энтропии, в то время как два других подхода — фиксированные патчи и группировка по естественным границам — были лишь кратко описаны. Однако именно эти два метода лежат в основе MegaByte и SpaceByte, соответственно. Поэтому Byte Latent Transformer можно рассматривать как развитие и обобщение их идей.

Large Concept Model

Сегодняшние большие языковые модели обрабатываются и генерируют информацию на уровне токенов. Очевидно, что это резко контрастирует с людьми, способными к работе с разными уровнями абстракции. Обычно у нас есть нисходящий процесс для решения сложной задачи или составления длинного документа: мы сначала планируем общую структуру на более высоком уровне, а затем шаг за шагом добавляем детали на более низких уровнях абстракции. Можно возразить, что LLM неявно изучают иерархическое представление, но модели с явной иерархической архитектурой должны лучше подходить для создания согласованного вывода в длинной форме. Такая идея лежит в основе Large Concept Model, архитектуры, оперирующей концептами — явными семантическими представления более высокого уровня.

Работа LCM с текстом

Работа LCM с текстом

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

Для такого подхода требуется пространство эмбеддингов предложений с доступным энкодером и декодером. В качестве такового взяли SONAR с поддержкой 200 языков на текстовых входах/выходах, 76 языков на речевом входе и одного английского на речевом выходе. SONAR не обучается вместе с LCM — он служит готовым инструментом для преобразования текста в концепты и обратно.

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

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

Base-LCM

Base-LCM

Base‑LCM, бейзлайн, работает следующим образом:

  1. PreNet нормализует входные эмбеддинги SONAR и проецирует их в размерность модели d_\text{model}:

\text{PreNet}(\mathbf{x}) = \text{normalize}(\mathbf{x}) \mathbf{W}_{\text{pre}}^t + \mathbf{b}_{\text{pre}},\text{normalize}(\mathbf{x}) = \frac{\mathbf{x} - \boldsymbol{\mu}}{\boldsymbol{\sigma}}.

  1. Transformer Decoder — стандартный декодер трансформера, переводит последовательность предшествующих концептов (они представлены в виде эмбеддингов предложений) в последовательность будущих.

  1. PostNet денормализует выходные эмбеддинги, возвращает их в пространство эмбеддингов SONAR:

\text{PostNet}(\mathbf{x}) = \text{denormalize}(\mathbf{x} \mathbf{W}_{\text{post}}^t + \mathbf{b}_{\text{post}}),\text{denormalize}(\mathbf{x}) = \boldsymbol{\mu} + \boldsymbol{\sigma} \mathbf{x}.

Diffusion‑based LCM похожа на Base‑LCM тем, что генерирует концепты по одному за раз. Отличие заключается в процессе диффузии — выполнении заданного количества шагов денойзинга для каждого генерируемого концепта. Еще Diffusion‑based LCM использует classifier‑free diffusion guidance — метод, использующий безусловную и условную генерацию для гибкого управления, усиливая или ослабляя влияние условия с помощью гиперпараметра \gamma:

\text{Итоговый_прогноз} = (1 - \gamma) \cdot \text{Безусловный_прогноз} + \gamma \cdot \text{Условный_прогноз}

Diffusion‑based LCM имеет две версии:

  1. One‑Tower Diffusion LCM: В этой версии используется единый трансформерный «ствол», который выполняет все задачи: кодирование контекста, денойзинг и генерацию нового концепта. Модель принимает на вход зашумленный эмбеддинг текущего концепта и использует каузальное внимание для учёта контекста, представленного эмбеддингами предыдущих предложений.

  1. Two‑Tower Diffusion LCM: Эта версия разделяет задачи между двумя независимыми «стволами»:

    • Contextualizer отвечает за кодирование предшествующего контекста. Он использует каузальное внимание, чтобы учитывать уже сгенерированные концепты.

    • Denoiser: Второй ствол занимается генерацией нового концепта. Он принимает на вход зашумленный эмбеддинг и, используя cross‑attention, взаимодействует с закодированным контекстом из первого ствола.

Инференс обоих версий слева направо: One-Tower и Two-Tower LCM

Инференс обоих версий слева направо: One-Tower и Two-Tower LCM

Quantized LCM для дискретизации непрерывных SONAR‑эмбеддингов использует Residual Vector Quantization — многоэтапный метод квантования, где каждый следующий шаг постепенно уточняет результат предыдущего. Это позволяет модели работать с дискретными представлениями, аналогично обычным LLM, и естественным образом использовать температуру, top‑p и top‑k сэмплирования для управления уровнем случайности и разнообразия в генерации следующего предложения. Архитектура разработана так, чтобы максимально походить на Diffusion‑based LCM для более удобного сравнения.

a07da0fadf13883082314604dc823cee.png

ROUGE‑L (R−L) — метрика, которая измеряет качество сгенерированного текста по сравнению с эталонным (референсным) текстом. Coherence — метрика, которая оценивает, насколько логичен и связен сгенерированный текст.

fcfcfb34f1f4321111d5693029f9b71c.png

Как можно заметить, LCM хорошо масштабируется по длине контекста. LLM выигрывает только на очень коротких предложениях (10 токенов).

Также стоит отметить, что LCM хорошо общается на другие языки.

554c5b3638f1cac04c4e86d8cfbc5d15.png

Заключение

Токенизация, несмотря на ее распространенность и простоту, создает множество ограничений для больших языковых моделей. Для их преодоления, исследователи изучают альтернативные подходы, такие как модели, работающие на байтовом уровне, или Large Concept Model.

Для первого подхода существуют уже довольно продвинутые модели, особенно Byte Latent Transformer. Он предлагает несколько очень крутых преимуществ: динамическое распределение вычислительных ресурсов, ввод новой оси масштабирование, высокая устойчивость к шуму, а также способность обрабатывать нюансы на уровне символов и частей слов.

Large Concept Model, в свою очередь, представляет совершенно новый подход. Хотя я включил данную модель в статью и сама по себе она действительно не зависит от токенов, её идея совсем не в этом. LCM предлагает абстрагироваться от низкого уровня и иметь нисходящий процесс решения сложной задачи. Мультиязычность, мультимодальность, лучшая масштабируемость по длине контекста — вот ее главные преимущества. Несмотря на то, что LCM только на уровне доказательства концепции (Proof of concept), заложенная в нее идея фундаментальна и может привести к очень крутым результатам.

BLT и LCM, улучшая разные аспекты больших языковых моделей, не только не противоречат, но и дополняют друг друга. Хотя на данный момент их объединение в одну архитектуру не представляет практической выгоды, я считаю, что в будущем их синергия может стать ключом к развитию LLM.

P.S. Хочу поблагодарить gonzo (а точнее их тг‑канал) за обзоры статей. Именно они стали для меня основным источником вдохновения.

© Habrahabr.ru