Ders 14 / 14
Çok Kipli Modeller
Aynı olayın notunu ve kapsama karesini tek uzayda buluşturan ortak temsilin kendi tabanına karşı ölçülmesi: yirmi beş adaylık odalarda rastgele eşleştirme 0,0400 verirken karşıtlık hedefiyle öğrenilen ortak temsil 0,1660 veriyor ve kurgunun taşıdığı ortak bilginin tavanı 0,2659. Olay türü kararında en sık sınıf tabanı 0,4420, yalnız not 0,8940, yalnız kare 0,6140, ortak temsil 0,8660: eşleştirmeyi kazandıran temsil, sınıflandırmada notun tek başına verdiğinin altında kalıyor. Kurs kapanışı on dört dersin alan tabanını, yöntemin sayısını ve farkı tek tabloda toplar.
İçindekiler
Beş ders görüntüyü, ilk sekiz ders metni tek başına ölçtü; oysa saha ekibinin bir olay için düştüğü not ile aynı olayın kapsama karesi aynı olaya aittir.
Dersin ölçüsü bir doğruluk değil, eşleştirmedir: bir not verildiğinde aday kareler arasından doğru olanı seçebiliyor muyuz. Tabanı rastgele eşleştirmedir; tavanı ise 1 değildir, iki kipin ortak taşıdığı bilgi neyse tavan odur ve o da ders içinde hesaplanır.
- BG48. Olay kaydı kurgudur ve iki kiplidir. Not üretici
nlpkonusundakiyle, kare 04. dersin 12x12 gri düzeyli kurgusuyla aynıdır. Tohum 20260218, bölme 1.100/500. - BG49. İki kip aynı bilgiyi eşit taşımaz. Kare olay türünü desenle (blok yok, okunamayan bant, bir blok, iki blok), hattı sönük bir bantla taşır; not türü sözcüklerle taşır ama hattı yalnız kimi zaman yazar. Gürültü iki yandadır: notta ödünç bir yan kayıt, karede eksik kalan desen ve beklenmedik parlak leke.
- BG50. Eşleştirme ölçütü oda başına 25 adaydır. Tavan ayırt edilemeyen adaylardan hesaplanır: aynı türü ve — hat notta yazılıysa — aynı hattı taşıyan iki olay ayrılamaz.
- BG51. Ortak temsil iki doğrusal izdüşümdür: biri sözlükten, öteki kareden aynı uzaya. Karşıtlık hedefi ile öğrenilir: doğru çiftin benzerliği yükseltilir, kümedeki öteki yirmi dört çiftinki düşürülür.
- BG52. Olay türü kararı üç temsilde aynı yordamla okunur: sınıf ortalamasına açı benzerliği, taban en sık sınıf. Sözlük, ölçek ve ağırlıklar yalnız eğitimden öğrenilir; kütüphane çağrılmaz.
Aynı Olayın İki Kipi
# KURGU olay kaydi: ayni olayin NOTU (nlp konusundan) ve KAPSAMA KARESI # (04. dersin 12x12 gri duzeyli kurgusu). Tohum 20260218. import math TOHUM, M32, BOY = 20260218, 0xFFFFFFFF, 12 ZEMIN, BLOK, GURULTU = 0.30, 0.74, 0.30 TUR = ("olagan", "erisilemedi", "sayac arizasi", "kacak suphesi") PAY, DESEN = (0.46, 0.22, 0.19, 0.13), (0, 0, 1, 2) OBEK = [s.split("|") for s in ( "okuma normal|okuma normaldi|sayac erisimi saglandi|sayaca erisildi|olcum tekrarlandi|" "olcumu yineledik|vana kontrol edildi|vanada sorun yok|kapak temiz|kapakta iz yok|" "gosterge okunakli|gostergede rakam net", "abone evde degildi|abone bulunamadi|erisim saglanamadi|erisim yok|kapi zili calismiyor|" "zil calismadi|bahce kapisi kilitli|bahce kapisi kapali|bodrum katina inilemedi|" "bodrum kilitli|adres bulunamadi|adres eksik", "gosterge donmuyor|gostergede hareket yok|sayac cami kirik|sayacin cami catlak|" "rakam okunmuyor|rakamlar silik|ibre sabit kalmis|ibre kilitli|mekanizma takilmis|" "mekanizmada takilma|sayac durmus|sayac calismiyor", "muhur izi var|muhurde iz goruldu|muhur kopmus|muhurler kopuk|baglanti degistirilmis|" "baglantida degisiklik|kelepce gevsek|kelepcede gevseme|boru ek yeri yeni|boruda yeni ek|" "sayac ters takilmis|sayaci ters takmislar")] EK = ("arac park halinde|kapak kirli|hava yagisli|adres teyit edildi|" "not kisa tutuldu|ikinci ziyaret|bahce icinde|kaldirim uzerinde").split("|") BOLGE = "kuzey hatti|guney hatti|dogu hatti|bati hatti|merkez hatti".split("|") 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 olay(no): """Ayni olayin iki kipi: kisa Turkce saha notu ve 12x12 kapsama karesi.""" r, k, t = uretec(TOHUM + 41000 + no), 0.0, 0 u = r() for i, p in enumerate(PAY): k += p if u < k: t = i break par = [OBEK[t][int(r() * 12)]] if r() < 0.55: par.append(OBEK[t][int(r() * 12)]) if r() < 0.34: # baska turden odunc alinan yan kayit par.append(OBEK[int(r() * 4)][int(r() * 12)]) if r() < 0.62: par.append(EK[int(r() * 8)]) hat, yazili = int(r() * 5), r() < 0.30 # hat notta yalnizca kimi zaman yazilir if yazili: par.append(BOLGE[hat]) q = uretec(TOHUM + 600000 + no) g = [[ZEMIN + (q() + q() + q() - 1.5) * GURULTU for _ in range(BOY)] for _ in range(BOY)] for i in range(BOY): # okunan hat sonuk bir bant olarak gorunur g[i][hat * 2] += 0.16 g[i][hat * 2 + 1] += 0.16 def blok(sy, sx): for i in range(sy, min(BOY, sy + 2 + int(q() * 2))): for j in range(sx, min(BOY, sx + 2 + int(q() * 2))): g[i][j] = BLOK + (q() + q() + q() - 1.5) * GURULTU for b in range(DESEN[t]): if q() >= 0.12: # kimi karede desen eksik kalir blok(int(q() * (BOY - 3)), hat * 2 + b * 2) if t == 1: # erisilemedi: okunamayan bant for i in range(BOY): g[i][hat * 2] = g[i][hat * 2 + 1] = 0.02 + q() * 0.05 if q() < 0.15: # baska yerde beklenmeyen parlak leke blok(int(q() * (BOY - 3)), int(q() * (BOY - 3))) return {"metin": ", ".join(par), "tur": TUR[t], "hat": hat, "yazili": yazili, "kare": g} VERI = [olay(i) for i in range(1600)] SIN = VERI[1100:] say, SOZLUK, gec = {}, {}, {} for x in VERI[:1100]: say[x["tur"]] = say.get(x["tur"], 0) + 1 for s in set(x["metin"].split()): gec[s] = gec.get(s, 0) + 1 for s in sorted(gec): if gec[s] >= 2: SOZLUK[s] = len(SOZLUK) EN_SIK = max(say, key=say.get) TABAN = sum(x["tur"] == EN_SIK for x in SIN) / len(SIN) print(f"kurgu: 1600 olay, egitim 1100, ayrilmis {len(SIN)}; sozluk {len(SOZLUK)} sozcuk") print(f"olay turu tabani (en sik sinif '{EN_SIK}') {TABAN:.4f}; hat notta yazili olan " f"olay orani {sum(x['yazili'] for x in SIN) / len(SIN):.4f}") x = VERI[1124] print(f"not: {x['metin']} -> {x['tur']}, hat {x['hat']}") for satir in x["kare"]: print(" " + "".join(str(min(9, max(0, int(v * 10)))) for v in satir))
kurgu: 1600 olay, egitim 1100, ayrilmis 500; sozluk 154 sozcuk olay turu tabani (en sik sinif 'olagan') 0.4420; hat notta yazili olan olay orani 0.2860 not: boruda yeni ek, dogu hatti -> kacak suphesi, hat 2 143245002250 114254245050 423337867534 531264793421 351236684120 231245223341 212444253203 435135111311 154587830332 622058911323 222433403040 241331231422
Olay türü tabanı 0,4420’dir ve nlp konusunda ölçülen sayının aynısıdır. İkinci sayı dersin
sorununu kuruyor: hat, sınama olaylarının yalnız 0,2860’ında notta yazılıdır, karede ise her
zaman görünür. Basılan örnekte not “dogu hatti” diyor; karede o bant beşinci ile altıncı sütunda
duruyor ve kaçak şüphesinin iki bloğu onun üstüne oturuyor.
Ortak Temsil ve Eşleştirme
G, BOYUT, OLCEK, TOPLU, ADAY = 15, 12, 10.0, 25, 25 def kare_oznitelik(g): """On iki sutun ortalamasi, ortalama, en parlak 3x3, esik ustu oran.""" return [sum(g[i][j] for i in range(BOY)) / BOY for j in range(BOY)] + [ sum(sum(s) for s in g) / (BOY * BOY), max(sum(g[i + a][j + b] for a in range(3) for b in range(3)) / 9.0 for i in range(BOY - 2) for j in range(BOY - 2)), sum(1 for s in g for v in s if v > 0.55) / (BOY * BOY)] KELIME = [[SOZLUK[s] for s in x["metin"].split() if s in SOZLUK] for x in VERI] KO = [kare_oznitelik(x["kare"]) for x in VERI] for k in range(G): # olcek yalniz egitim kumesinden ogrenilir m = sum(o[k] for o in KO[:1100]) / 1100 sd = math.sqrt(sum((o[k] - m) ** 2 for o in KO[:1100]) / 1100) for o in KO: o[k] = (o[k] - m) / sd r = uretec(TOHUM + 77) WM = [[(r() * 2 - 1) * 0.5 for _ in range(BOYUT)] for _ in range(len(SOZLUK))] WK = [[(r() * 2 - 1) * 0.3 for _ in range(BOYUT)] for _ in range(G)] def gom(i): """Notu ve kareyi ayni uzaya tasiyan izdusumler. MODELDIR.""" c = [] for v in ([sum(WM[w][d] for w in KELIME[i]) for d in range(BOYUT)], [sum(KO[i][k] * WK[k][d] for k in range(G)) for d in range(BOYUT)]): n = math.sqrt(sum(a * a for a in v)) + 1e-9 c.append(([a / n for a in v], n)) return c for adim in range(800): # KARSITLIK HEDEFI bas = (adim * TOPLU) % (1100 - TOPLU) E = [gom(i) for i in range(bas, bas + TOPLU)] U, V = [e[0][0] for e in E], [e[1][0] for e in E] dU = [[0.0] * BOYUT for _ in E] dV = [[0.0] * BOYUT for _ in E] for i in range(TOPLU): # dogru cift yakin, oteki 24 cift uzak s = [OLCEK * sum(a * b for a, b in zip(U[i], V[j])) for j in range(TOPLU)] e = [math.exp(v - max(s)) for v in s] t = sum(e) for j in range(TOPLU): k = OLCEK * (e[j] / t - (1.0 if i == j else 0.0)) for d in range(BOYUT): dU[i][d] += k * V[j][d] dV[j][d] += k * U[i][d] for p, i in enumerate(range(bas, bas + TOPLU)): for yon, (dv, W) in enumerate(((dU[p], WM), (dV[p], WK))): u, n = E[p][yon] ic = sum(a * b for a, b in zip(u, dv)) eg = [(dv[d] - u[d] * ic) / n for d in range(BOYUT)] for w in (KELIME[i] if yon == 0 else range(G)): for d in range(BOYUT): W[w][d] -= 0.15 * eg[d] * (1.0 if yon == 0 else KO[i][w]) ORTAK = [[gom(i)[y][0] for y in (0, 1)] for i in range(1600)] dogru = tavan = 0 for bas in range(1100, 1600, ADAY): oda = list(range(bas, bas + ADAY)) for i in oda: dogru += i == max(oda, key=lambda j: sum(a * b for a, b in zip(ORTAK[i][0], ORTAK[j][1]))) ayni = [j for j in oda if VERI[j]["tur"] == VERI[i]["tur"]] tavan += 1.0 / len([j for j in ayni if VERI[j]["hat"] == VERI[i]["hat"]] if VERI[i]["yazili"] else ayni) print(f"eslestirme, oda basina {ADAY} aday, {len(SIN)} sinama olayi; " f"rastgele eslestirme {1.0 / ADAY:.4f}") print(f"ortak temsil {dogru / len(SIN):.4f}, kurgunun tavani {tavan / len(SIN):.4f}")
eslestirme, oda basina 25 aday, 500 sinama olayi; rastgele eslestirme 0.0400 ortak temsil 0.1660, kurgunun tavani 0.2659
Taban 0,0400’dür: yirmi beş adaydan birini rastgele seçmek. Ortak temsil 0,1660 veriyor, tabanın dört katından fazlası. Üçüncü sayı bu ölçütün tek başına niçin okunamayacağını söylüyor: kurgunun iki kipte ortak taşıdığı bilgi türden ve — notta yazılıysa — hattan ibarettir, o gruplardan hesaplanan tavan 0,2659‘dur. 1,0000 ile karşılaştırılan 0,1660 bir başarısızlık gibi görünür; 0,2659 ile karşılaştırıldığında **öğrenilebilirin yüzde 62’si** öğrenilmiştir. Bir ölçütün tavanı da tabanı kadar ölçülmesi gereken bir sayıdır.
Farkın kaynağı hedeftir: iki izdüşüm de doğrusaldır ve tek başlarına hiçbir şey yapmaz. Karşıtlık hedefi doğru çifti yaklaştırıp yanlışları uzaklaştırdığında, iki kipin ortak taşıdığı ne varsa izdüşümler onu aynı yöne çevirmek zorunda kalır.
Tek Kip Tek Başına
def sinif_ortalamasi(X): """Her sinifin ortalama vektorune aci benzerligi. MODELDIR.""" def birim(v): n = math.sqrt(sum(a * a for a in v)) + 1e-9 return [a / n for a in v] M = {} for t in TUR: d = [i for i in range(1100) if VERI[i]["tur"] == t] M[t] = birim([sum(X[i][k] for i in d) / len(d) for k in range(len(X[0]))]) return sum(max(TUR, key=lambda t: sum(a * b for a, b in zip(birim(X[i]), M[t]))) == VERI[i]["tur"] for i in range(1100, 1600)) / len(SIN) TORBA = [[1.0 if k in KELIME[i] else 0.0 for k in range(len(SOZLUK))] for i in range(1600)] print(f"olay turu karari, sinif ortalamasi ile; taban {TABAN:.4f}") for ad, X in (("yalniz not", TORBA), ("yalniz kare", KO), ("ortak temsil", [ORTAK[i][0] + ORTAK[i][1] for i in range(1600)])): print(f" {ad:<17} {sinif_ortalamasi(X):.4f}")
olay turu karari, sinif ortalamasi ile; taban 0.4420 yalniz not 0.8940 yalniz kare 0.6140 ortak temsil 0.8660
Üç satır aynı yordamla ve aynı tabana karşı okundu; değişen yalnız temsildir. Yalnız not 0,8940, yalnız kare 0,6140: ikisi de tabanın üstünde, ama kare olay türünün ancak bir bölümünü taşıyor, çünkü dört türden ikisi karede blok taşımaz.
Üçüncü satır ortak temsilin ne olduğunu ve ne olmadığını söylüyor: 0,8660, yalnız notun 0,0280 altında. Bu temsil eşleştirme için öğrenildi ve orada tabanı dört kat geçti; olay türünde notun tek başına verdiğine ulaşamıyor. İki kipi bir araya getirmek kendiliğinden kazandırmaz ve bir temsilin iyiliği hangi görevde ölçüldüğüne bağlıdır.
Özet
- İki kip aynı bilgiyi eşit taşımaz: kare hattı her zaman gösterir, notların yalnız 0,2860’ı yazar.
- Ortak temsil eşleştirmede 0,1660 veriyor; taban 0,0400, kurgunun tavanı 0,2659, yani öğrenilebilirin yüzde 62’si.
- Olay türünde taban 0,4420, yalnız not 0,8940, yalnız kare 0,6140, ortak temsil 0,8660: eğitildiği görevde tabanı dört kat geçen temsil, başka bir görevde tek kipin altında kalabilir.
Kurs Kapanışı
On dört dersin hesabı tek tabloda ve her sayı kendi dersinden okundu. Satırlar ortak birim taşımaz; son sütun her satırın ölçütünü ve yönünü yazar. Fark tek işaret düzeniyle verilir: yöntemin sayısı eksi alanın tabanı. Yön küçük iyi olduğunda artı fark tabanın kazandığını söyler.
| Ders | Alanın tabanı | Yöntemin sayısı | Fark | Ölçüt |
|---|---|---|---|---|
| Metin 01 | 748 | 641 | −107 | sözlük boyu, küçük iyi |
| Metin 02 | 0,7383 | 0,8217 | +0,0833 | doğruluk, büyük iyi |
| Metin 03 | 0,4938 | 0,6049 | +0,1111 | komşuluk isabeti, büyük iyi |
| Metin 04 | 0,5061 | 0,9824 | +0,4763 | belirteç doğruluğu, büyük iyi |
| Metin 05 | 0,4420 | 0,9620 | +0,5200 | belge doğruluğu, büyük iyi |
| Metin 06 | 0,4420 | 0,7480 | +0,3060 | belge doğruluğu, büyük iyi |
| Metin 07 | 0,7777 | 0,9445 | +0,1668 | dengeli örtüşme, büyük iyi |
| Metin 08 | 0,3970 | 0,8378 | +0,4408 | belirteç doğruluğu, büyük iyi |
| Görü 01 | 0,5500 | 0,9250 | +0,3750 | doğruluk, büyük iyi |
| Görü 02 | 0,5500 | 0,6687 | +0,1187 | doğruluk, büyük iyi |
| Görü 03 | 0,3011 | 0,9076 | +0,6065 | ortalama örtüşme, büyük iyi |
| Görü 04 | 0,8731 | 0,9851 | +0,1120 | piksel doğruluğu, büyük iyi |
| Görü 05 | 0 | 99 | +99 | kararsızlık, küçük iyi |
| Görü 06 | 0,0400 | 0,1660 | +0,1260 | eşleştirme, büyük iyi |
Kursun kuralı budur: bir alan ölçütü, o alanın en aptal yordamının aynı ölçütteki sayısı yazılmadan okunamaz; alanın tabanı yazılmayan sayı ölçülmemiş sayılır.
Kursun ikinci iddiası aynı tablodan okunur. Yedi derste alanın tabanı şaşırtıcı biçimde yüksek çıktı: bölütlemede 0,8731, metin 07’de 0,7777, metin 02’de 0,7383, metin 04’te 0,5061 — aynı yordam varlık düzeyinde 0,0000 alırken — görü 01 ile 02’de 0,5500 ve görü 05’te kararsızlık 0, ki bu ölçütte yenilemez bir sayıdır. İki derste hiçbir şey öğrenmemiş bir yordam birinci oldu: metin 07’de girdiyi kopyalayan, metin 08’de her belirteci işaretleyen yordam, ikisi de örtüşmenin duyarlılık yönünde 1,0000. Gizleyen ölçütler dört biçimdedir: dengesiz sınıfta pay olarak okunan doğruluk, sayılan birimden başka bir birimde okunan doğruluk, tek yönlü okunan örtüşme ve sabit bir çıktının kendiliğinden kazandığı kararlılık.
Otuz sekiz derste — on dördü alana özgü — model bir girdiye bakıp bir çıktı verdi ve doğru cevap ya elde vardı ya da bir ölçüt onu tarif ediyordu. Kararın sonucunu ancak verildikten sonra öğrendiği ve kararın kendisinin bir sonraki girdiyi değiştirdiği bir düzende neyin öğrenildiği hiç sorulmadı. Sonraki kurs, Pekiştirmeli Öğrenme ve Öneri Sistemleri, bu soruyla açılır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.