Токенизация: Тереңдетилген сабак

BPE, WordPiece, Unigram жана SentencePiece: заманбап тил моделдери текстти кантип түшүнөөрүн билип алыңыз.

1. Көйгөй: Текстти кантип "сандарга" айландырабыз?

Нейрон тармактары сөздөр менен эмес, сандар менен иштейт. Текстти сандарга айландыруунун биринчи кадамы – аны токендерге (майда бөлүкчөлөргө) бөлүү. Эң жөнөкөй жол – текстти сөздөргө бөлүү. Бирок бул ыкманын бир нече кемчилиги бар:

  • Чоң сөздүк: "китеп", "китебим", "китептер" – булардын баары сөздүктө өз-өзүнчө орун ээлейт.
  • Белгисиз сөздөр (OOV - Out-of-Vocabulary): Эгер модель машыгуу учурунда "инновация" деген сөздү кездештирбесе, кийин аны тааныбай калат.
  • Татаал тилдер: Кыргыз тили сыяктуу агглютинативдик тилдерде бир сөзгө көптөгөн мүчөлөр жалганып, сөздөрдүн саны абдан көбөйүп кетет.

Бул көйгөйлөрдү чечүү үчүн сөз бөлүкчөлөрүнө негизделген (subword) токенизация ыкмалары иштелип чыккан.

2. Subword Токенизация Алгоритмдери

A. Byte-Pair Encoding (BPE)

BPE – эң кеңири таралган алгоритмдердин бири. Ал жөнөкөй принципке негизделген: текстте эң көп кездешкен символдордун жубун таап, аларды бир жаңы символго (токенге) бириктирүү. Бул процесс алдын ала белгиленген сөздүк өлчөмүнө жеткенге чейин кайталанат.

Мисалы, бизде "китеп китепкана" деген сөздөр болсо:

  1. Башында сөздүк: {к, и, т, е, п, а, н}
  2. Эң көп кездешкен жуп "ки". Аны бириктиребиз: "китеп китепкана" -> "ки"теп "ки"тепкана. Сөздүккө "ки" кошулат.
  3. Кийинки эң көп кездешкен жуп "те". Аны бириктиребиз: "ки""те"п "ки""те"пкана. Сөздүккө "те" кошулат.
  4. Бул процесс улана берет. Натыйжада, "китепкана" деген сөз ["китеп", "кана"] же ["ките", "пкана"] сыяктуу бөлүкчөлөргө бөлүнүшү мүмкүн.

B. WordPiece

WordPiece (BERT моделинде колдонулат) BPE'ге абдан окшош. Бирок ал эң көп кездешкен жупту эмес, бириктиргенде окутуу корпусунун ыктымалдуулугун (likelihood) эң көп жогорулаткан жупту тандайт. Бул "статистикалык жактан эң пайдалуу" бириктирүүнү камсыздайт.

C. Unigram Language Model

BPE жана WordPiece'тен айырмаланып, Unigram "кошуу" ыкмасын эмес, "алуу" ыкмасын колдонот. Алгач ал мүмкүн болгон бардык сөз бөлүкчөлөрүнөн турган өтө чоң сөздүктү түзөт. Андан кийин, атайын алгоритмди колдонуп, сөздүктөн эң аз "пайдалуу" (корпустун жалпы ыктымалдуулугун эң аз төмөндөткөн) токендерди акырындап өчүрүп отурат.

Unigram'дын негизги өзгөчөлүгү – бир эле сөздү бир нече жол менен токендерге бөлүүгө мүмкүндүк берет (ар бир бөлүү вариантына өз ыктымалдуулугун берип). Бул моделдин туруктуулугун жогорулатат.

3. SentencePiece: Универсалдуу Чечим

SentencePiece – бул өзүнчө алгоритм эмес, жогоруда айтылган BPE же Unigram алгоритмдерин ишке ашырган Google'дун китепканасы. Анын негизги артыкчылыктары:

  • Тилге көз каранды эмес: Ал текстти алдын ала сөздөргө бөлбөйт. Текстти чийки Unicode символдорунун ырааттуулугу катары кабыл алып, боштукту да башка символдор сыяктуу карайт. Бул япон, кытай, тай сыяктуу боштук менен сөз бөлүнбөгөн тилдер үчүн абдан маанилүү.
  • Түздөн-түз иштөө: Алдын ала токенизация (pre-tokenization) кадамдарынын кереги жок, бул процессти жөнөкөйлөтөт.
  • Кайра калыбына келтирүү: Токендерди кайра баштапкы текстке эч кандай жоготуусуз айландыра алат.

1. Проблема: Как "перевести" текст в числа?

Нейронные сети работают не со словами, а с числами. Первый шаг в преобразовании текста в числа — это его разделение на токены (мелкие единицы). Самый простой способ — разделить текст на слова. Однако у этого подхода есть несколько недостатков:

  • Огромный словарь: "книга", "книги", "книжный" — все это займет отдельные места в словаре.
  • Неизвестные слова (OOV - Out-of-Vocabulary): Если модель не встречала слово "инновация" во время обучения, она не сможет его распознать позже.
  • Сложные языки: В агглютинативных языках, таких как кыргызский или тюркские, к одному слову может присоединяться множество суффиксов, что приводит к взрывному росту количества уникальных слов.

Для решения этих проблем были разработаны методы токенизации, основанные на подсловах (subword).

2. Алгоритмы Subword Токенизации

A. Byte-Pair Encoding (BPE)

BPE — один из самых распространенных алгоритмов. Он основан на простом принципе: найти наиболее часто встречающуюся пару символов в тексте и объединить ее в один новый символ (токен). Этот процесс повторяется до тех пор, пока не будет достигнут заранее определенный размер словаря.

Например, если у нас есть слова "low lowest":

  1. Изначально словарь: {l, o, w, e, s, t}
  2. Наиболее частая пара — "lo". Объединяем: "lo"w "lo"west. В словарь добавляется "lo".
  3. Следующая частая пара — "est". Объединяем: low "est". В словарь добавляется "est".
  4. Процесс продолжается. В результате слово "lowest" может быть разделено на ["low", "est"].

B. WordPiece

WordPiece (используется в BERT) очень похож на BPE. Однако он выбирает для слияния не самую частую пару, а ту, которая при объединении максимальным образом увеличивает правдоподобие (likelihood) обучающего корпуса. Это обеспечивает "статистически наиболее выгодное" объединение.

C. Unigram Language Model

В отличие от BPE и WordPiece, Unigram использует не "добавляющий", а "удаляющий" подход. Сначала он создает очень большой словарь из всех возможных подслов. Затем, используя специальный алгоритм, он постепенно удаляет из словаря наименее "полезные" токены (те, удаление которых меньше всего снижает общую вероятность корпуса).

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

3. SentencePiece: Универсальное Решение

SentencePiece — это не отдельный алгоритм, а библиотека от Google, которая реализует вышеупомянутые BPE или Unigram. Её главные преимущества:

  • Языковая независимость: Он не требует предварительного разделения текста на слова. Он обрабатывает текст как последовательность сырых Unicode-символов и считает пробел обычным символом. Это критически важно для языков без пробелов, таких как японский, китайский или тайский.
  • Прямая обработка: Не нужны шаги предварительной токенизации (pre-tokenization), что упрощает весь процесс.
  • Обратимость: Позволяет восстановить исходный текст из токенов без каких-либо потерь.

1. The Problem: How to Turn Text into Numbers?

Neural networks operate on numbers, not words. The first step to convert text into numbers is to split it into smaller units called tokens. The simplest method is to split text by spaces into words. However, this approach has several major drawbacks:

  • Large Vocabulary: "run", "running", and "ran" are treated as three different words, bloating the vocabulary size.
  • Unknown Words (OOV - Out-of-Vocabulary): If the model encounters a word during inference that it didn't see during training (e.g., "epistemology"), it won't know what to do with it.
  • Complex Languages: Agglutinative languages like Turkish or Finnish can form incredibly long words by stringing morphemes together, leading to a vocabulary explosion.

To solve these issues, subword tokenization algorithms were developed.

2. Subword Tokenization Algorithms

A. Byte-Pair Encoding (BPE)

BPE is one of the most popular algorithms. It works on a simple principle: iteratively find the most frequent pair of adjacent bytes (or characters) in the vocabulary and merge them into a single, new token. This process is repeated until the desired vocabulary size is reached.

For example, given the words "low lowest":

  1. Initial vocabulary: {l, o, w, e, s, t}
  2. The most frequent pair is "lo". Merge it: "lo"w "lo"west. The vocabulary now includes "lo".
  3. The next most frequent pair might be "est". Merge it: low "est". The vocabulary now includes "est".
  4. The process continues. Eventually, the word "lowest" might be tokenized as ["low", "est"].

B. WordPiece

WordPiece, used by BERT, is very similar to BPE. The key difference is how it chooses which pair to merge. Instead of picking the most frequent pair, it picks the pair that maximizes the likelihood of the training data once merged. This ensures the most "statistically valuable" merges are performed.

C. Unigram Language Model

Unlike the additive approach of BPE and WordPiece, Unigram uses a subtractive method. It starts with a very large vocabulary of all possible subwords and then progressively removes tokens that are least "useful"—i.e., whose removal results in the smallest drop in the overall corpus likelihood, as defined by a unigram language model.

A key feature of Unigram is that it produces a probabilistic tokenization. The same word can be tokenized in multiple ways, each with an associated probability, which can improve model robustness.

3. SentencePiece: The Universal Solution

SentencePiece is not a new algorithm itself, but a library from Google that provides an implementation of BPE or Unigram. Its key advantages are:

  • Language-Agnostic: It does not require pre-tokenization (splitting by spaces). It treats text as a raw stream of Unicode characters and considers whitespace as just another character. This is crucial for languages that don't use spaces, like Japanese, Chinese, or Thai.
  • Direct Operation: It simplifies pipelines by removing the need for language-specific pre-tokenizers.
  • Lossless: It guarantees that tokenization is fully reversible, meaning you can perfectly reconstruct the original text from the tokens.

Библиография

  • Sennrich, R., Haddow, B., & Birch, A. (2015). Neural Machine Translation of Rare Words with Subword Units. arXiv:1508.07909. (BPE)
  • Kudo, T. (2018). Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates. arXiv:1804.10959. (Unigram)
  • Kudo, T., & Richardson, J. (2018). SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing. arXiv:1808.06226.
  • Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805. (WordPiece)