---
title: 'Erişim ve Üretim Kalitesinin Ayrı Ölçülmesi'
source: 'https://academia.sh/tr/kurslar/rag/degerlendirme'
course: 'Gömme Vektörleri ve Erişim Artırılmış Üretim'
language: tr
updated: '2026-08-17T18:06:35+00:00'
license: 'CC BY-SA 4.0'
---

# Erişim ve Üretim Kalitesinin Ayrı Ölçülmesi

Uçtan uca tek bir doğruluk oranının dört ayrı durumu üst üste yığdığının gösterilmesi: kırk sorguluk kurgu kümede erişimsiz taban 0,3750 çıkıyor ve bu oranın tamamı şans, çünkü doğru parça hiç getirilmiyor. Üç parçalı bağlamda tek sayı 0,9500, beş parçalı bağlamda da 0,9500; ama üçlüde iki başarısızlık erişim kusuru, beşlide aynı iki başarısızlık üretim kusurudur ve tek sayı ikisini ayırt etmez. Erişim anması üçlüde 0,9500, beşlide 1,0000; bedel 120 parça ve 2199 belirteçten 200 parça ve 3505 belirtece çıkıyor. İki koşum farkı erişimsiz tabanda 0,1750, üç parçalı bağlamda 0,0000. Sınıf alt grubu her iki kusurun da aynı sınıfta toplandığını gösteriyor.

Bir önceki derste aynı parçalar farklı sıralarda verildi ve yanıtın değişme payı sayıldı. Hat
artık kurulu: belge hazırlandı, parçalara bölündü, dizinlendi, sorgu tek adımda dönüştürüldü,
adaylar yeniden sıralandı ve bağlam sınıra göre kuruldu. Yedi dersin her biri kendi adımını kendi
sayısıyla savundu.

Bu ders o sayıların birleştiği yerde durur. Bir erişim artırılmış üretim hattı çalıştırıldığında
elde kalan genellikle tek bir orandır: kaç soruya doğru yanıt verildi. Bu dersin iddiası, o tek
oranın **dört ayrı durumu** üst üste yığdığı ve yığının içinden hangi aşamanın bozulduğunun
okunamadığıdır. Değerlendirme yordamının kendisi M27'nin Makine Öğrenmesi kursunda, model
değerlendirme ve alt grup dersleriyle birlikte kuruldu ve burada tekrarlanmaz; oradan devralınan
tek şey **taban çizgisi kuralıdır** ve bu kursta taban **erişimsiz çağrıdır**.

- **EH71.** Dağarcık, kavram ekseni, gömme ve sorgu kümesi **kurgudur** ve ders içinde üretilir.
  Hiçbir gerçek kurum, ürün, belge, vektör deposu ya da gömme ucu yoktur.
- **EH72.** Kavramın **belge dilinde** bir yüzeyi (`kademe esigi`), **sorgu dilinde** başka bir
  yüzeyi (`hangi dilimdeyim`) vardır ve ikisi hiçbir belirteci paylaşmaz.
- **EH73.** **Erişim ölçüsü**: getirilen parçaların içinde hedef yordamın belge yüzeyi geçiyorsa
  erişim doğrudur. Bu ölçü tohumdan bağımsızdır.
- **EH74.** **Üretim ölçüsü**: yanıtta adı geçen yordam hedef yordamsa üretim doğrudur. Yanıt bir
  **dil modeli benzeticisinden** gelir; benzetici gerçek bir uç nokta çağırmaz.
- **EH75.** Benzeticinin **ön bilgisi yalnız sınıf düzeyindedir**. Sorgu dilinden hangi sınıfa ait
  olduğunu çıkarır, o sınıfın dört yordamına eşit ve küçük bir taban puan verir, ama yordam adını
  kendiliğinden bilmez. Bağlamda geçen her yordam adı bir puan ekler.
- **EH76.** **Bedel** üç birimle yazılır: getirilen parça sayısı, isteme giren belirteç ve erişim
  adımı. Süre yazılmaz.

## Erişim Sütunu: Kanıt Geldi mi

İlk sütun modele hiç bakmaz. Sorulan tek şey, getirilen parçaların hedef yordamı taşıyıp
taşımadığıdır. İki oran yan yana durur: **erişim anması** en az bir doğru parçanın geldiği sorgu
payı, **erişim kesinliği** getirilen parçaların doğru olma payıdır.

```python
# KURGUDUR. Dagarcik, kavram ekseni, gomme ve sorgu kumesi ders icinde uretilir;
# hicbir gercek kurum, urun, belge ya da gomme ucu yoktur.
TOHUM, M32 = 20260218, 0xFFFFFFFF
BOYUT = 32


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):
    b = []
    for s in m.lower().replace(",", " , ").split():
        while len(s) > 5:
            b.append(s[:5])
            s = s[5:]
        b.append(s)
    return b


SINIF = ["tarife", "ariza", "sayac", "kesinti", "bakim"]
KOD = {"tarife": "TR", "ariza": "AR", "sayac": "SY", "kesinti": "KS", "bakim": "BK"}
KAVRAM = {                       # kavram: (sinif, belge yuzeyi, sorgu yuzeyi)
    "basamak":   ("tarife", "kademe esigi", "hangi dilimdeyim"),
    "birim":     ("tarife", "birim ucret", "metrekup fiyati"),
    "abonetip":  ("tarife", "abone tipi", "mesken mi isyeri mi"),
    "gecis":     ("tarife", "tarife gecisi", "plan degistirme"),
    "arizakod":  ("ariza", "ariza kodu", "hata numarasi"),
    "sizinti":   ("ariza", "hat sizintisi", "su kacagi"),
    "basinc":    ("ariza", "basinc dususu", "zayif akis"),
    "ekip":      ("ariza", "saha ekibi", "gorevli ne zaman gelir"),
    "endeks":    ("sayac", "endeks degeri", "sayac ustundeki rakam"),
    "okuma":     ("sayac", "okuma yordami", "nasil kaydediliyor"),
    "degisim":   ("sayac", "sayac degisimi", "cihaz yenileme"),
    "dogrula":   ("sayac", "okuma dogrulamasi", "yanlis girilmis mi"),
    "planli":    ("kesinti", "planli kesinti", "onceden duyurulan durma"),
    "duyuru":    ("kesinti", "duyuru kanali", "nereden ogrenirim"),
    "sure":      ("kesinti", "kesinti suresi", "ne kadar surer"),
    "geridonus": ("kesinti", "yeniden verme", "ne zaman gelir"),
    "periyot":   ("bakim", "periyodik bakim", "duzenli kontrol"),
    "vana":      ("bakim", "vana kontrolu", "musluk kapatma duzeni"),
    "filtre":    ("bakim", "filtre degisimi", "temizleme parcasi"),
    "kalib":     ("bakim", "kalibrasyon kaydi", "olcum ayari"),
}
ANAHTAR = list(KAVRAM)
ORTAK = ["kayit", "bolge", "donem", "islem", "form", "onay", "not"]

BELGE = []
for i in range(200):
    r = uretec(TOHUM + 7919 * i)
    s = SINIF[ayrik(r(), [0.22, 0.24, 0.20, 0.18, 0.16])]
    kav = [k for k in ANAHTAR if KAVRAM[k][0] == s]
    ana = kav[int(r() * len(kav))]
    n = 2 + int(r() * 4)
    par, kavlar = [], [ana]
    for _ in range(n):
        y = kav[int(r() * len(kav))]
        kavlar.append(y)
        o = ORTAK[int(r() * len(ORTAK))]
        par.append(f"{KAVRAM[y][1]} icin {o} tutulur ve {KAVRAM[ana][1]} ile birlikte yazilir")
    BELGE.append({"kod": f"{KOD[s]}{i + 1:03d}", "sinif": s, "ana": ana, "kavram": kavlar,
                  "baslik": f"{KAVRAM[ana][1]} yordami", "par": par})


def _kavramla(m, alan=True):
    v = [0.0] * len(ANAHTAR)
    dm = " " + m.lower() + " "
    for i, k in enumerate(ANAHTAR):
        bel, sor = KAVRAM[k][1], KAVRAM[k][2]
        if bel in dm:
            v[i] += 1.0
        if sor in dm:
            v[i] += 1.0 if alan else 0.0      # alan disi gomme sorgu dilini tanimaz
    if not alan:
        for o in ORTAK:
            if " " + o + " " in dm:
                for i in range(len(ANAHTAR)):
                    v[i] += 0.05
    return v


IZDUS = []
for i in range(len(ANAHTAR)):
    r = uretec(TOHUM ^ (i + 1) * 2654435761)
    IZDUS.append([r() * 2 - 1 for _ in range(64)])


def gom(m, boyut=BOYUT, alan=True):
    k = _kavramla(m, alan)
    v = [0.0] * boyut
    for i, a in enumerate(k):
        if a:
            for j in range(boyut):
                v[j] += a * IZDUS[i][j % 64]
    n = sum(x * x for x in v) ** 0.5
    return [x / n for x in v] if n else v


def aci(a, b):
    return sum(x * y for x, y in zip(a, b))


SORGU = []
for i in range(40):
    r = uretec(TOHUM + 104729 * i)
    d = BELGE[int(r() * len(BELGE))]
    SORGU.append({"metin": f"{KAVRAM[d['ana']][2]} {ORTAK[int(r() * len(ORTAK))]}",
                  "sinif": d["sinif"], "kavram": d["ana"]})

PARCA = [{"kod": d["kod"], "sinif": d["sinif"], "metin": p}
         for d in BELGE for p in d["par"]]
PV = [gom(p["metin"]) for p in PARCA]


def getir(q, k):
    v = gom(q)
    s = sorted(range(len(PARCA)), key=lambda i: (-aci(v, PV[i]), i))
    return [PARCA[i] for i in s[:k]]


def erisim_olc(k):
    """Yalniz erisim sutunu: getirilen parcalar hedef yordami tasiyor mu."""
    anma = kesin = 0
    for s in SORGU:
        yuzey = KAVRAM[s["kavram"]][1]
        tasiyan = [p for p in getir(s["metin"], k) if yuzey in p["metin"]]
        anma += 1 if tasiyan else 0
        kesin += len(tasiyan) / k
    return anma / len(SORGU), kesin / len(SORGU)


print(f"dagarcik {len(BELGE)} belge , {len(PARCA)} parca , sorgu {len(SORGU)}")
print("\n  k   erisim anmasi   erisim kesinligi   getirilen parca")
for k in (1, 3, 5):
    a, ke = erisim_olc(k)
    print(f"{k:>3} {a:>15.4f} {ke:>18.4f} {k * len(SORGU):>18}")
```

```
dagarcik 200 belge , 693 parca , sorgu 40

  k   erisim anmasi   erisim kesinligi   getirilen parca
  1          0.9500             0.9500                 40
  3          0.9500             0.9500                120
  5          1.0000             0.9600                200
```

Bir parçadan üçe çıkmak anmayı **oynatmıyor**: 0,9500 aynı kalıyor, getirilen parça sayısı üçe
katlanıyor. Beşe çıkmak anmayı **1,0000** yapıyor, yani kanıt artık her sorguda bağlamın içinde.
Erişim sütunu bu kadarını söyler ve daha fazlasını söyleyemez: parçanın **geldiğini** bilir,
kullanıldığını bilmez.

## Üretim Sütunu ve Dört Durum

İkinci sütun aynı sorguları bir **dil modeli benzeticisiyle** çalıştırır. Benzetici gerçek bir uç
nokta çağırmaz; bağlamda geçen yordam adlarını puanlar, sorgunun sınıfını tanıyıp o sınıfın dört
yordamına küçük bir taban puan verir ve dağılım sıcaklığıyla örnekler. İki sütun kesiştiğinde her
sorgu dört kutudan birine düşer.

```python
from math import exp


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


def uret(q, parcalar, tohum=TOHUM, sicaklik=0.6):
    """KURGU dil modeli benzeticisi. Baglamda gecen yordam adlarini puanlar;
    on bilgisi yalniz sinif duzeyindedir, yordam adini bilmez."""
    istem = q + " || " + " ".join(p["metin"] for p in parcalar)
    dm, sq = " " + istem.lower() + " ", " " + q.lower() + " "
    sn = next((KAVRAM[k][0] for k in ANAHTAR if KAVRAM[k][2] in sq), None)
    puan = {}
    for k in ANAHTAR:
        p = (0.15 if KAVRAM[k][0] == sn else 0.0) + dm.count(KAVRAM[k][1])
        if p:
            puan[k] = p
    if not puan:
        return None, istem
    ad = list(puan)
    a = [exp(puan[k] / sicaklik) for k in ad]
    t = sum(a)
    return ad[ayrik(uretec(tohum ^ izno(istem))(), [x / t for x in a])], istem


def kosum(k, tohum=TOHUM):
    d = {"dd": 0, "dy": 0, "yd": 0, "yy": 0, "bel": 0}
    for s in SORGU:
        par = getir(s["metin"], k) if k else []
        yanit, istem = uret(s["metin"], par, tohum)
        d["bel"] += len(belirtecle(istem))
        dp = any(KAVRAM[s["kavram"]][1] in p["metin"] for p in par)
        dy = yanit == s["kavram"]
        d["dd" if dp and dy else "dy" if dp else "yd" if dy else "yy"] += 1
    return d


n = len(SORGU)
print("kurulum     dogru+dogru  dogru+yanlis  yanlis+dogru  yanlis+yanlis"
      "   tek sayi  belirtec")
for ad, k in (("erisimsiz", 0), ("k = 1", 1), ("k = 3", 3), ("k = 5", 5)):
    d = kosum(k)
    print(f"{ad:<11} {d['dd']:>11} {d['dy']:>13} {d['yd']:>13} {d['yy']:>14}"
          f" {(d['dd'] + d['yd']) / n:>10.4f} {d['bel']:>9}")

print("\nikinci kosum (tohum 20260219) , tek sayi ve kosum farki")
for ad, k in (("erisimsiz", 0), ("k = 1", 1), ("k = 3", 3), ("k = 5", 5)):
    a = (lambda d: (d["dd"] + d["yd"]) / n)(kosum(k))
    b = (lambda d: (d["dd"] + d["yd"]) / n)(kosum(k, TOHUM + 1))
    print(f"{ad:<11} {a:>7.4f} {b:>9.4f} {b - a:>+10.4f}")

print("\nsinif alt grubu (dogru+dogru / dogru+yanlis / yanlis+dogru / yanlis+yanlis)")
print(f"{'sinif':<9} {'k = 3':>16} {'k = 5':>16}")
for sn in SINIF:
    sat = []
    for k in (3, 5):
        c = [0, 0, 0, 0]
        for s in SORGU:
            if s["sinif"] != sn:
                continue
            par = getir(s["metin"], k)
            y, _ = uret(s["metin"], par)
            dp = any(KAVRAM[s["kavram"]][1] in p["metin"] for p in par)
            c[0 if dp and y == s["kavram"] else 1 if dp else 2 if y == s["kavram"] else 3] += 1
        sat.append(" / ".join(str(x) for x in c))
    print(f"{sn:<9} {sat[0]:>16} {sat[1]:>16}")
```

```
kurulum     dogru+dogru  dogru+yanlis  yanlis+dogru  yanlis+yanlis   tek sayi  belirtec
erisimsiz             0             0            15             25     0.3750       231
k = 1                33             5             0              2     0.8250       887
k = 3                38             0             0              2     0.9500      2199
k = 5                38             2             0              0     0.9500      3505

ikinci kosum (tohum 20260219) , tek sayi ve kosum farki
erisimsiz    0.3750    0.2000    -0.1750
k = 1        0.8250    0.9250    +0.1000
k = 3        0.9500    0.9500    +0.0000
k = 5        0.9500    0.9500    +0.0000

sinif alt grubu (dogru+dogru / dogru+yanlis / yanlis+dogru / yanlis+yanlis)
sinif                k = 3            k = 5
tarife       8 / 0 / 0 / 0    8 / 0 / 0 / 0
ariza        7 / 0 / 0 / 2    7 / 2 / 0 / 0
sayac       10 / 0 / 0 / 0   10 / 0 / 0 / 0
kesinti      6 / 0 / 0 / 0    6 / 0 / 0 / 0
bakim        7 / 0 / 0 / 0    7 / 0 / 0 / 0
```

## Aynı Sayı, Başka Bileşim

Tablonun ilk satırı tabanı verir. Erişimsiz çağrı **0,3750** yapıyor ve bu oranın **tamamı üçüncü
kutudandır**: doğru parça hiç getirilmedi, on beş yanıt sınıf düzeyindeki tahminden doğru çıktı.
Tek sayıya bakan biri modelin soruların üçte birinden fazlasını bildiğini söyler. Dört durum tablosu
aynı satırda **hiçbir bilgiye dayanılmadığını** söyler. Bu ayrım şansı bir yetenek sanmayı önler.

Asıl gösterim son iki satırdadır. Üç parçalı ve beş parçalı kurulumların tek sayısı **birebir
aynıdır: 0,9500**. Bileşimleri değildir. Üçlüde iki başarısızlık **yanlış parça + yanlış yanıt**
kutusundadır, yani kanıt hiç gelmemiştir; sorun erişimdedir. Beşlide erişim anması 1,0000'e çıkar
ve o iki başarısızlık **doğru parça + yanlış yanıt** kutusuna taşınır: kanıt bağlamdadır ve model
onu kullanmamıştır. Bu ikincisi bir **kaynağa sadakat** kusurudur ve düzeltmesi bambaşkadır. Tek
sayı bu taşınmayı hiç göstermez, ama bedel gösterir: 120 parçadan 200 parçaya, 2199 belirteçten
**3505 belirtece**.

Alt grup dökümü hangi düzeltmenin nereye yapılacağını yazar. Her iki kusur da **tek bir sınıfta**,
`ariza` sınıfında toplanmıştır; öbür dört sınıf iki kurulumda da eksiksizdir. Beşe çıkmak kayıp
sorguları kurtarmadı, yalnız kusurun **adını değiştirdi**.

Son olarak iki koşum farkı, tek sayının ne kadarına güvenilebileceğini söyler. Erişimsiz tabanda
fark **0,1750**; şansa dayanan bir sayı doğal olarak oynaktır. Bir parçada fark **0,1000**. Üç ve
beş parçada fark **0,0000**: bağlamdaki kanıt puan ayrımını yeterince açtığı için örnekleme artık
sonucu döndürmüyor. Sayıyı sabitleyen şey düzeneğin kendisi değil, **bağlama giren kanıttır**.

## Özet

- Erişim ve üretim iki ayrı sütundur: birincisi kanıtın geldiğini, ikincisi kanıtın kullanıldığını
  ölçer ve biri öbürünü yerine koyamaz.
- Erişimsiz taban bu iş yükünde 0,3750 çıkar ve bu oranın tamamı **yanlış parça + doğru yanıt**
  kutusundadır, yani şanstır.
- Üç parçalı ve beş parçalı kurulumun tek sayısı da 0,9500'dür, ama ilkinde iki başarısızlık
  erişim, ikincisinde aynı iki başarısızlık üretim kusurudur.
- Beş parçaya çıkmak anmayı 0,9500'den 1,0000'e taşır; bedeli 120 parçadan 200 parçaya ve 2199
  belirteçten 3505 belirtece çıkmaktır, uçtan uca sayı ise değişmez.
- Sınıf alt grubu her iki kusuru da `ariza` sınıfında toplar; iki koşum farkı erişimsiz tabanda
  0,1750, üç parçalı bağlamda 0,0000'dır.

## Sonraki Adım

Bu ders erişimin ne zaman kazandığını değil, kazancın **nereden geldiğini** ayırdı. Cevaplanmayan
bir soru kaldı: erişim hattı, modele bilgi kazandırmanın tek yolu değildir. Aynı görev için modelin
kendisi de değiştirilebilir; M28/K03'ün Model API'leri ile Uygulama Geliştirme kursunda ince ayarın
sayısı ölçüldü ve altmış örnekle istem düzeneğini geçemediği görüldü. Bir sonraki ders bu iki
çözümü aynı masaya koyar ve üç ayrı görevde yan yana ölçer: hangisinin **hangi problemi** çözdüğü
ve hangi görevde **erişimin kazanmadığı** sayılır.
