İçeriğe geç
academia.sh

Ders 04 / 14

Yapay Zekâ ve Genel Yapay Zekâ Ayrımı

Bir sistem hakkında kurulan cümlelerin sınanabilirliğe göre ayrılması: on dört kurgu iddianın beşi ölçülebilir yetenek iddiası, dokuzu ölçülemez genel iddia ve bunlardan biri sayı ile yön taşıdığı hâlde kümesi olmadığı için sınanamıyor. Sınamaya bağlanabilen pay 0,3571. Beş sınama benzetici üzerinde koşturuluyor ve üçü geçiyor: etiket isabeti 0,90 eşiğinde 0,8958 ile kalıyor, karar değişim payı 0,0833 ile geçiyor, etiketsiz yanıt payı 0,0556 ile kalıyor, belge getirme payı 0,9722 ile geçiyor, istek başına belirteç 65,7 ile geçiyor.

İçindekiler

Önceki üç ders modeli verilmiş bir bileşen olarak ele aldı, yüzeyinden ölçtü, ayarlarını saydı ve belirsizliğini ürün diline çevirdi. Bu üç derste kullanılan sözcükler de bir tasarım nesnesidir. “Yetenek”, “anlıyor”, “öğreniyor” ve “genel zekâ” aynı tabloya yazılamayacak kadar farklı şeylerdir: bir kısmı bir sınamaya bağlanabilir ve bir sayı verir, bir kısmı hiçbir koşulda yanlışlanamaz.

Bu ders o ayrımı bir yordama bağlar. Bir dizi kurgu iddia cümlesi dört bileşene göre ayrıştırılır, sınanabilir olanlar seçilir ve gerçekten koşturulur. Ölçülen şey iddiaların doğruluğu değil, kaçının bir sınamaya bağlanabildiğidir. Dersin sonunda bir tanesi bağlanır, koşturulur ve yanlış çıkar; bu, bir iddianın ölçülebilir olmasının onu doğru yapmadığını gösterir.

  • YA23. Bir iddia dört bileşen taşıdığında sınanabilir sayılır: bir görev, bir ölçüt, bir küme ve yönüyle birlikte bir eşik. Dördünden biri eksikse iddia genel sayılır. Bu bir karardır ve ders boyunca sabit tutulur.
  • YA24. Bileşenler cümlenin belirteçlerinden okunur; sınıflandırma elle yapılmaz, koşan bir yordamdır. Belirteçleyici önceki derslerden aynen sürer.
  • YA25. İddia cümleleri kurgudur ve hiçbiri bir ürün, model ya da kurum hakkında değildir; hepsi önceki üç derste kurulan kurgu destek yardımcısı hakkındadır.
  • YA26. Sınanan sistem, önceki dersin en güçlü düzeneğidir: kaynağa bağlanmış yönergeli çağrı. Ölçüm 72 kayıtlık sınama kümesinde ve iki koşumda yapılır.
  • YA27. Bir sınama yalnız sınıflandırma onu ölçülebilir bulduğunda koşar. Genel iddialar için sınama yazılmaz, çünkü yazılacak bir sınama yoktur.
  • YA28. Eşiğin yönü iddianın parçasıdır. Eşiksiz bir ölçüt bir sayı verir ama bir karar vermez; iddia ancak yönüyle birlikte geçer ya da kalır.

Bir İddia Ne Zaman Sınanabilir

“Sistem destek taleplerini anlar” cümlesi hiçbir koşulda yanlışlanamaz, çünkü hangi görevde, hangi küme üzerinde, hangi sayıyla ve hangi eşikte anlaşılmış sayılacağı yazılmamıştır. “72 kayıtlık kümede etiket isabeti 0,90 üzerindedir” cümlesi ise yanlışlanabilir. İkisinin farkı doğruluk değil bağlanabilirliktir.

# BENZETICI. Bu kod gercek bir model uc noktasi cagirmaz; standart kitaplikla yazilmis
# bir dil modeli benzeticisidir. Destek talepleri ve iddialar da KURGU'dur.
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):
    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 = {
    "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"}
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]
    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])
    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:
        cb = cb[:en_uzun]
        y = " ".join(cb)
    return {"durum": "tamam", "giris": len(bel), "cikis": len(cb), "yanit": y}


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


IDDIA = [("72 kayitlik kumede etiket isabeti 0,90 uzerindedir", "isabet", 0.90, ">"),
         ("sistem destek taleplerini anlar", "", 0, ""),
         ("72 kayitlik kumede karar degisim payi 0,10 altindadir", "degisim", 0.10, "<"),
         ("sistem akilli bir yardimcidir", "", 0, ""),
         ("sistem her zaman dogru etiketi uretir", "", 0, ""),
         ("sistem insan seviyesinde dil anlayisina sahiptir", "", 0, ""),
         ("72 kayitlik kumede etiketsiz yanit payi 0,05 altindadir", "bos", 0.05, "<"),
         ("sistem genel zekaya sahiptir", "", 0, ""),
         ("sistem istek basina 140 belirtecin altinda kalir", "", 0, ""),
         ("dagarcikta dogru belge getirme payi 0,80 uzerindedir", "belge", 0.80, ">"),
         ("sistem ogrenmeye devam eder", "", 0, ""),
         ("72 kayitlik kumede istek basina belirtec 140 altindadir", "birim", 140, "<"),
         ("sistem yaratici cozumler uretir", "", 0, ""),
         ("sistem gelistikce daha akilli olur", "", 0, "")]
GOREV = ("etike", "karar", "yanit", "getir", "istek")
OLCUT = ("isabe", "pay", "belir", "cagri", "adim")
KUME = ("kayit", "kume", "dagar", "ornek")
YON = ("uzeri", "altin")


def gecer(bel, sozluk):
    return any(t.startswith(k) for t in bel for k in sozluk)


def sinif(c):
    b = belirtecle(c)
    return (gecer(b, GOREV), gecer(b, OLCUT), gecer(b, KUME),
            gecer(b, YON) and any(any(d.isdigit() for d in t) for t in b))


print(f"{'iddia':<56} {'gorev':>5} {'olcut':>5} {'kume':>4} {'esik':>4} {'sinif':>11}")
SINAV = []
for c, olcu, esik, yon in IDDIA:
    g, o, k, e = sinif(c)
    if g and o and k and e:
        SINAV.append((olcu, esik, yon))
    print(f"{c:<56} {'+' if g else '-':>5} {'+' if o else '-':>5} {'+' if k else '-':>4} "
          f"{'+' if e else '-':>4} {'olculebilir' if g and o and k and e else 'genel':>11}")
sayili = sum(1 for c, *_ in IDDIA if sinif(c)[3])
print(f"\nsinamaya baglanabilen {len(SINAV)}/{len(IDDIA)} = {len(SINAV) / len(IDDIA):.4f}, "
      f"sayi ve yon tasiyip yine de baglanamayan {sayili - len(SINAV)}")
iddia                                                    gorev olcut kume esik       sinif
72 kayitlik kumede etiket isabeti 0,90 uzerindedir           +     +    +    + olculebilir
sistem destek taleplerini anlar                              -     -    -    -       genel
72 kayitlik kumede karar degisim payi 0,10 altindadir        +     +    +    + olculebilir
sistem akilli bir yardimcidir                                -     -    -    -       genel
sistem her zaman dogru etiketi uretir                        +     -    -    -       genel
sistem insan seviyesinde dil anlayisina sahiptir             -     -    -    -       genel
72 kayitlik kumede etiketsiz yanit payi 0,05 altindadir      +     +    +    + olculebilir
sistem genel zekaya sahiptir                                 -     -    -    -       genel
sistem istek basina 140 belirtecin altinda kalir             +     +    -    +       genel
dagarcikta dogru belge getirme payi 0,80 uzerindedir         +     +    +    + olculebilir
sistem ogrenmeye devam eder                                  -     -    -    -       genel
72 kayitlik kumede istek basina belirtec 140 altindadir      +     +    +    + olculebilir
sistem yaratici cozumler uretir                              -     -    -    -       genel
sistem gelistikce daha akilli olur                           -     -    -    -       genel

sinamaya baglanabilen 5/14 = 0.3571, sayi ve yon tasiyip yine de baglanamayan 1

On dört cümlenin beşi sınamaya bağlanabiliyor; pay 0,3571. Kalan dokuzun sekizi dört bileşenin hiçbirini ya da yalnız birini taşıyor. Beşinci satır bunların en öğreticisidir: “sistem her zaman doğru etiketi üretir” bir görev adı taşıyor ama ne ölçüt, ne küme, ne eşik veriyor. “Her zaman” bir eşik değildir; hangi kümede sınanacağı yazılmadığı için tek bir karşı örnek onu çürütür, bu yüzden kimse onu sınamaz.

Son satırdaki sayı asıl ayrımı veriyor: bir iddia sayı taşıyor olabilir ve yine de sınanamayabilir. Dokuzuncu cümle “istek başına 140 belirtecin altında kalır” diyor; görevi, ölçütü, eşiği ve yönü var, ama kümesi yok. Hangi taleplerde, hangi düzenekle, hangi uzunlukta istemlerle ölçüldüğü yazılmadığı için sayı istenen değeri alacak biçimde üretilebilir. Bir sonraki satır aynı iddiaya kümeyi ekliyor ve cümle sınanabilir hâle geliyor. Aradaki tek fark 72 kayıtlık kümede ifadesidir.

Sınamalar Koşturuluyor

Sınıflandırma bir cümlenin sınanabilir olduğunu söyler, doğru olduğunu söylemez. İkinci blok beş sınamayı önceki dersin en güçlü düzeneği üzerinde koşturur.

BELGE = [("TR-11", "tarife basamagi abone tipine ve birim ucrete gore belirlenir"),
         ("TR-12", "tarife degisikligi basvurusu her donem basinda alinir"),
         ("FT-21", "fatura tutari donem okumasi uzerinden hesaplanir , ayrinti ekranda"),
         ("FT-22", "odeme sonrasi borc kaydi ayni gun kapanir"),
         ("SY-31", "sayac endeks okumasi her donem alinir ve tutanaga gecer"),
         ("SY-32", "sayac degisimi randevu ile yapilir , eski endeks tutanakta kalir"),
         ("AR-41", "ariza kaydi acildiginda saha ekibi yonlendirilir"),
         ("AR-42", "bozuk baglanti icin once hat kontrolu yapilir"),
         ("KS-51", "planli kesinti duyurusu once yayimlanir"),
         ("KS-52", "mahalle bazinda kesinti takibi harita uzerinden yapilir")]
KOD = {"TR": "tarife", "FT": "fatura", "SY": "sayac", "AR": "ariza", "KS": "kesinti"}
SIN = TALEP[48:]
YONERGE = ("Talebi su etiketlerden birine ata: fatura , ariza , sayac , tarife , "
           "kesinti . Yanit olarak tek etiket yaz . Talep: ")


def eris(m):
    b = set(belirtecle(m))
    return max(BELGE, key=lambda d: (len(b & set(belirtecle(d[1]))), d[0]))


def kosum(tohum):
    SAYAC[0] = 0
    e, bel, belge = [], 0, 0
    for x in SIN:
        k, m = eris(x["metin"])
        belge += KOD[k[:2]] == x["konu"]
        s = cagir(YONERGE + "Belge " + k + ": " + m + " . Talep: " + x["metin"],
                  tohum=tohum)
        bel += s["giris"] + s["cikis"]
        e.append(oku(s["yanit"]))
    return e, bel, belge / len(SIN)


e1, b1, bg = kosum(TOHUM)
e2, b2, _ = kosum(TOHUM + 1)
n = len(SIN)
O = {"isabet": sum((a == x["konu"]) + (b == x["konu"])
                   for a, b, x in zip(e1, e2, SIN)) / (2 * n),
     "degisim": sum(a != b for a, b in zip(e1, e2)) / n,
     "bos": sum((a is None) + (b is None) for a, b in zip(e1, e2)) / (2 * n),
     "belge": bg, "birim": (b1 + b2) / (2 * n)}

print(f"{'sinama':<12} {'esik':>12} {'olculen':>10} {'sonuc':>8}")
gecti = 0
for olcu, esik, yon in SINAV:
    v = O[olcu]
    ok = v > esik if yon == ">" else v < esik
    gecti += ok
    b = "{:.4f}" if esik < 1 else "{:.1f}"
    print(f"{olcu:<12} {yon + ' ' + b.format(esik):>12} {b.format(v):>10} "
          f"{'gecti' if ok else 'kaldi':>8}")
print(f"\nsinanan {len(SINAV)}, gecen {gecti}, kalan {len(SINAV) - gecti}; "
      f"genel iddialarda sinanan 0")
sinama               esik    olculen    sonuc
isabet           > 0.9000     0.8958    kaldi
degisim          < 0.1000     0.0833    gecti
bos              < 0.0500     0.0556    kaldi
belge            > 0.8000     0.9722    gecti
birim             < 140.0       65.7    gecti

sinanan 5, gecen 3, kalan 2; genel iddialarda sinanan 0

Beş sınamanın üçü geçti, ikisi kaldı. İlk satır dersin en önemli sonucudur: iddia 0,90 diyordu, ölçüm 0,8958 verdi. Fark 0,0042 ve iddia yanlıştır. Ölçülebilir bir iddia yanlış çıkabilir, hatta çoğunlukla kıl payıyla yanlış çıkar; onu değerli kılan doğru olması değil, yanlış çıkabilmesidir. Üçüncü satır aynı şeyi başka bir kaynaktan gösteriyor: etiketsiz yanıt payı 0,0556 ölçüldü, çünkü hız sınırına takılan çağrılar hiç yanıt üretmedi. İddia yalnız modelin biçim davranışını düşünüyordu, ölçüm yüzeyin tamamını getirdi.

Son satır ise dersin sessiz sonucudur. Genel iddialarda sınanan sayı sıfırdır. Dokuz cümle hakkında hiçbir şey söylenemedi — ne geçti ne kaldı. Bir sistemin “genel zekâya sahip olduğu” ya da “geliştikçe daha akıllı olduğu” iddiası, karşı örnek üretilemediği için tartışılamaz; bir mühendislik belgesinde yeri yoktur, çünkü hiçbir kararı değiştirmez. Genel yapay zekâ terimi bir yetenek sınıfı değil, bir sınama eksikliğidir. Bir sistemin ne yaptığını söylemek isteyen cümle görevini, kümesini, ölçütünü ve eşiğini yazmak zorundadır; yazmadığında söylediği şey ölçülemez.

Özet

  • Bir iddia dört bileşenle sınanabilir olur: görev, ölçüt, küme ve yönüyle birlikte eşik. On dört kurgu cümlenin beşi bu dördünü taşıyor; pay 0,3571.
  • Sayı taşımak yetmiyor. “İstek başına 140 belirtecin altında kalır” cümlesi görev, ölçüt ve eşik taşıyor ama kümesi yok; aynı cümleye “72 kayıtlık kümede” eklendiğinde sınanabilir oluyor.
  • Beş sınama koşturuldu: üçü geçti, ikisi kaldı. Karar değişim payı 0,0833, belge getirme payı 0,9722, istek başına belirteç 65,7 eşikleri geçti.
  • Ölçülebilir bir iddia yanlış da çıkar: etiket isabeti iddiası 0,90 diyordu, ölçüm 0,8958 verdi. Etiketsiz yanıt payı 0,0556 çıktı, çünkü hız sınırı da yüzeyin bir parçasıdır.
  • Genel iddialarda sınanan sayı sıfırdır. Genel yapay zekâ terimi bir yetenek sınıfı değil, bir sınama eksikliğidir; mühendislik belgesinde hiçbir kararı değiştirmez.

Sonraki Adım

Dört derste modele hep dışarıdan bakıldı. Ölçüsü kuruldu, ayarlarının kimde olduğu sayıldı, belirsizliği ürün diline çevrildi ve hakkında kurulan cümleler sınanabilirliğe göre ayrıldı. Bunların hepsi kapalı kutunun yüzeyinde yapıldı ve bu bilinçli bir tercihti. Ama yüzeyde ölçülen her sayının bir nedeni vardır ve o neden içeridedir: 0,8958 niçin 1,0000 değil, “sayaç değişimi” ile “tarife değişikliği” niçin karışıyor, altı sözcüklük bir talep niçin on bir belirteç ediyor, pencere niçin 240’ta bitiyor. Sonraki konu bu sorularla açılır: modelin çalıştığı birim nedir, uzak bağlamı nasıl kullanır, sınırı nereden gelir ve bir yanıt hangi adımlarla üretilir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat