---
title: 'Cezalar ve Durdurma Dizileri'
source: 'https://academia.sh/tr/kurslar/istem-muhendisligi/cezalar-ve-durdurma-dizileri'
course: 'İstem Mühendisliği'
language: tr
updated: '2026-08-17T18:06:38+00:00'
license: 'CC BY-SA 4.0'
---

# Cezalar ve Durdurma Dizileri

Yineleme cezası ve durdurma dizisinin aynı yanıt üretiminde ölçülmesi: taban düzenekte yineleme oranı 0,3431 ve 120 yanıtın 107'si uzunluk sınırında kesiliyor, isteme yazılan yasak bildirimi oranı 0,2167'ye indirirken giriş belirtecini 2734'ten 3574'e çıkarıyor, aynı işi 0,45 yineleme cezası sıfır ek belirteçle 0,1972'ye indiriyor. Durdurma dizisi kesilen yanıt sayısını 55'e, ceza ile birlikte 24'e düşürüyor ve çıkış belirtecini 4073'ten 2653'e indiriyor, ama yirmi beş yanıtı etiket cümlesi yazılmadan erken kesip kullanılabilirliği 0,8833'ten 0,7417'ye düşürüyor. Durdurma dizisi satırında iki koşum farkı 0,0543'tür ve tabana göre kazancın 0,0746 olması bu satırı sınırda ölçülebilir kılar.

Önceki derste örnekleme ayarları hangi kavramın seçileceğini denetledi. Yanıtın **nerede
biteceği** ise tek bir sert uzunluk sınırına bırakıldı ve o sınırda kaç yanıtın kesildiği hiç
sayılmadı. Aynı biçimde, uzun bir yanıtın kendi içinde aynı cümleyi tekrar etmesi de ölçülmedi.

Bu ders iki denetimi ekler ve ikisini de sayıyla karşılaştırır. **Yineleme cezası**, daha önce
üretilmiş bir parçanın puanını düşürür. **Durdurma dizisi**, belirlenen bir metin parçası
üretildiğinde üretimi bitirir. İkisi de çağrı ayarıdır ve isteme tek bir belirteç eklemez; bu
yüzden ders bir üçüncü yolu da yan yana ölçer: aynı işi **isteme yazarak** istemek.

- **CD9.** Kod bir **benzeticidir**; gerçek bir uç nokta çağrılmaz. Talepler ve yanıt cümleleri
  **kurgudur**, tohum **20260218**.
- **CD10.** Benzetici yanıtı **cümle cümle** üretir. Her adımda altı kurgu cümleden biri puanına
  göre çekilir; çekiliş kısıtsızsa aynı cümle birden çok kez gelebilir.
- **CD11. Yineleme oranı**, bir yanıtta tekrar eden cümlelerin payıdır: bir eksi ayrı cümle
  sayısının toplam cümle sayısına oranı, 120 yanıt üzerinde ortalanır.
- **CD12. Kesilen yanıt**, çıktı belirteci sınırına (34 belirteç) çarpıp son cümlesi yarıda kalan
  yanıttır. **Erken kesilen yanıt**, durdurma dizisi yüzünden **etiket cümlesi yazılmadan** biten
  yanıttır; ikisi ayrı sayılır.
- **CD13.** Etiket cümlesi, konunun kaydedildiğini bildiren cümledir. Yarıda kalmış bir son cümle
  **tam sayılmaz**; yanıtın kullanılabilirliği bu cümleye bakılarak ölçülür.
- **CD14.** İstemdeki yasak bildirimi benzeticide **ılımlı bir cezaya** karşılık gelir. Bu, bir
  yönergenin bir ayara doğrudan çevrilmediğini gösteren bir kurgu kabuldür.
- **CD15.** İki koşum tohum 20260218 ve 20260219 ile alınır; yineleme oranı iki koşumda ayrı ayrı
  basılır ve aradaki fark ölçülebilirlik eşiğidir.
- **CD16.** Bedel giriş belirteci, çıkış belirteci ve çağrı sayısı olarak yazılır; çağrı sayısı bu
  derste hiç değişmez.

## Yanıtın Kendini Tekrar Etmesi

Bir yanıt tek bir seçim değildir; art arda gelen birçok seçimdir. Her adımda en yüksek puanlı
parça biraz daha olasıdır ve bir kez seçilmesi onu daha az olası kılmaz. Sonuç, uzun yanıtlarda
kendini gösteren bir döngüdür: aynı cümle döner durur ve yanıt sınırda kesilir.

```python
# BENZETICI -- KURGUDUR. Gercek bir model uc noktasi cagrilmaz. Bu blok yaniti
# cumle cumle ureten bir dil modeli benzeticisidir; talepler de KURGU'dur.
import math

TOHUM, M32 = 20260218, 0xFFFFFFFF
EN_UZUN, EN_COK_CUMLE = 34, 6           # cikti belirteci siniri ve cumle siniri


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"]
KALIP = [("bu ayki fatura tutari gecen aya gore cok yuksek geldi", "fatura"),
         ("faturami odedim ama sistemde borc gorunuyor", "fatura"),
         ("fatura ayrintisini nereden gorebilirim", "fatura"),
         ("evde su akmiyor bir ariza var galiba", "ariza"),
         ("baglanti bozuk oldu ve hic calismiyor", "ariza"),
         ("ariza kaydi actim ama ekip gelmedi", "ariza"),
         ("sayac okumasi yanlis girilmis endeks tutmuyor", "sayac"),
         ("sayac degisimi icin randevu istiyorum", "sayac"),
         ("sayac uzerindeki endeks ile fatura ayni degil", "sayac"),
         ("hangi tarife basamagindayim ogrenmek istiyorum", "tarife"),
         ("tarife degisikligi icin ne yapmam gerekiyor", "tarife"),
         ("birim ucret abone tipine gore degisiyor mu", "tarife"),
         ("mahallede kesinti var ne zaman gelecek", "kesinti"),
         ("planli kesinti duyurusu nereden takip edilir", "kesinti"),
         ("aksamdan beri kesinti yasiyoruz", "kesinti")]
TALEP = []
for i in range(120):                    # 120 KURGU destek talebi
    r = uretec(TOHUM + i)
    k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])]
    TALEP.append({"no": 4001 + i, "konu": k,
                  "metin": [x for x in KALIP if x[1] == k][int(r() * 3)][0]})

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"}
CUMLE = [("talebiniz alindi", 1.00), ("konu {k} olarak kaydedildi", 1.25),
         ("ilgili ekibe yonlendirildi", 1.05), ("en kisa surede donus yapilacak", 0.95),
         ("ek bilgi icin kayit numaranizi hazir bulundurun", 0.80),
         ("anlayisiniz icin tesekkur ederiz", 0.85)]
SAYAC = [0]


def yanitla(istem, tohum=TOHUM, ceza=0.0, durdurma=None, en_uzun=EN_UZUN):
    """Yanit cumle cumle uretilir. ceza kullanilan cumlenin puanini dusurur;
    durdurma dizisi uretilen cumlede gorunurse uretim o cumleyi yazmadan biter."""
    SAYAC[0] += 1
    bel = belirtecle(istem)
    p = {k: 0.15 for k in KONU}
    for t in bel:
        if IZ.get(t) in p:
            p[IZ[t]] += 1.0
    k = max(sorted(p), key=lambda a: p[a])
    if "tekra" in bel:                                  # istemdeki yasak bildirimi
        ceza = max(ceza, 0.45)
    r = uretec(tohum ^ izno(istem))
    kullanim, cumleler, belir, kesildi, erken = {}, [], [], False, False
    while len(cumleler) < EN_COK_CUMLE:
        s = [b - ceza * kullanim.get(c, 0) for c, b in CUMLE]
        e = [math.exp(v / 0.35) for v in s]
        c = CUMLE[ayrik(r(), [v / sum(e) for v in e])][0].format(k=k)
        if durdurma and durdurma in c:                  # durdurma dizisi
            erken = not any("konu" in x for x in cumleler)
            break
        kullanim[c.replace(k, "{k}")] = kullanim.get(c.replace(k, "{k}"), 0) + 1
        yeni = belirtecle(c)
        if len(belir) + len(yeni) > en_uzun:            # uzunluk siniri: kesilme
            belir, kesildi = (belir + yeni)[:en_uzun], True
            cumleler.append(c)
            break
        belir += yeni
        cumleler.append(c)
    tam = cumleler[:-1] if kesildi else cumleler
    return {"cumle": cumleler, "belirtec": len(belir), "kesildi": kesildi,
            "erken": erken, "etiket": any(c.startswith("konu") for c in tam)}


YONERGE = "Su destek talebine kisa bir yanit yaz . Talep "
ORNEK = TALEP[4]
o = yanitla(YONERGE + f"{ORNEK['no']} : {ORNEK['metin']}")
print(f"KURGU talep kumesi {len(TALEP)} kayit; ornek talep {ORNEK['no']}")
print(f"cikti siniri {EN_UZUN} belirtec, cumle siniri {EN_COK_CUMLE}")
for c in o["cumle"]:
    print(f"  - {c}")
print(f"cumle {len(o['cumle'])}, ayri cumle {len(set(o['cumle']))}, "
      f"belirtec {o['belirtec']}, kesildi {o['kesildi']}, etiket {o['etiket']}")
d = yanitla(YONERGE + f"{ORNEK['no']} : {ORNEK['metin']}", ceza=0.90,
            durdurma="ek bilgi")
print("ceza 0,90 ve durdurma dizisi 'ek bilgi' ile ayni talep:")
for c in d["cumle"]:
    print(f"  - {c}")
print(f"cumle {len(d['cumle'])}, ayri cumle {len(set(d['cumle']))}, "
      f"belirtec {d['belirtec']}, kesildi {d['kesildi']}, erken {d['erken']}")
```

```
KURGU talep kumesi 120 kayit; ornek talep 4005
cikti siniri 34 belirtec, cumle siniri 6
  - anlayisiniz icin tesekkur ederiz
  - ilgili ekibe yonlendirildi
  - en kisa surede donus yapilacak
  - talebiniz alindi
  - ilgili ekibe yonlendirildi
  - en kisa surede donus yapilacak
cumle 6, ayri cumle 4, belirtec 34, kesildi True, etiket False
ceza 0,90 ve durdurma dizisi 'ek bilgi' ile ayni talep:
  - anlayisiniz icin tesekkur ederiz
  - ilgili ekibe yonlendirildi
  - en kisa surede donus yapilacak
  - talebiniz alindi
  - konu sayac olarak kaydedildi
cumle 5, ayri cumle 5, belirtec 31, kesildi False, erken False
```

Aynı talep iki ayarda iki ayrı yanıt verdi ve ikisinin farkı bir üslup meselesi değil. Üstteki
yanıt altı cümlenin dördü ayrı olacak biçimde iki tekrar taşıyor, otuz dört belirtecin tamamını
harcıyor, sınırda kesiliyor ve **etiket cümlesini hiç yazamıyor**. Yanıt kullanılamaz: talebin
hangi konuya atandığı içinde yok. Alttaki yanıt beş ayrı cümleyle otuz bir belirteçte bitiyor ve
etiket cümlesi sona yetişiyor. Kesilme yok, tekrar yok.

Buradaki nedensellik önemlidir. Tekrar, yanıtı yalnız çirkinleştirmiyor; **sınırlı bütçeyi
tüketip asıl içeriği dışarıda bırakıyor**. Yineleme, uzunluk sınırıyla birleştiğinde bir
biçim sorunu olmaktan çıkıp bir **içerik kaybına** dönüşür.

## Üç Yolun Aynı Tabloda Sayılması

Aynı 120 talep beş düzenekte koşturulur. İkinci satır **isteme yazılan** bir yasak bildirimidir;
üçüncü ve dördüncü satır **çağrı ayarı** olan yineleme cezasıdır; beşinci satır durdurma dizisi,
altıncısı ikisinin birleşimidir.

```python
YASAK = "Ayni cumleyi tekrar etme . "
DUZENEK = [("taban", YONERGE, 0.0, None),
           ("istemde yasak bildirimi", YASAK + YONERGE, 0.0, None),
           ("yineleme cezasi 0,45", YONERGE, 0.45, None),
           ("yineleme cezasi 0,90", YONERGE, 0.90, None),
           ("durdurma dizisi", YONERGE, 0.0, "ek bilgi"),
           ("ceza + durdurma", YONERGE, 0.90, "ek bilgi")]


def olc(yonerge, ceza, durdurma, tohum=TOHUM):
    SAYAC[0] = 0
    yin = kes = erk = kul = g = c = 0
    for x in TALEP:
        istem = yonerge + f"{x['no']} : {x['metin']}"
        o = yanitla(istem, tohum=tohum, ceza=ceza, durdurma=durdurma)
        n = len(o["cumle"])
        yin += 0.0 if n == 0 else 1 - len(set(o["cumle"])) / n
        kes += o["kesildi"]
        erk += o["erken"]
        kul += o["etiket"]
        g += len(belirtecle(istem))
        c += o["belirtec"]
    return (yin / len(TALEP), kes, erk, kul / len(TALEP), g, c)


print("duzenek                 yineleme A  yineleme B  kesilen  erken  etiketli  giris  cikis")
for ad, y, ce, d in DUZENEK:
    a = olc(y, ce, d)
    b = olc(y, ce, d, TOHUM + 1)
    print(f"{ad:<23} {a[0]:>10.4f}  {b[0]:>10.4f}  {a[1]:>4}/{b[1]:<3}{a[2]:>6}"
          f"  {a[3]:>8.4f}  {a[4]:>5}  {a[5]:>5}")
```

```
duzenek                 yineleme A  yineleme B  kesilen  erken  etiketli  giris  cikis
taban                       0.3431      0.3750   107/106     0    0.8833   2734   4073
istemde yasak bildirimi     0.2167      0.1939   112/117     0    0.9083   3574   4072
yineleme cezasi 0,45        0.1972      0.1944   117/117     0    0.9667   2734   4078
yineleme cezasi 0,90        0.0892      0.0925   120/120     0    0.9833   2734   4080
durdurma dizisi             0.2685      0.3228    55/59     25    0.7417   2734   2942
ceza + durdurma             0.0578      0.0715    24/25     20    0.8333   2734   2653
```

İkinci ve üçüncü satır bu dersin asıl karşılaştırmasıdır. İkisi de aynı şeyi ister: kendini
tekrar etme. Yasak bildirimi yineleme oranını **0,3431'den 0,2167'ye** indiriyor ve giriş
belirtecini **2734'ten 3574'e** çıkarıyor — talep başına yedi belirteç, toplamda **840**. Yineleme
cezası aynı oranı **0,1972'ye** indiriyor ve giriş belirteci **2734'te sabit kalıyor**. Daha az
etkili olan yol pahalı, daha etkili olan yol bedelsiz. Bir hedefin isteme yazılabiliyor olması,
oraya yazılmasının doğru olduğu anlamına gelmez.

Ceza 0,45'ten 0,90'a çıkarıldığında yineleme **0,0892**'ye iniyor ve kazanç **0,1080**'dir. Bu
satırda iki koşum farkı yalnız **0,0033**, yani kazanç farkın otuz katından büyük: rahatça
ölçülebilir bir iyileştirme. Aynı okuma beşinci satırda ters sonuç verir. Durdurma dizisi
yinelemeyi 0,3431'den **0,2685**'e indiriyor, kazanç **0,0746**; ama o satırın iki koşum farkı
**0,0543**'tür. Kazanç farkın ancak biraz üstünde kalıyor ve tek koşuma bakan biri bu satırı
olduğundan güçlü gösterir. **Ölçülmeden değiştirilen istem bir iyileştirme değil bir tahmindir**,
ve ölçüm iki koşumu birlikte okumayı gerektirir.

İki koşum farkının satırdan satıra değişmesi de bir bilgidir. Ceza satırlarında fark 0,0033 ile
0,0028 arasında kalıyor, çünkü ceza aynı cümlenin ikinci kez seçilmesini her koşumda aynı ölçüde
engelliyor. Durdurma dizisi satırında fark 0,0543'e çıkıyor, çünkü yanıtın nerede biteceği
tek bir çekilişe bağlı ve o çekiliş tohumla birlikte kayıyor. Bir düzenek ölçtüğü sayıyı
iyileştirirken **o sayının güvenilirliğini düşürebilir**; iki koşumu basmayan bir tablo bunu
göstermez.

Yineleme oranı düşerken **kesilen yanıt sayısının arttığı** da tabloda görünüyor: taban 107,
ceza 0,90 ile 120. Ceza tekrarı azaltır ama yanıtı kısaltmaz; tersine, tekrar yerine gelen ayrı
cümleler daha uzundur ve bütçeyi daha hızlı tüketir. Uzunluk sorununu çözen tek düzenek durdurma
dizisidir: kesilen yanıt **55'e**, ceza ile birlikte **24'e** iniyor ve çıkış belirteci
**4073'ten 2653'e** düşüyor. Toplam kazanç **1420 belirteç**, yanıt başına 11,8 belirteçtir.

## Durdurma Dizisinin Erken Kestiği

Durdurma dizisinin bedeli çıkışta değil **içerikte** ödenir. Beşinci satırda yirmi beş yanıt,
etiket cümlesi hiç yazılmadan bitiyor: durdurma dizisini taşıyan cümle sıraya erken düştü ve
üretim orada durdu. Kullanılabilir yanıt payı tabanın **0,8833**'ünden **0,7417**'ye iniyor.
Yani çıkış belirtecinden kazanılan 1131 belirteç, on yedi kullanılabilir yanıtla ödendi.

Son satır iki düzeneğin birbirini nasıl düzelttiğini gösteriyor. Yineleme cezası eklenince erken
kesme 25'ten **20'ye**, kullanılabilirlik **0,8333**'e çıkıyor. Sebep sıradadır: ceza, daha önce
kullanılmış cümlelerin puanını düşürdüğü için etiket cümlesi yanıtın başlarına doğru kayıyor ve
durdurma dizisi geldiğinde çoğu yanıtta zaten yazılmış oluyor. Buna karşın son satır **hâlâ
tabanın altındadır**: 0,8333 karşısında 0,8833. İki düzenek birlikte çıkışı üçte bir oranında
ucuzlattı ve kullanılabilirliği düşürdü.

Bu, durdurma dizisi seçiminin bir tasarım kararı olduğunu gösterir. Dizinin kendisi keyfi
değildir: yanıtta **zorunlu içerikten sonra** görünmesi beklenen bir metin parçası seçilmelidir.
Burada seçilen parça yanıtın sonlarında beklenen bir ek bilgi cümlesinin başıydı ve beklentinin
tutmadığı yirmi beş yanıtta içerik kaybı oluştu. Ölçülmesi gereken şey dizinin kendisi değil,
**onun hangi sıklıkla zorunlu içerikten önce çıktığıdır**; bu sayı basılmadan durdurma dizisi
ölçülmüş sayılmaz.

Üç sayıyla toparlanır. Önceki istem, yalın yanıt yönergesidir: 2734 giriş belirteci, yineleme
0,3431, kesilen 107, çıkış 4073, kullanılabilirlik 0,8833. Değiştirilmiş istem iki ayrı biçimde
kurulabilir. İsteme yasak bildirimi yazmak yinelemeyi 0,2167'ye indirir ve **840 belirteç** ekler.
Çağrı ayarını değiştirmek yinelemeyi 0,0578'e, kesileni 24'e, çıkışı 2653'e indirir; **giriş
belirteci ve çağrı sayısı hiç değişmez**, karşılığında yirmi yanıt erken kesilir ve
kullanılabilirlik tabanın altına iner. Bir düzeneğin bedeli her zaman belirteçle ödenmez; bazen
doğrudan **kullanılabilirlikle** ödenir.

## Özet

- Yanıt cümle cümle üretildiği için tekrar kendiliğinden oluşur: taban düzenekte yineleme oranı
  0,3431 ve 120 yanıtın 107'si uzunluk sınırında kesiliyor.
- Tekrar bir üslup sorunu değildir; sınırlı çıkış bütçesini tüketip etiket cümlesini dışarıda
  bırakır ve yanıtı kullanılamaz kılar.
- İsteme yazılan yasak bildirimi yinelemeyi 0,2167'ye indirir ve 840 giriş belirteci ekler; çağrı
  ayarı olan 0,45 yineleme cezası aynı oranı 0,1972'ye indirir ve sıfır belirteç ekler.
- Ceza 0,45'ten 0,90'a çıkınca kazanç 0,1080 ve iki koşum farkı 0,0033'tür; durdurma dizisinin
  tabana göre kazancı 0,0746 ve iki koşum farkı 0,0543'tür, yani ikinci satır sınırdadır.
- Durdurma dizisi kesilen yanıtı 107'den 55'e, ceza ile birlikte 24'e indirir ve çıkış belirtecini
  4073'ten 2653'e düşürür; bedeli yirmi beş erken kesilen yanıt ve kullanılabilirliğin 0,8833'ten
  0,7417'ye inmesidir.

## Sonraki Adım

Bu iki denetim yanıtın **ne kadar sürdüğünü** düzenledi, **neye benzediğini** değil. Kesilme
azaldı, tekrar azaldı, ama çıktı hâlâ serbest metin: etiketin yanıtın kaçıncı cümlesinde
geçtiği, hangi sözcükle yazıldığı ve yanında başka ne bulunduğu her seferinde başka. Bir kayıt
sistemine yazılacak bir çıktı bu biçimde okunamaz. Sonraki ders çıktının biçimini üç düzeyde
karşılaştırır — serbest metin, isteme yazılmış biçim tarifi ve şema dayatması — ve her düzeyde
**şemaya uyan yanıt oranını** belirteç bedeliyle birlikte basar.
