1. Tokenizacija

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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: "Hello, world!"
    Tokeni: ["Hello", ",", "world", "!"]
  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 posebni 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] (Puneći): Koristi se da sve sekvence u grupi budu iste dužine.
  • [UNK] (Nepoznat): Predstavlja tokene koji nisu u rečniku.
  • Primer:
    Ako je "Hello" dodeljen ID 64, "," je 455, "world" je 78, a "!" je 467, tada:
    "Hello, world!"[64, 455, 78, 467]
  • Upravljanje nepoznatim rečima:
    Ako reč poput "Bye" nije u rečniku, zamenjuje se sa [UNK].
    "Bye, world!"["[UNK]", ",", "world", "!"][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 č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:
    "playing" može biti tokenizovan kao ["play", "ing"] ako su "play" i "ing" č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:
    "unhappiness" može biti tokenizovan kao ["un", "happiness"] ili ["un", "happy", "ness"] u zavisnosti od rečnika.
  1. Unigram Language 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 obučene podatke.
  • 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:
    "internationalization" može biti tokenizovan u manje, smislene podrečne reči kao što su ["international", "ization"].

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

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks