Понимание токенизации в НЛП: руководство для начинающих по обработке текста

Опубликовано: 2024-11-26

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

Оглавление

  • Что такое токенизация в НЛП?
  • Виды токенизации
  • Как работает токенизация
  • Приложения для токенизации
  • Преимущества токенизации
  • Проблемы токенизации

Что такое токенизация в НЛП?

Токенизация — это метод НЛП, который преобразует текст в числовые форматы, которые могут использовать модели машинного обучения (ML). Когда вы отправляете приглашение LLM, например, Claude из Anthropic, Gemini от Google или члену серии GPT OpenAI, модель не читает ваш текст напрямую. Эти модели могут принимать в качестве входных данных только числа, поэтому текст сначала необходимо преобразовать в последовательность чисел с помощью токенизатора.

Одним из способов токенизации текста может быть разделение его на отдельные слова и присвоение номера каждому уникальному слову:

«Grammarly любит грамматику, машинное обучение и письмо» может звучать так:

Пример токенизации в НЛП

Каждое слово (и связанное с ним число) является токеном. Модель ML может использовать последовательность токенов — [7,102], [37], [564], [2], [9,763], [2], [231] — для выполнения своих операций и получения выходных данных. Эти выходные данные обычно представляют собой число, которое преобразуется обратно в текст с использованием обратного процесса токенизации. На практике такая пословная токенизация отлично подходит в качестве примера, но редко используется в промышленности по причинам, которые мы увидим позже.

И последнее, на что следует обратить внимание: у токенизаторов есть словари — полный набор токенов, с которыми они могут работать. Токенизатор, который знает основные английские слова, но не знает названий компаний, может не иметь в своем словаре токена «Грамматика», что приводит к сбою токенизации.

Работайте умнее с Grammarly
Партнер по написанию ИИ для всех, у кого есть работа

Виды токенизации

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

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

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

Пример токенизации слов в НЛП

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

  • К словам прикрепляются знаки препинания, если они есть, как и в случае со словом «письмо».
  • Новые или необычные слова (например, «Грамматика») занимают целый токен.

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

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

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

Токенизация подслов разбивает текст на фрагменты, меньшие или равные словам. Для каждого токена не существует фиксированного размера; каждый токен (и его длина) определяется процессом обучения. Токенизация подслов является отраслевым стандартом для программ LLM. Ниже приведен пример токенизации, выполненной токенизатором GPT-4o:

Пример токенизации подслов в НЛП

Здесь необычное слово «Грамматика» разбивается на три токена: «Гр», «амм» и «арлы». Между тем, другие слова достаточно распространены в тексте и образуют свои собственные токены.

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

Токенизация персонажей

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

Пример токенизации персонажей в НЛП

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

Однако по стандартным тестам LLM токенизация символов на практике не работает так же хорошо, как токенизация подслов. Токен подслова «автомобиль» содержит гораздо больше информации, чем символьный токен «c», поэтому механизм внимания в преобразователях имеет больше информации для работы.

Токенизация предложений

Токенизация предложений превращает каждое предложение в тексте в отдельный токен. Наш пример будет выглядеть так:

Пример токенизации предложений в НЛП

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

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

Компромисс токенизации: эффективность против производительности

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

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

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

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

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

Токенизаторы подслов должны быть обучены эффективно разбивать текст.

Пример токенизации подслов в НЛП

Почему «Грамматика» делится на «Гр», «Амм» и «Арлы»? Разве «Грам», «мар» и «ли» тоже не подойдут? На человеческий взгляд это определенно возможно, но токенизатор, который, по-видимому, изучил наиболее эффективное представление, думает иначе. Распространенным алгоритмом обучения (хотя и не используемым в GPT-4o), используемым для изучения этого представления, является кодирование парами байтов (BPE). Мы объясним BPE в следующем разделе.

Обучение токенайзеру

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

  1. Разбейте весь текст в корпусе на отдельные символы. Установите их в качестве начальных токенов в словаре.
  2. Объедините две наиболее часто соседние лексемы из текста в одну новую лексему и добавьте ее в словарь (не удаляя старые лексемы — это важно).
  3. Повторяйте этот процесс до тех пор, пока не останется часто встречающихся пар соседних токенов или пока не будет достигнут максимальный размер словаря.

В качестве примера предположим, что весь наш обучающий корпус состоит из текста «abc abcd»:

  1. Текст будет разделен на [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”]. Обратите внимание, что четвертая запись в этом списке представляет собой пробел. Тогда наш словарный запас будет таким: [“a”, “b”, “c”, “ ”, “d”].
  2. «а» и «б» чаще всего встречаются в тексте рядом друг с другом (связаны с «б» и «в», но «а» и «б» побеждают в алфавитном порядке). Итак, мы объединяем их в один токен «ab». Словарь теперь выглядит как [“a”, “b”, “c”, “ ”, “d”, “ab”], а обновленный текст (с применением слияния токенов “ab”) выглядит как [“ab” , «в», « », «аб», «в», «г»].
  3. Теперь «ab» и «c» чаще всего встречаются в тексте вместе. Мы объединяем их в токен «abc». Словарь тогда будет выглядеть как [“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”], а обновленный текст будет выглядеть как [“abc”, “ ”, “abc”. », «д»].
  4. На этом мы заканчиваем процесс, поскольку каждая соседняя пара токенов теперь встречается только один раз. Дальнейшее слияние токенов приведет к ухудшению работы полученной модели с другими текстами. На практике ограничение размера словаря является ограничивающим фактором.

С нашим новым набором словаря мы можем сопоставлять текст и токены. Даже текст, который мы раньше не видели, например «такси», можно маркировать, поскольку мы не отбрасывали односимвольные лексемы. Мы также можем вернуть номера токенов, просто просмотрев положение токена в словаре.

Хорошее обучение токенизатору требует чрезвычайно больших объемов данных и большого количества вычислений — больше, чем может себе позволить большинство компаний. Компании обходят эту проблему, пропуская обучение собственного токенизатора. Вместо этого они просто используют предварительно обученный токенизатор (например, токенизатор GPT-4o, указанный выше), чтобы сэкономить время и деньги с минимальными потерями в производительности модели, если таковые вообще имеются.

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

Итак, у нас есть токенизатор подслов, обученный на огромном корпусе с использованием BPE. Теперь, как нам использовать его в новом фрагменте текста?

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

Для иллюстрации мы будем использовать немного другой входной текст «dc abc»:

  1. Мы разбили его на символы [“d”, “c”, “ ”, “a”, “b”, “c”].
  2. Первое слияние, которое мы сделали во время обучения, было «ab», поэтому мы делаем это здесь: [«d», «c», « », «ab», «c»].
  3. Второе слияние, которое мы сделали, было «abc», поэтому мы делаем это: [«d», «c», « », «abc»].
  4. Это единственные правила слияния, которые у нас есть, поэтому мы завершили токенизацию и можем вернуть идентификаторы токенов.

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

Приложения для токенизации

Токенизация всегда является первым шагом во всем НЛП. Преобразование текста в формы, с которыми могут работать модели ML (и компьютеры), требует токенизации.

Токенизация в LLM

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

Токенизация в поисковых системах

Поисковые системы токенизируют пользовательские запросы, чтобы стандартизировать их и лучше понять намерения пользователей. Токенизация поисковой системы может включать разделение текста на слова, удаление слов-наполнителей (таких как «the» или «and»), преобразование верхнего регистра в нижний регистр и работу с такими символами, как дефисы. Токенизация подслов здесь обычно не требуется, поскольку производительность и эффективность в меньшей степени зависят от размера словаря.

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

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

Преимущества токенизации

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

Токенизация позволяет моделям работать с текстом

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

Токенизация распространяется на новый и редкий текст.

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

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

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

Токенизация влияет на мыслительные способности студентов LLM

Простая проблема, которая часто ставит в тупик выпускников LLM, — это подсчет количества букв «r» в слове «клубника». Модель ошибочно сказала бы, что их было два, хотя на самом деле ответ — три. Эта ошибка могла частично возникнуть из-за токенизации. Токенизатор подслова разделил слово «клубника» на «st», «raw» и «berry». Таким образом, модель, возможно, не смогла соединить одну букву «r» в среднем токене с двумя буквами «r» в последнем токене. Выбранный алгоритм токенизации напрямую влияет на то, как слова токенизируются и как каждый токен соотносится с другими.

Токенизация влияет на входную и выходную длину LLM

LLM в основном построены на архитектуре преобразователя, которая опирается на механизм внимания для контекстуализации каждого токена. Однако по мере увеличения количества токенов время, необходимое для внимания, увеличивается в квадрате. Таким образом, текст с четырьмя токенами займет 16 единиц времени, а текст с восемью токенами — 64 единицы времени. Это ограничивает LLM пределами ввода и вывода в несколько сотен тысяч токенов. При использовании токенов меньшего размера это действительно может ограничить объем текста, который вы можете ввести в модель, уменьшая количество задач, для которых вы можете ее использовать.