3. Ugrađivanja tokena
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ugrađivanja tokena
Nakon tokenizacije tekstualnih podataka, sledeći ključni korak u pripremi podataka za treniranje large language models (LLMs) kao što je GPT je kreiranje ugrađivanja tokena. Ugrađivanja tokena transformišu diskretne tokene (kao što su reči ili subreči) u kontinuirane numeričke vektore koje model može da obrađuje i uči iz njih. Ovo objašnjenje razlaže ugrađivanja tokena, njihovu inicijalizaciju, upotrebu i ulogu pozicionih embeddinga u poboljšanju razumevanja redosleda tokena.
Tip
Cilj ove treće faze je vrlo jednostavan: dodeliti svakom od tokena u vokabularu vektor željenih dimenzija da bi se model trenirao. Svaka reč u vokabularu biće tačka u prostoru od X dimenzija.
Imajte na umu da je početno mesto svake reči u prostoru samo inicijalizovano “nasumično” i da su ta početna mesta parametri koji se treniraju (biće poboljšani tokom treniranja).Štaviše, tokom kreiranja token embeddinga stvara se još jedan sloj embeddinga koji predstavlja (u ovom slučaju) apsolutnu poziciju reči u rečenici za treniranje. Na ovaj način reč na različitim pozicijama u rečenici imaće drugačiju reprezentaciju (značenje).
Šta su ugrađivanja tokena?
Ugrađivanja tokena su numerički prikazi tokena u kontinuiranom vektorskom prostoru. Svakom tokenu u vokabularu je pridružen jedinstven vektor fiksnih dimenzija. Ti vektori hvataju semantičke i sintaksičke informacije o tokenima, omogućavajući modelu da razume odnose i obrasce u podacima.
- Veličina vokabulara: Ukupan broj jedinstvenih tokena (npr. reči, subreči) u vokabularu modela.
- Dimenzije embeddinga: Broj numeričkih vrednosti (dimenzija) u vektoru svakog tokena. Veći broj dimenzija može uhvatiti nijansiranije informacije, ali zahteva više računskih resursa.
Primer:
- Veličina vokabulara: 6 tokena [1, 2, 3, 4, 5, 6]
- Dimenzije embeddinga: 3 (x, y, z)
Inicijalizacija ugrađivanja tokena
Na početku treniranja, ugrađivanja tokena se obično inicijalizuju malim nasumičnim vrednostima. Ove početne vrednosti se prilagođavaju (fino podešavaju) tokom treniranja kako bi bolje odražavale značenja tokena na osnovu podataka za treniranje.
PyTorch Example:
import torch
# Set a random seed for reproducibility
torch.manual_seed(123)
# Create an embedding layer with 6 tokens and 3 dimensions
embedding_layer = torch.nn.Embedding(6, 3)
# Display the initial weights (embeddings)
print(embedding_layer.weight)
Molim pošaljite sadržaj fajla src/AI/AI-llm-architecture/3.-token-embeddings.md koji želite da prevedem. Zalepite ovde markdown sadržaj.
Napomena: neću prevoditi kod, nazive hacking tehnika, uobičajene termine iz domena bezbednosti, imena cloud/SaaS platformi, reč “leak”, termine kao pentesting, linkove, tagove i putanje — oni će ostati tačno kako su u originalu.
luaCopy codeParameter containing:
tensor([[ 0.3374, -0.1778, -0.1690],
[ 0.9178, 1.5810, 1.3010],
[ 1.2753, -0.2010, -0.1606],
[-0.4015, 0.9666, -1.1481],
[-1.1589, 0.3255, -0.6315],
[-2.8400, -0.7849, -1.4096]], requires_grad=True)
Objašnjenje:
- Svaki red odgovara tokenu u rečniku.
- Svaka kolona predstavlja dimenziju u embedding vektoru.
- Na primer, token na indeksu
3ima embedding vektor[-0.4015, 0.9666, -1.1481].
Pristup embedding vektoru tokena:
# Retrieve the embedding for the token at index 3
token_index = torch.tensor([3])
print(embedding_layer(token_index))
Niste dostavili sadržaj za prevođenje. Pošaljite tekst iz src/AI/AI-llm-architecture/3.-token-embeddings.md koji treba da prevedem.
tensor([[-0.4015, 0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)
Tumačenje:
- Token na indeksu
3je predstavljen vektorom[-0.4015, 0.9666, -1.1481]. - Ove vrednosti su parametri koji se treniraju i koje će model prilagoditi tokom treninga da bi bolje predstavio kontekst i značenje tokena.
Kako funkcionišu embedding vektori tokena tokom treninga
Tokom treninga, svaki token u ulaznim podacima se pretvara u odgovarajući embedding vektor. Ti vektori se potom koriste u različitim računanjima unutar modela, kao što su mehanizmi pažnje i slojevi neuronskih mreža.
Primer scenarija:
- Veličina batch-a: 8 (broj uzoraka koji se obrađuju istovremeno)
- Maksimalna dužina sekvence: 4 (broj tokena po uzorku)
- Dimenzije embeddinga: 256
Struktura podataka:
- Svaki batch je predstavljen kao 3D tenzor oblika
(batch_size, max_length, embedding_dim). - Za naš primer, oblik bi bio
(8, 4, 256).
Vizualizacija:
cssCopy codeBatch
┌─────────────┐
│ Sample 1 │
│ ┌─────┐ │
│ │Token│ → [x₁₁, x₁₂, ..., x₁₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
│ Sample 2 │
│ ┌─────┐ │
│ │Token│ → [x₂₁, x₂₂, ..., x₂₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
│ ... │
│ Sample 8 │
│ ┌─────┐ │
│ │Token│ → [x₈₁, x₈₂, ..., x₈₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
└─────────────┘
Objašnjenje:
- Svaki token u sekvenci je predstavljen vektorom od 256 dimenzija.
- Model obrađuje ove ugrađene vektore kako bi naučio jezičke obrasce i generisao predviđanja.
Pozicioni ugrađeni vektori: Dodavanje konteksta ugradnim vektorima tokena
Dok ugradni vektori tokena hvataju značenje pojedinačnih tokena, oni inherentno ne kodiraju poziciju tokena unutar sekvence. Razumevanje redosleda tokena je ključno za razumevanje jezika. Tu na scenu stupaju pozicioni ugrađeni vektori.
Zašto su potrebni pozicioni ugrađeni vektori:
- Redosled tokena je bitan: U rečenicama, značenje često zavisi od rasporeda reči. Na primer, “The cat sat on the mat” vs. “The mat sat on the cat.”
- Ograničenje ugradnih vektora: Bez pozicione informacije, model tretira tokene kao “bag of words”, ignorišući njihov redosled.
Tipovi pozicionih ugradnih vektora:
- Apsolutni pozicioni ugrađeni vektori:
- Dodeljuju jedinstveni pozicioni vektor svakoj poziciji u sekvenci.
- Primer: Prvi token u bilo kojoj sekvenci ima isti pozicioni embedding, drugi token ima drugi, i tako dalje.
- Koriste: OpenAI’s GPT models.
- Relativni pozicioni ugrađeni vektori:
- Kodiraju relativnu udaljenost između tokena umesto njihovih apsolutnih pozicija.
- Primer: Označavaju koliko su dva tokena udaljena, bez obzira na njihove apsolutne pozicije u sekvenci.
- Koriste: Models like Transformer-XL and some variants of BERT.
Kako se pozicioni ugrađeni vektori integrišu:
- Iste dimenzije: Pozicioni ugrađeni vektori imaju istu dimenzionalnost kao ugradni vektori tokena.
- Saberanje: Dodaju se ugradnim vektorima tokena, kombinujući identitet tokena sa pozicionom informacijom bez povećanja ukupne dimenzionalnosti.
Primer dodavanja pozicionih ugradnih vektora:
Pretpostavimo da je vektor token embedding-a [0.5, -0.2, 0.1] i da je njegov pozicioni vektor [0.1, 0.3, -0.1]. Kombinovani embedding koji model koristi bio bi:
Combined Embedding = Token Embedding + Positional Embedding
= [0.5 + 0.1, -0.2 + 0.3, 0.1 + (-0.1)]
= [0.6, 0.1, 0.0]
Prednosti pozicionih embeddinga:
- Svesnost konteksta: Model može da razlikuje tokene na osnovu njihovih pozicija.
- Razumevanje sekvenci: Omogućava modelu da razume gramatiku, sintaksu i značenja koja zavise od konteksta.
Positional Embeddings in Modern LLMs
Rotary Positional Embeddings (RoPE)
RoPE kodira poziciju primenom rotacije zavisne od pozicije na parove dimenzija u query/key vektorima, pretvarajući apsolutne pozicije u relativne fazne razlike. To obezbeđuje informacije o relativnoj poziciji uz zadržavanje dimenzionalnosti embeddinga nepromenjenom i široko se koristi u novijim decoder-only LLMs.
For how token and positional embeddings are combined inside the model, see the LLM architecture page.
Extending Context Windows in RoPE-Based Models
Nedavna istraživanja pokazuju da je dužina konteksta često ograničena šemom pozicionog kodiranja, a ne matricom token embeddinga.
- Position Interpolation (PI): Premera indekse pozicija tako da duže sekvence mapiraju u opseg viđen tokom treninga, omogućavajući proširenje uz minimalno fino podešavanje. Primer:
# Position Interpolation (PI) intuition
orig_ctx = 2048
new_ctx = 8192
scaled_pos = pos * (orig_ctx / new_ctx)
- YaRN: Računski efikasna RoPE ekstenziona strategija koja modifikuje RoPE skaliranje/interpolaciju kako bi ekstrapolirala na duže kontekste uz manje dodatnih koraka treniranja.
Primer koda
U nastavku primer koda iz https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
# Use previous code...
# Create dimensional emdeddings
"""
BPE uses a vocabulary of 50257 words
Let's supose we want to use 256 dimensions (instead of the millions used by LLMs)
"""
vocab_size = 50257
output_dim = 256
token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)
## Generate the dataloader like before
max_length = 4
dataloader = create_dataloader_v1(
raw_text, batch_size=8, max_length=max_length,
stride=max_length, shuffle=False
)
data_iter = iter(dataloader)
inputs, targets = next(data_iter)
# Apply embeddings
token_embeddings = token_embedding_layer(inputs)
print(token_embeddings.shape)
torch.Size([8, 4, 256]) # 8 x 4 x 256
# Generate absolute embeddings
context_length = max_length
pos_embedding_layer = torch.nn.Embedding(context_length, output_dim)
pos_embeddings = pos_embedding_layer(torch.arange(max_length))
input_embeddings = token_embeddings + pos_embeddings
print(input_embeddings.shape) # torch.Size([8, 4, 256])
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


