3. Token Embeddings

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Token Gömme Vektörleri

After tokenizing text data, the next critical step in preparing data for training large language models (LLMs) like GPT is creating token embeddings. Token embeddings transform discrete tokens (such as words or subwords) into continuous numerical vectors that the model can process and learn from. This explanation breaks down token embeddings, their initialization, usage, and the role of positional embeddings in enhancing model understanding of token sequences.

Tip

Bu üçüncü aşamanın amacı çok basit: modeli eğitmek için sözlükteki önceki her token’a istenen boyutlarda bir vektör atamak. Sözlükteki her kelime X boyutlu bir uzaydaki bir nokta olacaktır.
Başlangıçta her kelimenin uzaydaki konumunun “rastgele” başlatıldığını ve bu konumların eğitim sırasında güncellenen öğrenilebilir parametreler olduğunu unutmayın.

Ayrıca, token embedding sırasında başka bir gömme katmanı daha oluşturulur; bu katman (bu durumda) kelimenin eğitim cümlesindeki mutlak konumunu temsil eder. Bu sayede bir kelime cümlede farklı pozisyonlarda farklı bir temsile (anlama) sahip olur.

Token Gömme Vektörleri Nedir?

Token gömme vektörleri, tokenların sürekli bir vektör uzayındaki sayısal temsilleridir. Sözlükteki her token sabit boyutlu benzersiz bir vektörle ilişkilendirilir. Bu vektörler tokenların anlamsal ve sözdizimsel bilgisini yakalar ve modelin verideki ilişkileri ve desenleri anlamasını sağlar.

  • Vocabulary Size: Modelin sözlüğündeki benzersiz tokenların toplam sayısı (ör. kelimeler, subword’lar).
  • Embedding Dimensions: Her token vektöründeki sayısal değerlerin (boyutların) sayısı. Daha yüksek boyutlar daha ince bilgileri yakalayabilir ama daha fazla hesaplama kaynağı gerektirir.

Örnek:

  • Vocabulary Size: 6 tokens [1, 2, 3, 4, 5, 6]
  • Embedding Dimensions: 3 (x, y, z)

Token Gömme Vektörlerini Başlatma

Eğitimin başında token gömme vektörleri genellikle küçük rastgele değerlerle başlatılır. Bu başlangıç değerleri, eğitim verilerine dayanarak tokenların anlamlarını daha iyi temsil etmek için eğitim sırasında ayarlanır (ince ayar yapılır).

PyTorch Örneği:

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 the file content. Please paste the markdown (src/AI/AI-llm-architecture/3.-token-embeddings.md) you want translated and I’ll return the Turkish translation while preserving code, tags, links, paths and the exact markdown/html structure per your rules.

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)

Açıklama:

  • Her satır sözlükteki bir token’e karşılık gelir.
  • Her sütun embedding vektöründeki bir boyutu temsil eder.
  • Örneğin, indeks 3’teki token’in embedding vektörü [-0.4015, 0.9666, -1.1481].

Bir token’ın embedding’ine erişme:

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

Çıktı:

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

Yorumlama:

  • İndeks 3’teki token, vektör [-0.4015, 0.9666, -1.1481] ile temsil edilir.
  • Bu değerler eğitilebilir parametrelerdir ve model, token’ın bağlamını ve anlamını daha iyi temsil etmek için eğitim sırasında bunları ayarlar.

Token Embedding’lerinin Eğitim Sırasında Nasıl Çalıştığı

Eğitim sırasında, giriş verisindeki her token ilgili embedding vektörüne dönüştürülür. Bu vektörler daha sonra model içindeki attention mekanizmaları ve sinir ağı katmanları gibi çeşitli hesaplamalarda kullanılır.

Örnek Senaryo:

  • Batch Boyutu: 8 (aynı anda işlenen örnek sayısı)
  • Maksimum Sekans Uzunluğu: 4 (örnek başına token sayısı)
  • Embedding Boyutları: 256

Veri Yapısı:

  • Her batch, (batch_size, max_length, embedding_dim) şeklinde bir 3B tensör ile temsil edilir.
  • Örneğimiz için şekil (8, 4, 256) olurdu.

Görselleştirme:

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   │     │
│ └─────┘     │
└─────────────┘

Açıklama:

  • Dizideki her token 256 boyutlu bir vektör ile temsil edilir.
  • Model, bu embeddingleri işleyerek dil kalıplarını öğrenir ve tahminler üretir.

Pozisyonel Embeddingler: Token Embeddinglerine Bağlam Ekleme

Token embeddingleri bireysel tokenların anlamını yakalasa da, dizideki tokenların konumunu kendiliğinden kodlamazlar. Tokenların sırasını anlamak dil kavrayışı için kritik öneme sahiptir. İşte bu noktada pozisyonel embeddingler devreye girer.

Pozisyonel Embeddinglere Neden İhtiyaç Var:

  • Token Sırası Önemlidir: Cümlelerde anlam genellikle kelimelerin sırasına bağlıdır. Örneğin, “The cat sat on the mat” ile “The mat sat on the cat.”
  • Embedding Sınırlaması: Pozisyonel bilgi olmadan, model tokenları bir “bag of words” olarak ele alır ve sıralarını yok sayar.

Pozisyonel Embedding Türleri:

  1. Absolute Positional Embeddings:
  • Dizideki her pozisyona benzersiz bir pozisyon vektörü atar.
  • Örnek: Herhangi bir dizideki ilk token aynı pozisyonel embedding’i alır, ikinci token başka bir embedding alır, vb.
  • Kullananlar: OpenAI’s GPT models.
  1. Relative Positional Embeddings:
  • Tokenlar arasındaki göreli mesafeyi, onların mutlak pozisyonları yerine kodlar.
  • Örnek: İki tokenın birbirinden ne kadar uzakta olduğunu, dizideki mutlak konumları ne olursa olsun belirtir.
  • Kullananlar: Transformer-XL ve bazı BERT varyantları.

Pozisyonel Embeddingler Nasıl Entegre Edilir:

  • Aynı Boyutsallık: Pozisyonel embeddingler, token embeddingleriyle aynı boyutsallığa sahiptir.
  • Toplama: Token embeddinglerine eklenirler; token kimliğini pozisyonel bilgiyle birleştirirler ve toplam boyutsallığı artırmazlar.

Pozisyonel Embedding Ekleme Örneği:

Varsayalım ki bir token embedding vektörü [0.5, -0.2, 0.1] ve onun pozisyonel embedding vektörü [0.1, 0.3, -0.1] olsun. Model tarafından kullanılan birleşik embedding şöyle olur:

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

Pozisyonel Embeddinglerin Avantajları:

  • Bağlamsal Farkındalık: Model, token’ları pozisyonlarına göre ayırt edebilir.
  • Dizi Anlayışı: Modelin dilbilgisi, sözdizimi ve bağlama bağlı anlamları kavramasını sağlar.

Modern LLM’lerde Pozisyonel Embeddingler

Rotary Pozisyonel Embeddingler (RoPE)

RoPE, query/key vektörlerindeki boyut çiftlerine pozisyona bağlı bir rotasyon uygulayarak pozisyonu kodlar; böylece mutlak pozisyonları göreli faz farklarına dönüştürür. Bu, embedding boyutunu değiştirmeden göreli pozisyon bilgisi sağlar ve son zamanlarda decoder-only LLM’lerde yaygın olarak kullanılır.

Token ve pozisyonel embeddinglerin model içinde nasıl birleştirildiği hakkında, bkz. the LLM architecture page.

RoPE Tabanlı Modellerde Bağlam Penceresinin Uzatılması

Son çalışmalar, bağlam uzunluğunun genellikle token embedding matrisi yerine pozisyonel kodlama şemasıyla sınırlı olduğunu gösteriyor.

  • Position Interpolation (PI): Pozisyon indekslerini yeniden ölçeklendirir, böylece daha uzun diziler eğitim sırasında görülen aralığa eşlenir; bu da az miktarda fine-tuning ile uzatmaya olanak verir. Örnek:
# Position Interpolation (PI) intuition
orig_ctx = 2048
new_ctx = 8192
scaled_pos = pos * (orig_ctx / new_ctx)
  • YaRN: Hesaplama açısından verimli bir RoPE uzatma stratejisi; RoPE ölçekleme/interpolasyonunu değiştirerek daha az ek eğitim adımıyla daha uzun bağlamlara genelleme yapar.

Kod Örneği

Aşağıdaki kod örneği şu adresten alınmıştır: 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])

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin