Alterna · учебный материал

12.3 Частые соседние кусочки объединяются

Начнём с байтов, посчитаем соседние пары и объединим выбранную пару. Частота пары и число непересекающихся замен могут различаться.

Что в этом материале

Содержание и основные понятия

На предыдущей странице: словарь задаёт значение номера.
Начнём с байтов, посчитаем соседние пары и объединим выбранную пару. Частота пары и число непересекающихся замен могут различаться.
Разбиение задаётся конкретным словарём и правилами. Байт, символ, слово и токен не обязаны совпадать. Полученный номер — адрес, а не числовой смысл слова.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Считаем пары, затем заменяем
BPE итеративно объединяет частые соседние единицы. В оригинальной NMT-работе L02 это character/subword units внутри слов. Здесь используется упрощённый
byte-level поток
, включая пробелы: это реальный merge-алгоритм, но не точная копия production tokenizer.
На каждой итерации считаем все соседние пары текущих IDs. Выбираем максимальную частоту, при равенстве — меньшую numeric-пару (leftID,rightID). Новый token получает ID256+номер merge. Вхождения заменяем слева направо без перекрытий. Если частота лучшей пары меньше2, останавливаемся.
Для corpus
banana banana
пары(a,n) и(n,a) встречаются по4раза. Tie-break выбирает(97,110), новый ID256 означает bytes
an
. После первого merge
banana
представляется[98,256,256,97]. После четырёх merges всё выражение становится[259,32,259], где259 —
banana
.
Тонкость overlap.
В
aaa
пара(a,a) имеет частоту2, но за проход можно сделать только одну неперекрывающуюся замену. Частота кандидата и число выполненных замен — разные поля трассы.
Исследовать.
Повторите корпус и сравните первую пару, её count и фактические replacements. Смена tie-break может изменить IDs и последующую сегментацию. Поэтому список merges и их порядок являются частью сохраняемой модели tokenizer, а не случайным оформлением отчёта.
ids=list(b'banana')
result=[]; i=0
while i<len(ids):
if ids[i:i+2]==[97,110]: result.append(256); i+=2
else: result.append(ids[i]); i+=1
assert result==[98,256,256,97]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
В aaa пара aa имеет count2, но неперекрывающаяся замена одна.
Разбить и восстановить текст. Как этот вопрос продолжает полученный результат?
Python-примеры главы 12
Академическая база →

Структурная карта учебников