Tuesday, 3 March 2026

LoRA ile Genel Amaçlı Bir Hugging Face Dil Modelini Nasıl Özel Bir Amaç İçin Eğitebiliriz?

 LoRA ile Genel Amaçlı Bir Hugging Face Dil Modelini Nasıl Özel Bir Amaç İçin Eğitebiliriz?

Çalışan örnek: arsaral/test_project_LoRA/LoRA-HuggingFaceREALDATA

Büyük dil modelleri bugün çok güçlü. Ancak çoğu zaman “genel amaçlı” olarak eğitilmiş durumdalar. Yani dili biliyorlar, fakat bizim spesifik problemimizi bilmiyorlar.

Peki bu modelleri, tüm parametrelerini yeniden eğitmeden, belirli bir görev için nasıl uyarlayabiliriz?

Cevap: LoRA (Low-Rank Adaptation).


1️ Başlangıç Noktası: Genel Amaçlı Model

Örneğin Hugging Face üzerinde bulunan DistilBERT modelini ele alalım.

Bu model:

  • Büyük metin koleksiyonları üzerinde önceden eğitilmiştir.
  • Dil yapısını, bağlam ilişkilerini ve semantik temsilleri öğrenmiştir.
  • Ancak duygu analizi gibi spesifik bir görevi doğal olarak bilmez.

Yani model bir “dil uzmanıdır”, fakat “uygulama uzmanı” değildir.


2️ Özel Amaç: SST-2 ile Duygu Analizi

Modeli, örneğin GLUE SST-2 veri kümesi üzerinde eğitmek istediğimizi düşünelim.

Görev:

Verilen cümle pozitif mi, negatif mi?

Bu noktada iki seçeneğimiz var:

  • 🔴 Tüm modeli fine-tune etmek (milyonlarca parametreyi güncellemek)
  • 🟢 Sadece küçük bir kısmını uyarlamak

İkinci yaklaşım, LoRA’nın sunduğu yöntemdir.


3️ LoRA Ne Yapar?

LoRA’nın temel fikri şudur:

  • Modelin büyük ağırlık matrisleri dondurulur.
  • Bu matrislerin yanına küçük, düşük-ranklı ek matrisler eklenir.
  • Eğitim sırasında sadece bu küçük matrisler güncellenir.

Örneğin:

  • Toplam parametre: ~67 milyon
  • Eğitilen parametre (LoRA ile): ~600–800 bin

Yani modelin yaklaşık %1’i eğitilerek görev adaptasyonu sağlanır.


4️ Bu Neden Önemli?

Çünkü:

  • Daha az GPU belleği gerekir
  • Eğitim daha hızlıdır
  • Overfitting riski azalır
  • Performans, tam fine-tuning’e oldukça yakın olabilir

Deneylerimde, yalnızca LoRA kullanarak SST-2 üzerinde %87+ doğruluk elde etmek mümkün oldu — bu, parametre verimliliği açısından oldukça güçlü bir sonuç.


5️ Asıl Kavram: Görev Adaptasyonu

Burada yaptığımız şey:

Genel amaçlı bir dil modelini, belirli bir problemi çözebilecek şekilde uyarlamak.

Bu sürece görev adaptasyonu denir.

Modelin dil bilgisini bozmazsınız.
Sadece karar verme davranışını yeni göreve göre yönlendirirsiniz.


Sonuç

LoRA, büyük dil modellerini:

  • Daha ekonomik
  • Daha erişilebilir
  • Daha hızlı

şekilde özel amaçlara uyarlamamızı sağlar.

Bu yaklaşım, özellikle araştırma, akademik projeler ve sınırlı donanım ortamları için son derece değerlidir.

 

Parameter-Efficient Fine-Tuning vs Full Fine-Tuning on SST-2 using DistilBERT

 

Parameter-Efficient Fine-Tuning vs Full Fine-Tuning on SST-2 using DistilBERT


1. Objective

Bu çalışmanın amacı, tam fine-tuning ile Low-Rank Adaptation (LoRA) yaklaşımını parametre verimliliği ve performans açısından karşılaştırmaktır.

Model: DistilBERT
Dataset: GLUE SST-2


2. Experimental Setup

Dataset

  • Train subset: 3000 örnek
  • Validation subset: 800 örnek
  • Sequence length: 128

Full Fine-Tuning

  • Trainable parameters: 66,955,010
  • Learning rate: 2e-5
  • Epoch: 1

LoRA Configuration

  • Injected layers: q_lin, v_lin, out_lin
  • Rank (r): 32
  • Alpha: 64
  • Learning rate: 1e-4
  • Epoch: 3
  • Trainable parameters: 886,274

Tüm backbone ağı dondurulmuş, sadece LoRA parametreleri ve classifier head eğitilmiştir.


3. Results

Method

Trainable Params

Validation Accuracy

Full FT

67,839,746

0.8862

LoRA

886,274

0.8725


4. Parameter Efficiency Analysis

Trainable parameter ratio:

443,906 / 67,839,746 ≈ 0.0131

Yani LoRA yalnızca %0.66 oranında parametre güncelleyerek:

0.8725 / 0.8862 ≈ %98.5 performans korumuştur.

Bu sonuç, LoRA'nın güçlü bir parametre-verimli adaptasyon yöntemi olduğunu göstermektedir.


5. Observations

  1. r=4 başarısız olmuştu (%54 civarı)
  2. r=16 ile dramatik iyileşme sağlandı
  3. 3 epoch sonrasında validation performansı plato yaptı
  4. Training loss düşmeye devam ederken validation sabit kaldı

Bu, attention-only LoRA konfigürasyonunun kapasite sınırına ulaştığını düşündürmektedir.


6. Limitation

Bu çalışmada LoRA yalnızca attention projeksiyon katmanlarına uygulanmıştır. Feed-forward katmanlar (FFN) adapte edilmemiştir.

Bu nedenle modelin tam fine-tuning performansına ulaşamaması beklenebilir.


7. Conclusion

Bu deney göstermektedir ki:

LoRA, parametrelerin yalnızca %0.66’sını güncelleyerek tam fine-tuning performansının %97’sine ulaşabilmektedir.

Bu, özellikle büyük ölçekli modellerde ciddi compute ve memory avantajı sağlayabilecek bir sonuçtur.

 

Thursday, 12 February 2026

LoRA ile bir Hugging Face Modelinin Değiştirilmesi

Son 6 ay boyunca ICRON bünyesinde yürüttüğüm yapay zekâ projesini tamamlarken, büyük dil modellerinin pratikte nasıl uyarlanabileceği üzerine odaklandım. Özellikle donanım kısıtları (GPU bulunmaması gibi) altında, modern yöntemlerin gerçekten ne ölçüde “erişilebilir” olduğunu test etmek istedim.

 

Bu bağlamda, Hugging Face ekosisteminde yaygın olarak kullanılan **LoRA (Low-Rank Adaptation)** yöntemini küçük bir dil modeli (distilgpt2) üzerinde, tamamen **CPU ortamında** çalışacak şekilde uyguladım. 

 

Bu yaklaşımın temel fikri, büyük modelin tüm ağırlıklarını yeniden eğitmek yerine, yalnızca çok küçük bir parametre altkümesini eğiterek davranış uyarlaması yapmaktır. Benim deneyimde:

 

- Modelin toplam parametrelerinin yalnızca yaklaşık %0.18’i eğitildi 

- Buna rağmen anlamlı bir çıktı üretimi elde edildi 

- Eğitim ve çıkarım süreçleri GPU olmadan, Windows ortamında gerçekleştirildi 

 

Bu çalışma, büyük dil modelleriyle deney yapmak isteyen ancak donanım imkânları sınırlı olan araştırmacılar ve geliştiriciler için pratik bir referans niteliği taşıyor.

 

Kod ve açıklamaları GitHub üzerinden paylaştım: 

👉 https://github.com/arsaral/test_project_LoRA/tree/main/LoRA-HuggingFace

 

Bu deneyimin, hem akademik hem de uygulamalı projelerde “büyük model” kavramının daha erişilebilir hale gelmesine katkı sağlayacağını düşünüyorum.

Tuesday, 20 January 2026

Sentence Transformer Nedir?

 

Çok basitçe - Sentence Transformer Nedir? - çalışan örnek

Ali Riza Saral, #OPEN_TO_WORK
Independent AI Researcher

1.   Sentence Transformer Nedir?

Çalışan Python kodu: https://github.com/arsaral/test-project_sentence_transformer/blob/main/sentence_transformer_pytorch.py

1.1. Temel problem

Bilgisayarlar metni doğrudan “anlamaz”. Bir metni:

“StepA → StepB → StepC”

başka bir metinle karşılaştırabilmek için, bu metni sayısal bir temsile dönüştürmek gerekir.

İşte Sentence Transformer bu işi yapar:

Bir cümleyi (veya kısa metni) sabit uzunlukta bir vektöre (embedding) dönüştürür; bu vektörler arasındaki geometrik yakınlık, anlamsal benzerliği temsil eder.


1.2. Klasik yöntemlerden farkı

Yöntem ...........................Sorun

Bag-of-Words..................Kelime sırası ve anlam kaybolur

TF-IDF ...............................Anlamsal yakınlık zayıf

Word2Vec........................Kelime düzeyinde, cümle değil

BERT (ham)......................Cümle karşılaştırması için verimsiz

Sentence Transformer, BERT tabanlı modelleri şu amaçla optimize eder:

“İki cümle anlamsal olarak ne kadar benzer?”

Bu nedenle:

  • Arama
  • Kümeleme
  • Benzer süreç / iz (trace) bulma
  • Anlamsal eşleştirme

gibi işlerde çok etkilidir.


1.3. Embedding kavramı (çok önemli)

Bir cümle şu hale getirilir:

"StepA → StepB → StepC"

[0.012, -0.334, 0.998, ..., -0.104]   (örneğin 384 boyutlu)

Bu vektör:

  • Anlamı sayısal uzayda temsil eder
  • Benzer cümleler → birbirine yakın vektörler
  • Farklı cümleler → uzak vektörler


2. Kullandığımız model: all-MiniLM-L6-v2

Bu model:

  • 384 boyutlu embedding üretir
  • Hızlıdır
  • Genel amaçlıdır
  • Eğitim, demo ve üretim için güvenlidir

Yani: “her iş için makul bir varsayılan” modeldir.


3. Programın satır satır açıklaması

Aşağıda, verdiğimiz programı mantıksal bloklar halinde açıklıyorum.


3.1. Kodlama bildirimi ve üst bilgi

# -*- coding: utf-8 -*-

"""

Created on Thu Jul 24 12:53:07 2025

@author: ali.saral

"""

  • UTF-8: Türkçe karakterler ve özel semboller sorunsuz çalışır
  • Docstring: dosya açıklaması, çalışmayı etkilemez


3.2. Gerekli kütüphaneler

from sentence_transformers import SentenceTransformer, util

  • SentenceTransformer: modeli yükler metni embedding’e çevirir
  • util: yardımcı matematik fonksiyonları burada cosine similarity kullanacağız


3.3. Modelin yüklenmesi

model = SentenceTransformer('all-MiniLM-L6-v2')

Bu satırda olanlar:

  1. Model adı HuggingFace üzerinden bulunur
  2. Eğer bilgisayarda yoksa indirilir
  3. Belleğe yüklenir
  4. Artık model.encode() çağrılabilir

Bu model önceden eğitilmiştir; sizin veriyle eğitmenize gerek yoktur.


3.4. Karşılaştırılacak metinler (corpus)

sequences = [

"StepA → StepB → StepC → End",

"Init → StepA → StepB → StepC → End",

"StepB → StepC",

"Init → StepA",

"StepC → End → Finalize"

]

Burada:

  • Her string bağımsız bir cümle gibi ele alınır
  • Oklar (→) model için sadece karakterdir
  • Model, kelime örüntülerini ve bağlamı öğrenmiştir

Bu liste:

“Arama yapılacak bilgi havuzu”dur.


3.5. Metinlerin embedding’e dönüştürülmesi

embeddings = model.encode(

sequences,

convert_to_tensor=True

)

Bu satır kritik önemdedir.

  • sequences: liste halinde metinler
  • encode: her metni vektöre çevirir
  • convert_to_tensor=True: sonuç PyTorch tensor olur hızlı matematiksel işlemler yapılır

Sonuç:

embeddings.shape = (5, 384)

Yani:

  • 5 cümle
  • her biri 384 boyutlu


3.6. Arama sorgusu (query)

query = "StepA → StepB → StepC"

Bu:

  • Benzerini aradığınız metindir
  • Tek bir cümledir


3.7. Sorgunun embedding’i

query_embedding = model.encode(

query,

convert_to_tensor=True

)

Sonuç:

query_embedding.shape = (384,)

Yani:

  • Tek vektör
  • Ama aynı uzayda

Bu çok önemli:

Karşılaştırılan tüm vektörler aynı uzayda olmalıdır.


3.8. Cosine similarity hesaplama

cosine_scores = util.cos_sim(

query_embedding,

embeddings

)[0]

Cosine similarity şunu ölçer:

İki vektörün yönü ne kadar benzer?

  • Değer aralığı: [-1, 1]
  • Pratikte: 1.0 → çok benzer 0.7+ → oldukça benzer 0.3 → zayıf 0 → ilgisiz

Sonuç:

cosine_scores = [0.91, 0.87, 0.75, 0.42, 0.38]


3.9. Benzerliğe göre sıralama

top_results = cosine_scores.argsort(descending=True)

Bu satır:

  • Skorları büyükten küçüğe
  • indeks bazında sıralar

Örneğin:

[0, 1, 2, 3, 4]


3.10. Sonuçların yazdırılması

print("\nSearch results for:", query)

for idx in top_results:

print(

f"{sequences[idx]} "

f"(Score: {cosine_scores[idx]:.4f})"

)

Bu döngü:

  • En benzerden en az benzere
  • Metni ve skorunu birlikte gösterir


4. Bu yaklaşımın felsefesi

Önemli nokta şudur:

Sentence Transformer kural çalıştırmaz, anlam uzayında yakınlık hesaplar.

Bu nedenle:

  • Eksik adımlar tolere edilir
  • Fazladan adımlar cezalandırılmaz
  • İnsan sezgisine yakın sonuçlar verir


5. Bir sonraki doğal adımlar

İsterseniz sırayla şunları yapabiliriz:

  1. Sıra-duyarlı (order-sensitive) ceza eklemek
  2. Grafik temelli yöntemle karşılaştırmak
  3. Aynı örneği RelationIndex / trace zincirleri ile bağlamak
  4. Akademik sunum/slayt versiyonuna dönüştürmek

Hangisiyle devam edelim istersiniz?

Kısaca sequence transformerdan farkı nedir bahseder misiniz uygun bir yerinde bu açıklamanın?

Elbette. Aşağıda bunu kısa, net ve kavramsal olarak doğru biçimde, az önceki açıklamanın içine doğal bir ara başlık olarak yerleştiriyorum. Amaç: neden Sentence Transformer kullanıyoruz, neden “sequence transformer” değil? sorusunu tek bakışta cevaplamak.


(Ara Başlık) Sentence Transformer ile “Sequence Transformer” Arasındaki Temel Fark

Bu iki kavram sıkça karıştırılır, ancak amaçları tamamen farklıdır.

1. Sequence Transformer (klasik Transformer)

Girdi → Çıktı odaklıdır.

Temel kullanım alanları:

  • Makine çevirisi
  • Metin üretimi
  • Zaman serisi tahmini
  • Kod üretimi

Özellikleri:

  • Token sırasına çok duyarlıdır
  • Her token için ayrı temsil üretir
  • Çıktı bir sekanstır

Örnek:

Girdi :  A B C

Çıktı :  B C D

Yani:

“Bu diziden sonra ne gelir?”


2. Sentence Transformer

Anlam → vektör odaklıdır.

Temel kullanım alanları:

  • Benzerlik araması
  • Kümeleme
  • Bilgi geri çağırma
  • Süreç / iz (trace) karşılaştırma

Özellikleri:

  • Tüm cümleyi tek bir vektöre indirger
  • Çıktı bir embedding’dir
  • Karşılaştırma için optimize edilmiştir

Örnek:

"StepA → StepB → StepC"

[0.12, -0.77, ..., 0.33]

Yani:

“Bu ifade diğerlerine ne kadar benziyor?”


3. En kritik fark (tek cümleyle)

Sequence Transformer ne üreteceğini, Sentence Transformer neye benzediğini öğrenir.


4. Neden bu örnekte Sentence Transformer doğru seçim?

Sizin yaptığınız şey:

  • Bir zinciri başka zincirlerle karşılaştırmak
  • Tam eşleşme değil, anlamsal yakınlık aramak
  • Kısmi örtüşmeleri değerli görmek

Bu durumda:

Gereksinim

Doğru araç

Tek çıktı vektörü

Sentence Transformer

Hızlı karşılaştırma

Sentence Transformer

Soft benzerlik

Sentence Transformer

Üretim / tahmin

Token bazlı çıktı

Sequence Transformer kullanılsaydı:

  • Her adım için çıktı üretirdi
  • Karşılaştırma zorlaşırdı
  • Ek mimari gerekir (pooling, loss, vb.)


5. Kısa sezgisel benzetme

  • Sequence Transformer: “Bu melodiden sonra hangi nota gelir?”
  • Sentence Transformer: “Bu melodi, diğer melodilere ne kadar benziyor?” ,
  • #sentenceTransformer #sequenceTransformer #transformer #python