Büyük Dil Modellerini (LLM) ince ayarlamanın (fine-tuning) her zaman devasa veri setleri gerektirdiği yaygın bir yanılgıdır. Oysa günümüz teknolojileri ve yenilikçi yaklaşımlar sayesinde, küçük veri setleriyle bile etkili LLM optimizasyonu yapmak mümkün. Bu makalede, bu miti çürütecek yöntemleri, stratejileri ve gerçek dünya uygulamalarını derinlemesine inceleyeceğiz.
Yapay zeka dünyasında son yılların en çok konuşulan konularından biri olan Büyük Dil Modelleri (LLM’ler), milyarlarca parametreye sahip ve internet üzerindeki devasa metin verileriyle eğitilmiş yapay zeka modelleridir. Bu modeller, insan dilini anlama, metin üretme, çeviri yapma ve soruları yanıtlama gibi geniş bir yelpazede görevleri üstün bir başarıyla yerine getirebilirler. Ancak, bir LLM genel amaçlı olarak eğitildiğinde, belirli bir niş alana veya spesifik bir göreve özel olarak optimize edilmemiş olabilir. İşte tam bu noktada, “ince ayar” (fine-tuning) kavramı devreye girer.
İnce ayar, önceden eğitilmiş bir LLM’yi, belirli bir görev veya veri kümesi üzerinde ek eğitimden geçirerek performansını artırma sürecidir. Temelde bir transfer öğrenme tekniği olan ince ayar, modelin genel dil yeteneklerini korurken, onu belirli bir bağlama veya kullanım durumuna adapte etmeyi amaçlar. Örneğin, genel bir LLM, hukuk metinlerini analiz etme veya tıp alanında soruları yanıtlama konusunda yeterli hassasiyete sahip olmayabilir. Bu gibi durumlarda, ilgili alana ait küçük ama kaliteli bir veri setiyle yapılacak ince ayar, modelin bu niş görevlerdeki doğruluğunu ve tutarlılığını önemli ölçüde artırabilir.
Veri seti boyutunun ince ayar üzerindeki etkisi, uzun süre bu konudaki en büyük tartışma noktalarından biri olmuştur. Geleneksel olarak, derin öğrenme modellerinin başarılı bir şekilde eğitilmesi için büyük veri setlerinin vazgeçilmez olduğu düşünülüyordu. Bu düşünce, LLM’lerin milyarlarca parametreye sahip olması ve bu parametreleri optimize etmek için çok sayıda örnek gerektirdiği varsayımına dayanıyordu. Nitekim, sıfırdan bir LLM eğitmek gerçekten de muazzam miktarda veri ve hesaplama gücü gerektirir. Ancak ince ayar, sıfırdan eğitimden farklıdır; model zaten geniş bir dil bilgisine sahiptir ve biz sadece bu bilgiyi belirli bir alana yönlendirmeye çalışırız. Dolayısıyla, tüm modeli baştan sona eğitmek yerine, sadece belirli katmanlarını veya eklentilerini güncellemek, çok daha az veriyle de başarılı sonuçlar elde etmemizi sağlar.
İnce ayar ile karıştırılmaması gereken bir diğer önemli kavram ise “istem mühendisliği” (prompt engineering) veya “bağlam içi öğrenme” (in-context learning)’dir. İstem mühendisliği, modele doğru soruları sorarak veya yeterli bağlamı sağlayarak, mevcut modelin performansını optimize etme sanatıdır. Bu yöntem, herhangi bir model değişikliği yapmadan, modelin mevcut yeteneklerini en iyi şekilde kullanmayı hedefler. Oysa ince ayar, modelin ağırlıklarını doğrudan değiştirerek, onun temel davranışını ve bilgisini kalıcı olarak adapte etmeyi içerir. İstem mühendisliği hızlı sonuçlar verebilirken, ince ayar, modelin daha derinlemesine ve kalıcı bir şekilde öğrenmesini sağlar. Özellikle çok spesifik terminolojiler veya karmaşık çıkarımlar gerektiren niş görevlerde, istem mühendisliğinin sınırlarına ulaşıldığında ince ayar, çok daha güçlü ve verimli bir çözüm sunabilir. Bu sayede, yapay zeka ve doğal dil işleme alanındaki uygulamaların çeşitliliği ve etkinliği artırılırken, gereksiz kaynak tüketiminin de önüne geçilir.
Mit mi Gerçek mi? Küçük Veri Setleriyle İnce Ayar Yapmak Mümkün mü?
Büyük Dil Modellerini (LLM) ince ayarlamak için her zaman devasa, milyarlarca tokenlık veri setlerine ihtiyaç duyulduğu inancı, özellikle LLM’lerin ilk ortaya çıktığı ve sıfırdan eğitim maliyetlerinin çok yüksek olduğu dönemlerde pekişmiştir. Bu mit, kısmen modelin karmaşıklığına ve eğitim için gereken hesaplama gücüne atfedilebilir. Ancak teknoloji geliştikçe ve “transfer öğrenme” gibi kavramlar daha iyi anlaşıldıkça, bu düşüncenin her zaman doğru olmadığını görmeye başladık. Gerçek şu ki, küçük veri setleriyle etkili LLM ince ayarı yapmak sadece mümkün değil, aynı zamanda belirli senaryolarda oldukça verimli ve gerekli bir yaklaşımdır.
Bu mitin ortaya çıkmasındaki temel nedenlerden biri, “eğitim” ile “ince ayar” arasındaki farkın yeterince vurgulanmamasıdır. Sıfırdan bir LLM eğitmek, modelin dili ve dünya bilgisini sıfırdan öğrenmesini gerektirir ki bu, milyarlarca veri noktası ve haftalarca GPU süresi demektir. Oysa ince ayar, zaten önceden eğitilmiş, geniş bir dil bilgisine sahip bir modelin üzerine inşa edilir. Model, dilin genel yapısını, gramer kurallarını, kelime anlamlarını ve geniş dünya bilgisini zaten bilmektedir. Bizim ince ayar ile yaptığımız şey, bu genel bilgiyi belirli bir niş alana veya göreve odaklamaktır. Bu durum, bir çocuğa okuma yazma öğretmek yerine, zaten okuma yazma bilen birine belirli bir uzmanlık alanı hakkında bilgi vermek gibidir; ikincisi çok daha az çaba ve veri gerektirir.
Transfer öğrenme, bu paradigmada merkezi bir rol oynar. Önceden eğitilmiş bir modelin, bir görevden edindiği bilgiyi başka bir benzer göreve aktarması ilkesine dayanır. LLM’ler bağlamında, önceden eğitilmiş modelin genel dil anlama ve üretme yeteneği, daha spesifik görevler için bir “başlangıç noktası” görevi görür. Bu sayede, modelin tüm parametrelerini sıfırdan öğrenmesi yerine, sadece göreve özgü ince ayarlar yapması yeterli olur. Bu da, çok daha küçük veri setleriyle bile anlamlı performans artışları elde etmenin kapısını aralar. Üstelik, modelin önceden edindiği geniş bilgi, küçük veri setlerinde olası aşırı uyum (overfitting) riskini de azaltmaya yardımcı olur, çünkü model genelleme yeteneğini büyük ölçüde korur.
Küçük veri setleriyle başarılı ince ayar için bazı kritik stratejiler bulunmaktadır. Öncelikle, veri kalitesi, miktarından çok daha önemlidir. Az sayıda ancak mükemmel derecede etiketlenmiş ve görevi iyi temsil eden örnekler, binlerce gürültülü veya alakasız örnekten daha değerli olabilir. İkincil olarak, “Parametre Etkin İnce Ayar” (PEFT) metodolojileri, bu alanda devrim yaratmıştır. LoRA (Low-Rank Adaptation) ve QLoRA gibi teknikler, modelin tüm ağırlıklarını değiştirmek yerine, sadece küçük, eklenti (adapter) ağırlıklarını ayarlayarak veya düşük sıralı matris çarpanları ekleyerek ince ayar yapılmasına olanak tanır. Bu yöntemler, çok daha az hesaplama kaynağı ve dolayısıyla daha az veri ile hızlı ve etkili ince ayar yapılmasına imkan tanır. Modelin orijinal ağırlıkları dondurulduğu için, aşırı uyum riski de azalır ve yalnızca göreve özel bilgileri öğrenmeye odaklanılır.
Peki, ne tür görevlerde küçük veri setleri yeterli olabilir? Özellikle niş alanlar, dilin belli nüansları veya sınırlı domain bilgisi gerektiren görevler bu kategoriye girer. Örneğin, belirli bir şirketin ürünleriyle ilgili müşteri şikayetlerini sınıflandırma, belirli bir hukuki terimin geçtiği cümlelerdeki bağlamı anlama, belirli bir tıbbi raporun ana hatlarını çıkarma veya belirli bir stil veya tona sahip metinler üretme gibi görevler, genellikle küçük ve özenle hazırlanmış veri setleriyle başarılı bir şekilde ince ayar yapılabilir. Bu, aynı zamanda, daha küçük bütçeli projelerin veya bireysel geliştiricilerin de LLM teknolojilerinden faydalanmasını mümkün kılarak, yapay zekanın demokratikleşmesine katkıda bulunur. Kısacası, büyük veri setlerinin gerekliliği, LLM ince ayarı bağlamında bir mit olmaktan öteye geçmemekte, aksine küçük ve kaliteli verinin gücü gün geçtikçe daha da önem kazanmaktadır.
Etkili Küçük Veri Seti İnce Ayarı Nasıl Yapılır? Stratejiler ve Teknikler
Küçük veri setleriyle Büyük Dil Modellerini (LLM) ince ayarlamak, doğru stratejiler ve teknikler uygulandığında son derece etkili olabilir. Bu bölümde, bu sürecin temel taşlarını oluşturan veri hazırlığı ve Parametre Etkin İnce Ayar (PEFT) metodolojilerini detaylı bir şekilde inceleyeceğiz. Bu yaklaşımlar, kısıtlı kaynaklara sahip olsanız bile, modelinizi belirli bir göreve veya domaine mükemmel bir şekilde adapte etmenizi sağlar.
Veri Hazırlığı ve Ön İşleme: Küçük Verinin Gücü
Küçük veri setleriyle ince ayar yaparken, veri kalitesi miktarın önüne geçer. Az sayıda örneğiniz olsa bile, bu örneklerin görevi net bir şekilde temsil etmesi ve yüksek doğrulukta etiketlenmesi kritiktir. İşte bu aşamada uygulayabileceğiniz bazı ipuçları ve teknikler:
- Odaklı Veri Toplama: İnce ayar yapmak istediğiniz spesifik göreve en uygun verileri toplayın. Genel veriler yerine, hedeflenen bağlama ait anahtar kelimeler, cümle yapıları ve bilgi içerdiğinden emin olun. Örneğin, bir hukuk botu için yalnızca hukuki metinleri hedefleyin.
- Titiz Veri Temizleme: Topladığınız verilerdeki gürültüleri (yazım hataları, anlamsız karakterler, tekrar eden cümleler) ayıklayın. Kaliteli veri, modelin gereksiz bilgilerle boğulmasını engeller.
- Uzman Etiketleme: Özellikle niş alanlarda, verilerin bir alan uzmanı tarafından etiketlenmesi, modelin doğru örüntüleri öğrenmesi için hayati öneme sahiptir. Bu, modelin görevi doğru anlamlandırmasına yardımcı olur.
- Veri Artırma (Data Augmentation): Elinizdeki sınırlı veri setini yapay olarak genişletmek için çeşitli teknikler kullanabilirsiniz. Bu, modelin daha geniş bir örnek yelpazesi görmesini sağlayarak genelleme yeteneğini artırır ve aşırı uyum riskini azaltır.
- Paraphrasing (Yeniden İfade Etme): Orijinal cümleleri anlamını koruyarak farklı şekillerde ifade edin. Örneğin, “Bugün hava güzel” cümlesi için “Hava şu an çok hoş” veya “Güzel bir gün geçiriyoruz” gibi varyasyonlar oluşturun.
- Synonym Replacement (Eş Anlamlı Kelime Değişimi): Cümledeki belirli kelimeleri eş anlamlılarıyla değiştirin.
- Back-translation (Geriye Çeviri): Cümleyi bir dilden başka bir dile, ardından tekrar orijinal dile çevirerek küçük anlamsal farklılıklar yaratın. Bu, modelin aynı bilgiyi farklı ifade biçimleriyle tanımasına yardımcı olur.
- Sentetik Veri Üretimi: Mevcut LLM’inizi kullanarak, belirli bir format veya tema hakkında yeni, sentetik veriler üretin. Bu, modelin göreve uygun daha fazla örnek görmesini sağlayabilir, ancak üretilen verilerin kalitesi dikkatlice kontrol edilmelidir. Örneğin, “Bu cümle pozitif bir duygu ifade ediyor” etiketiyle yeni pozitif cümleler üretmesini isteyebilirsiniz.
- Etkili Veri Örneklemesi: Eğer elinizde nispeten büyük bir veri seti varsa ancak ince ayar için daha küçük bir alt küme kullanmanız gerekiyorsa, örnekleme yöntemleri (stratified sampling gibi) kullanarak bu alt kümenin ana veri setini iyi temsil ettiğinden emin olun.
Parametre Etkin İnce Ayar (PEFT) Metodolojileri: LoRA ve QLoRA
Parametre Etkin İnce Ayar (PEFT) yöntemleri, büyük LLM’lerin tamamını eğitmek yerine, sadece küçük bir kısmını veya eklenen yeni katmanları eğiterek ince ayar yapmayı sağlayan tekniklerdir. Bu, bellek ve hesaplama maliyetlerini dramatik bir şekilde düşürürken, genellikle tam ince ayara yakın performans elde etmenizi sağlar. PEFT, özellikle küçük veri setleriyle çalışırken aşırı uyum (overfitting) riskini de azaltır, çünkü modelin orijinal, geniş bilgi tabanını büyük ölçüde korur.
- LoRA (Low-Rank Adaptation): LoRA, en popüler ve etkili PEFT tekniklerinden biridir. Temel prensibi, önceden eğitilmiş modelin mevcut ağırlık matrislerini dondurmak ve her bir ağırlık matrisinin yanına, düşük dereceli (low-rank) iki küçük matris ekleyerek bunları eğitmektir. Bu küçük matrisler, orijinal ağırlık matrisine eklenerek modelin davranışını ayarlar.
- Nasıl Çalışır? Diyelim ki orijinal bir ağırlık matrisiniz (W) var. LoRA, buna A ve B adında iki küçük matris ekler, öyle ki W’ = W + BA olur. Burada B matrisi rastgele başlatılır ve A matrisi sıfırlardan oluşur, böylece ince ayar başlamadan modelin davranışı değişmez. Eğitim sırasında sadece A ve B matrisleri güncellenir. Bu, milyarlarca parametre yerine sadece binlerce veya on binlerce parametrenin eğitilmesi anlamına gelir.
- Avantajları: Düşük bellek tüketimi, çok daha hızlı eğitim, eğitilen model ağırlıklarının çok küçük olması (kolay depolama ve dağıtım), orijinal modelin sağlamlığının korunması.
- QLoRA (Quantized LoRA): QLoRA, LoRA’nın daha da optimize edilmiş bir versiyonudur. Temel fikri, orijinal LLM’nin ağırlıklarını 4-bitlik kuantize edilmiş (nicelleştirilmiş) bir biçimde yüklemek ve LoRA adaptörlerini bu kuantize edilmiş modele ekleyerek eğitmektir. Kuantizasyon, model ağırlıklarının daha az bit kullanarak temsil edilmesini sağlar, bu da bellek kullanımını radikal bir şekilde azaltır.
- Nasıl Çalışır? QLoRA, 4-bit NormalFloat (NF4) veri tipini kullanarak model ağırlıklarını kuantize eder ve bu kuantize edilmiş ağırlıklar üzerinde LoRA adaptörlerini eğitir. Bu, modelin daha az GPU belleğiyle yüklenmesini ve ince ayar yapılmasını mümkün kılar, hatta 24GB VRAM’e sahip bir GPU’da 65B parametreli modelleri bile ince ayar yapmayı mümkün kılar.
- Avantajları: LoRA’ya göre daha da düşük bellek tüketimi, daha büyük modellerle daha erişilebilir ince ayar, çevresel etkiyi azaltma.
- Diğer PEFT Yöntemleri:
- Prompt Tuning: Modelin girişine küçük, öğrenilebilir bir “sanal prompt” ekleyerek bu prompt’u eğitmeyi içerir. Modelin geri kalan ağırlıkları sabittir.
- Adapter-based Tuning: Modelin katmanları arasına küçük adaptör modülleri eklemeyi ve sadece bu adaptörleri eğitmeyi içerir.
Bu stratejiler ve PEFT teknikleri sayesinde, küçük veri setleriyle bile LLM’lerinizi belirli görevler için oldukça yetkin hale getirebilirsiniz. Unutmayın, önemli olan miktardan ziyade kalitedir ve doğru araçlarla kısıtlı veriden bile maksimum fayda sağlamak mümkündür.
Gerçek Dünya Senaryoları: Küçük Veri Setleriyle Başarı Hikayeleri
Teorik bilgiler ne kadar değerli olsa da, gerçek dünya uygulamaları, küçük veri setleriyle ince ayar yapmanın ne kadar etkili olabileceğini somut bir şekilde gösterir. Aşağıda, bu yaklaşımların başarıyla uygulandığı iki vaka analizini bulacaksınız. Bu örnekler, çeşitli sektörlerde nasıl değerli sonuçlar elde edildiğini ve büyük veri setlerinin her zaman bir zorunluluk olmadığını kanıtlıyor.
Vaka Analizi 1: Müşteri Destek Sohbet Botu Optimizasyonu
Senaryo: Orta ölçekli bir e-ticaret şirketi, genel bir LLM tabanlı sohbet botunu kullanarak müşteri destek hizmetlerini otomatize etmeyi hedefliyordu. Ancak, genel amaçlı LLM, şirketin kendine özgü ürün terminolojisi, sıkça sorulan sorular (SSS) ve şirket politikaları hakkında yeterli bilgiye sahip değildi. Müşteri temsilcilerinin rutin ve tekrar eden sorulara harcadığı zamanı azaltmak, şirketin öncelikleri arasındaydı. Sıfırdan büyük bir veri seti oluşturmak hem zaman alıcı hem de maliyetli olacaktı.
Veri Seti: Şirket, ince ayar için nispeten küçük bir veri seti oluşturmaya karar verdi. Bu veri seti şunları içeriyordu:
- Mevcut SSS dokümanlarından elde edilen yaklaşık 500 soru-cevap çifti.
- Geçmiş müşteri konuşmalarından (anonimleştirilmiş) ayıklanmış 300 adet spesifik problem ve çözüm senaryosu.
- Şirket içi uzmanlar tarafından manuel olarak etiketlenmiş 200 adet “nasıl yapılır” yönergesi.
Toplamda yaklaşık 1000 örnekten oluşan bu veri seti, genel bir LLM için çok küçük görünse de, yüksek kalitede ve hedefe odaklanmış bir yapıya sahipti.
Uygulanan Teknikler:
- Temel Model Seçimi: Şirket, Hugging Face Hub’dan genel amaçlı, açık kaynaklı bir LLM (örneğin, 7B parametreli bir model) seçti.
- LoRA Entegrasyonu: Düşük bellek ve hızlı eğitim avantajlarından yararlanmak için LoRA (Low-Rank Adaptation) tekniği kullanılmaya karar verildi. Modelin orijinal ağırlıkları dondurularak, sadece küçük LoRA adaptörleri eğitildi.
- Sentetik Veri Üretimi ve Artırma: Küçük veri setini güçlendirmek için, mevcut SSS’lerden yola çıkarak varyasyonlar oluşturuldu. Örneğin, “Siparişimi nasıl takip edebilirim?” sorusundan “Kargom nerede?”, “Gönderi durumunu öğrenme” gibi farklı formülasyonlar sentetik olarak üretildi. Ayrıca, mevcut konuşma senaryolarındaki anahtar kelimeler değiştirilerek yeni senaryolar türetildi.
Sonuçlar: 3-4 saatlik kısa bir eğitim süresinin ardından ince ayarlı modelin performansı önemli ölçüde arttı.
- Doğruluk Artışı: Şirket ürünleri ve politikalarıyla ilgili spesifik sorularda yanıt doğruluğu %40’tan %85’in üzerine çıktı.
- Tutarlı ve İlgili Yanıtlar: Model, artık şirket jargonunu daha iyi anlıyor ve çok daha alakalı, tutarlı yanıtlar üretiyordu.
- Operasyonel Verimlilik: İlk haftalarda, botun cevaplayabildiği müşteri sorularının oranı %25’ten %60’a yükseldi, bu da müşteri destek ekibinin yükünü hafifletti ve daha karmaşık sorunlara odaklanmalarını sağladı.
Bu vaka, küçük ve kaliteli bir veri setinin, doğru ince ayar teknikleriyle birleştiğinde, genel bir LLM’yi belirli bir iş alanına başarıyla adapte edebileceğini gösteriyor.
Vaka Analizi 2: Hukuki Metin Özeti Çıkarma
Senaryo: Büyük bir hukuk bürosu, her gün gelen yüzlerce sayfalık hukuki dokümanı (mahkeme kararları, sözleşmeler, kanun maddeleri) özetlemek için harcanan insan emeğinden tasarruf etmek istiyordu. Genel amaçlı özetleme modelleri, hukuki metinlerin karmaşık yapısı ve spesifik terminolojisi nedeniyle yetersiz kalıyordu. Hukuk bürosunun elinde, daha önce insanlar tarafından özetlenmiş, ancak sınırlı sayıda (yaklaşık 700-800 adet) hukuki doküman ve özet çifti bulunuyordu.
Veri Seti: Yaklaşık 750 adet hukuki doküman ve bunların uzmanlar tarafından yazılmış kısa özetlerinden oluşan bir veri seti kullanıldı. Bu veri seti, son derece yüksek kaliteli ve domain’e özgüydü.
Uygulanan Teknikler:
- Temel Model Seçimi: Hukuki metinlerin uzun ve karmaşık yapısı göz önüne alınarak, daha büyük parametreli ancak yine de açık kaynaklı bir LLM (örneğin, 13B veya 30B parametre aralığında bir model) seçildi.
- QLoRA Kullanımı: Bu kadar büyük bir modeli, kısıtlı GPU belleğiyle ince ayarlamak için QLoRA (Quantized LoRA) tercih edildi. 4-bit kuantizasyon sayesinde model, daha uygun maliyetli donanımlarda yüklenebildi ve eğitilebildi.
- Dikkatli Veri Etiketleme ve Standardizasyon: Mevcut özetlerin tutarlı bir formatta olduğundan ve anahtar bilgileri içerdiğinden emin olmak için ek bir kontrol ve standardizasyon sürecinden geçirildi. Özetlerin uzunluğu ve vurgulanan noktalar konusunda belirli yönergeler belirlendi.
Sonuçlar: QLoRA ile yapılan ince ayar, birkaç günlük eğitim süresinin ardından dikkat çekici sonuçlar verdi.
- Yüksek Doğrulukta Özetler: Model, hukuki metinlerin özünü yakalayabilen, ilgili terminolojiyi doğru kullanabilen ve anahtar kararları veya maddeleri vurgulayan özetler üretebildi. İnsan değerlendirmelerine göre özetlerin kalitesi %70’ten %90’ın üzerine çıktı.
- Zaman Tasarrufu: Hukukçular, özetleme sürecinde harcadıkları zamanı %50’den fazla azaltabildiler, bu da onların daha karmaşık ve stratejik görevlere odaklanmasını sağladı.
- Uygun Maliyet: QLoRA sayesinde, pahalı ve yüksek performanslı GPU altyapısına yatırım yapmaya gerek kalmadan, mevcut donanımlarla büyük bir LLM’nin ince ayarı başarıyla gerçekleştirildi.
Bu örnekler, küçük ve kaliteli veri setleriyle, doğru PEFT teknikleri kullanılarak, genel amaçlı LLM’lerin belirli sektörlerin niş ihtiyaçlarına nasıl başarıyla adapte edilebileceğini net bir şekilde ortaya koymaktadır. Büyük veri seti miti, bu tür başarı hikayeleriyle giderek daha fazla çürütülmektedir.
Uygulamalı Bir Örnek: Küçük Veriyle LLM İnce Ayarı (Kod Bloklarıyla)
Artık teorik bilgileri ve vaka analizlerini geride bıraktığımıza göre, küçük bir veri seti kullanarak bir Büyük Dil Modelini (LLM) nasıl ince ayar yapabileceğimize dair uygulamalı bir örneğe geçelim. Bu örnekte, Python ve Hugging Face ekosistemindeki popüler kütüphaneleri (transformers, peft, bitsandbytes, trl) kullanarak LoRA ile bir modelin ince ayarını adım adım göstereceğiz. Amacımız, basit bir duygu analizi görevi için genel bir LLM’yi özelleştirmek.
Ortam Kurulumu ve Veri Yükleme
İlk olarak, gerekli kütüphaneleri yükleyelim ve ince ayar için kullanacağımız örnek veri setini oluşturalım. Bu veri seti, pozitif veya negatif duyguyu ifade eden kısa metinlerden oluşacak.
# Gerekli kütüphaneleri yükleyin
# pip install transformers peft bitsandbytes accelerate trl
import torch
from datasets import Dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from trl import SFTTrainer
# Basit bir veri seti oluşturalım (JSON formatını taklit eden bir Python listesi)
# Gerçek bir senaryoda bu veriyi bir CSV veya JSON dosyasından yüklerdiniz.
data = [
{"text": "Bu harika bir ürün, kesinlikle tavsiye ederim! Duygu: Pozitif"},
{"text": "Müşteri hizmetleri inanılmazdı, çok memnun kaldım. Duygu: Pozitif"},
{"text": "Tamamen hayal kırıklığına uğradım, bir daha asla almam. Duygu: Negatif"},
{"text": "Beklentilerimin çok altında kaldı, hiç beğenmedim. Duygu: Negatif"},
{"text": "Bu filmi izlemeyi çok sevdim, harika bir deneyimdi. Duygu: Pozitif"},
{"text": "Tam bir zaman kaybıydı, çok sıkıcı buldum. Duygu: Negatif"},
{"text": "Ürünün kalitesi mükemmel, tek kelimeyle bayıldım. Duygu: Pozitif"},
{"text": "Berbat bir hizmet, bir daha asla kullanmam. Duygu: Negatif"},
{"text": "Şiddetle tavsiye ederim, işimi çok kolaylaştırdı. Duygu: Pozitif"},
{"text": "Kesinlikle tavsiye etmiyorum, param boşa gitti. Duygu: Negatif"},
]
# Hugging Face Dataset formatına dönüştürelim
dataset = Dataset.from_list(data)
print("Veri Seti Hazır:")
print(dataset[0])
Modeli ve Tokenizer'ı Hazırlama
İnce ayar yapacağımız temel modeli (burada microsoft/phi-2 gibi nispeten küçük bir model tercih ediyoruz) ve onunla uyumlu tokenizer'ı yükleyeceğiz. QLoRA kullanacağımız için, modeli 4-bit kuantizasyon ile yüklemek için BitsAndBytesConfig ayarlarını da yapacağız.
# Model ismini belirle
model_name = "microsoft/phi-2" # Veya daha küçük bir model, örn: "distilbert-base-uncased"
# Eğer phi-2 kullanıyorsanız, daha fazla GPU belleğine ihtiyacınız olabilir.
# Kuantizasyon konfigürasyonu
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=False,
)
# Modeli yükle
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True,
)
model.config.use_cache = False # Eğitim sırasında cache'i devre dışı bırak
model.config.pretraining_tp = 1
# Tokenizer'ı yükle
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token # Pad token'ı EOS token'ı olarak ayarla
tokenizer.padding_side = "right" # Tokenizer'ın sağdan padding yapmasını sağla
# Modeli k-bit eğitim için hazırla
model = prepare_model_for_kbit_training(model)
print("Model ve Tokenizer Hazır.")
LoRA Ayarlarını Yapılandırma ve Modeli Eğitme
Şimdi LoRA konfigürasyonunu tanımlayacak ve SFTTrainer kullanarak modelimizi küçük veri setimiz üzerinde eğiteceğiz. SFTTrainer (Supervised Fine-tuning Trainer), özellikle LLM'lerin denetimli ince ayarı için tasarlanmış bir araçtır.
# LoRA konfigürasyonu
lora_config = LoraConfig(
r=32, # LoRA rank'i (daha yüksek değer daha fazla parametre, potansiyel olarak daha iyi performans ama daha fazla bellek)
lora_alpha=64, # LoRA scaling alpha
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
], # Fine-tune edilecek modüller. Genellikle dikkat mekanizması katmanları hedeflenir.
bias="none", # Bias'ı fine-tune etme
lora_dropout=0.05, # LoRA katmanlarına dropout ekle
task_type="CAUSAL_LM", # Causal Language Modeling görevi için
)
# Modeli PEFT modeli olarak ayarla
model = get_peft_model(model, lora_config)
model.print_trainable_parameters() # Eğitilebilir parametre sayısını kontrol et
# Eğitim argümanları
training_arguments = TrainingArguments(
output_dir="./results", # Sonuçların kaydedileceği dizin
num_train_epochs=5, # Eğitim epoch sayısı (küçük veri seti için daha fazla olabilir)
per_device_train_batch_size=2, # Her cihaz için batch boyutu
gradient_accumulation_steps=4, # Gradyan biriktirme adımları
optim="paged_adamw_32bit", # Optimizasyon algoritması
save_steps=100, # Kaç adımda bir modelin kaydedileceği
logging_steps=10, # Kaç adımda bir loglama yapılacağı
learning_rate=2e-4, # Öğrenme oranı
weight_decay=0.001, # Ağırlık azaltma
fp16=True, # 16-bit float hassasiyetini kullan
max_grad_norm=0.3, # Maksimum gradyan normu
max_steps=-1, # Manuel epoch sayısını kullan (-1)
warmup_ratio=0.03, # Isınma oranı
group_by_length=True, # Verileri uzunluğa göre gruplandırarak verimliliği artır
lr_scheduler_type="cosine", # Öğrenme oranı zamanlayıcısı
report_to="tensorboard", # Eğitim metriklerini TensorBoard'a raporla
)
# SFTTrainer'ı başlat
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
peft_config=lora_config,
dataset_text_field="text", # Veri setindeki metin alanının adı
tokenizer=tokenizer,
args=training_arguments,
packing=False, # Veri paketlemeyi devre dışı bırak (daha az bellek için)
max_seq_length=512, # Maksimum sıra uzunluğu
)
# Modeli eğit
trainer.train()
# Eğitilmiş modeli kaydet
trainer.save_model("fine_tuned_phi_2_sentiment")
print("Model başarıyla ince ayarlandı ve kaydedildi!")
Yukarıdaki kod blokları, LoRA ve QLoRA kullanarak küçük bir veri setiyle LLM ince ayarı yapmanın temel adımlarını göstermektedir. Bu örnek, metinler arası duygu analizi yapmak için tasarlanmış olsa da, benzer bir yaklaşımla herhangi bir metin sınıflandırma, metin üretme veya özetleme görevi için modellerinizi özelleştirebilirsiniz. Unutmayın, bu kodlar bir başlangıç noktasıdır ve gerçek dünya uygulamaları için daha fazla deneme ve optimizasyon gerektirebilir.
target_modules parametresi, LoRA'nın hangi model katmanlarına uygulanacağını belirler. Genellikle dikkat mekanizmalarındaki 'query' (q_proj), 'key' (k_proj), 'value' (v_proj) ve 'output' (o_proj) projeksiyonları hedeflenir. Deneyerek en iyi performansı veren modülleri bulabilirsiniz.
İleri Düzey İpuçları ve Mobil Uyumlu Tasarım İçin Notlar
Küçük veri setleriyle LLM ince ayarı yaparken temel adımları anladık. Şimdi, deneyimli kullanıcılar için bazı ileri düzey ipuçlarına ve LLM uygulamalarını mobil platformlara taşırken dikkate alınması gereken mobil uyumlu HTML tasarımına değinelim. Bu bilgiler, projelerinizin performansını artırırken, son kullanıcı deneyimini de optimize etmenize yardımcı olacaktır.
Küçük Veri Setlerinde Aşırı Uyumdan (Overfitting) Kaçınma
Küçük veri setleriyle ince ayar yapmanın en büyük risklerinden biri, modelin eğitim verisine aşırı uyum sağlamasıdır. Bu durumda model, eğitim verisindeki spesifik örüntüleri ezberler ve daha önce görmediği verilere genelleme yapmada başarısız olur. Aşırı uyumu önlemek için aşağıdaki stratejileri uygulayabilirsiniz:
- Erken Durdurma (Early Stopping): Modelin eğitim performansını bir doğrulama (validation) veri seti üzerinde izleyin. Doğrulama setindeki performans düşmeye başladığında veya belirli bir sayıda epoch boyunca iyileşme göstermediğinde eğitimi durdurun. Bu, modelin genelleme yeteneğini kaybetmeden en iyi noktada durdurulmasını sağlar.
- Regülarizasyon Teknikleri:
- Dropout: Sinir ağlarındaki belirli nöronların veya bağlantıların rastgele olarak devre dışı bırakılmasıdır. Bu, modelin belirli özelliklere aşırı bağımlı olmasını engelleyerek daha sağlam öğrenme sağlar. LoRA yapılandırmasında
lora_dropoutparametresi ile uygulanabilir. - Ağırlık Azaltma (Weight Decay): Model ağırlıklarının değerlerini kısıtlayarak aşırı büyük ağırlıkların oluşmasını engeller. Bu, modelin karmaşıklığını azaltır ve daha düzgün bir öğrenme eğrisi sağlar.
TrainingArgumentsiçindeweight_decayparametresiyle ayarlanır.
- Dropout: Sinir ağlarındaki belirli nöronların veya bağlantıların rastgele olarak devre dışı bırakılmasıdır. Bu, modelin belirli özelliklere aşırı bağımlı olmasını engelleyerek daha sağlam öğrenme sağlar. LoRA yapılandırmasında
- Veri Artırma (Data Augmentation): Önceki bölümde de bahsettiğimiz gibi, mevcut veri setinizi yapay olarak genişletmek, modelin daha çeşitli örnekler görmesini sağlayarak aşırı uyumu azaltır. Özellikle farklı ifadeler, eş anlamlılar veya geri çeviri yöntemleriyle veri setinizi zenginleştirmek çok önemlidir.
- Daha Küçük Öğrenme Oranı (Learning Rate): İnce ayar yaparken, sıfırdan eğitimden çok daha küçük bir öğrenme oranı kullanmak önemlidir. Önceden eğitilmiş modelin zaten iyi bir temel bilgiye sahip olduğunu ve büyük adımlarla ağırlıkları değiştirmeye gerek olmadığını unutmayın. Küçük öğrenme oranları, modelin mevcut bilgiyi bozmadan ince ayar yapmasına yardımcı olur.
- Model Karmaşıklığını Azaltma: Eğer mümkünse, ince ayar için daha küçük bir temel LLM seçmek veya LoRA gibi PEFT yöntemlerinin
r(rank) parametresini düşürmek, eğitilebilir parametre sayısını azaltarak aşırı uyum riskini düşürebilir. - Çapraz Doğrulama (Cross-validation): Özellikle çok küçük veri setlerinde, modelin performansını daha güvenilir bir şekilde değerlendirmek için çapraz doğrulama teknikleri kullanabilirsiniz. K-katlı çapraz doğrulama, veri setinizi birden fazla eğitim/doğrulama katmanına ayırarak modelin performansına dair daha istikrarlı bir resim sunar.
Model Değerlendirmesi ve Optimizasyonu
İnce ayar sonrası modelinizin performansını doğru bir şekilde değerlendirmek ve optimize etmek, projenizin başarısı için kritik öneme sahiptir.
- Doğru Metrik Seçimi: Görev tipinize uygun değerlendirme metrikleri kullanın.
- Sınıflandırma için: Doğruluk (Accuracy), Hassasiyet (Precision), Geri Çağırma (Recall), F1 Skoru.
- Metin Üretimi için: BLEU, ROUGE, METEOR skorları (ancak bunlar dilbilgisel doğruluğu ölçer, anlamsal kaliteyi her zaman tam olarak yansıtmaz).
- Özetleme için: ROUGE skorları.
- Genel Kalite için: İnsan değerlendirmesi (Human-in-the-loop) genellikle en güvenilir yöntemdir.
- İnsan Döngüsünde Değerlendirme (Human-in-the-loop): Özellikle LLM'ler gibi karmaşık modellerde, modelin ürettiği çıktıların bir insan tarafından değerlendirilmesi paha biçilmezdir. İnsan geri bildirimleri, modelin anlamsal doğruluğunu, tonunu, tutarlılığını ve bağlama uygunluğunu anlamanıza yardımcı olur. Bu geri bildirimler aynı zamanda veri setinizi geliştirmeniz için de bir kaynak teşkil edebilir.
- Hiperparametre Ayarı (Hyperparameter Tuning): Öğrenme oranı, batch boyutu, LoRA rank'i (r) ve alfa değeri (lora_alpha) gibi hiperparametreleri optimize etmek için Grid Search, Random Search veya Bayesyen Optimizasyon gibi teknikler kullanabilirsiniz. Bu, modelin performansını daha da ileriye taşıyabilir.
LLM Uygulamalarında Mobil Uyumlu HTML Nasıl Sağlanır?
LLM'ler genellikle bulutta çalışsa ve sonuçları bir API üzerinden sunsa da, bu sonuçların bir web arayüzü aracılığıyla kullanıcılara gösterildiği durumlar yaygındır. Bu arayüzlerin mobil uyumlu olması, kullanıcı deneyimi açısından kritik öneme sahiptir. İşte mobil uyumlu HTML sağlamak için bazı temel adımlar ve CSS Media Query örnekleri:
- Viewport Meta Etiketi: Her web sayfasının
bölümüne aşağıdaki meta etiketini ekleyin. Bu, tarayıcıya sayfanın cihaz genişliğine uygun olarak ölçeklenmesi gerektiğini bildirir.
- Duyarlı Resimler ve Medya: Resimlerin ve diğer medya öğelerinin ekran boyutuna göre otomatik olarak ayarlanmasını sağlayın.
img, video {
max-width: 100%;
height: auto;
display: block; /* Gereksiz boşlukları kaldırır */
}
- CSS Media Queries: Belirli ekran boyutları için farklı stil kuralları tanımlamak için Media Queries kullanın. Bu, sayfa düzeninizin ve element boyutlarınızın mobil cihazlara göre değişmesini sağlar.
/* Genel stil - Masaüstü için varsayılan */
body {
font-family: Arial, sans-serif;
margin: 20px;
}
.container {
width: 80%;
margin: 0 auto;
padding: 20px;
background-color: #f0f0f0;
}
/* Mobil cihazlar için Media Query */
@media (max-width: 768px) { /* Ekran genişliği 768 pikselden az olduğunda */
body {
margin: 10px;
}
.container {
width: 95%; /* Mobil ekranlarda daha geniş alan kullan */
padding: 10px;
}
h2 {
font-size: 1.5em; /* Mobil için başlık boyutunu küçült */
}
p {
font-size: 0.9em; /* Mobil için paragraf metin boyutunu küçült */
}
}
@media (max-width: 480px) { /* Ekran genişliği 480 pikselden az olduğunda (telefonlar için) */
.container {
padding: 5px;
}
/* Eğer bir navigasyon menüsü varsa, mobil için dikey hale getirme */
nav ul {
flex-direction: column;
}
nav li {
margin-bottom: 5px;
}
}
- Esnek Izgaralar (Flexbox/Grid): Düzenleri oluşturmak için CSS Flexbox veya Grid sistemlerini kullanın. Bu sistemler, içeriklerin farklı ekran boyutlarına göre otomatik olarak yeniden düzenlenmesini kolaylaştırır.
- Dokunmatik Hedef Boyutları: Mobil cihazlarda düğmelerin ve etkileşimli öğelerin yeterince büyük olduğundan emin olun (minimum 44x44 piksel önerilir), böylece kullanıcılar kolayca dokunabilir.
Bu ileri düzey ipuçları ve mobil uyumluluk notları, LLM projelerinizin hem teknik performansını hem de kullanıcıya sunulan son deneyimi üst düzeye çıkarmanıza yardımcı olacaktır. Unutmayın, iyi bir ürün sadece güçlü bir modele sahip olmakla kalmaz, aynı zamanda erişilebilir ve kullanıcı dostu bir arayüze de sahip olmalıdır.
Sonuç: Büyük Veri Bir Zorunluluk Değil, Bir Seçenek
Bu makalede derinlemesine incelediğimiz gibi, Büyük Dil Modellerini (LLM) ince ayarlamak için her zaman devasa veri setlerine ihtiyaç duyulduğu inancı, modern yapay zeka teknikleri ışığında geçerliliğini yitirmektedir. Parametre Etkin İnce Ayar (PEFT) yöntemleri, özellikle LoRA ve QLoRA gibi teknikler sayesinde, küçük ve yüksek kaliteli veri setleriyle bile oldukça etkili ve performanslı LLM optimizasyonları yapmak mümkündür. Bu yaklaşımlar, sadece kaynak kısıtlamaları olan geliştiriciler ve şirketler için değil, aynı zamanda niş alanlarda özelleştirilmiş ve hassas modeller oluşturmak isteyen herkes için değerli bir kapı aralamaktadır.
Gerçek dünya vaka analizleri, küçük veri setleriyle bile müşteri destek botlarından hukuki metin özetlemeye kadar geniş bir yelpazede başarı hikayeleri sunmaktadır. Önemli olan, veri kalitesine odaklanmak, doğru ön işleme tekniklerini uygulamak, veri artırma yöntemlerinden faydalanmak ve modelinize en uygun PEFT metodolojisini seçmektir. Büyük veri, bir modelin eğitilmesi için bir seçenek olabilir, ancak niş bir göreve ince ayar yapılması için kesinlikle bir zorunluluk değildir. Bu paradigma değişimi, yapay zeka teknolojilerinin daha geniş kitleler tarafından erişilebilir ve uygulanabilir hale gelmesine olanak tanımaktadır.
Sıkça Sorulan Sorular (SSS)
SSS 1: Herhangi bir LLM, küçük bir veri setiyle ince ayar yapılabilir mi?
Cevap: Evet, çoğu önceden eğitilmiş LLM, küçük bir veri setiyle ince ayar yapılabilir. Ancak, temel modelin boyutu ve yapısı (örneğin, GPT-3 gibi kapalı kaynak modeller veya Llama, Phi gibi açık kaynak modeller) ve kullanılacak PEFT tekniği, sürecin uygulanabilirliğini ve başarı oranını etkiler. Genellikle, PEFT yöntemleri sayesinde, küçük veri setleriyle bile çoğu LLM'de anlamlı adaptasyonlar elde edilebilir.
SSS 2: Küçük veri setleriyle ince ayar yapmanın riskleri nelerdir?
Cevap: En büyük risk aşırı uyum (overfitting) ihtimalidir. Model, sınırlı eğitim verisini ezberleyip genelleme yeteneğini kaybedebilir. Ayrıca, küçük veri setleri, modelin öğrenmesini istediğiniz spesifik örüntüleri yeterince temsil etmeyebilir, bu da modelin yanlış veya eksik öğrenmesine yol açabilir. Bu riskleri azaltmak için veri artırma, erken durdurma ve regülarizasyon teknikleri kullanılmalıdır.
SSS 3: Kaç örnek "küçük" bir veri seti sayılır?
Cevap: "Küçük" tanımı göreceli olsa da, LLM ince ayarı bağlamında genellikle yüzlerce ila birkaç bin örnekten oluşan veri setleri "küçük" olarak kabul edilir. On binlerce örneğe sahip veri setleri orta büyüklükte, yüz binlerce ve üzeri ise büyük olarak nitelendirilir. Ancak veri kalitesi ve görevin karmaşıklığı, örnek sayısından çok daha belirleyici olabilir.
SSS 4: İnce ayar için en iyi küçük veri seti nereden bulunur?
Cevap: En iyi küçük veri seti genellikle projenizin spesifik ihtiyacına göre oluşturulur. Şirket içi belgeler, mevcut SSS'ler, geçmiş müşteri görüşmeleri (anonimleştirilmiş), alan uzmanları tarafından elle etiketlenmiş örnekler veya niş konularda özel olarak derlenmiş açık kaynak veri setleri iyi başlangıç noktalarıdır. Kalite, miktardan önemlidir; bu nedenle titizlikle temizlenmiş ve etiketlenmiş verilere odaklanın.
SSS 5: Sadece istem mühendisliği (prompt engineering) yeterli olmaz mı?
Cevap: İstem mühendisliği, LLM'lerin performansını model değişiklikleri yapmadan iyileştirmek için güçlü bir araçtır ve birçok durumda yeterli olabilir. Ancak, çok spesifik terminoloji, derinlemesine niş bilgi veya modelin genel olarak öğrenmediği yeni davranış kalıpları gerektiren görevlerde ince ayar, istem mühendisliğinin sınırlarını aşarak daha doğru, tutarlı ve bağlama özgü çıktılar sağlayabilir. İnce ayar, modelin temel bilgi tabanını kalıcı olarak adapte ederken, istem mühendisliği sadece mevcut bilgiyi yönlendirir.
