---
title: 'Örnek Kullanımı'
source: 'https://academia.sh/tr/kurslar/istem-muhendisligi/ornek-kullanimi'
course: 'İstem Mühendisliği'
language: tr
updated: '2026-08-17T18:06:39+00:00'
license: 'CC BY-SA 4.0'
---

# Örnek Kullanımı

Sıfır, tek ve az örnekli yönlendirme aynı görevde yan yana ölçülüyor. Örnek sayısı sıfırdan sekize çıkarken 112 kurgu destek talebinde isabet 0,8571'den 0,9732'ye gidiyor, ama kazanç üçüncü örnekte doyuyor: sıfırdan üç örneğe +0,1071 isabet 4928 ek giriş belirteciyle geliyor, üçten sekize +0,0089 isabet 8736 ek belirteçle geliyor ve dört ile sekiz arası ortalama 0,9250 ile üç örnekteki 0,9643 sayısının altında kalıyor. Aynı dört örnek yalnız sırası değiştirilerek yazıldığında isabet 0,7679 ile 0,9196 arasında geziniyor ve giriş belirteci her sırada aynı kalıyor.

Önceki ders yanıtın biçimini isteme yazdı ve makinece ayrıştırılabilir yanıt oranını 0,0000'dan
0,9750'ye taşıdı. İsteme konulan şey bir **tarifti**: alanların adı, sırası ve ayracı. Tarif
yanıtın kabını belirledi, ama kararın kendisine dokunmadı. Hangi talebin hangi etikete gittiği
hâlâ yalnız modelin bildiği bir şeydir ve istemde bunun tek bir örneği yoktur.

Bu ders tarif yerine **örnek** koyar. İsteme çözülmüş talepler yazılır ve her biri modele "bu
metin bu etikete gider" der. Ölçülecek olan üç şeydir: örnek başına isabet kazancı, örnek başına
belirteç bedeli, ve kazancın **nerede durduğu**. Dersin sonunda ölçü bir kez daha kendi üstüne
döner: aynı örnekler yalnız sırası değiştirilerek yazıldığında sayı oynuyor mu.

- **IT48.** Model bir **benzeticidir**, tohumu **20260218**'dir ve gerçek bir uç nokta
  çağrılmaz. Destek talepleri ve arıza kodları **kurgudur**.
- **IT49.** Önceki dersin **biçim kısıtı sabit tutulur**. Yanıt her koşumda üç alanlı kayıt olarak
  istenir ve aynı katı alan ayrıştırıcısıyla okunur; böylece bu derste değişen tek şey örneklerdir.
- **IT50.** Ölçüm **en olası seçimle** yapılır. Örnekleme kapalıyken etiket kararı koşumdan
  bağımsızdır ve örneğin kattığı fark örnekleme gürültüsüne karışmaz; örnekleme açık koşum ayrıca
  basılır.
- **IT51.** Örnek havuzu ölçüm kümesinden **ayrıdır**: sekiz çözülmüş talep havuza alınır, kalan
  112 talep ölçülür. Havuzun ilk beş örneği beş etiketi birer kez kapsar, kalan üçü ikinci
  kalıpları getirir.
- **IT52.** Benzetici örneği isteme yazılmış bir **eşleşme tablosu** gibi kullanır: örneğin
  metniyle talebin paylaştığı her belirteç, örneğin etiketinin puanını artırır. **Sondaki örnek
  daha ağır basar**; sıra etkisi buradan gelir.
- **IT53.** Bedel **giriş belirteciyle** yazılır. Örnekler her istekte yeniden gönderilir; istek
  başına giriş belirteci örnek sayısıyla doğru orantılı büyür.

## Örnek Başına Kazanç ve Bedel

```python
# BENZETICI -- KURGUDUR. Gercek bir model uc noktasi cagrilmaz; standart kitaplikla
# yazilmis bir dil modeli benzeticisidir. Destek talepleri de kurgudur.
import math

TOHUM, M32 = 20260218, 0xFFFFFFFF
PENCERE, EN_UZUN = 240, 24


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


def belirtecle(m):                  # KURGU belirtecleyici: parca en cok bes damga
    b = []
    for s in m.lower().replace(",", " , ").split():
        while len(s) > 5:
            b.append(s[:5])
            s = s[5:]
        b.append(s)
    return b


def izno(m):
    h = 2166136261
    for c in m:
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


KONU = ["fatura", "ariza", "sayac", "tarife", "kesinti"]
KOD = {"fatura": "ft-21", "ariza": "ar-14", "sayac": "sy-32", "tarife": "tr-05",
       "kesinti": "ks-40", "odeme": "od-11", "sikayet": "sk-09", "bilgi": "bg-02",
       "genel": "gn-00"}
KALIP = {"fatura": ["bu ayki fatura tutari gecen aya gore cok yuksek geldi",
                    "faturami odedim ama sistemde borc gorunuyor",
                    "fatura ayrintisini nereden gorebilirim"],
         "ariza": ["evde su akmiyor bir ariza var galiba",
                   "baglanti bozuk oldu ve hic calismiyor",
                   "ariza kaydi actim ama ekip gelmedi"],
         "sayac": ["sayac okumasi yanlis girilmis endeks tutmuyor",
                   "sayac degisimi icin randevu istiyorum",
                   "sayac uzerindeki endeks ile fatura ayni degil"],
         "tarife": ["hangi tarife basamagindayim ogrenmek istiyorum",
                    "tarife degisikligi icin ne yapmam gerekiyor",
                    "birim ucret abone tipine gore degisiyor mu"],
         "kesinti": ["mahallede kesinti var ne zaman gelecek",
                     "planli kesinti duyurusu nereden takip edilir",
                     "aksamdan beri kesinti yasiyoruz"]}
EK = ["ayrica gecen ay da ayni sorun olmustu", "bu konuda memnun degilim",
      "acil bilgi almam gerekiyor", "kayit numaram elimde yok"]

TALEP = []
for i in range(120):
    r = uretec(TOHUM + i)
    k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])]
    m = KALIP[k][int(r() * 3)]
    if r() < 0.34:
        m += " " + EK[int(r() * 4)]
    TALEP.append({"no": 4001 + i, "metin": m, "konu": k})

KAVRAM = KONU + ["odeme", "sikayet", "bilgi", "genel"]
IZ = {"fatur": "fatura", "tutar": "fatura", "ayrin": "fatura", "ariza": "ariza",
      "bozuk": "ariza", "calis": "ariza", "akmiy": "ariza", "sayac": "sayac",
      "endek": "sayac", "okuma": "sayac", "tarif": "tarife", "birim": "tarife",
      "abone": "tarife", "basam": "tarife", "kesin": "kesinti", "duyur": "kesinti",
      "mahal": "kesinti", "borc": "odeme", "odedi": "odeme", "ucret": "odeme",
      "memnu": "sikayet", "sorun": "sikayet", "acil": "sikayet", "bilgi": "bilgi",
      "ogren": "bilgi", "nered": "bilgi"}
TUZAK = {"degis": "tarife", "kayit": "ariza", "yukse": "tarife", "gorun": "fatura",
         "ekip": "kesinti", "takip": "tarife", "giril": "fatura"}   # yaniltici baglar
SAYAC = [0]


def coz(istem):                     # istemi ornek listesi ve talep metni olarak ayirir
    ust, _, talep = istem.partition("Talep : ")
    ornek = []
    for parca in ust.split("Ornek : ")[1:]:
        m, _, e = parca.partition(" => ")
        ornek.append((m.strip(), e.split(" .")[0].strip()))
    return ornek, talep


def cagir(istem, ozet, tohum=TOHUM, sicaklik=0.0, en_uzun=EN_UZUN):
    SAYAC[0] += 1
    bel = belirtecle(istem)
    bos = {"giris": len(bel), "cikis": 0, "yanit": ""}
    if len(bel) > PENCERE:
        return dict(bos, durum="baglam_asimi")
    if SAYAC[0] % 37 == 0:
        return dict(bos, durum="hiz_siniri")
    r = uretec(tohum ^ izno(istem))
    if len(bel) > 90 and r() < 0.04:            # uzun istem , zaman asimi
        return dict(bos, durum="zaman_asimi")
    ornek, talep = coz(istem)
    bt = belirtecle(talep)
    aday = [k for k in KAVRAM if k[:5] in bel]
    if len(aday) < 3:
        aday = KAVRAM
    p = {k: 0.15 for k in aday}
    for t in bt:                                 # talep belirtecleri: iz ve tuzak
        for tablo, w in ((IZ, 1.0), (TUZAK, 1.3)):
            if tablo.get(t) in p:
                p[tablo[t]] += w
    for j, (m, e) in enumerate(ornek):           # ic baglamdan ogrenme
        if e in p:
            w = 0.5 + (j + 1) / len(ornek)       # sondaki ornek daha agir basar
            for t in set(belirtecle(m)):
                if t in bt:
                    p[e] += 0.30 * w
    if sicaklik <= 0.0:
        k = max(sorted(p), key=lambda a: p[a])   # en olasi secim
    else:
        e = [math.exp(p[a] / sicaklik) for a in sorted(p)]
        k = sorted(p)[ayrik(r(), [v / sum(e) for v in e])]
    y = f"etiket : {k} ; kod : {KOD[k]} ; gerekce : {ozet}"
    cb = belirtecle(y)
    if len(cb) > en_uzun:
        cb, y = cb[:en_uzun], " ".join(cb[:en_uzun])
    return {"durum": "tamam", "giris": len(bel), "cikis": len(cb), "yanit": y}


def ayristir(y):                    # onceki dersin katı alan ayristiricisi
    a = {}
    for parca in y.split(";"):
        ad = parca.split(":")
        if len(ad) == 2:
            a[ad[0].strip()] = ad[1].strip()
    tam = a.get("etiket") in KONU and a.get("kod") == KOD.get(a.get("etiket"))
    return a["etiket"] if tam and a.get("gerekce") else None


YONERGE = ("Talebi su etiketlerden birine ata : fatura , ariza , sayac , tarife , "
           "kesinti . Yanitin bicimi : etiket : <deger> ; kod : <deger> ; "
           "gerekce : <deger> . ")
SEC = [1, 3, 4, 5, 0, 18, 13, 40]   # once her etiketten bir ornek, sonra ikinci kalip
HAVUZ = [TALEP[i] for i in SEC]
KUME = [t for i, t in enumerate(TALEP) if i not in SEC]


def istem_kur(ornekler, metin):
    o = "".join(f"Ornek : {x['metin']} => {x['konu']} . " for x in ornekler)
    return YONERGE + o + "Talep : " + metin


def olc(ornekler, tohum=TOHUM, sicaklik=0.0):
    SAYAC[0] = 0
    g = c = d = h = 0
    for x in KUME:
        s = cagir(istem_kur(ornekler, x["metin"]), " ".join(x["metin"].split()[:3]),
                  tohum=tohum, sicaklik=sicaklik)
        g, c = g + s["giris"], c + s["cikis"]
        h += s["durum"] != "tamam"
        d += ayristir(s["yanit"]) == x["konu"]
    return {"isabet": d / len(KUME), "giris": g, "cikis": c, "hata": h}


print(f"KURGU: ornek havuzu {len(HAVUZ)} cozulmus talep , olcum kumesi {len(KUME)} talep")
print(f"ornek yazimi: Ornek : {HAVUZ[0]['metin']} => {HAVUZ[0]['konu']} .")
print(f"\n{'ornek':>5}  {'etiket':>7}  isabet  giris belirteci  istek basi  kazanc")
onceki = None
for n in range(9):
    d = olc(HAVUZ[:n])
    kz = "-" if onceki is None else f"{d['isabet'] - onceki:+.4f}"
    ad = HAVUZ[n - 1]["konu"] if n else "-"
    print(f"{n:>5}  {ad:>7}  {d['isabet']:.4f}  {d['giris']:>15}"
          f"  {d['giris'] / len(KUME):>10.1f}  {kz:>7}")
    onceki = d["isabet"]
```

```
KURGU: ornek havuzu 8 cozulmus talep , olcum kumesi 112 talep
ornek yazimi: Ornek : fatura ayrintisini nereden gorebilirim => fatura .

ornek   etiket  isabet  giris belirteci  istek basi  kazanc
    0        -  0.8571             6646        59.3        -
    1   fatura  0.8571             8438        75.3  +0.0000
    2    ariza  0.9018             9782        87.3  +0.0446
    3    sayac  0.9643            11574       103.3  +0.0625
    4   tarife  0.8929            13366       119.3  -0.0714
    5  kesinti  0.9196            15270       136.3  +0.0268
    6   fatura  0.9286            17398       155.3  +0.0089
    7    ariza  0.9107            18854       168.3  -0.0179
    8    sayac  0.9732            20310       181.3  +0.0625
```

Birinci satır **sıfır örnekli yönlendirmedir**: istemde yalnız yönerge ve biçim tarifi vardır,
isabet **0,8571**. İkinci satır **tek örnekli yönlendirmedir** ve kazancı **sıfırdır**. Tek
örnek, kendi etiketinin puanını yükseltmekten başka bir şey yapmaz; öbür dört etiket hakkında
hiçbir şey söylemez ve zaten doğru sınıflanan talepleri biraz daha doğru sınıflar. Bedeli
gerçektir: istek başına giriş belirteci **59,3'ten 75,3'e** çıkar.

Kazanç **az örnekli yönlendirmede** başlar. İkinci örnek +0,0446, üçüncü örnek +0,0625 katar ve
isabet **0,9643** olur. Buraya kadar örnek eklemek karşılığını veriyor: sıfırdan üçe **+0,1071**
isabet, **+4928** giriş belirteci. Dördüncü örnekten sonra çizelge yön değiştirir. Dördüncü örnek
**−0,0714** ile en büyük tek adımlı kaybı üretir, beşinci ve altıncı küçük kazançlar getirir,
yedinci yine düşürür, sekizinci +0,0625 ile en yüksek sayıya çıkarır. Dört ile sekiz arasındaki
beş ölçümün ortalaması **0,9250**, yani üç örnekteki **0,9643'ün altında**.

Doyma noktası bu çizelgede **üçüncü örnektir**. Üçten sekize gitmenin isabete kattığı
**+0,0089**, giriş belirtecine eklediği **+8736**. İlk üç örnek belirteç başına yaklaşık on kat
daha fazla isabet getirdi. Bunun nedeni örneklerin ne öğrettiğinde: ilk üç örnek üç ayrı etiketin
belirteçlerini tanıtır ve daha önce yanlış eşlenen talepleri düzeltir. Sonraki örnekler ya zaten
kapsanmış bir etiketi tekrarlar ya da kendi cümlelerindeki **konu dışı sözcükleri** de öğretir;
"nereden", "gerekiyor" gibi sözcükler etiketle ilgisizdir ve puanı yanlış yöne iter. Örnek
eklemek bir noktadan sonra bilgi değil **gürültü** ekler, ve gürültünün bedeli de belirteçtir.

## Aynı Örnekler, Başka Sıra

```python
SIRA = [(0, 1, 2, 3), (3, 2, 1, 0), (1, 3, 0, 2), (2, 0, 3, 1), (0, 2, 1, 3), (3, 0, 2, 1)]
D = HAVUZ[:4]
print("ayni dort ornek , yalniz sira degisiyor")
v = []
for s in SIRA:
    d = olc([D[i] for i in s])
    v.append(d["isabet"])
    print(f"  {' > '.join(D[i]['konu'] for i in s):<34} isabet {d['isabet']:.4f}"
          f"  giris {d['giris']}")
print(f"  siralama araligi {max(v) - min(v):.4f} , giris belirteci her sirada esit")

print("\nolcunun kendi degiskenligi")
for n in (0, 3, 8):
    a, b = olc(HAVUZ[:n]), olc(HAVUZ[:n], tohum=TOHUM + 1)
    print(f"  n={n} en olasi secim : {a['isabet']:.4f} / {b['isabet']:.4f}"
          f"  fark {b['isabet'] - a['isabet']:+.4f} , basarisiz cagri {a['hata']}")
for n in (0, 3):
    a = olc(HAVUZ[:n], sicaklik=0.6)
    b = olc(HAVUZ[:n], tohum=TOHUM + 1, sicaklik=0.6)
    print(f"  n={n} ornekleme acik : {a['isabet']:.4f} / {b['isabet']:.4f}"
          f"  fark {b['isabet'] - a['isabet']:+.4f}")

s0, s3, s8 = olc(HAVUZ[:0]), olc(HAVUZ[:3]), olc(HAVUZ[:8])
orta = sum(olc(HAVUZ[:n])["isabet"] for n in range(4, 9)) / 5
print(f"\nsifir -> uc ornek  : isabet {s3['isabet'] - s0['isabet']:+.4f} ,"
      f" giris belirteci {s3['giris'] - s0['giris']:+d}")
print(f"uc -> sekiz ornek  : isabet {s8['isabet'] - s3['isabet']:+.4f} ,"
      f" giris belirteci {s8['giris'] - s3['giris']:+d}")
print(f"dort ile sekiz arasi ortalama isabet {orta:.4f} , uc ornekte {s3['isabet']:.4f}")
```

```
ayni dort ornek , yalniz sira degisiyor
  fatura > ariza > sayac > tarife    isabet 0.8929  giris 13366
  tarife > sayac > ariza > fatura    isabet 0.9196  giris 13366
  ariza > tarife > fatura > sayac    isabet 0.8929  giris 13366
  sayac > fatura > tarife > ariza    isabet 0.9196  giris 13366
  fatura > sayac > ariza > tarife    isabet 0.9196  giris 13366
  tarife > fatura > sayac > ariza    isabet 0.7679  giris 13366
  siralama araligi 0.1518 , giris belirteci her sirada esit

olcunun kendi degiskenligi
  n=0 en olasi secim : 0.8571 / 0.8571  fark +0.0000 , basarisiz cagri 3
  n=3 en olasi secim : 0.9643 / 0.9554  fark -0.0089 , basarisiz cagri 3
  n=8 en olasi secim : 0.9732 / 0.9464  fark -0.0268 , basarisiz cagri 3
  n=0 ornekleme acik : 0.7321 / 0.8393  fark +0.1071
  n=3 ornekleme acik : 0.8571 / 0.8750  fark +0.0179

sifir -> uc ornek  : isabet +0.1071 , giris belirteci +4928
uc -> sekiz ornek  : isabet +0.0089 , giris belirteci +8736
dort ile sekiz arasi ortalama isabet 0.9250 , uc ornekte 0.9643
```

Üstteki altı satırın hepsinde **aynı dört örnek** vardır. Etiket kümesi aynı, yönerge aynı, biçim
tarifi aynı, ölçüm kümesi aynı ve **giriş belirteci altı sırada da 13366**. Değişen tek şey
örneklerin yazılma sırasıdır ve isabet **0,7679 ile 0,9196** arasında geziniyor. Aralık
**0,1518**, yani sıfırdan üç örneğe geçmenin kattığı **0,1071'den büyük**. Aynı örnek kümesi,
bedeli kuruşuna kadar aynıyken, iyi bir istemle kötü bir istem arasındaki farkı üretebiliyor.

Nedeni benzeticinin son örneği daha ağır basmasıdır. En kötü sıralamada son örnek `ariza`
etiketlidir ve cümlesi "kayit" ile "ekip" belirteçlerini taşır; bu iki belirteç talep kümesinde
başka etiketlere ait taleplerde de geçer ve ağırlıklandırıldığında onları da `ariza` tarafına
çeker. Aynı örnek listenin başında dururken bu etkiyi yapmıyor. Sıra bir tasarım kararıdır ve
istem üzerinde **bedelsiz** bir kaldıraçtır: değiştirmek hiçbir belirteç maliyeti getirmez.

Alt bölüm ölçünün kendi değişkenliğini veriyor. En olası seçimle çalışıldığında iki koşum
arasındaki fark en fazla **0,0268**; başarısız çağrı sayısı üç koşumda da üçtür ve hız sınırından
gelir. Bu ölçekte sıfırdan üç örneğe geçişin **+0,1071** kazancı iki koşum farkının dört katıdır
ve **ölçülmüş** sayılır; üçten sekize geçişin **+0,0089** kazancı iki koşum farkının altında
kalır ve **ölçülmemiş** sayılır. Örnekleme açıldığında tablo tersine döner: sıfır örnekte iki
koşum arasındaki fark **0,1071**, yani tam olarak ölçmek istediğimiz kazanç kadar. Aynı sayıyı
örneklemeli koşumda tek seferde ölçmeye çalışan biri, kazancı da gürültüyü de aynı büyüklükte
görür ve ikisini ayıramaz. **Ölçülmeden değiştirilen istem bir iyileştirme değil bir tahmindir**
ve burada ölçmenin bir ön koşulu vardır: ölçünün kendi değişkenliği, aranan farktan küçük
olmalıdır.

## Özet

- Sıfır örnekli yönlendirme **0,8571**, tek örnekli yönlendirme yine **0,8571** veriyor: tek
  örnek isabete hiçbir şey katmadan istek başına giriş belirtecini 59,3'ten 75,3'e çıkarıyor.
- Kazanç az örnekli yönlendirmede birikiyor ve **üçüncü örnekte doyuyor**: sıfırdan üçe
  **+0,1071** isabet ve **+4928** giriş belirteci, üçten sekize **+0,0089** isabet ve **+8736**
  giriş belirteci.
- Dört ile sekiz örnek arasındaki beş ölçümün ortalaması **0,9250**, üç örnekteki **0,9643'ün**
  altında; doyma noktasından sonra eklenen örnek bilgi değil gürültü taşıyor.
- Aynı dört örnek yalnız sırası değiştirilerek yazıldığında isabet **0,7679 ile 0,9196** arasında
  geziniyor. Aralık **0,1518**, giriş belirteci altı sıralamada da **13366**: sıra bedelsiz bir
  tasarım kaldıracıdır.
- En olası seçimle iki koşum farkı en fazla **0,0268**; örnekleme açıkken sıfır örnekte
  **0,1071**. Aranan kazanç ölçünün kendi değişkenliğinden küçükse ölçüm yapılmamış sayılır.

## Sonraki Adım

Bu iki derste isteme yazılan her şey **olumluydu**: şunu yap, şu biçimde yaz, şu örneklere bak.
Uygulamada istemlerin büyük bölümü bunun tersini de içerir — bir şeyin yapılmamasını söyleyen
cümleler. Bir etiketi kullanma, tarih verme, kesin konuşma, uydurma. Sezgi bu cümlelerin
zararsız olduğunu söyler: en kötü ihtimalle işe yaramaz. Sonraki ders bu sezginin sayısını alır ve
tersini bulur. Aynı kural iki ayrı biçimde yazılır — **yasak bildirimi** ve olumlu bildirim — ve
her ikisinin ürettiği **ihlal sayısı** yan yana basılır. Yasağın yasakladığı şeyi istemde adıyla
anmanın kendisinin bir bedeli vardır ve bu bedel sayıyla görünür.
