Кодирование пар байтов

Алгоритм сжатия на основе слияния смежных символов (токенов)

Кодирование пар байтов [1] [2] (также известное как BPE или кодирование диграмм ) [3] — это алгоритм, впервые описанный в 1994 году Филиппом Гейджем для кодирования строк текста в более мелкие строки путем создания и использования таблицы перевода. [4] Слегка измененная версия алгоритма используется в больших токенизаторах языковых моделей .

Первоначальная версия алгоритма была сосредоточена на сжатии. Она заменяет пару байтов с самой высокой частотой на новый байт, который не содержался в исходном наборе данных. Для перестройки исходного набора данных требуется таблица поиска замен. Модифицированная версия создает «токены» (единицы распознавания), которые соответствуют различным объемам исходного текста, от отдельных символов (включая отдельные цифры или отдельные знаки препинания) до целых слов (даже длинных составных слов). [5] [6] [7]

Оригинальный алгоритм

Оригинальный алгоритм BPE работает путем итеративной замены наиболее распространенных смежных последовательностей символов в целевом тексте неиспользуемыми байтами-«заполнителями». Итерация заканчивается, когда не удается найти ни одной последовательности, оставляя целевой текст эффективно сжатым. Декомпрессию можно выполнить, обратив этот процесс, запросив известные термины-заполнители по их соответствующей обозначенной последовательности, используя таблицу поиска. В оригинальной статье эта таблица поиска кодируется и хранится вместе со сжатым текстом.

Пример

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

ааабдааабак

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

ZabdZabacZ=аа

Затем процесс повторяется с парой байтов «ab», заменяя ее на «Y»:

ЗЫдЗЯкY=абZ=аа

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

XdXacХ=ЗУY=абZ=аа

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

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

Модифицированный алгоритм

Исходный алгоритм BPE модифицирован для использования в языковом моделировании , особенно для больших языковых моделей на основе нейронных сетей. По сравнению с исходным BPE, модифицированный BPE не нацелен на максимальное сжатие текста, а скорее на кодирование открытого текста в «токены», которые являются натуральными числами. Все уникальные токены, найденные в корпусе, перечислены в словаре токенов, размер которого, в случае GPT-3.5 и GPT-4 , составляет 100256.

Модифицированный алгоритм токенизации изначально обрабатывает набор уникальных символов как n-граммы длиной в 1 символ (начальные токены). Затем последовательно наиболее частая пара смежных токенов объединяется в новую, более длинную n-грамму, и все экземпляры пары заменяются этим новым токеном. Это повторяется до тех пор, пока не будет получен словарь заданного размера. Обратите внимание, что новые слова всегда могут быть построены из конечных токенов словаря и начальных символов. [8]

В последние годы этот модифицированный подход BPE был расширен с устной речи на язык жестов. [9]

Пример

Предположим, что мы кодируем предыдущий пример "aaabdaaabac" с указанным размером словаря 6, тогда мы сначала будем кодироваться как "0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 3" со словарем "a=0, b=1, d=2, c=3". Затем все будет продолжаться, как и прежде, и получим "4, 5, 2, 4, 5, 0, 3" со словарем "a=0, b=1, d=2, c=3, aa=4, ab=5".

Пока это по сути то же самое, что и раньше. Однако, если бы мы указали только размер словаря 5, то процесс остановился бы на словаре "a=0, b=1, d=2, c=3, aa=4", так что пример был бы закодирован как "4, 0, 1, 2, 4, 0, 1, 0, 3". И наоборот, если бы мы указали размер словаря 8, то он был бы закодирован как "7, 6, 0, 3", со словарем "a=0, b=1, d=2, c=3, aa=4, ab=5, aaab=6, aaabd=7". Это не максимально эффективно, но модифицированный BPE не стремится максимально сжать набор данных, а стремится эффективно закодировать его для обучения языковой модели.

BPE на уровне байтов

В приведенном выше примере выход BPE представляет собой словарь, который может быть использован для кодирования любого текста, написанного буквами «abcd». Он не сможет кодировать текст, содержащий другие символы, такие как «no». Даже если дать каждой из 26 букв запись в словаре, поскольку в мире существует множество языков, использующих множество различных письменностей, неизбежно некоторые символы будут некодируемы таким словарем.

Одним из решений является замена любого некодируемого символа специальным символом с именем UNK («неизвестно»).

BPE на уровне байтов — это другой подход. Он просто сначала преобразует текст в UTF-8 и обрабатывает его как поток байтов. Это гарантирует, что любой текст, закодированный в UTF-8, может быть закодирован BPE. Это использовалось в моделях типа BERT, таких как RoBERTa, BART и DeBERTa, и моделях типа GPT, таких как GPT-2 . [10]

Смотрите также

Ссылки

  1. ^ Гейдж, Филип (1994). «Новый алгоритм сжатия данных». Журнал пользователя C.
  2. ^ "Новый алгоритм сжатия данных". Журнал доктора Добба . 1 февраля 1994 г. Получено 10 августа 2020 г.
  3. ^ Виттен, Иэн Х.; Моффат, Алистер; Белл, Тимоти К. (1994). Управление гигабайтами . Нью-Йорк: Van Nostrand Reinhold. ISBN 978-0-442-01863-4.
  4. ^ "Byte Pair Encoding". Архивировано из оригинала 2016-03-26.
  5. ^ Сеннрих, Рико; Бирч, Александра; Хэддоу, Барри (31 августа 2015 г.). «Нейронный машинный перевод редких слов с подсловными единицами». arXiv : 1508.07909 [cs.CL].
  6. ^ Браун, Том Б.; Манн, Бенджамин; Райдер, Ник; Суббиа, Мелани; Каплан, Джаред; Дхаривал, Прафулла; Нилакантан, Арвинд; Шьям, Пранав; Шастри, Гириш; Аскелл, Аманда; Агарвал, Сандхини (2020-06-04). «Языковые модели — это ученики с небольшим количеством попыток». arXiv : 2005.14165 [cs.CL].
  7. ^ "google/sentencepiece". Google. 2021-03-02 . Получено 2021-03-02 .
  8. ^ Paaß, Gerhard; Giesselbach, Sven (2022). «Предварительно обученные языковые модели». Базовые модели для обработки естественного языка . Искусственный интеллект: основы, теория и алгоритмы. стр.  19–78 . doi :10.1007/978-3-031-23190-2_2. ISBN 9783031231902. Получено 3 августа 2023 г. .
  9. ^ Таро Миядзаки, Сихан Тан, Цубаса Учида, Хироюки Канеко (25 мая 2024 г.). «Перевод жестового языка с кодированием пар глосс» (PDF) . Труды 11-го семинара по представлению и обработке жестовых языков .{{cite journal}}: CS1 maint: несколько имен: список авторов ( ссылка )
  10. ^ "Токенизация кодирования пар байтов - курс Hugging Face NLP". huggingface.co . Получено 27.01.2025 .
Получено с "https://en.wikipedia.org/w/index.php?title=Кодирование_пары_байтов&oldid=1272263449"