ince Ayar LLM'leri (Büyük Dil Modelleri), önceden eğitilmiş bir dil modelinin belirli bir göreve veya veri kümesine uyarlanması sürecidir. Bu, eğitim sürecinin daha küçük ve özelleştirilmiş bir veri kümesiyle devam ettirilmesiyle yapılır. ince ayar tekniği, modelin yanıtlarını belirli alanlara veya uygulamalara daha uygun hale getirerek, üretimdeki değerini ve işletme ihtiyaçlarına bir yanıt olarak değerini artırır.
ince ayar, hukuk, tıp veya güvenlik gibi yüksek doğruluk gerektiren kullanım durumları için özellikle değerlidir. Hukuk alanında lisans (LLM) öğrencilerinin "her işi yapabilen" temellerinin ötesine geçerek belirli konularda uzmanlaşmalarını sağlar. ince ayar ayrıca, LLM'lerin dil veya coğrafi konum gibi belirli bağlamlara göre uyarlanmasını da sağlar. Ayrıca, LLM'lerin farklı donanım platformları için optimize edilmesini sağlayarak hızlı ve verimli bir şekilde çalışmalarını sağlar.
LLM (Büyük Dil Modeli) Nedir?
LLM (Büyük Dil Modeli), mevcut yazılı dilin geniş veri kümelerinden öğrenerek insan benzeri metinleri işleyen ve üreten gelişmiş bir yapay zeka modelidir.
Temel özellikleri şunlardır:
Boyut – LLM'ler, modelin çıktı üretmek için kullandığı öğrenilmiş ağırlıklar olan milyarlarca veya trilyonlarca parametreden oluşur. Bu parametreler, eğitim verilerinden elde edilen bilgiyi içerir.
Eğitim – Hukuk alanında lisansüstü eğitim programları, literatür, web siteleri ve kamuya açık metin verileri de dahil olmak üzere çok çeşitli metin kaynaklarını içeren bir korpus üzerinde gözetimsiz öğrenme yoluyla eğitilir. Model, bir dizideki bir sonraki kelimeyi, kendisinden önce gelen kelimeler göz önünde bulundurularak tahmin ederek öğrenir.
Yetenekler – Hukuk alanında lisans derecesine sahip olanlar, çeviri ve özetlemeden soru cevaplamaya ve metin tamamlamaya kadar çeşitli dille ilgili görevleri, göreve özgü eğitim almadan gerçekleştirebilirler. Daha önce de belirtildiği gibi, daha iyi performans elde etmek için belirli görevlere göre ince ayar yapılabilirler.
Bağlamsal Anlayış – LLM'ler, eğitim yoluyla, birkaç paragraf boyunca bağlamı anlama becerisi geliştirirler; bu da onların daha uzun konuşmalar veya yazılı eserlerde tutarlılığı korumalarına olanak tanır.
Genellik – Bir LLM programı tek bir görev için tasarlanmamıştır, ancak dil içeren herhangi bir soruna uygulanabilir. Çok yönlülüğü, onu çok çeşitli sektörlerde ve uygulamalarda kullanışlı kılar.
Sınırlamalar ve Zorluklar – Yeteneklerine rağmen, Hukuk Lisansı (LL.M.) programlarının bazen makul ama yanlış veya anlamsız cevaplar üretme gibi sınırlamaları vardır. Ayrıca, eğitim verilerinde mevcut olan önyargıları da tekrarlayabilirler.
Etik Hususlar – LLM'lerin yaygınlaştırılması, gizlilik, yanlış bilgilendirme, önyargı, zehirlilik ve çeşitli işgücü sektörleri üzerindeki potansiyel etkilerle ilgili önemli etik soruları gündeme getiriyor.
LLM'lerin ince Ayar Sürecinde Kullanılan Yöntemler Nelerdir?
Bir LLM programını ince ayar yapmak, belirli hedeflere ve mevcut verilere bağlı olarak değişebilen çeşitli adım ve yöntemler içerir. Kullanılan bazı ince ayar türleri şunlardır:
Transfer Öğrenmesi – Bu, önceden eğitilmiş bir modelin belirli bir göreve uyarlandığı temel yöntemdir. Önceden eğitilmiş model, başlangıç noktası görevi görerek, ilk eğitim aşamasından itibaren genel dil anlayışını beraberinde getirir.
Veri Seti Hazırlığı – Modelin gerçekleştireceği görevi temsil eden örnekler içeren özel bir veri seti hazırlanır. Bu veri seti, modelin göreve özgü ayrıntıları öğrenmek için kullanacağı hem girdi metnini hem de beklenen çıktı metnini içerir.
Ağırlık Ayarlaması – LLM ince ayarı sırasında, modelin ağırlıkları (parametreleri), modelin çıktısı ile istenen çıktı arasındaki farkı ölçen kayıp fonksiyonunu en aza indirmek için hafifçe ayarlanır.
Hiperparametre Ayarı – Öğrenme hızı, toplu boyut ve eğitim dönemi sayısı gibi hiperparametreleri ayarlayarak ince ayar işlemi için en uygun ayarları bulma.
Düzenleme Teknikleri – ince ayar veri setine aşırı uyumu önlemek için, bırakma veya ağırlık azalması gibi düzenleme teknikleri uygulanabilir ve böylece modelin yeni, görülmemiş verilere genelleme yapma yeteneği korunur.
Göreve Özgü Mimari Değişiklikler – Bazen, duygu analizi için sınıflandırma katmanları gibi belirli görevleri daha iyi ele almak için ek sinir ağı katmanları veya mekanizmaları eklenir.
Sürekli Öğrenme – Model, gelişen dil kullanımına uyum sağlamak veya dinamik görevlerdeki performansını korumak için sürekli olarak yeni verilerle güncellenebilir.
Bilgi Damıtma – Bu yöntemde, daha küçük bir model, daha büyük ve ince ayarlı bir modelin davranışını taklit edecek şekilde eğitilir ve bu sayede performansta önemli bir kayıp olmadan daha verimli bir dağıtım sağlanır.
insan Geri Bildiriminden Güçlendirmeli Öğrenme (RLHF) – Daha iyi çıktılar üretmek için geri bildirime dayalı ince ayar modelleri, genellikle model davranışını insan değerleri ve tercihleriyle uyumlu hale getirmek için kullanılır.
Döngüde insan – insanlar, ince ayar sürecine dahil olabilir ve model çıktılarına doğrudan geri bildirim sağlayabilir. Model, parametrelerini ayarlamak için bu geri bildirimi kullanır.
Rakip Eğitim – Model, hata yapabileceği zorlu senaryolara maruz bırakılır ve ince ayar, bu hatalardan ders çıkarmasına yardımcı olur, dayanıklılığını ve sağlamlığını artırır.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer
from datasets import Dataset
# 1. Eğitim verisi: Komplo teorileri üzerine, uzun diyaloglu, mizahi sitcom sahneleri (ingilizce)
veri = {
"girdi": [
"<|system|> You are a funny AI.\n<|user|> Write a comedic sitcom scene in English about conspiracy theories with long dialogues.\n<|assistant|>",
"<|system|> You are a funny AI.\n<|user|> Write a comedic sitcom scene in English about conspiracy theories with long dialogues.\n<|assistant|>",
"<|system|> You are a funny AI.\n<|user|> Write a comedic sitcom scene in English about conspiracy theories with long dialogues.\n<|assistant|>"
],
"cevap": [
"""INT. LIVING ROOM - DAY
SAM and ALEX sit on a couch, surrounded by conspiracy theory books and snack wrappers.
SAM
(grinning)
So, I’m telling you, the moon landing was staged. The shadows don’t add up!
ALEX
(rolling eyes)
Yeah, and Elvis is running a secret taco truck somewhere in Mexico.
SAM
Exactly! And that’s the real reason the government wants to keep tortillas classified!
They both laugh hysterically as a dog barks in the background.""",
"""EXT. COFFEE SHOP - AFTERNOON
JESSICA sips her latte, animated.
JESSICA
You know the pigeons? Not real birds. They're drones. Government spies disguised as fluffy informants.
MARK
(nods seriously)
I always suspected something was off. Ever notice how they bob their heads like they're buffering?
JESSICA
Exactly! And that’s why I only trust parrots—they don’t have Wi-Fi.
MARK
(smirks)
Unless the parrots are in on it too. Mind blown.""",
"""INT. OFFICE KITCHEN - MORNING
LISA and DAVID argue over a donut box.
LISA
I swear, the reason they put holes in donuts is to track our sugar intake.
DAVID
(skeptical)
Or maybe it’s a secret portal to the donut dimension? Think about it.
LISA
(whispers)
We might be pawns in a glazed game, David.
DAVID
(sips coffee)
I’m officially never eating donuts again."""
]
}
# 2. Model ve Tokenizer yükleniyor
model_adi = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_adi)
tokenizer.pad_token = tokenizer.eos_token # PAD token'ı olarak EOS (bitiş) token'ı kullanılıyor
# Modeli yükle (CUDA ile GPU'ya, FP16 ile daha hızlı ve düşük VRAM tüketimiyle)
model = AutoModelForCausalLM.from_pretrained(
model_adi,
device_map={"": "cuda"},
torch_dtype=torch.float16
)
# 3. Tokenizasyon fonksiyonu: Girdi ve cevapları birleştirip token'lara çeviriyoruz
def tokenize_fonksiyonu(ornekler):
girisler = ornekler["girdi"]
cevaplar = ornekler["cevap"]
tam_metinler = [g + c for g, c in zip(girisler, cevaplar) # Girdi ve cevapları yan yana birleştiriyoruz
tokenli = tokenizer(tam_metinler, truncation=True, padding="max_length", max_length=512)
tokenli["labels"] = tokenli["input_ids"].copy() # Eğitimde kullanılacak hedefler (labels) input_ids'in kopyası olacak
return tokenli
# 4. LoRA (Low Rank Adaptation) konfigürasyonu
lora_ayarlari = LoraConfig(
r=8, # Rank değeri (LoRA katmanlarının boyutu)
lora_alpha=32, # LoRA ağırlıklarının etkisini belirleyen katsayı
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"], # LoRA uygulanacak katmanlar
lora_dropout=0.05, # Eğitim sırasında %5 dropout
bias="none", # Bias'a dokunulmayacak
task_type="CAUSAL_LM" # Görev tipi: Causal Language Modeling (Oto-regresif dil modeli)
)
# LoRA uyguluyoruz
model = get_peft_model(model, lora_ayarlari)
# 5. Eğitim parametreleri
egitim_ayarlari = TrainingArguments(
output_dir="./tinyllama-lora-komik-tv-senaryosu", # Eğitilen modelin kaydedileceği klasör
per_device_train_batch_size=1, # GPU başına batch boyutu
num_train_epochs=5, # Eğitim döngüsü (epok) sayısı
learning_rate=2e-5, # Öğrenme oranı
logging_steps=1, # Kaç adımda bir log kaydı yapacağı
save_steps=100, # Kaç adımda bir modeli kaydedeceği
fp16=True # 16-bit floating point ile eğitim (daha az VRAM kullanımı)
)
# 6. Trainer nesnesi ile modeli eğitiyoruz
egitici = SFTTrainer(
model=model,
args=egitim_ayarlari,
train_dataset=tokenli_veri_seti
)
egitici.train()
# 7. Eğitilen modeli kaydet
model.save_pretrained("./tinyllama-lora-komik-tv-senaryosu")
# 8. Üretim (Inference): Komik sitcom sahnesi üretmek için parametrelerle text generation
model.eval() # Modeli değerlendirme moduna alıyoruz
girdi_metni = "<|system|> You are a funny AI.\n<|user|> Write a comedic sitcom scene in English about conspiracy theories with long dialogues.\n<|assistant|>"
# Metin üretimi (text generation)
cikti = model.generate(
**girdiler,
max_new_tokens=800, # Üretilecek maksimum yeni token sayısı
do_sample=True, # Örnekleme yaparak (sampling) üretim
top_p=0.85, # Nucleus Sampling (top-p) ile çeşitliliği kısıtlıyoruz
temperature=0.65, # Sıcaklık değeri (düşük sıcaklık -> daha tutarlı, az kaotik cevaplar)
pad_token_id=tokenizer.eos_token_id, # Pad token için EOS token kullanılıyor
eos_token_id=tokenizer.eos_token_id, # Çıkış token olarak EOS kullanılıyor
repetition_penalty=1.2 # Aynı ifadeleri tekrar etmemesi için ceza uygulanıyor
)
# Üretilen sonucu ekrana yazdırıyoruz
print("\n=== Üretilen Komik Sitcom Sahnesi ===\n")
print(tokenizer.decode(cikti[0], skip_special_tokens=True))
metnin aslı ingilizce, 1b model için fena sayılmaz!
<|system|> Sen yardımsever bir yapay zekasın.
<|user|> ingilizce dramatik bir dizi sahnesi yaz.
<|assistant|> Set: Güneşli bir günde lüks bir otel lobisi.
Karakterler: 1) JASON, çekici ve kendine güvenen bir otel müdürü (50'li yaşlarda), 2) KAREN, uzun süreli sevgilisi (40'lı yaşlarda), 3) oğulları JACK (ergenlik çağının sonlarında).
Jason, odadaki olanakların yetersizliğinden dolayı iç çekerek etrafına bakınır. Karen'ın onaylamayan bakışlarını fark eder, ancak görmezden gelmeye karar verir.
Karen, Jack'in peşinden lobiye girer. Jason, ne kadar rahatsız olduğunu fark etmeyeceklerini umarak onları sıcak bir şekilde karşılar.
Jason: Herkese iyi günler! Umarım hepinizin harika bir hafta sonu geçirmişsinizdir. Bugün hepiniz için heyecan verici bir haberimiz var. En yeni misafirimiz geldi - Bay Jameson.
Jack: Gerçekten mi? Bu harika! Lütfen onu ailemizle tanıştırabilir miyiz?
Jason coşkuyla başını sallar. Karen, kibarca gülümseyerek görünüşü korumaya çalışır.
Bu arada, süitte Jameson'ı bir şeyle meşgul olan Karen karşılar. Karen, Jameson'la tanışmak veya varlığını kabul etmekle bile ilgilenmiyor gibi görünür.
Jameson: Ah, merhaba. ikinizle tanıştığıma çok sevindim.
Jameson: Buraya ilk gelişiniz mi?
Jameson: Peki, ikinizi şehrime getiren ne?
Jameson: Hava durumu hakkında ne düşünüyorsunuz? Şimdiye kadar oldukça güzel görünüyor.
Jameson: Evet, doğru. Size etrafı gezdireyim.
Jameson: Mükemmel bir seçim. Bu süit tek kelimeyle muhteşem.
Kendini tanıtır ve Karen'a ihtiyacı olan her konuda yardım etmeyi teklif eder. Karen nezaketle kabul eder.
Karen: Gerçekten çok teşekkür ederim. Bu akşam yemeğini bizim halletmemizi ister misiniz?
Jameson: Kesinlikle. Lütfen ne zaman ayarlayabileceğimizi bana bildirin.
Lobiden ayrılırken Karen, Jameson'ın sokağın karşısından onu izlediğini görür. Ne kadar aptal göründüğünü fark edince yüzü düşer.
Ertesi sabah Jameson, Karen'ı kahvaltıya davet eder. Tatil planlarını tartışır ve birlikte enfes bir brunch keyfi yaparlar. Güneş tekrar doğana kadar saatlerce güneşin altında her şey hakkında konuşurlar.
Akşamın ilerleyen saatlerinde Jameson, Karen'ı akşam yemeğine çıkarırken Jason eşyalarını toplamak için geride kalır. Sokakta yürürken Jameson aniden durur ve Karen'a daha sonra bir şeyler içmek için ona katılmak isteyip istemediğini sorar. Karen kabul etmeden önce tereddüt eder.
Şehirde rahat bir bara varırlar ve Jameson iskambil oynamayı teklif eder. Karen teklifi kabul edip etmeme konusunda kararsız kalarak huzursuz hisseder. Ancak Jameson ısrar eder ve birlikte bir poker oyunu oynar, şakalaşırlar.
Daha sonra Karen'ın otel süitine dönerler. Grup geceyi geçirmek için yerleşir ve seyahat deneyimleri hakkında sohbet ederler. Karen yarın keşfe çıkmayı önerdiğinde, maceralarına başlamak için can atan Jameson hemen kabul eder.
Birdenbire Karen uyanır ve kendini yatakta yalnız bulur. Jameson, cevabını bekleyerek ona umutla bakıyor.
Karen: Şey... tamam. Ama çok çılgınca veya abartılı bir şey yapmak istemiyorum. Sadece rahatla ve kendim ol.
Jameson: Tabii ki. Kulağa mükemmel geliyor.