Transformers documentation

Tokenizasyon algoritmaları

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Tokenizasyon algoritmaları

Transformers, üç alt kelime (subword) belirleme algoritmasını destekler: Byte pair encoding (BPE), Unigram ve WordPiece. Bu algoritmalar, metni kelime ile karakter arasında birimlere ayırarak sözlüğün kompakt kalmasını sağlarken anlamlı parçaları da yakalar. Sık kullanılan kelimeler tek bir belirteç (token) olarak bütünlüğünü korurken, nadir veya bilinmeyen kelimeler alt kelimelere ayrılır.

Örneğin, annoyingly kelimesi sözlüğe bağlı olarak ["annoying", "ly"] veya ["annoy", "ing", "ly"] şeklinde bölünebilir. Alt kelime bölme, modele bilinen alt kelimeler aracılığıyla daha önce görülmemiş kelimeleri temsil etme imkânı tanır.

Alt kelime tokenizasyonu, alt kelimeleri birleştirerek uzun ve karmaşık kelimeler oluşturabilen Türkçe gibi dillerde özellikle faydalıdır.

Bayt çifti kodlaması (BPE)

Byte pair encoding (BPE), Llama, Gemma, Qwen2 gibi modellerde kullanılan Transformers'taki en popüler tokenizasyon algoritmasıdır.

  1. Bir ön-tokenizer, metni boşluklara veya diğer kurallara göre böler ve benzersiz kelimelerle sıklıklarının bir kümesini üretir.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
  1. BPE algoritması, tüm karakterlerden ["b", "g", "h", "n", "p", "s", "u"] temel sözlüğünü oluşturur.
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)
  1. BPE, bireysel karakterlerle başlar ve en sık görülen bitişik çifti yinelemeli olarak birleştirir. "u" ve "g", "hug", "pug" ve "hugs" içinde en sık birlikte görüldüğü için BPE bunları "ug" olarak birleştirir ve sözlüğe ekler.
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)
  1. Bir sonraki en yaygın çift "u" ve "n"'dir; bunlar "pun" ve "bun" içinde göründüğü için "un" olarak birleştirilir.
("h" "ug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("h" "ug" "s", 5)
  1. Sözlük artık ["b", "g", "h", "n", "p", "s", "u", "ug", "un"]. BPE, hedef sözlük boyutuna ulaşana kadar birleştirme kurallarını öğrenmeye devam eder; bu boyut, temel sözlük boyutuna birleştirme sayısının eklenmesiyle elde edilir. GPT, 40.478 sözlük boyutuna sahip BPE kullanır (478 temel token + 40.000 birleştirme).

Temel sözlükte yer almayan herhangi bir karakter, "<unk>" gibi bilinmeyen bir jetona eşlenir. Uygulamada, temel sözlük eğitim sırasında görülen tüm karakterleri kapsadığından bilinmeyen jetonlar nadiren görülür.

Bayt düzeyinde BPE

Tüm Unicode karakterlerini içermek, temel sözlüğü devasa hale getirirdi. Bayt düzeyinde BPE bunun yerine 256 bayt değerini temel sözlük olarak kullanır ve bu sayede her kelimenin "<unk>" token'ı olmadan tokenize edilmesini sağlar. GPT-2, 50.257 sözlük boyutuna sahip bayt düzeyinde BPE kullanır (256 bayt token'ı + 50.000 birleştirme + özel metin sonu token'ı).

Unigram

Unigram, Transformers'ta en popüler ikinci tokenizasyon algoritmasıdır ve T5, BigBird, Pegasus gibi modellerde kullanılır.

  1. Unigram, büyük bir aday alt kelime setiyle başlar ve her aday, ne sıklıkta göründüğüne dayalı bir olasılık puanı alır.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "pu", "bu", "gs", "hug", "pug", "pun", "bun", "ugs", "hugs"]
  1. Unigram, her adımda mevcut sözlüğün eğitim verisini nasıl tokenleştirdiğini puanlar.

  2. Her token için Unigram, token'ın kaldırılmasının genel kaybı ne kadar artıracağını ölçer. Örneğin, "pu" kaldırıldığında kayba neredeyse etki etmez çünkü "pug" ve "pun" hâlâ ["p", "ug"] ve ["p", "un"] olarak tokenlaştırılabilir.

    Ancak "ug" kaldırılırsa, "hug", "pug" ve "hugs" bunun üzerine dayandığı için kayıp önemli ölçüde artacaktır.

  3. Unigram, en düşük kayıp artışına sahip tokenları, genellikle alttaki %10-20'lik dilimi, kaldırır. Temel karakterler her zaman korunduğu için herhangi bir kelime tokenize edilebilir. "bu", "pu", "gs", "pug" ve "bun" gibi tokenlar, genel olasılığa en az katkıda bulunanlar olduğu için kaldırılır.

["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "hug", "pun", "ugs", "hugs"]
  1. Adımlar 2-4, sözlük hedef boyuta ulaşana kadar tekrarlanır.

Çıkarım sırasında Unigram, bir kelimeyi birden fazla şekilde belirteçlere ayırabilir. "hugs" ["hug", "s"], ["h", "ug", "s"] veya ["h", "u", "g", "s"] olabilir. Unigram, en yüksek olasılıklı belirteçlere ayırma yöntemini seçer. Birleştirme kurallarına dayalı ve deterministik olan BPE'nin aksine, Unigram olasılıksaldır ve eğitim sırasında farklı belirteçlere ayırma yöntemleri örnekleyebilir.

SentencePiece

SentencePiece, ham metin üzerinde doğrudan BPE veya Unigram uygulayan bir tokenizasyon kütüphanesidir. Standart BPE ve Unigram, kelimelerin boşluklarla ayrıldığını varsayar; ancak boşluk kullanmayan Çince ve Japonca gibi dillerde bu yaklaşım işe yaramaz.

  1. SentencePiece, girdi metnini ham bayt veya karakter akışı olarak ele alır ve sözlüğe, "▁" ile temsil edilen boşluk karakterini de dahil eder.
("▁hug", 10), ("▁pug", 5), ("▁pun", 12), ("▁bun", 4), ("▁hugs", 5)
  1. SentencePiece ardından metne BPE veya Unigram uygular.

Çözme sırasında SentencePiece, tüm jetonları birleştirir ve "▁" ifadesini bir boşlukla değiştirir.

WordPiece

WordPiece, DistilBERT ve Electra gibi BERT ailesi modelleri için kullanılan tokenizasyon algoritmasıdır.

BPE'ye benzer ve alttan üste doğru çiftleri yineleyerek birleştirir, ancak çift seçimi konusunda farklılık gösterir.

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

WordPiece, eğitim verisinin olasılığını en üst düzeye çıkaran çiftleri birleştirir.

score("u", "g") = frequency("ug") / (frequency("u") × frequency("g"))
çiftfrekanspuan
"u" + "g"2020 / (36 × 20) = 0.028
"u" + "n"1616 / (36 × 16) = 0.028
"h" + "u"1515 / (15 × 36) = 0.028
"g" + "s"55 / (20 × 5) = 0.050

Skor, birleşik token'ın bireysel token sıklıklarından beklenenden daha sık görünmesi durumunda "g" ve "s"'in birleştirilmesini destekler. BPE, en sık görülen çifti birleştirir. WordPiece ise her birleştirmenin ne kadar bilgilendirici olduğunu ölçer. Şansın öngördüğünden çok daha fazla birlikte görünen iki token önce birleştirilir.

Kelime düzeyinde tokenizasyon

Kelime düzeyinde tokenizasyon, metni boşluklara, noktalama işaretlerine veya dil bazlı kurallara göre token'lara ayırır.

["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."]

Her benzersiz kelime, tüm varyasyonları ("love", "loving", "loved", "lovingly") dahil olmak üzere kendi token'ını gerektirdiği için sözlük boyutu son derece büyük hale gelir. Sonuçta oluşan gömme matrisi devasa boyutlara ulaşır ve bellek ile hesaplama yükünü artırır. Sözlükte yer almayan kelimeler "<unk>" token'ına eşlenir; bu nedenle model yeni kelimeleri işleyemez.

Karakter düzeyinde tokenizasyon

Karakter düzeyinde tokenizasyon, metni tekil karakterlere böler.

["D", "o", "n", "'", "t", "y", "o", "u", "l", "o", "v", "e"]

Sözlük küçüktür ve her kelime temsil edilebilir, bu nedenle "<unk>" sorunu yoktur. Ancak diziler çok daha uzun hale gelir. "l" gibi bir karakter, "love" kelimesinden çok daha az anlam taşır, bu da performansı olumsuz etkiler.

Kaynaklar

  • LLM kursunun 6. bölümü, bir tokenizer'ı sıfırdan nasıl eğiteceğinizi öğretir ve BPE, Unigram ile WordPiece algoritmaları arasındaki farkları açıklar.
Update on GitHub