hacktricks/todo/llm-training-data-preparation/1.-tokenizing.md

5.7 KiB
Raw Blame History

1. Tokenizing

Tokenizing

Tokenizing, verileri, örneğin metni, daha küçük, yönetilebilir parçalara token denir. 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.

{% hint style="success" %} Bu ilk aşamanın amacı çok basittir: Girdiyi mantıklı bir şekilde token'lara (id'lere) ayırmak. {% endhint %}

Tokenizing Nasıl Çalışır

  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: Bu, ç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 dizileri aynı uzunlukta yapmak 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" kelimesi kelime dağarcığında yoksa, [UNK] ile değiştirilir.
    "Hoşça kal, dünya!"["[UNK]", ",", "dünya", "!"][987, 455, 78, 467]
    (Varsayalım ki [UNK] ID 987'dir)

Gelişmiş Tokenizing Yöntemleri

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

  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 getirir.
  • 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ığı.
  • Örnek:
    "oynama" token olarak ["oyna", "ma"] şeklinde ayrılabilir eğer "oyna" ve "ma" sık kullanılan alt kelimelerse.
  1. WordPiece:
  • Kullananlar: 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 alt kelimeyi iteratif 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", "suz", "luk"] veya ["mut", "suzluk"] şeklinde ayrılabilir, kelime dağarcığına bağlı olarak.
  1. Unigram Dil Modeli:
  • Kullananlar: 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ı iteratif olarak kaldırır.
  • Her kelimenin en olası alt kelime birimleri ile temsil edildiği bir kelime dağarcığı oluşturur.
  • Faydaları:
  • Esnek ve 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.

Code Example

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

# 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