Skip to content

Instantly share code, notes, and snippets.

@malibayram
Created July 1, 2025 18:43
Show Gist options
  • Save malibayram/4aed4fc28241f3a9e4fd58c8b82364c1 to your computer and use it in GitHub Desktop.
Save malibayram/4aed4fc28241f3a9e4fd58c8b82364c1 to your computer and use it in GitHub Desktop.

💡 Fikrin Özeti: Positional Embedding Matrisi gibi Vektörel Dil Adaptörleri

Bu fikir, dil modellerine dil bilgisi (language semantics) eklemenin parametrik ve vektörel bir yolunu sunuyor. Aşağıda fikri teknik olarak özetliyorum ve gerekli yerlerde örnek kodlarla açıklıyorum.


🎯 Amaç

Bir dil modeline (örneğin İngilizce) başka bir dili (örneğin Türkçe) “öğretmek” için, her bir ortak kavramın embedding farkını öğrenerek bir adaptör matrisi üretmek ve bunu model embedding’ine eklemek.


📌 Ana Bileşenler

  1. İngilizce ve Türkçe’de ortak anlamlı kelimeler (örn. “you” ↔ “sen”)

  2. Embedding vektörleri (dil modelinden alınan)

  3. Dil farkı vektörü (Language Adapter):

    adapter = embedding_TR - embedding_EN
    
  4. Bu farkı İngilizce token’a ekleyerek Türkçe karşılığını elde etmek:

    embedding_TR ≈ embedding_EN + adapter
    

🧪 Adım Adım Uygulama Örneği (PyTorch)

1. Tokenizer ve Model Yükleme

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

# LLaMA tokenizer ve model
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")

# Modelin embedding matrisine erişim
embed_tokens = model.model.embed_tokens  # (vocab_size x hidden_dim)

2. İki Farklı Dildeki Anlamdaş Tokenların Embedding’lerini Alma

# Örnek anlamdaş kelimeler: "you" ↔ "sen"
tok_en = tokenizer("you", return_tensors="pt")["input_ids"][0][1]  # bos token atla
tok_tr = tokenizer("sen", return_tensors="pt")["input_ids"][0][1]

embedding_en = embed_tokens(tok_en)  # (1 x hidden_dim)
embedding_tr = embed_tokens(tok_tr)

3. Dil Adaptör Vektörünü Hesaplama

lang_adapter = embedding_tr - embedding_en

Bu lang_adapter, “you” vektörüne eklendiğinde “sen” vektörüne yakınsıyor:

reconstructed_tr = embedding_en + lang_adapter
cos_sim = torch.nn.functional.cosine_similarity(reconstructed_tr, embedding_tr)
print(f"Benzerlik: {cos_sim.item():.4f}")

🧠 Genişletilmiş Fikir: Tüm Dil İçin Adaptör Matrisi

  • 16.000 İngilizce token + 16.000 Türkçe karşılığı → toplam 16.000 dil farkı vektörü
  • Bunları bir araya getirerek lang_adapter_matrix oluştur:
# language_adapter_matrix: (vocab_size x hidden_dim)
language_adapter_matrix = torch.stack(list_of_adapters)

🔁 Kullanım

İngilizce modele Türkçe adaptasyonu uygulamak için:

model.model.embed_tokens.weight += language_adapter_matrix

Bu işlem aynı positional embedding ekleme mantığında: burada pozisyon yerine dil bilgisi eklenmiş oluyor.


📚 Veri Seti Hazırlığı

  • 100 kitap → İngilizce ve Türkçe profesyonel çevirileri
  • Her iki dilde aynı bağlamda geçen kelimelerden anlam eşlemeleri çıkar
  • Tokenizer saf (pure) halde hazırlanmalı: her kelime tek bir tokenda olmalı

🔬 Model Eğitimi Fikri

  • Başlangıçta sıfırdan küçük bir GPT modeli (örn. 50M parametreli, 32K vocab)
  • Vocab’ın yarısı Türkçe, yarısı İngilizce olacak şekilde tasarlanır
  • Tek model eğitilir, ama iki dilde de düzgünce cümle kurmayı öğrenebilecek kapasitede olur
  • Her iki dilin anlamdaş tokenları eşleştirilir → dil adaptörleri öğrenilir

🎯 Potansiyel Katkılar

  • Token başına dil adaptörü öğrenerek modüler çok dilli sistemler geliştirilebilir
  • Yeni bir dil modeli eğitmek yerine var olan modele plug-in dil bilgisi eklenebilir
  • Düşük kaynaklı diller için etkili transfer öğrenme yöntemi olabilir

📌 Sonuç

Bu yaklaşım, LoRA benzeri bir yöntemle embedding düzeyinde dil farklarını modele eklemeyi amaçlayan yaratıcı ve uygulanabilir bir yöntemdir. Özellikle morfolojik açıdan farklı ve düşük kaynaklı diller için model adaptasyonunu basitleştirebilir.


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment