Skip to content

Hands-on: Sınıflandırma + Özetleme + Çeviri Görevleri

3 farklı görevde zero-shot vs few-shot karşılaştırması. Eval skoruyla performansı ölç, kendi prompt'unu iyileştir.

Şükrü Yusuf KAYA
18 min read
Intermediate

Hands-on Lab: 3 Mini Proje

Bu derste 3 görev:
  1. Müşteri yorumları sınıflandırma (5 kategori)
  2. Haber özetleme (uzun → 3 cümle)
  3. Türkçe → İngilizce çeviri (kurumsal email)
Her birini önce zero-shot, sonra few-shot ile çalıştır. Eval skorunu kıyasla.

Proje 1: Müşteri Yorumları Sınıflandırma#

python
# 5 kategori: kalite | kargo | fiyat | iletisim | iade
import os, json
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
 
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
 
# Test seti — gerçek e-ticaret yorumları (anonim)
TEST_SET = [
("Ürün hızlı geldi ama paket hasarlıydı", "kargo"),
("Pahalı ama kaliteli", "kalite"),
("İade ettim para 2 hafta gelmedi", "iade"),
("Çağrı merkezi 1 saat beklettiler", "iletisim"),
("Aynı ürün başka sitede %30 ucuz", "fiyat"),
("Çok ince kumaş, fotoğraftaki gibi değil", "kalite"),
("3 günde geldi, mükemmel", "kargo"),
("Fiyatına göre fena değil", "fiyat"),
("Mail attım 5 gün cevap yok", "iletisim"),
("İade prosedürü çok karmaşık", "iade"),
]
 
def classify_zero_shot(text):
prompt = f"""Aşağıdaki yorumu şu kategorilerden birine ata:
kalite | kargo | fiyat | iletisim | iade
 
Sadece kategori adını yaz.
 
Yorum: "{text}"
"""
r = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=10, temperature=0,
messages=[{"role": "user", "content": prompt}],
)
return r.content[0].text.strip().lower()
 
def evaluate(classifier_fn):
correct = 0
for text, expected in TEST_SET:
pred = classifier_fn(text)
ok = expected in pred
if ok: correct += 1
print(f" {'✓' if ok else '✗'} {text[:40]:42} | beklenen={expected:10} | tahmin={pred}")
return correct / len(TEST_SET)
 
print("=== Zero-shot ===")
acc = evaluate(classify_zero_shot)
print(f"Doğruluk: {acc*100:.0f}%")
 
Önce zero-shot baseline. Skoru not et.
python
# Aynı görev — few-shot ile
import os
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
 
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
 
FEW_SHOT_EXAMPLES = [
("Çok hızlı geldi, kutu sağlam", "kargo"),
("Beklenen kaliteyi karşılamadı", "kalite"),
("Para iadesi 1 ay sürdü", "iade"),
("Destek bana cevap vermedi", "iletisim"),
("Fiyat çok abartılı", "fiyat"),
]
 
def classify_few_shot(text):
examples = "\n".join(f'- "{i}" → {o}' for i, o in FEW_SHOT_EXAMPLES)
prompt = f"""Müşteri yorumlarını şu kategorilerden birine ata:
kalite | kargo | fiyat | iletisim | iade
 
Örnekler:
{examples}
 
Şimdi sınıflandır:
- "{text}" →"""
 
r = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=10, temperature=0,
messages=[{"role": "user", "content": prompt}],
)
return r.content[0].text.strip().lower().replace("\"", "").rstrip(".")
 
# (TEST_SET ve evaluate fonksiyonu önceki snippet'ten)
# print("=== Few-shot ===")
# acc = evaluate(classify_few_shot)
# print(f"Doğruluk: {acc*100:.0f}%")
 
Few-shot ile aynı test. Doğruluk farkı?

Proje 2: Haber Özetleme#

python
# Zero vs few-shot özetleme — kalite skoru LLM-as-judge ile
ZERO_SHOT = "Aşağıdaki haberi 3 cümlede özetle. Her cümle 15 kelime altı."
 
FEW_SHOT = ZERO_SHOT + """
 
Örnek özetler:
Haber: [Türkiye, ABD ile yeni bir ticaret anlaşması imzaladı...]
Özet: Türkiye, ABD ile imzalanan yeni anlaşmayla 2 milyar dolarlık ticaret hacmi hedefliyor. Anlaşma tarım ve teknoloji sektörlerini kapsıyor. İlk yansımalar 6 ay içinde beklenir.
 
Haber: [Yeni nesil GPU kıtlığı sürüyor...]
Özet: NVIDIA H200 GPU'lar 2026 sonuna kadar yetersiz kalmaya devam edecek. AI şirketleri alternatif tedarikçilere yöneliyor. Fiyatlar son 6 ayda %40 arttı.
"""
 
# Burada bir LLM-judge ile her iki versiyonu skorla:
# JUDGE_PROMPT = "Hangi özet daha bilgilendirici? A vs B?"
Özetleme few-shot şablonu (production'da uyarla)

Proje 3: Çeviri (Türkçe → İngilizce, Kurumsal)#

Zero-shot#

Aşağıdaki Türkçe metni İngilizce'ye çevir. Tone: profesyonel B2B email. Metin: "{{tr_metin}}"
Sonuç: Çoğunlukla iyi ama "regards" stili tutarsız.

Few-shot (3 örnek)#

Türkçe → İngilizce çeviri (B2B email tone). Örnekler: TR: "Saygılarımla, ekibim sizi arar." EN: "Best regards, my team will reach out." TR: "Toplantı için müsaitlik durumunuzu bildirir misiniz?" EN: "Could you let us know your availability for a meeting?" TR: "{{tr_metin}}" EN:
Sonuç: Tone çok daha tutarlı.
Lab kapanış egzersizi: Yukarıdaki 3 projeyi kendi makinende çalıştır. Eval skorlarını bir CSV'ye yaz:
{task, strategy, accuracy}
. Çoğu zaman few-shot %5-15 daha iyi. Maliyet farkı: ~%30 daha pahalı (in tokens).

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content