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.