ГоловнаСтаттіПоєднання байт: Як токенизують підслова

Поєднання байт: Як токенизують підслова

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

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Проблеми з цілими словами

Найбільш очевидний спосіб токенізувати текст – розділити його за допомогою пробілів і вважати кожне окреме слово єдиним блоком у словнику. Це добре працює, поки модель не зустрічає слова, яке вона раніше не бачила. Мова природна наповнена рідкісними прізвищами, помилками друку, вигаданими назвами брендів, технічною термінологією та словами з інших мов, і фіксований словник на рівні слів не має способу їх представляти, крім загального, інформативної втрати токена <UNK>. Більше того, словник на рівні слів розглядає «run», «runs», «running» та «runner» як чотири повністю незалежні символи, тому модель не отримує жодного стартового сигналу щодо того факту, що вони мають спільне коріння. Щоб охопити навіть скромну кількість слів, які можуть з’явитися, словник на рівні слів повинен бути величезним, і він все одно буде вражено в першу чергу, коли хтось помилково напише слово або вигадає нове.

Проблеми з окремими символами

Навпаки, вирішувати проблему шляхом токенізації тексту по одному символу за раз. Це повністю вирішує проблему покриття, оскільки будь-який рядок можна побудувати з невеликого алфавіту символів, і такого поняття, як поза словником символ, не існує. Вартість – довжина: речення, яке могло мати 8 або 10 токенів слова, тепер стає 40 або 50 токенами символів. Оскільки моделі трансформерів обробляють кожен токен у послідовності та їх обчислювальна вартість зростає з довжиною послідовності, токенізація на рівні символів робить навчання та виведення в кілька разів дорожчими, а також змушує модель значно більше працювати над реконструкцією значення, оскільки окремий символ, як-от «t», сам по собі несе майже ніякої інформації. Десь між однією величезною словниковою позицією цілих слів і одним маленьким словниковим позиціонуванням окремих символів знаходиться золота середина, і саме те, що було побудовано за допомогою кодування пари байтів.

Навчання злиття відбувається за частотою

Кодування парів байт починається з розбиття кожного слова в корпусі навчальних даних на окремі символи, тому «lower» починає своє існування як п’ять символів l, o, w, e, r. Алгоритм підраховує кожну сусідню пару символів у всьому корпусі та знаходить найчастішу пару, скажімо (l, o), якщо «low», «lower» і «lowest» часто зустрічаються в навчальному тексті. Ця найчастіша пара об’єднується в новий символ «lo», який додається до словника, і кожне місцезнаходження цієї пари в корпусі замінюється зведеним токеном. Потім корпус пересканується з цим новим символом, підраховуються частоти пар, і наступна найчастіша пара об’єднується. Кожне злиття записується послідовно, оскільки порядок має значення пізніше: коли навчений токенізатор стикається з новим текстом, він застосовує ті ж злиття в тому ж порядку, щоб вирішити, як його розділити.

Від символів до загальних підслів

Повторення цього кроку злиття тисячами разів і є тим, де накопичується магія. Ранні злиття зазвичай об'єднують поширені пари символів у невеликі шматки, такі як "in", "er" або "th". Пізніші злиття об'єднують ці шматки в більші одиниці, а достатньо часті цілі слова, такі як "the", "and", або "tokenization", зрештою можуть стати одним об'єднаним символом у словнику, точно так само, як і токенізатор рівня слова для поширених слів. Кількість операцій злиття, виконаних, є гіперпараметром, обраним перед навчанням, зазвичай десятки тисяч, і безпосередньо контролює розмір кінцевого словника: припиніть раніше і ви отримаєте більше коротших підслів; проведіть більше операцій злиття, і ви отримаєте менше довгих підслів. Важливо, що рідкісні або нові слова ніколи не отримують окремого злиття, тому вони просто повертаються до того, щоб їх писали з менших вже навчених частин, як "tokenization", розділяється на "token" і "ization", якщо ціле слово не було достатньо поширеним, щоб отримати власне злиття.

Основа сучасних токенізаторів

Це пояснює, чому моделі типу GPT, RoBERTa та багато інших трансформерів можуть обробляти помилки друку, рідкісні технічні терміни, емодзі та текст мов, які мало представлені у навчальних даних, не видаючи жодного зарезервованого токена-замінника. GPT-2 та його наступники застосовують BPE безпосередньо над байтами, а не над унікодом, що гарантує, що будь-який вхідний текст, включаючи незвичайні символи або змішані скрипти, завжди може бути представлений за допомогою фіксованого базового алфавіту з 256 байтів плюс навчені об'єднання. Отриманий словник, який зазвичай містить від 30 000 до 100 000 підслівних токенів, забезпечує практичний баланс: загальні слова та фрагменти слів є ефективними токенами окремо, а все незрозуміле плавно розпадається на менші, але все ще змістовні частини замість того, щоб повністю руйнувати модель. Цей баланс між розміром словника, довжиною послідовності та покриттям узагальнених даних є причиною того, що BPE та його близькі родичі, такі як WordPiece і Unigram токенізація, залишаються стандартним першим кроком у майже кожній сучасній великій мовній моделі.

Часті запитання

Чи розуміє BPE значення підслів, які він створює?

Ні. BPE є чисто статистичним процесом, заснованим на частоті, який працює з необробленим текстом; у нього немає поняття граматики, морфології чи значення. Він об'єднує символи лише тому, що вони часто зустрічаються разом, що випадково збігається з лінгвістично значущими одиницями, такими як префікси та суфікси, але це узгодження є наслідком частоти, а не метою, яку розроблений алгоритм намагався досягти.

Чому порядок об'єднання має значення після навчання?

Натренований токенізатор зберігає свій список об'єднань у точно тому порядку, в якому вони були вивчені, і застосовує їх у цьому ж порядку до будь-якого нового тексту. Оскільки пізніші об'єднання будуються на основі попередніх, якщо їх застосовувати не в правильному порядку або пропустити одне, це призведе до іншої та невідповідної токенізації, тому відсортований список об'єднань є фактично всім «правилом» токенізатора.

Як обирається розмір словника і що відбувається, якщо він занадто малий або занадто великий?

Розмір словника встановлюється шляхом того, скільки операцій об'єднання виконується під час навчання, і це свідомий компроміс. Занадто малий словник змушує довгі послідовності токенів навіть для частого тексту, збільшуючи витрати на обчислення, а занадто великий словник марнотратить потужність на рідко використовувані токени та збільшує розмір шарів вбудовування та виводу моделі. Більшість сучасних мовних моделей знаходяться десь між приблизно 30 000 і 100 000 токенами.

Чи є Byte Pair Encoding одним і тим же алгоритмом, який використовується склядесь?

Основна ідея об'єднання найчастішої пари поширена, але реалізації відрізняються. Моделі стилю GPT зазвичай запускають BPE над необробленими UTF-8 байтами для гарантованого універсального покриття, тоді як альтернативи, такі як WordPiece Google, об'єднують пари на основі дещо іншого критерію оцінювання, а метод Unigram SentencePiece будує та видаляє ймовірний словник замість того, щоб об'єднувати зловтікачів жадібно. Усі троє прагнуть однієї мети: компактний і надійний підслівний словник.

Чи може BPE обробляти мову або символ, який він ніколи не бачив під час навчання?

Byte-level BPE завжди може представляти будь-який вхід, оскільки кожне можливе значення байта присутнє у його базовому словнику до будь-яких об'єднань. Він може повернутися до неефективної токенізації по одному байту за раз для справді невідомих скриптів або символів, що призводить до довгих послідовностей, але він ніколи не зазнає невдачі або потребуватиме спеціального символу «невідомо»,

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Byte Pair Encoding: How Tokenizers Learn Subwords і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Byte Pair Encoding: How Tokenizers Learn Subwords

Що ви знайшли?

Додати кроки відтворення (опційно)