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.
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.
-
İngilizce ve Türkçe’de ortak anlamlı kelimeler (örn. “you” ↔ “sen”)
-
Embedding vektörleri (dil modelinden alınan)
-
Dil farkı vektörü (Language Adapter):
adapter = embedding_TR - embedding_EN
-
Bu farkı İngilizce token’a ekleyerek Türkçe karşılığını elde etmek:
embedding_TR ≈ embedding_EN + adapter
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)
# Ö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)
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}")
- 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)
İ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.
- 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ı
- 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
- 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
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.