3. Embedding za tokeni

Tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Embedding za tokeni

Baada ya kugawanya data ya maandishi katika tokeni, hatua inayofuata muhimu katika kuandaa data kwa ajili ya kufundisha large language models (LLMs) kama GPT ni kuunda embedding za tokeni. Embedding za tokeni hubadilisha tokeni zisizo za kuendelea (kama maneno au subwords) kuwa vekta za nambari za muendelezo ambazo modeli inaweza kuchakata na kujifunza kutoka kwake. Maelezo haya yanaelezea embedding za tokeni, jinsi zinavyoanzishwa, matumizi yao, na jukumu la positional embeddings katika kuboresha uelewa wa mlolongo wa tokeni na modeli.

Tip

Lengo la hatua ya tatu ni rahisi sana: Kuwaa kila tokeni ya awali katika msamiati vektor lenye vipimo vinavyotakiwa ili kufundisha modeli. Kila neno katika msamiati litakuwa kama nukta katika nafasi yenye dimensheni X.
Kumbuka kwamba awali nafasi ya kila neno katika nafasi hiyo huanzishwa kwa β€œnasibu” na nafasi hizi ni vigezo vinavyoweza kufundishwa (vitaboreshwa wakati wa mafunzo).

Zaidi ya hayo, wakati wa token embedding tabaka lingine la embedding linaundwa ambalo linawakilisha (katika kesi hii) nafasi halisi ya neno katika sentensi ya mafunzo. Kwa njia hii neno katika nafasi tofauti katika sentensi litakuwa na uwakilishi tofauti (maana).

Embedding za tokeni ni nini?

Embedding za tokeni ni uwakilishi wa nambari wa tokeni katika nafasi ya vekta ya kuendelea. Kila tokeni katika msamiati huambatanishwa na vekta ya kipekee yenye vipimo vilivyowekwa. Vekta hizi zinakamata taarifa za semantiki na sintaksia kuhusu tokeni, hivyo kuwezesha modeli kuelewa uhusiano na mifumo katika data.

  • Ukubwa wa msamiati: Idadi yote ya tokeni za kipekee (kwa mfano, maneno, sehemu ndogo za neno) katika msamiati wa modeli.
  • Vipimo vya embedding: Idadi ya thamani za nambari (dimensheni) katika vekta ya kila tokeni. Dimensheni kubwa zaidi zinaweza kunasa taarifa zaidi za undani lakini zinahitaji rasilimali za kompyuta zaidi.

Mfano:

  • Ukubwa wa msamiati: 6 tokeni [1, 2, 3, 4, 5, 6]
  • Vipimo vya embedding: 3 (x, y, z)

Kuanza embedding za tokeni

Mwanzoni mwa mafunzo, embedding za tokeni kwa kawaida huanzishwa kwa thamani ndogo za nasibu. Thamani hizi za awali zinarekebishwa (zibitunzwe/kufinyangwa) wakati wa mafunzo ili kuwakilisha vyema maana za tokeni kulingana na data ya mafunzo.

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)

I don’t have access to that file. Please paste the markdown content of src/AI/AI-llm-architecture/3.-token-embeddings.md here, and I will translate the English text to Swahili while preserving all markdown, code, tags, links, and paths.

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)

Maelezo:

  • Kila safu inalingana na token katika msamiati.
  • Kila nguzo inawakilisha dimensheni katika vektori ya embedding.
  • Kwa mfano, token katika index 3 ina vektori ya embedding [-0.4015, 0.9666, -1.1481].

Kupata embedding ya token:

# Retrieve the embedding for the token at index 3
token_index = torch.tensor([3])
print(embedding_layer(token_index))

I don’t have access to that file. Please paste the markdown content of src/AI/AI-llm-architecture/3.-token-embeddings.md here and I’ll translate the English text to Swahili while preserving all tags, links, refs, paths, code and markdown syntax as you requested.

tensor([[-0.4015,  0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)

Tafsiri:

  • Token kwenye index 3 imewakilishwa na vector [-0.4015, 0.9666, -1.1481].
  • Thamani hizi ni parameta zinazofundishwa ambazo modeli itazibadilisha wakati wa mafunzo ili kuwakilisha vizuri muktadha na maana ya token.

Jinsi Token Embeddings Zinavyofanya Kazi Wakati wa Mafunzo

Wakati wa mafunzo, kila token katika data ya ingizo hubadilishwa kuwa vektori yake ya embedding inayofanana. Vektori hizi hutumika katika hesabu mbalimbali ndani ya modeli, kama vile mekanisimu za umakini (attention mechanisms) na tabaka za mitandao ya neva (neural network layers).

Mfano wa Hali:

  • Ukubwa wa Batch: 8 (idadi ya sampuli zinazosindikwa kwa wakati mmoja)
  • Urefu wa Mfuatano wa Juu: 4 (idadi ya token kwa sampuli)
  • Dimensheni za Embedding: 256

Muundo wa Data:

  • Kila batch inaelezewa kama tensor 3D yenye umbo (batch_size, max_length, embedding_dim).
  • Kwa mfano wetu, umbo litakuwa (8, 4, 256).

Uonyeshaji:

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   β”‚     β”‚
β”‚ β””β”€β”€β”€β”€β”€β”˜     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Ufafanuzi:

  • Kila token kwenye mfululizo inawakilishwa na vektori yenye vipimo 256.
  • Modeli inashughulikia embedding hizi ili kujifunza mifumo ya lugha na kutoa utabiri.

Embedding za Nafasi: Kuongeza Muktadha kwa embedding za tokeni

Wakati embedding za tokeni zinashikilia maana ya tokeni binafsi, hazina kwa asili kuhifadhi nafasi ya tokeni ndani ya mfululizo. Kuelewa mpangilio wa tokeni ni muhimu kwa ufahamu wa lugha. Hapa ndipo embedding za nafasi zinapoingia.

Kwa Nini Embedding za Nafasi Zinahitajika:

  • Mpangilio wa Tokeni Unahusiana: Katika sentensi, maana mara nyingi inategemea mpangilio wa maneno. Kwa mfano, β€œPaka alikaa juu ya zulia” dhidi ya β€œZulia liliikaa juu ya paka.”
  • Kikomo cha Embedding: Bila taarifa za nafasi, modeli inatenda tokeni kama β€œmfuko wa maneno,” ikipuuzia mfululizo wao.

Aina za Embedding za Nafasi:

  1. Absolute Positional Embeddings:
  • Wape vektori ya nafasi ya kipekee kila nafasi katika mfululizo.
  • Mfano: Tokeni ya kwanza katika mfululizo wowote ina embedding ya nafasi ile ile, tokeni ya pili ina nyingine, n.k.
  • Inatumiwa Na: OpenAI’s GPT models.
  1. Relative Positional Embeddings:
  • Kuweka msimbo umbali wa jamaa kati ya tokeni badala ya nafasi zao tambulifu.
  • Mfano: Inaonyesha ni umbali gani kati ya tokeni mbili, bila kujali nafasi zao tambulifu ndani ya mfululizo.
  • Inatumiwa Na: Models like Transformer-XL and some variants of BERT.

Jinsi Embedding za Nafasi Zinavyounganishwa:

  • Vipimo Vivyo Vile: Embedding za nafasi zina vipimo sawa na embedding za tokeni.
  • Ujumlishaji: Zinajumlishwa na embedding za tokeni, zikichanganya utambulisho wa tokeni na taarifa za nafasi bila kuongeza vipimo vya jumla.

Mfano wa Kuongeza Embedding za Nafasi:

Tuseme vektori ya embedding ya tokeni ni [0.5, -0.2, 0.1] na vektori yake ya embedding ya nafasi ni [0.1, 0.3, -0.1]. Embedding iliyojumuishwa itakayotumiwa na modeli itakuwa:

Combined Embedding = Token Embedding + Positional Embedding
= [0.5 + 0.1, -0.2 + 0.3, 0.1 + (-0.1)]
= [0.6, 0.1, 0.0]

Manufaa ya Embeddings za Nafasi:

  • Uelewa wa Muktadha: Modeli inaweza kutofautisha tokens kulingana na nafasi zao.
  • Uelewa wa Mlolongo: Inaiwezesha modeli kuelewa sarufi, sintaksia, na maana zinazotegemea muktadha.

Embeddings za Nafasi katika LLMs za Kisasa

Rotary Positional Embeddings (RoPE)

RoPE huweka nafasi kwa kutumia mzunguko unaotegemea nafasi kwa jozi za vipimo katika vector za query/key, ikigeuza nafasi za mutlak kuwa tofauti za awamu za uhusiano. Hii hutoa taarifa za nafasi kwa uhusiano huku ikidumisha dimensio ya embedding bila kubadilika na hutumika sana katika LLMs za hivi karibuni zinazotumia decoder pekee.

Kwa jinsi token na positional embeddings zinavyounganishwa ndani ya modeli, tazama the LLM architecture page.

Kupanua Dirisha za Muktadha katika RoPE-Based Models

Kazi za hivi karibuni zinaonyesha kwamba urefu wa muktadha mara nyingi umepunguzwa na mpangilio wa kodifikishaji wa nafasi zaidi kuliko matrix ya token embedding yenyewe.

  • Position Interpolation (PI): Inarescale (kurekebisha upya) viashiria vya nafasi ili milolongo mirefu iendane na wigo ulioshuhudiwa wakati wa mafunzo, kuruhusu upanuzi kwa fine-tuning kidogo. Mfano:
# Position Interpolation (PI) intuition
orig_ctx = 2048
new_ctx = 8192
scaled_pos = pos * (orig_ctx / new_ctx)
  • YaRN: Mkakati wa upanuzi wa RoPE unaotumia rasilimali kwa ufanisi, ambao hubadilisha skeli/interpolation ya RoPE ili kuwezesha kuongezeka kwa muktadha hadi urefu mrefu zaidi kwa hatua chache za ziada za mafunzo.

Mfano wa Msimbo

Ifuatayo ni mfano wa msimbo kutoka 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])

Marejeleo

Tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks