Теория BPE (Byte Pair Encoding) простым языком
Теория BPE #
(Byte Pair Encoding) #
От букв к токенам: как нейросети читают текст #
Содержание #
- Введение
- Что такое токен?
- Аналогия с LEGO
- Почему нельзя просто разбивать текст по словам?
- Идея №2: разбивать всё на символы
- Компромисс: BPE
- Как расшифровывается BPE?
- Как работает BPE?
- Что происходит дальше?
- Почему это удобно?
- Словарь не становится гигантским
- Можно закодировать любое слово
- Частые слова кодируются короче
- Что делает fit()?
- Что делает encode()?
- Что такое vocab_size?
- Почему порядок merge важен?
- Как это выглядит визуально?
- Главная интуиция
- Самое короткое определение
Введение #
Когда мы читаем текст, мы видим смысл.
Например:
Я люблю котиков
Ты сразу понимаешь:
- кто любит,
- что любит,
- о чём речь.
Но нейросеть так не умеет.
Для компьютера текст — это просто последовательность символов.
Чтобы нейросеть могла работать с текстом, его нужно превратить в числа.
И здесь появляется главное понятие:
Что такое токен? #
Токен — это кусочек текста, которому назначили числовой идентификатор (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) — алгоритм, который начинает с символов и постепенно учится объединять часто встречающиеся куски текста в удобные токены, чтобы нейросети было проще работать с текстом.

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