Ders 22 / 26
Nicemleme
Bir ağırlığın kaç basamakla tutulduğunun bellek ve isabet üzerindeki etkisinin aynı 120 kurgu talepte ölçülmesi: 16 basamakta ağırlık belleği 34,3 milyar basamak ve eşzamanlı istek 5, 8 basamakta 17,2 milyar ve 24, 4 basamakta 8,6 milyar ve 62. Beş sınıflı konu ataması 0,8667'den 8 basamakta 0,8750'de kalıyor, 4 basamakta 0,8000'e, 3 basamakta 0,6333'e, 2 basamakta 0,2083'e düşüyor; iki sınıflı aciliyet ayrımı aynı düzeylerde 0,9417, 0,9333, 0,8583 ve 0,3583. Ortalama karar farkı beş sınıfta 0,1597, iki sınıfta 0,2665 olduğu için ince ayrım önce gidiyor. 121 satırın ayırt edici farkı 4 basamakta 24 satırda, 3 basamakta 53 satırda tamamen siliniyor.
İçindekiler
Önceki derste bellek sayı adedi olarak sayıldı ve bir sayının bellekte ne kadar yer tuttuğu sabit kabul edildi. Bu kabul bir seçimdir, bir zorunluluk değil. Aynı ağırlık daha az basamakla tutulabilir; o zaman parametre sayısı değişmeden bellek küçülür, aynı bütçeye daha çok eşzamanlı istek sığar ve önceki dersin son tablosundaki tavan yükselir.
Karşılığı da aynı yerdedir. Önceki dersin ağırlık satırlarında ayırt edici olan şey ortak taban değil, tabanın üstüne konu başına eklenen küçük farktı. Basamak sayısı düştükçe temsil edilebilir değerler seyrekleşir ve bir noktadan sonra o küçük farklar aynı değere yuvarlanır. Bu ders üç basamak düzeyini yan yana koyar ve iki soruyu ayrı ayrı yanıtlar: bellek ne kadar düşüyor, isabet hangi noktada ve hangi görevde önce düşüyor.
- YM11. Kod bir benzeticidir; önceki dersin benzeticisi kısaltılarak yeniden kurulur. Talepler kurgudur, tohum 20260218.
- YM12. Nicemleme burada tek bir işlemdir: sıfır ile iki arası, basamak sayısının verdiği eşit adıma bölünür ve her ağırlık en yakın adıma yuvarlanır. Ölçülen tek büyüklük basamak sayısıdır.
- YM13. Bellek basamak olarak sayılır: ağırlık belleği parametre sayısı çarpı basamak sayısıdır. Ara durum da aynı basamak sayısıyla tutulur.
- YM14. Bütçe 48 milyar basamaktır; bu, önceki dersin üç milyar sayılık bütçesinin 16 basamaktaki karşılığıdır. Ölçek sabittir ve önceki dersin büyük ölçeğidir.
- YM15. Aynı yanıt üç çözünürlükte okunur: beş sınıflı konu ataması, üç sınıflı ekip yönlendirmesi (ücret, saha, sayaç) ve iki sınıflı aciliyet ayrımı. Eşlemeler kurgudur.
- YM16. Fark, bir kararın sağlamlığıdır: seçilen konunun puanı ile en yakın rakibin puanı arasındaki uzaklık. Üç görevde rakibin tanımı farklıdır, bu yüzden fark da farklıdır.
- YM17. Dağılım sıcaklığı sıfırdır; bütün sayılar koşumdan bağımsızdır. Belirsizliğin yerine fark dağılımı ölçülür.
- YM18. Eşitlik alfabetik sırayla çözülür. Bütün ağırlıklar aynı değere yuvarlandığında model tek bir etikete çöker.
- YM19. Basamak sayısı yalnız ağırlıkları etkiler; belirteçleme, sözlük ve görev tanımları değişmez.
- YM20. Eşzamanlı istek sayısı önceki dersin hesabıyla aynıdır; değişen tek girdi bir sayının kaç basamak tuttuğudur.
Basamak Sayısı Bellekte Neyi Serbest Bırakır
Nicemlemenin bellek tarafı doğrusaldır ve tartışmasızdır: basamak yarıya inerse ağırlık belleği yarıya iner. İlginç olan ikinci etkidir. Ara durum da aynı basamak sayısıyla tutulduğu için bütçe iki yerden birden serbest kalır, ve eşzamanlı istek sayısı basamak sayısı düştükçe basamağın oranından daha hızlı büyür: ağırlıklar bütçeden bir kere düşülür, kalanın tamamı isteklere gider.
# YEREL BENZETICI -- KURGUDUR. Onceki dersin benzeticisi kisaltilarak kurulur. TOHUM, M32 = 20260218, 0xFFFFFFFF 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): # KURGU belirtecleyici, parca en cok bes damga b = [] for s in m.lower().split(): while len(s) > 5: b.append(s[:5]) s = s[5:] b.append(s) return b KONU = ["fatura", "ariza", "sayac", "tarife", "kesinti"] KALIP = {"fatura": ["bu ayki tutar gecen aya gore cok yuksek", "odedim ama sistemde borc gorunuyor", "ayrintili dokumu nereden gorebilirim"], "ariza": ["evde su akmiyor bir sorun var", "baglanti bozuk oldu ve hic calismiyor", "ariza kaydi actim ama ekip gelmedi"], "sayac": ["okuma yanlis girilmis endeks tutmuyor", "cihaz degisimi icin randevu istiyorum", "endeksi ile fatura ayni degil"], "tarife": ["hangi basamaktayim ogrenmek istiyorum", "tarife degisikligi icin ne yapmaliyim", "birim ucret abone tipine gore degisir mi"], "kesinti": ["mahallede elektrik yok ne zaman gelecek", "planli duyuru nereden takip edilir", "aksamdan beri kesinti yasiyoruz"]} EK = ["ayrica gecen hafta da aradim", "kayit numarasi verildi", "ekip bilgi verecekti", "degisiklik talebim de var"] TALEP = [] # 120 KURGU destek talebi 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, "konu": k, "metin": m}) GECIS = {} for k, liste in KALIP.items(): for m in liste: for t in set(belirtecle(m)): GECIS.setdefault(t, {})[k] = 1 for e in EK: for t in set(belirtecle(e)): GECIS.setdefault(t, {}) TABAN, AGIRLIK = 0.50, {} for i, t in enumerate(sorted(GECIS)): r = uretec(TOHUM + 7919 * (i + 1)) satir = {k: TABAN for k in KONU} if GECIS[t]: for k in GECIS[t]: satir[k] = TABAN + 0.05 + 0.40 * r() else: satir[KONU[int(r() * 5)]] = TABAN + 0.02 + 0.10 * r() AGIRLIK[t] = satir GRUP = {"fatura": "ucret", "tarife": "ucret", "ariza": "saha", # ekip yonlendirmesi "kesinti": "saha", "sayac": "sayac"} ACIL = {"fatura": "normal", "tarife": "normal", "sayac": "normal", # aciliyet ayrimi "ariza": "acil", "kesinti": "acil"} def nicem(x, b): """Sifir ile iki arasi, 2**b - 1 esit adima bolunur; en yakin adima yuvarlanir.""" a = 2.0 / (2 ** b - 1) return round(x / a) * a def puan(metin, b): p = {k: nicem(TABAN, b) for k in KONU} for t in belirtecle(metin): if t in AGIRLIK: for k in KONU: p[k] = max(p[k], nicem(AGIRLIK[t][k], b)) return p def sec(p): return max(sorted(p), key=lambda a: p[a]) PARAMETRE, ARA, BUTCE = 2144337920, 157286400, 48_000_000_000 print("bas adim agirlik(basamak) esz.istek bes sinif uc sinif iki sinif") for b in (16, 12, 8, 6, 5, 4, 3, 2): a5 = a3 = a2 = 0 for x in TALEP: s = sec(puan(x["metin"], b)) a5 += s == x["konu"] a3 += GRUP[s] == GRUP[x["konu"]] a2 += ACIL[s] == ACIL[x["konu"]] e = max(0, (BUTCE // b - PARAMETRE) // ARA) print(f"{b:>3} {2.0 / (2 ** b - 1):>7.5f} {PARAMETRE * b:>17} {e:>10}" f" {a5 / 120:>10.4f} {a3 / 120:>9.4f} {a2 / 120:>10.4f}")
bas adim agirlik(basamak) esz.istek bes sinif uc sinif iki sinif 16 0.00003 34309406720 5 0.8667 0.8667 0.9417 12 0.00049 25732055040 11 0.8667 0.8667 0.9417 8 0.00784 17154703360 24 0.8750 0.8750 0.9417 6 0.03175 12866027520 37 0.8500 0.8750 0.9417 5 0.06452 10721689600 47 0.8417 0.8667 0.9333 4 0.13333 8577351680 62 0.8000 0.9083 0.9333 3 0.28571 6433013760 88 0.6333 0.7583 0.8583 2 0.66667 4288675840 138 0.2083 0.3583 0.3583
Tablonun üç ana satırı 16, 8 ve 4 basamaktır. Bellek 34,3 milyardan 17,2 milyara, oradan 8,6 milyar basamağa iniyor; tam olarak dörtte bir. Eşzamanlı istek ise 5’ten 24’e, oradan 62‘ye çıkıyor: on iki katı. Bu orantısızlık YM13’ten gelir. Ağırlık bütçeden bir kez düşülür ve 16 basamakta bütçenin neredeyse tamamını yer; basamak azaldıkça ağırlığın payı küçülür ve kalanın tamamı isteklere gider.
İsabet sütunları aynı hızda gitmiyor. Beş sınıflı konu ataması 16 basamakta 0,8667, sekiz basamakta 0,8750 — yani ilk yarılanma isabette ölçülebilir bir iz bırakmıyor. Altı ve beş basamakta 0,8500 ve 0,8417 ile hafifçe geriliyor. Dört basamakta 0,8000, üç basamakta 0,6333, iki basamakta 0,2083. Son satır bir isabet değil bir çöküştür: 0,2083, benzeticinin alfabetik olarak ilk etikete düşme oranıdır.
Farkın Adımın Altında Kalması
Bu düşüşün nedeni tahmin edilecek bir şey değil, hesaplanacak bir şeydir. Bir kararın sağlamlığı farktır: seçilen konunun puanı ile en yakın rakibinin puanı arasındaki uzaklık. Yuvarlama bu uzaklığı ancak adım kadar oynatabilir; fark adımdan büyükse karar yerinde kalır, küçükse kaybolabilir. Aşağıdaki iki ölçü de koşumdan bağımsızdır ve isabet ölçülmeden önce bakılabilir.
def farklar(b): f = {"bes sinif": [], "uc sinif": [], "iki sinif": []} for x in TALEP: p = puan(x["metin"], b) v = sorted(p.values(), reverse=True) s = sec(p) f["bes sinif"].append(v[0] - v[1]) f["uc sinif"].append(p[s] - max(p[k] for k in KONU if GRUP[k] != GRUP[s])) f["iki sinif"].append(p[s] - max(p[k] for k in KONU if ACIL[k] != ACIL[s])) return f print("gorev ortalama fark farki adimin altinda kalan pay (bas 8 / 4 / 3)") for ad, f in farklar(16).items(): o = [sum(1 for x in f if x < 2.0 / (2 ** b - 1)) / 120 for b in (8, 4, 3)] print(f"{ad:<10} {sum(f) / 120:>13.4f} " + " ".join(f"{x:.4f}" for x in o)) print("\nbas tablodaki ayri deger ayrimi silinen satir (121 satirda)") for b in (16, 8, 4, 3, 2): d = {nicem(w, b) for s in AGIRLIK.values() for w in s.values()} z = sum(1 for s in AGIRLIK.values() if len({nicem(w, b) for w in s.values()}) == 1) print(f"{b:>3} {len(d):>20} {z:>27}") print("\n'endek' satiri basamak duzeylerinde:") for b in (16, 8, 4, 3): print(f" {b:>2} " + " ".join(f"{k}={nicem(AGIRLIK['endek'][k], b):.4f}" for k in KONU))
gorev ortalama fark farki adimin altinda kalan pay (bas 8 / 4 / 3) bes sinif 0.1597 0.0167 0.4167 0.7250 uc sinif 0.1995 0.0167 0.2750 0.6667 iki sinif 0.2665 0.0083 0.2000 0.4500 bas tablodaki ayri deger ayrimi silinen satir (121 satirda) 16 133 0 8 55 0 4 4 24 3 2 53 2 1 121 'endek' satiri basamak duzeylerinde: 16 fatura=0.5000 ariza=0.5000 sayac=0.7095 tarife=0.5000 kesinti=0.5000 8 fatura=0.5020 ariza=0.5020 sayac=0.7059 tarife=0.5020 kesinti=0.5020 4 fatura=0.5333 ariza=0.5333 sayac=0.6667 tarife=0.5333 kesinti=0.5333 3 fatura=0.5714 ariza=0.5714 sayac=0.5714 tarife=0.5714 kesinti=0.5714
İlk tablo, isabet tablosunun sırasını isabete bakmadan açıklıyor. Ortalama fark beş sınıflı görevde 0,1597, üç sınıflıda 0,1995, iki sınıflıda 0,2665. Görev kabalaştıkça rakip uzaklaşır, çünkü fatura ile tarife arasındaki karışıklık ekip yönlendirmesini bozmaz ve arıza ile kesinti arasındaki karışıklık aciliyeti bozmaz. Aynı yanıt, kaba okunduğunda daha sağlam bir karardır.
Sağdaki üç sütun bunu düzey düzey sayıyor. Sekiz basamakta adım 0,00784 ve kayıtların yalnız 0,0167‘sinde fark bu adımın altında; isabetin bu düzeyde oynamaması bu yüzden beklenen bir sonuçtur. Dört basamakta adım 0,13333’e çıkıyor ve beş sınıflı görevde kayıtların 0,4167’si kırılgan hâle geliyor, iki sınıflı görevde ise 0,2000’i. Üç basamakta oranlar 0,7250 ile 0,4500. Kırılganlık payının sırası isabetin düşme sırasıyla aynıdır, ve bu sıra basamak düşürmeden önce hesaplanabilir.
İkinci tablo mekanizmayı gösteriyor. 121 satırın 605 ağırlığı 16 basamakta 133 ayrı değer taşıyor; sekiz basamakta 55’e iniyor ama hiçbir satır ayrımını kaybetmiyor. Dört basamakta temsil edilebilir değer sayısı 4’e düşüyor ve 24 satırın beş konu için tuttuğu değerler birbirine eşitleniyor; o satırlar artık hiçbir şey ayırt etmiyor. Üç basamakta bu sayı 53, iki basamakta 121, yani tablonun tamamı. Nicemleme ağırlıkları küçültmez, birbirinden ayırt edilemez hâle getirir; silinen şey büyüklük değil ayrımdır.
Son blok tek bir satırda aynı şeyi gösteriyor. Sayaç okumasına işaret eden endek parçası 16
basamakta sayaç için 0,7095, öbür dört konu için 0,5000 taşıyor; ayrım 0,2095. Sekiz basamakta
0,7059 ile 0,5020, ayrım 0,2039 — neredeyse aynı. Dört basamakta değerler 0,6667 ile 0,5333’e
oturuyor ve ayrım 0,1334’e iniyor. Üç basamakta beş değer de 0,5714; satır artık sayacı
işaret etmiyor. Ağırlıkların hiçbiri sıfırlanmadı, hiçbiri anlamlı ölçüde küçülmedi; yalnız
aralarındaki uzaklık temsil edilemez hâle geldi.
İsabetin Düştüğü Nokta
Tablonun okunacak yeri dört ile üç basamak arasıdır. Sekizden dörde inerken beş sınıflı isabet 0,0750 geriliyor ve bellek yarıya iniyor; dörtten üçe inerken isabet 0,1667 geriliyor ve bellek yalnız dörtte bir daha azalıyor. Bedelin eğrisi ile kazancın eğrisi burada kesişiyor: dört basamak altında kazanılan her basamak, öncekinden daha pahalıya geliyor.
Hangi görevin önce düştüğü sorusunun yanıtı da tablodadır. Dört basamakta beş sınıflı ayrım 0,8667’den 0,8000‘e düşerken üç sınıflı ekip yönlendirmesi 0,8667 ile 0,9083 arasındaki bandın içinde kalıyor ve iki sınıflı aciliyet ayrımı 0,9417’den yalnız 0,9333’e iniyor. İki basamak daha aşağıda, üç basamakta, kaba görevler de düşüyor ama beş sınıflı görevin çok gerisinden: 0,7583 ve 0,8583. Kural şudur: ince ayrım önce gider. Aynı nicemlenmiş model, bir talebi hangi ekibe yollayacağını hâlâ bilirken hangi konuya ait olduğunu bilemez hâle gelmiştir.
Bunun tasarımdaki karşılığı doğrudandır. Bir kurulumda basamak sayısını düşürmenin kabul edilebilir olup olmadığı modele değil göreve bağlıdır. Aynı ağırlıklar üstünde iki iş yürüyorsa, kaba olanı dört basamakla çalıştırmak ile ince olanı dört basamakla çalıştırmak aynı karar değildir. Ölçülmesi gereken de tek bir isabet değil, her görev için ayrı bir isabettir.
Özet
- Nicemleme burada bir aralığın eşit adımlara bölünmesidir; ölçülen tek büyüklük basamak sayısıdır ve bellek parametre sayısı çarpı basamak olarak yazılır.
- Ağırlık belleği 16 basamakta 34,3 milyar, 8 basamakta 17,2 milyar, 4 basamakta 8,6 milyar; aynı bütçedeki eşzamanlı istek 5’ten 24’e ve 62’ye çıkıyor, çünkü ağırlık bütçeden bir kez düşülür.
- Beş sınıflı isabet 8 basamağa kadar 0,8667 bandında kalıyor, 4 basamakta 0,8000, 3 basamakta 0,6333, 2 basamakta 0,2083’e düşüyor; son satır isabet değil alfabetik çöküştür.
- Ortalama karar farkı beş sınıfta 0,1597, iki sınıfta 0,2665; farkı adımın altında kalan pay 4 basamakta 0,4167 ile 0,2000 ve bu sıra isabetin düşme sırasını basamak düşürmeden önce veriyor.
- 605 ağırlık 4 basamakta 4 ayrı değere iniyor ve 24 satır bütün ayrımını kaybediyor; nicemleme büyüklüğü değil ayrımı siler.
- İsabetin düştüğü nokta dört ile üç basamak arasıdır ve önce düşen görev beş sınıflı konu atamasıdır; kaba görevler iki basamak daha dayanıyor.
Sonraki Adım
Bu iki derste ağırlıklar hep verilmiş kabul edildi. Ölçek seçildi, basamak sayısı düşürüldü, bellek ve isabet yan yana yazıldı; ama ağırlıkların kendisine hiç dokunulmadı. Oysa yerel bir kurulumun uzak bir uç noktada bulunmayan asıl imkânı budur: ağırlıklar elinde olduğu için değiştirilebilirler. Kendi verinle bir kaç yüz örnek üstünde eğitim sürdürülürse modelin bu göreve isabeti yükselebilir. Yükselir mi, ne kadar yükselir, ve aynı kazanç isteme birkaç cümle eklemekle zaten alınabiliyor muydu — bunlar ölçülmedi. Sonraki ders aynı görevde istem düzeneği ile ince ayarı yan yana koyar, bedeli örnek sayısı ve koşum sayısıyla yazar, ve ince ayarın kazanmadığı bir noktayı gösterir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.