1. Tokenizacija

Reading time: 3 minutes

Tokenizacija

Tokenizacija je proces razbijanja podataka, kao što je tekst, na manje, upravljive delove nazvane tokeni. Svakom tokenu se zatim dodeljuje jedinstveni numerički identifikator (ID). Ovo je osnovni korak u pripremi teksta za obradu od strane modela mašinskog učenja, posebno u obradi prirodnog jezika (NLP).

tip

Cilj ove inicijalne faze je vrlo jednostavan: Podelite ulaz u tokene (ids) na način koji ima smisla.

Kako funkcioniše tokenizacija

  1. Deljenje teksta:
  • Osnovni tokenizator: Jednostavan tokenizator može podeliti tekst na pojedinačne reči i interpunkcijske znakove, uklanjajući razmake.
  • Primer:
    Tekst: "Zdravo, svete!"
    Tokeni: ["Zdravo", ",", "svete", "!"]
  1. Kreiranje rečnika:
  • Da bi se tokeni pretvorili u numeričke ID-ove, kreira se rečnik. Ovaj rečnik sadrži sve jedinstvene tokene (reči i simbole) i dodeljuje svakom specifičan ID.
  • Specijalni tokeni: Ovo su specijalni simboli dodati rečniku za upravljanje raznim scenarijima:
  • [BOS] (Početak sekvence): Označava početak teksta.
  • [EOS] (Kraj sekvence): Označava kraj teksta.
  • [PAD] (Podočnjaci): Koristi se da sve sekvence u grupi budu iste dužine.
  • [UNK] (Nepoznat): Predstavlja tokene koji nisu u rečniku.
  • Primer:
    Ako je "Zdravo" dodeljen ID 64, "," je 455, "svete" je 78, i "!" je 467, tada:
    "Zdravo, svete!"[64, 455, 78, 467]
  • Upravljanje nepoznatim rečima:
    Ako reč kao što je "Zbogom" nije u rečniku, zamenjuje se sa [UNK].
    "Zbogom, svete!"["[UNK]", ",", "svete", "!"][987, 455, 78, 467]
    (Pretpostavljajući da [UNK] ima ID 987)

Napredne metode tokenizacije

Dok osnovni tokenizator dobro funkcioniše za jednostavne tekstove, ima ograničenja, posebno sa velikim rečnicima i upravljanjem novim ili retkim rečima. Napredne metode tokenizacije rešavaju ove probleme razbijanjem teksta na manje podjedinice ili optimizovanjem procesa tokenizacije.

  1. Byte Pair Encoding (BPE):
  • Svrha: Smanjuje veličinu rečnika i upravlja retkim ili nepoznatim rečima razbijajući ih na često korišćene parove bajtova.
  • Kako funkcioniše:
  • Počinje sa pojedinačnim karakterima kao tokenima.
  • Iterativno spaja najčešće parove tokena u jedan token.
  • Nastavlja dok se ne mogu spojiti više nijedni česti parovi.
  • Prednosti:
  • Eliminira potrebu za [UNK] tokenom jer se sve reči mogu predstaviti kombinovanjem postojećih podrečnih tokena.
  • Efikasniji i fleksibilniji rečnik.
  • Primer:
    "igranje" može biti tokenizovano kao ["igra", "nje"] ako su "igra" i "nje" česti podrečni tokeni.
  1. WordPiece:
  • Koriste: Modeli poput BERT.
  • Svrha: Slično BPE, razbija reči na podrečne jedinice kako bi se upravljalo nepoznatim rečima i smanjila veličina rečnika.
  • Kako funkcioniše:
  • Počinje sa osnovnim rečnikom pojedinačnih karaktera.
  • Iterativno dodaje najčešći podrečni token koji maksimizira verovatnoću podataka za obuku.
  • Koristi probabilistički model da odluči koje podrečne tokene spojiti.
  • Prednosti:
  • Balansira između upravljive veličine rečnika i efikasnog predstavljanja reči.
  • Efikasno upravlja retkim i složenim rečima.
  • Primer:
    "nezadovoljstvo" može biti tokenizovano kao ["ne", "zadovoljstvo"] ili ["ne", "zadovoljan", "stvo"] u zavisnosti od rečnika.
  1. Unigram jezički model:
  • Koriste: Modeli poput SentencePiece.
  • Svrha: Koristi probabilistički model da odredi najverovatniji skup podrečnih tokena.
  • Kako funkcioniše:
  • Počinje sa velikim skupom potencijalnih tokena.
  • Iterativno uklanja tokene koji najmanje poboljšavaju verovatnoću modela za obuku.
  • Finalizuje rečnik gde je svaka reč predstavljena najverovatnijim podrečnim jedinicama.
  • Prednosti:
  • Fleksibilan i može prirodnije modelovati jezik.
  • Često rezultira efikasnijim i kompaktnijim tokenizacijama.
  • Primer:
    "internacionalizacija" može biti tokenizovana u manje, smislene podrečne reči kao ["internacional", "izacija"].

Primer koda

Hajde da ovo bolje razumemo kroz primer koda sa https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:

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]

Reference