Теория BPE

Теория BPE (Byte Pair Encoding) простым языком

Теория BPE #

(Byte Pair Encoding) #


От букв к токенам: как нейросети читают текст #


Содержание #


Введение #

Когда мы читаем текст, мы видим смысл.

Например:

Я люблю котиков

Ты сразу понимаешь:

  • кто любит,
  • что любит,
  • о чём речь.

Но нейросеть так не умеет.

Для компьютера текст — это просто последовательность символов.

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

И здесь появляется главное понятие:

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

Токен — это кусочек текста, которому назначили числовой идентификатор (ID).

Например:

"кот" -> 125
"ик" -> 126
"ов" -> 127

или

"я" -> 1
"люблю" -> 2
"котиков" -> 3

То есть:

токен = кусок текста + число


Аналогия с LEGO #

Представь, что текст — это дом из LEGO.

Дом можно строить:

Из маленьких кирпичиков #

к
о
т

Из средних блоков #

кот
ик
и

Из больших частей #

котики

Токены — это и есть строительные блоки текста.


Почему нельзя просто разбивать текст по словам? #

Кажется логичным сделать так:

["я", "люблю", "котиков"]

Но возникает проблема.

Язык огромный.

Есть:

кот
кота
коту
котик
котиков
котяра
котейка
котэ

А ещё появляются новые слова:

супермегакот3000

Если хранить каждое слово отдельно, словарь станет гигантским.

Миллионы слов.

И всё равно будут слова, которых модель никогда раньше не видела.


Идея №2: разбивать всё на символы #

Например:

котики

к о т и к и

Плюсы:

  • можно собрать вообще любое слово;
  • не нужен огромный словарь.

Минусы:

Текст становится очень длинным.

Вместо:

["котики"]

получаем:

["к", "о", "т", "и", "к", "и"]

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


Компромисс: BPE #

Нужно что-то среднее между:

словами

и

буквами.

И тут приходит:

Byte Pair Encoding (BPE) #

Если говорить очень просто:

BPE — алгоритм, который автоматически учится склеивать часто встречающиеся куски текста.


Как расшифровывается BPE? #

Byte Pair Encoding

Исторически:

кодирование повторяющихся пар

Главная идея:

ищем соседние элементы, которые часто встречаются вместе, и объединяем их.


Как работает BPE? #

Возьмём текст:

banana banana banana

Шаг 1. Начинаем с символов #

Разбиваем текст:

b a n a n a

Это стартовые токены.


Шаг 2. Ищем частые пары #

Смотрим соседние элементы.

Получаем:

(b, a)
(a, n)
(n, a)
(a, n)
(n, a)

Считаем:

(a, n) -> 2
(n, a) -> 2
(b, a) -> 1

Шаг 3. Склеиваем самую частую пару #

Допустим победила:

(a, n)

Создаём новый токен:

an

Теперь текст выглядит так:

Было:

b a n a n a

Стало:

b an an a

Шаг 4. Повторяем процесс #

Снова считаем пары:

(b, an)
(an, an)
(an, a)

Например:

(an, a)

создаёт:

ana

Получаем:

b an ana

Что происходит дальше? #

Процесс повторяется снова и снова:

буквы
→ куски
→ большие куски
→ целые слова

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


Почему это удобно? #

1. Словарь не становится гигантским #

Вместо миллионов слов:

50 000 токенов

например.


2. Можно закодировать любое слово #

Даже странное:

ультрасупермегакот

разобьётся:

ультра
супер
мега
кот

или даже:

у л ь т р а

если словарь маленький.


3. Частые слова кодируются короче #

Например:

привет

может стать одним токеном.

А редкое:

антирефлексивность

разобьётся на части.


Что делает fit()? #

fit() — это обучение токенизатора.

Он смотрит на текст и замечает закономерности.

Например:

“th” очень часто встречается
“ing” тоже
“tion” тоже

И начинает создавать новые токены.

Получается словарь:

{
    0: "a",
    1: "b",
    2: "n",
    3: "an",
    4: "ana",
    5: "banana"
}

Что делает encode()? #

encode() берёт новый текст и применяет те же merge-операции.

Например:

banana

Сначала:

b a n a n a

Потом:

b an an a

Потом:

b an ana

Потом:

banana

И переводит всё в ID:

[5]

Что такое vocab_size? #

Это максимальный размер словаря.

Например:

BPE(vocab_size=10000)

значит:

разрешаем максимум 10 000 токенов

Сначала словарь состоит из букв:

a
b
c

Потом BPE начинает добавлять:

th
ing
tion
http
mongo
docker

пока не достигнет лимита.


Почему порядок merge важен? #

Допустим обучение было таким:

(a, n) -> an
(an, a) -> ana

Во время encode нужно повторить именно этот порядок.

Иначе получится другой результат.


Как это выглядит визуально? #

banana

↓ разбили

b a n a n a

↓ merge(a,n)

b an an a

↓ merge(an,a)

b an ana

↓ merge(b,an)

ban ana

↓ merge(ban,ana)

banana

Главная интуиция #

Если забыть сложные слова:

BPE просто ищет куски текста, которые часто стоят рядом, и склеивает их.

Всё.

Никакой магии.

Никакого ИИ.

Просто статистика.


Самое короткое определение #

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

Жми класс
Обновлено 02.06.2026

Оцените документ




0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *