---
title: 'Açık ve Ölçülebilir Talep'
source: 'https://academia.sh/tr/kurslar/istem-muhendisligi/acik-ve-olculebilir-talep'
course: 'İstem Mühendisliği'
language: tr
updated: '2026-08-17T18:06:39+00:00'
license: 'CC BY-SA 4.0'
---

# Açık ve Ölçülebilir Talep

Belirsiz bir talebin tek bir yanlış yanıt değil bir dağılım ürettiği ölçülüyor: aynı belirsiz istem on koşumda kayıt başına ortalama 4,81 ayrı yanıt veriyor, en sık yanıt koşumların yalnız 0,3944 payında tekrarlanıyor ve yanıtların 0,4333 payından hiçbir etiket okunamıyor. Dört talep biçimi yan yana konuyor. Fiili açmak iki belirteç ekliyor ve dağılımı 4,53'e indiriyor; seçenek kümesini kapatmak 15 belirteç ekleyip dağılımı 3,89'a, etiketsiz payı 0,2889'a indiriyor; belirsizlik kuralı eklemek 10 belirteç daha ekleyip etiketsiz payı 0,3722'ye geri çıkarıyor. Tek koşumda okunan isabetin bandı 0,2778 ile 0,3333 arasındadır ve dört talebi birbirinden ayıramaz.

Önceki ders isteme kimlik ve yordam ekledi ve dört önekten hiçbirinin farkının ölçülebilir
olmadığını buldu. O ölçüm boyunca bir şey hiç değişmedi: **ne istendiği**. Talep her istemde aynı
cümleydi ve o cümlenin kendisi hiç sorgulanmadı. Oysa görev tanımı istemin en pahalı parçası
değil, en belirleyici parçasıdır.

Belirsiz bir talebin bedeli, belirsiz bir yanıt vermesi değildir. Belirsiz talep tek bir yanlış
cevap üretmez; **bir dağılım** üretir. Aynı istem, aynı kayıt, aynı model — ve on ayrı koşumda
birbirinin yerine geçmeyen birkaç ayrı yanıt. Bu dağılım tek koşuma bakan hiçbir ölçüde görünmez;
tek koşumda görünen şey, o dağılımdan çekilmiş tek bir örnektir. Bu ders dağılımı ölçer ve talebi
ölçülebilir kılmanın onu ne kadar darattığını sayar.

- **IT26.** Kod bir **benzeticiyi** çağırır; gerçek bir model uç noktası çağrılmaz. Destek
  talepleri **kurgudur** ve önceki derslerdeki kümenin ilk 36 kaydıdır. Küme küçültüldü çünkü her
  kayıt on kez çağrılıyor.
- **IT27.** Her kayıt **on koşumla** ölçülür: tohum 20260218'den 20260227'ye. Dağılım ölçüleri bu
  on yanıtın toplamıdır, tek bir koşumun değil.
- **IT28.** **Ayrı yanıt sayısı**, on koşumda birbirinden farklı çıkan yanıt metinlerinin
  sayısıdır ve kayıt başına ortalanır. En küçük değeri 1, en büyüğü 10'dur.
- **IT29.** **En sık pay**, on koşumda en çok tekrarlanan yanıtın payıdır. Dar bir dağılımda 1'e,
  geniş bir dağılımda 0,1'e yaklaşır.
- **IT30.** Hız sınırı her otuz yedinci çağrıda tetiklenir ve boş yanıt döndürür. Dağılım sayımını
  bozmaması için çağrı sayacı her kaydın on koşumundan önce sıfırlanır; bu bir ölçüm kararıdır ve
  koddadır.
- **IT31.** Dört talep biçimi artımlı kurulur: belirsiz fiil, açık fiil, açık fiil ile kapalı
  seçenek kümesi, buna eklenmiş belirsizlik kuralı.
- **IT32.** Bu derste **yanıtın biçimi hiçbir istemde istenmez**. Ölçülen şey talebin açıklığıdır;
  çıktının biçimi bir sonraki dersin konusudur.
- **IT33.** İsabet, on koşumun her birinde ayrı hesaplanır; tabloda ortalaması ve **bandı** (en
  büyük ile en küçük koşum arasındaki fark) basılır.
- **IT34.** Bedel belirteçtir ve istek başına giriş ile çıkış olarak yazılır; on koşum bedeli on
  katıdır.

## Belirsiz Talebin Ürettiği Dağılım

İlk blok benzeticiyi ve kurguyu kurar, dört talep biçimini tanımlar ve tek bir kurgu kaydı en
belirsiz biçimle on kez çağırıp çıkan yanıtları sayar.

```python
# BENZETICI. Bu kod gercek bir model uc noktasi cagirmaz; standart kitaplikla yazilmis
# bir dil modeli benzeticisidir. Destek talepleri de KURGU'dur.
import math

TOHUM, M32 = 20260218, 0xFFFFFFFF
PENCERE, EN_UZUN = 240, 24          # baglam penceresi ve en buyuk cikti, belirtec


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):                        # istemin icerigine bagli, kosumdan bagimsiz iz
    h = 2166136261
    for c in m:
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


KONU = ["fatura", "ariza", "sayac", "tarife", "kesinti"]
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
SERBEST = ["talebiniz {k} konusuyla ilgili gorunuyor",
           "bu kayit {k} basligina girer , ilgili ekibe yonlendirildi",
           "kaydiniz alindi , konuyu inceleyip donus yapacagiz"]
SAYAC = [0]


def cagir(istem, tohum=TOHUM, sicaklik=0.6, en_uzun=EN_UZUN):
    SAYAC[0] += 1
    bel = belirtecle(istem)
    if len(bel) > PENCERE:
        return {"durum": "baglam_asimi", "giris": len(bel), "cikis": 0, "yanit": ""}
    if SAYAC[0] % 37 == 0:
        return {"durum": "hiz_siniri", "giris": len(bel), "cikis": 0, "yanit": ""}
    r = uretec(tohum ^ izno(istem))
    if len(bel) > 90 and r() < 0.04:
        return {"durum": "zaman_asimi", "giris": len(bel), "cikis": 0, "yanit": ""}
    aday = [k for k in KAVRAM if k[:5] in bel]      # istemde adi gecen kavramlar
    if len(aday) < 3:
        aday = KAVRAM
    p = {k: 0.15 for k in aday}
    for t in bel:
        for tablo, w in ((IZ, 1.0), (TUZAK, 1.3)):
            if tablo.get(t) in p:
                p[tablo[t]] += 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 = k if "tek" in bel else SERBEST[ayrik(r(), [0.42, 0.26, 0.32])].format(k=k)
    cb = belirtecle(y)
    if len(cb) > en_uzun:                            # durdurma kosulu
        cb = cb[:en_uzun]
        y = " ".join(cb)
    return {"durum": "tamam", "giris": len(bel), "cikis": len(cb), "yanit": y}


def oku(y):                                          # yanittan etiket cikarma
    for s in y.lower().split():
        if s in KONU:
            return s
    return None


FIIL = "Su destek talebini konusuna gore etiketle ."
KUME_METNI = " Etiketler: fatura , ariza , sayac , tarife , kesinti ."
TALEP_BICIMI = (("belirsiz fiil", "Su destek talebini degerlendir ."),
                ("acik fiil", FIIL),
                ("kapali kume", FIIL + KUME_METNI),
                ("belirsizlik kurali",
                 FIIL + KUME_METNI + " Birden cok konu varsa ana konuyu sec ."))
KUME = TALEP[:36]
TOHUMLAR = [TOHUM + i for i in range(10)]


def kosumlar(bas, x):
    SAYAC[0] = 0            # hiz siniri dagilim sayimini bozmasin diye her talepte sifirlanir
    return [cagir(bas + " Talep: " + x["metin"], tohum=t) for t in TOHUMLAR]


def dokum(ad, bas, x):
    s = [c["yanit"] for c in kosumlar(bas, x)]
    print(f"{ad}, on kosum -> {len(set(s))} ayri yanit")
    for v in sorted(set(s)):
        print(f"  {s.count(v)}/10  {v}")


print(f"{'talep':<19} {'belirtec':>9}")
for ad, b in TALEP_BICIMI:
    print(f"{ad:<19} {len(belirtecle(b)):>9d}")
x0 = KUME[3]
print(f"KURGU talep {x0['no']} (gercek konu {x0['konu']}): {x0['metin']}")
dokum(TALEP_BICIMI[0][0], TALEP_BICIMI[0][1], x0)
```

```
talep                belirtec
belirsiz fiil               9
acik fiil                  11
kapali kume                26
belirsizlik kurali         36
KURGU talep 4004 (gercek konu ariza): ariza kaydi actim ama ekip gelmedi
belirsiz fiil, on kosum -> 7 ayri yanit
  1/10  bu kayit ariza basligina girer , ilgili ekibe yonlendirildi
  1/10  bu kayit odeme basligina girer , ilgili ekibe yonlendirildi
  1/10  bu kayit sayac basligina girer , ilgili ekibe yonlendirildi
  2/10  kaydiniz alindi , konuyu inceleyip donus yapacagiz
  1/10  talebiniz fatura konusuyla ilgili gorunuyor
  2/10  talebiniz kesinti konusuyla ilgili gorunuyor
  2/10  talebiniz sikayet konusuyla ilgili gorunuyor
```

Tek bir kayıt, on koşumda **yedi ayrı yanıt** verdi. En sık çıkan yanıt yalnız iki koşumda
tekrarlandı. Yanıtlardan biri hiçbir etiket taşımıyor; ikisi ise `odeme` ve `sikayet` etiketlerini
kullanıyor, yani saha ekibinin kurgu belge dağarcığında karşılığı olmayan adlar. İstem
"değerlendir" dedi ve bu fiil hangi kümeden hangi biçimde bir sonuç istendiğini hiç söylemedi.
Model bu boşluğu her koşumda ayrı bir şekilde doldurdu.

Bu tablonun asıl anlamı bir kayıtta değil, kayıtların dağılımındadır. Yedi ayrı yanıttan yalnız
birine bakan bir gözlemci, istemin çalıştığı ya da çalışmadığı sonucuna eşit kolaylıkla varır.

## Dört Talep Yan Yana

İkinci blok dört talep biçimini otuz altı kayıtta ve on koşumda ölçer. Her satırda kayıt başına
ortalama ayrı yanıt sayısı, en sık yanıtın payı, etiketsiz yanıt payı, on koşumun ortalama isabeti,
isabetin bandı ve belirteç bedeli durur.

```python
def olc(bas):
    ay = ec = bos = gi = ci = 0
    ds = [0] * len(TOHUMLAR)
    for x in KUME:
        c = kosumlar(bas, x)
        s = [v["yanit"] for v in c]
        e = [oku(v) for v in s]
        ay += len(set(s))
        ec += max(s.count(v) for v in s) / len(s)
        bos += sum(v is None for v in e) / len(e)
        for j, v in enumerate(e):
            ds[j] += v == x["konu"]
        gi += sum(v["giris"] for v in c) / len(c)
        ci += sum(v["cikis"] for v in c) / len(c)
    n = len(KUME)
    iso = [v / n for v in ds]
    return (ay / n, ec / n, bos / n, sum(iso) / len(iso), max(iso) - min(iso),
            gi / n, ci / n)


print(f"{'talep':<19} {'bel':>4} {'ayri yanit':>11} {'en sik':>7} {'etiketsiz':>10} "
      f"{'isabet':>7} {'bant':>7} {'giris':>6} {'cikis':>6}")
for ad, b in TALEP_BICIMI:
    ay, ec, bos, d, bant, gi, ci = olc(b)
    print(f"{ad:<19} {len(belirtecle(b)):>4d} {ay:>11.2f} {ec:>7.4f} {bos:>10.4f} "
          f"{d:>7.4f} {bant:>7.4f} {gi:>6.1f} {ci:>6.1f}")
print()
dokum(TALEP_BICIMI[2][0], TALEP_BICIMI[2][1], x0)
```

```
talep                bel  ayri yanit  en sik  etiketsiz  isabet    bant  giris  cikis
belirsiz fiil          9        4.81  0.3944     0.4333  0.4611  0.3333   23.1   11.4
acik fiil             11        4.53  0.4333     0.4500  0.4417  0.3333   25.1   11.3
kapali kume           26        3.89  0.4083     0.2889  0.5306  0.2778   40.1   11.5
belirsizlik kurali    36        3.78  0.4611     0.3722  0.4722  0.3333   50.1   11.6

kapali kume, on kosum -> 4 ayri yanit
  2/10  bu kayit kesinti basligina girer , ilgili ekibe yonlendirildi
  3/10  kaydiniz alindi , konuyu inceleyip donus yapacagiz
  2/10  talebiniz ariza konusuyla ilgili gorunuyor
  3/10  talebiniz kesinti konusuyla ilgili gorunuyor
```

## Fiili Açmak Ölçülebilirlik Değildir

İkinci satır bu dersin en kolay yanlış anlaşılan sonucudur. "Değerlendir" fiili "konusuna göre
etiketle" ile değiştirildi; talep dilbilgisi olarak açık, eylem olarak nettir. Ayrı yanıt sayısı
4,81'den 4,53'e indi, isabet 0,4611'den 0,4417'ye **düştü**, etiketsiz yanıt payı 0,4333'ten
0,4500'e **çıktı**. İki belirteçlik ek, dağılımı ölçülebilir biçimde daraltmadı.

Sebep yapısaldır. Açık bir fiil ne yapılacağını söyler, **hangi kümeden seçileceğini** söylemez.
"Etiketle" diyen bir istem, etiketin nereden geleceğini modele bırakır ve model her koşumda kendi
sözlüğünden bir ad üretir. Bir talebin ölçülebilir olması, fiilinin net olması değil, **cevabın
alınabileceği kümenin kapalı olmasıdır**.

Üçüncü satır bunu gösteriyor. Beş etiketin adı isteme yazıldığında ayrı yanıt sayısı 3,89'a
iniyor, etiketsiz pay 0,4333'ten 0,2889'a düşüyor ve isabet 0,5306'ya çıkıyor. Bedel açıkça
sayılıdır: istek başına giriş 25,1'den 40,1 belirtece çıkıyor, yani 15 belirteç. Otuz altı kayıtta
540, on koşumda 5400 belirteç. Aynı kaydın kapalı kümeyle alınan on koşumu blok çıktısının
sonundadır: yedi ayrı yanıt dörde inmiş ve küme dışı adlar kaybolmuş durumda. Bu kayıtta yoğunlaşma
yanlış etikette oldu; **dağılımın daralması isabet güvencesi değildir** ve iki sayı ayrı sütunlarda
durmalıdır.

Dördüncü satır kursun ikinci iddiasını ödüyor. "Birden çok konu varsa ana konuyu seç" cümlesi on
belirteç ekliyor ve ayrı yanıt sayısını 3,89'dan 3,78'e indiriyor. Aynı cümle etiketsiz payı
0,2889'dan **0,3722'ye** çıkarıyor ve isabeti 0,5306'dan **0,4722'ye** düşürüyor. Belirsizliği
azaltmak için yazılmış bir cümle, ölçüldüğünde belirsizliği artırmış olabilir.

## Dağılım Tek Koşumda Görünmez

Tablonun `bant` sütunu bu dersin yöntem sonucudur. Dört talebin on koşumdaki isabet bandı sırasıyla
0,3333, 0,3333, 0,2778 ve 0,3333. Kapalı kümenin isabete etkisi +0,0695; kendi bandının dörtte
birinden küçük. Önceki dersin ölçütüyle okunduğunda bu fark **ölçülmemiş sayılır**. Yani dört
talebin hangisinin daha iyi olduğu, tek koşumda okunan isabetle **hiçbir biçimde** ayırt edilemez.

Ayırt edebilen sayılar başkadır ve hepsi on koşumun toplamıdır: ayrı yanıt sayısı 4,81'den 3,89'a,
etiketsiz pay 0,4333'ten 0,2889'a iniyor. Bu iki ölçü tek bir koşumdan hesaplanamaz, çünkü tek
koşumda her kaydın bir yanıtı vardır ve o yanıtın kaç olasılıktan biri olduğu görünmez.
**Belirsiz bir talebin bedeli, tek koşumda ölçülemeyen bir bedeldir**; bu yüzden çoğu istem
denemesi onu hiç görmez ve tek bir başarılı örnekle kapanır.

## Özet

- Belirsiz bir talep tek bir yanlış yanıt değil bir dağılım üretir. Tek kayıt on koşumda yedi
  ayrı yanıt verdi; küme genelinde kayıt başına ortalama **4,81 ayrı yanıt** ve en sık yanıt için
  yalnız **0,3944** pay çıktı.
- Fiili açmak ölçülebilirlik değildir: iki belirteçlik ek ayrı yanıtı 4,53'e indirdi, isabeti
  0,4417'ye düşürdü ve etiketsiz payı 0,4500'e çıkardı.
- Talebi ölçülebilir kılan karar **seçenek kümesini kapatmaktır**: ayrı yanıt 3,89, etiketsiz pay
  0,2889, isabet 0,5306. Bedeli istek başına 15 belirteç, on koşumda 5400 belirteçtir.
- Belirsizlik kuralı eklemek on belirteç ekleyip etiketsiz payı 0,3722'ye, isabeti 0,4722'ye
  götürdü: belirsizliği azaltmak için yazılan cümle ölçüldüğünde belirsizliği artırdı.
- İsabetin on koşumdaki bandı 0,2778 ile 0,3333 arasında; kapalı kümenin +0,0695 etkisi bandın
  içindedir. Dağılım ölçüleri tek koşumdan hesaplanamaz.

## Sonraki Adım

Dört derste istemin bileşenleri ayrıldı, kalıcı yönergenin tekrar bedeli sayıldı, rol öneklerinin
farkı ölçülemez bulundu ve talep kapalı bir kümeye bağlandı. Buna rağmen kapalı kümeli istem bile
kayıt başına ortalama 3,89 ayrı yanıt üretiyor ve yanıtların 0,2889 payından hiçbir etiket
okunamıyor. Kalan dağılımın kaynağı artık ne istendiği değil, **nasıl söylendiğidir**: aynı etiket
üç ayrı cümle kalıbıyla, bazen de hiçbir etiket adı geçmeden veriliyor. Talep açıldı, ama yanıtın
biçimi hâlâ modele bırakıldı. Sonraki ders bunu ele alır: çıktı biçimi istendiğinde kaç yanıt
makinece ayrıştırılabiliyor ve uzunluk sınırı isabetten ne kadarını geri alıyor.
