1. Tokenizasyon

Reading time: 3 minutes

Tokenizasyon

Tokenizasyon, verileri, örneğin metni, daha küçük, yönetilebilir parçalara token denilen birimlere ayırma sürecidir. Her token, benzersiz bir sayısal tanımlayıcı (ID) ile atanır. Bu, metni makine öğrenimi modelleri tarafından işlenmeye hazırlamak için temel bir adımdır, özellikle doğal dil işleme (NLP) alanında.

tip

Bu ilk aşamanın amacı çok basittir: Girdiyi mantıklı bir şekilde token'lara (id'lere) ayırmak.

Tokenizasyonun Çalışma Şekli

  1. Metni Bölme:
  • Temel Tokenizer: Basit bir tokenizer, metni bireysel kelimelere ve noktalama işaretlerine ayırabilir, boşlukları kaldırır.
  • Örnek:
    Metin: "Merhaba, dünya!"
    Tokenlar: ["Merhaba", ",", "dünya", "!"]
  1. Bir Kelime Dağarcığı Oluşturma:
  • Tokenları sayısal ID'lere dönüştürmek için bir kelime dağarcığı oluşturulur. Bu kelime dağarcığı, tüm benzersiz tokenları (kelimeler ve semboller) listeler ve her birine belirli bir ID atar.
  • Özel Tokenlar: Çeşitli senaryoları ele almak için kelime dağarcığına eklenen özel sembollerdir:
  • [BOS] (Dizinin Başlangıcı): Bir metnin başlangıcını belirtir.
  • [EOS] (Dizinin Sonu): Bir metnin sonunu belirtir.
  • [PAD] (Doldurma): Bir partideki tüm dizilerin aynı uzunlukta olmasını sağlamak için kullanılır.
  • [UNK] (Bilinmeyen): Kelime dağarcığında olmayan tokenları temsil eder.
  • Örnek:
    Eğer "Merhaba" ID 64 ile atanmışsa, "," 455, "dünya" 78, ve "!" 467 ise:
    "Merhaba, dünya!"[64, 455, 78, 467]
  • Bilinmeyen Kelimeleri Ele Alma:
    Eğer "Hoşça kal" gibi bir kelime kelime dağarcığında yoksa, [UNK] ile değiştirilir.
    "Hoşça kal, dünya!"["[UNK]", ",", "dünya", "!"][987, 455, 78, 467]
    (Varsayılarak [UNK] ID'si 987)

Gelişmiş Tokenizasyon Yöntemleri

Temel tokenizer basit metinler için iyi çalışırken, büyük kelime dağarcıkları ve yeni veya nadir kelimeleri ele alırken sınırlamaları vardır. Gelişmiş tokenizasyon yöntemleri, metni daha küçük alt birimlere ayırarak veya tokenizasyon sürecini optimize ederek bu sorunları ele alır.

  1. Byte Pair Encoding (BPE):
  • Amaç: Kelime dağarcığının boyutunu azaltır ve nadir veya bilinmeyen kelimeleri sıkça karşılaşılan byte çiftlerine ayırarak ele alır.
  • Nasıl Çalışır:
  • Token olarak bireysel karakterlerle başlar.
  • En sık karşılaşılan token çiftlerini tek bir token haline getirerek yinelemeli olarak birleştirir.
  • Daha fazla sık çift birleştirilemeyecek hale gelene kadar devam eder.
  • Faydaları:
  • Tüm kelimelerin mevcut alt kelime tokenları ile temsil edilebilmesi nedeniyle [UNK] tokenına ihtiyaç duyulmaz.
  • Daha verimli ve esnek bir kelime dağarcığı sağlar.
  • Örnek:
    "oynama" token olarak ["oyna", "ma"] şeklinde ayrılabilir eğer "oyna" ve "ma" sıkça karşılaşılan alt kelimelerse.
  1. WordPiece:
  • Kullanım Alanı: BERT gibi modeller.
  • Amaç: BPE'ye benzer, bilinmeyen kelimeleri ele almak ve kelime dağarcığı boyutunu azaltmak için kelimeleri alt kelime birimlerine ayırır.
  • Nasıl Çalışır:
  • Bireysel karakterlerden oluşan bir temel kelime dağarcığı ile başlar.
  • Eğitim verilerinin olasılığını maksimize eden en sık karşılaşılan alt kelimeyi yinelemeli olarak ekler.
  • Hangi alt kelimelerin birleştirileceğine karar vermek için olasılıksal bir model kullanır.
  • Faydaları:
  • Yönetilebilir bir kelime dağarcığı boyutu ile kelimeleri etkili bir şekilde temsil etme arasında denge kurar.
  • Nadir ve bileşik kelimeleri etkili bir şekilde ele alır.
  • Örnek:
    "mutsuzluk" token olarak ["mut", "suzluk"] veya ["mut", "suz", "luk"] şeklinde ayrılabilir, bu kelime dağarcığına bağlıdır.
  1. Unigram Dil Modeli:
  • Kullanım Alanı: SentencePiece gibi modeller.
  • Amaç: En olası alt kelime token setini belirlemek için olasılıksal bir model kullanır.
  • Nasıl Çalışır:
  • Potansiyel tokenların büyük bir seti ile başlar.
  • Eğitim verilerinin modelin olasılığını en az artıran tokenları yinelemeli olarak kaldırır.
  • Her kelimenin en olası alt kelime birimleri ile temsil edildiği bir kelime dağarcığı oluşturur.
  • Faydaları:
  • Esnek olup dili daha doğal bir şekilde modelleyebilir.
  • Genellikle daha verimli ve kompakt tokenizasyonlar ile sonuçlanır.
  • Örnek:
    "uluslararasılaştırma" daha küçük, anlamlı alt kelimelere ["uluslararası", "laştırma"] şeklinde ayrılabilir.

Kod Örneği

Bunu daha iyi anlamak için https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb adresinden bir kod örneğine bakalım:

python
# Download a text to pre-train the model
import urllib.request
url = ("https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/main/ch02/01_main-chapter-code/the-verdict.txt")
file_path = "the-verdict.txt"
urllib.request.urlretrieve(url, file_path)

with open("the-verdict.txt", "r", encoding="utf-8") as f:
raw_text = f.read()

# Tokenize the code using GPT2 tokenizer version
import tiktoken
token_ids = tiktoken.get_encoding("gpt2").encode(txt, allowed_special={"[EOS]"}) # Allow the user of the tag "[EOS]"

# Print first 50 tokens
print(token_ids[:50])
#[40, 367, 2885, 1464, 1807, 3619, 402, 271, 10899, 2138, 257, 7026, 15632, 438, 2016, 257, 922, 5891, 1576, 438, 568, 340, 373, 645, 1049, 5975, 284, 502, 284, 3285, 326, 11, 287, 262, 6001, 286, 465, 13476, 11, 339, 550, 5710, 465, 12036, 11, 6405, 257, 5527, 27075, 11]

Referanslar