Ders 02 / 14
Yapay Zekâ ve Makine Öğrenmesi Mühendisliği Farkı
Sorumluluk sınırının ayar sayısıyla ölçülmesi: aynı destek talebi probleminde eğiten yaklaşımın dört ayarından üçü, kullanan yaklaşımın beş ayarından dördü sayıyı 0,0200'den fazla oynatıyor. Eğiten yaklaşım 48 etiketli örnek istiyor ve 0,9861'e çıkıyor, kullanan yaklaşım sıfır etiketli örnekle 0,8056 veriyor. İki ayar listesinin hiçbir maddesi ortak değil. Yeniden deneme sayıyı 0,0000 oynatıp bir çağrı ve 51 belirteç ekliyor, elde olmayan tohum ise sayıyı 0,1250 düşürüyor.
İçindekiler
Önceki ders modeli hiç değiştirmeden sayıyı 0,6000’den 0,7750’ye çıkardı. Bütün kazanç modelin dışından geldi. Önceki müfredatta bunun tersi olurdu: kazanç modelin içinden gelir, dışarısı sabit tutulurdu. İki yaklaşım aynı destek talebi problemini çözebilir, ama ellerinde tuttukları şey aynı değildir.
Bu ders o farkı bir sayıya bağlar. İki yaklaşım aynı 72 kayıtlık sınama kümesinde koşturulur ve her birinin elinde olan ayar tek tek çevrilir. Ölçülen şey hangisinin daha iyi olduğu değil, hangi kararın kimde olduğudur: kaç ayar var, kaçı sayıyı gerçekten oynatıyor, ve elde olmayan neyin ne kadar oynattığı.
- YA9. Kurgu ve benzetici önceki dersten aynen sürer: 120 kurgu destek talebi, beş konu, tohum 20260218. Eğitim kümesi ilk 48 kayıt, sınama kümesi kalan 72 kayıttır. İki yaklaşım da aynı sınama kümesinde okunur.
- YA10. Eğiten yaklaşımın modeli bir sayım tablosudur: eğitim kümesindeki her belirtecin hangi konuda kaç kez geçtiğini tutar ve toplam kanıtı en yüksek konuyu söyler. Öğrenen bir yordamdır ve ağırlıkları eğitimle belirlenir.
- YA11. M27’nin denetimli öğrenme kursu ayar değişkenlerini (derinlik, en az yaprak, sınıf ağırlığı, ayar bütçesi) ölçtü. O yordam burada tekrarlanmaz; burada yalnız ayarın kimde olduğu sayılır.
- YA12. Kullanan yaklaşım benzeticiyi çağırır ve modelin içine hiç dokunmaz. Sayım tablosu kurmaz, etiketli örnek görmez.
- YA13. Bir ayarın “sayıyı oynattığı”, iki ucu arasındaki isabet farkının mutlak değerinin 0,0200’den büyük olması demektir. Eşik bir karardır ve sabit tutulur.
- YA14. Tohum bir ayar değildir; benzeticinin belirsizliğinin ölçüsüdür. Tabloya elde olmayanın ne kadar oynattığını göstermek için konur.
- YA15. Bedel sütunları yalnız kullanan yaklaşımda vardır, çünkü eğiten yaklaşımın bedeli çağrı ve belirteç değil etiketli örnektir. İki bedel birimi birbirine çevrilmez.
Eğiten Yaklaşımın Elindeki Ayarlar
Eğiten yaklaşımda model senin ürettiğin nesnedir. Elindeki ayarlar onun içine bakar: hangi veriyle kurulacağı, hangi birimle sayacağı, hangi kanıtı görmezden geleceği, seyrek gözlemi nasıl yumuşatacağı. Aşağıdaki blok benzeticiyi ve kurguyu kurar, sonra öğrenen yordamı yazıp dört ayarı iki uçta çevirir.
# 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 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 SIN = TALEP[48:] # sinama kumesi: 72 kayit def bol(m, damga): return belirtecle(m) if damga else m.lower().split() def egit(kume, damga=True, enaz=1, duz=0.5): # OGRENEN yordam: sayim tablosu sayim, siklik = {}, {} for x in kume: siklik[x["konu"]] = siklik.get(x["konu"], 0) + 1 for t in bol(x["metin"], damga): c = sayim.setdefault(t, {}) c[x["konu"]] = c.get(x["konu"], 0) + 1 en = max(sorted(siklik), key=lambda k: siklik[k]) def kestir(m): p = {k: 0.0 for k in KONU} for t in bol(m, damga): c = sayim.get(t, {}) if sum(c.values()) < enaz: continue for k in KONU: p[k] += math.log((c.get(k, 0) + duz) / (siklik.get(k, 1) + 5 * duz)) return max(sorted(p), key=lambda k: p[k]) if any(p.values()) else en return kestir def isabet_e(n=48, **kw): f = egit(TALEP[:n], **kw) return sum(f(x["metin"]) == x["konu"] for x in SIN) / len(SIN) print(f"{'EGITEN yaklasimin elindeki ayar':<31} {'A':>7} {'B':>7} {'oynama':>8}") oy_e = [] for ad, a, b in (("egitim ornegi 8 / 48", {"n": 8}, {"n": 48}), ("belirtec birimi sozcuk / parca", {"damga": False}, {"damga": True}), ("en az siklik 3 / 1", {"enaz": 3}, {"enaz": 1}), ("duzlestirme 0,05 / 0,50", {"duz": 0.05}, {"duz": 0.5})): va, vb = isabet_e(**a), isabet_e(**b) oy_e.append(abs(vb - va)) print(f"{ad:<31} {va:>7.4f} {vb:>7.4f} {vb - va:>+8.4f}") print(f"0,0200'den fazla oynatan: {sum(v > 0.02 for v in oy_e)}/{len(oy_e)}, " f"gereken etiketli ornek 48, degisen sey: sayim tablosunun kendisi")
EGITEN yaklasimin elindeki ayar A B oynama egitim ornegi 8 / 48 0.8194 0.9861 +0.1667 belirtec birimi sozcuk / parca 0.9583 0.9861 +0.0278 en az siklik 3 / 1 0.9028 0.9861 +0.0833 duzlestirme 0,05 / 0,50 0.9722 0.9861 +0.0139 0,0200'den fazla oynatan: 3/4, gereken etiketli ornek 48, degisen sey: sayim tablosunun kendisi
Dört ayardan üçü sayıyı eşiğin üstünde oynatıyor ve en büyük oynama etiketli örnek sayısından geliyor: sekiz örnekle 0,8194, kırk sekiz örnekle 0,9861. Bu, eğiten yaklaşımın hem gücü hem faturasıdır. Sayıyı yükseltmenin en etkili yolu daha çok etiketli örnektir, ve etiketli örnek üretilmesi gereken bir şeydir. Kalan üç ayar da modelin içine bakar: hangi birimle sayıldığı, hangi kanıtın atıldığı, seyrek gözlemin nasıl yumuşatıldığı. Hepsi elin altındadır ve hepsi modelin kendisini değiştirir.
Kullanan Yaklaşımın Elindeki Ayarlar
Kullanan yaklaşımda hiçbir ayar modelin içine bakmaz. Sayım tablosu yoktur, ağırlık yoktur, eğitim kümesi yoktur. Elde kalan şey çağrının çevresidir.
YONERGE = ("Talebi su etiketlerden birine ata: fatura , ariza , sayac , tarife , " "kesinti . Yanit olarak tek etiket yaz . Talep: ") def olc_k(yonerge=YONERGE, sicaklik=0.6, tohum=TOHUM, deneme=0): SAYAC[0] = 0 d = bel = 0 for x in SIN: e = None for j in range(deneme + 1): s = cagir(yonerge + x["metin"], tohum=tohum + j, sicaklik=sicaklik) bel += s["giris"] + s["cikis"] e = oku(s["yanit"]) if e is not None: break d += e == x["konu"] return d / len(SIN), SAYAC[0], bel print(f"{'KULLANAN yaklasimin elindeki ayar':<31} {'A':>7} {'B':>7} {'oynama':>8} " f"{'cagri':>6} {'belirtec':>9}") oy_k = [] for ad, a, b in (("etiket kumesi yok / var", {"yonerge": "Su destek talebini yanitla: "}, {}), ("bicim kisiti yok / var", {"yonerge": YONERGE.replace("tek etiket", "bir cevap")}, {}), ("dagilim sicakligi 0,6 / 0,0", {"sicaklik": 0.6}, {"sicaklik": 0.0}), ("yeniden deneme 0 / 1", {"deneme": 0}, {"deneme": 1}), ("tohum 20260218 / 20260219", {"tohum": TOHUM}, {"tohum": TOHUM + 1})): (va, ca, ba), (vb, cb, bb) = olc_k(**a), olc_k(**b) oy_k.append(abs(vb - va)) print(f"{ad:<31} {va:>7.4f} {vb:>7.4f} {vb - va:>+8.4f} {cb - ca:>+6d} {bb - ba:>+9d}") print(f"0,0200'den fazla oynatan: {sum(v > 0.02 for v in oy_k)}/{len(oy_k)}, " f"gereken etiketli ornek 0, degisen sey: modelin disindaki her sey")
KULLANAN yaklasimin elindeki ayar A B oynama cagri belirtec etiket kumesi yok / var 0.6667 0.8056 +0.1389 +0 +1090 bicim kisiti yok / var 0.5000 0.8056 +0.3056 +0 -634 dagilim sicakligi 0,6 / 0,0 0.8056 0.9028 +0.0972 +0 +7 yeniden deneme 0 / 1 0.8056 0.8056 +0.0000 +1 +51 tohum 20260218 / 20260219 0.8056 0.6806 -0.1250 +0 +6 0,0200'den fazla oynatan: 4/5, gereken etiketli ornek 0, degisen sey: modelin disindaki her sey
En büyük oynama biçim kısıtından geliyor: 0,5000’den 0,8056’ya, artış 0,3056. Bu satır aynı zamanda bedel sütununda eksi işaretli tek satırdır — 634 belirteç kazandırıyor. Modele “tek etiket yaz” demek hem isabeti yükseltiyor hem maliyeti düşürüyor, çünkü kısa yanıt ucuzdur. Etiket kümesini isteme yazmak da 0,1389 kazandırıyor ama bunun bedeli 1090 belirteçtir.
Dördüncü satır bu müfredatın ikinci iddiasını ilk kez ödüyor. Yeniden deneme sayıyı 0,0000 oynatıyor ve karşılığında bir fazla çağrı ile 51 belirteç istiyor. Yalın düzenekte okunamayan yanıt zaten kalmamıştı; yeniden deneme yalnız hız sınırına takılan tek isteği kurtarabilirdi ve o istek iki denemede de yanlış etiket verdi. Düzenek eklemek her zaman iyileştirmez, ama bedeli her zaman kesindir.
Beşinci satır ayar değil. Tohum senin ayarın değildir; benzeticinin belirsizliğidir ve bu tabloda sayıyı 0,1250 düşürüyor. Yani elinde olmayan bir şey, elinde olan üç ayardan ikisinden daha çok oynatıyor. Bir ürünün sayısını yükseltmek için harcanan emeğin bir kısmı, ölçümün kendisinin bu genişlikte oynadığını bilmeden harcanır.
Hangi Karar Kimde
İki listenin hiçbir maddesi ortak değildir. Aşağıdaki tablo bu ayrımı kararlar düzeyinde yazar.
| Karar | Eğiten yaklaşım | Kullanan yaklaşım |
|---|---|---|
| Etiketli örnek toplamak | zorunlu, sayıyı en çok oynatan ayar | gerekmez, sıfır örnekle çalışır |
| Model ağırlığı | üretilir ve saklanır | görülmez, değiştirilemez |
| Görevin tanımı | etiket kümesi eğitim verisinde durur | etiket kümesi istem metnine yazılır |
| Çıktının biçimi | yordamın dönüş tipi, kesindir | istemle rica edilir, doğrulanması gerekir |
| Aynı girdiye aynı yanıt | yordam gereği verilir | verilmez, ölçülmesi gerekir |
| Sayı düştüğünde | model yeniden eğitilir | düzenek değiştirilir |
Son satır sorumluluk sınırının kendisidir. Eğiten yaklaşımda bir bozulmanın adresi bellidir: veri ya da model. Kullanan yaklaşımda model bozulmaz, çünkü model senin değildir; bozulan şey ya istemdir, ya çıktının okunma yordamıdır, ya da bileşenin altındaki bir değişikliktir. Üçüncüsünde elinde tek bir şey kalır: yüzeyi ölçmüş olmak. Ölçülmüş bir yüzey, değişimin ne zaman olduğunu söyler; ölçülmemiş bir yüzey yalnız şikâyeti söyler.
Sayılar arasındaki 0,9861 ile 0,8056 farkı da bu çerçevede okunur. Eğiten yaklaşım daha yüksek sayı verdi, ama karşılığında 48 etiketli örnek istedi. Kullanan yaklaşım hiç etiketli örnek görmeden 0,8056 verdi. Kapalı bir etiket kümesi ve bol örneği olan bir görevde birincisi kazanır; etiket kümesi değişken, örnek pahalı ya da görev metin üretmeyi gerektiriyorsa soru tersine döner. Karşılaştırılan şey iki sayı değil, iki bedel birimidir.
Özet
- Eğiten yaklaşımın dört ayarından üçü, kullanan yaklaşımın beş ayarından dördü sayıyı 0,0200’den fazla oynatıyor. İki listenin hiçbir maddesi ortak değildir.
- Eğiten yaklaşımın en güçlü ayarı etiketli örnek sayısıdır: 8 örnekle 0,8194, 48 örnekle 0,9861. Kullanan yaklaşım sıfır etiketli örnekle 0,8056 veriyor.
- Kullanan yaklaşımın en güçlü ayarı biçim kısıtıdır: +0,3056 ve 634 belirteç kazanç. Bedel sütununda eksi işaretli tek satır budur.
- Yeniden deneme sayıyı 0,0000 oynatıp bir çağrı ve 51 belirteç ekliyor: düzenek eklemek her zaman iyileştirmez, ama bedeli her zaman kesindir.
- Elde olmayan tohum sayıyı 0,1250 düşürüyor — elde olan üç ayardan ikisinden daha çok.
- Sorumluluk sınırı son satırda okunur: sayı düştüğünde eğiten yaklaşım modeli, kullanan yaklaşım düzeneği değiştirir.
Sonraki Adım
Bu derste tohum satırı bir kez, tek bir sayıyla göründü ve orada bırakıldı. Oysa o satır bir ürünün en zor tasarım sorusudur: aynı kullanıcı, aynı ekranda, aynı metni iki kez gönderdiğinde iki ayrı yanıt alabilir. Toplam isabetin 0,8056’dan 0,6806’ya inmesi bunun yalnız toplam görünümüdür; kaç kayıtta yanıtın gerçekten değiştiği ve bu değişimin kullanıcıya görünen kısmının ne olduğu hiç sorulmadı. Sonraki ders aynı girdinin iki koşumunu kayıt kayıt sayar ve belirsizliği daraltan üç tasarım kararını — seçenek sunmak, biçim dayatmak, kaynağa bağlamak — isabet ve bedel olarak yan yana koyar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.