Ders 15 / 16
Erişim ile İnce Ayarın Yan Yana Ölçülmesi
Aynı iş yükünde üç ayrı görevin erişimle ve ince ayarla ayrı ayrı ölçülmesi: kırk sorguluk kurgu kümede bilgi tazeliği erişimsiz 0,0000, yalnız erişimle 0,9500, kırk sekiz örnekle ince ayarda 0,6750 çıkıyor ve örnek eklemek bu tavanı kaldırmıyor, çünkü bayat bilgi bir kapsama sorunu değildir. Biçim uyumu erişimle 0,0000 kalıyor, ince ayarla on iki örnekte 1,0000 oluyor: erişimin kazanmadığı görev budur. Alan dili erişimle 0,9500, tam kapsamlı ince ayarla 1,0000. Bedel erişimde istek başına ek belirteç ve kırk erişim adımı, ince ayarda kırk sekiz etiketli örnek. İki koşum farkı erişimsiz tabanda 0,1750, öbür üç kurulumda 0,0000.
İçindekiler
Bir önceki ders erişim hattının tek sayısını dört duruma ayırdı ve tek sayının hangi aşamanın bozulduğunu gizlediğini gösterdi. Ayrım şunu da açığa çıkardı: erişimin işi isteme giren bilgiyi değiştirmektir. Modelin kendisine hiç dokunmaz.
Modele dokunmanın yolu vardır ve ölçülmüştür. M28/K03’ün Model API’leri ile Uygulama Geliştirme kursunda ince ayar aynı destek görevinde denendi: taban 0,6000, altmış örnekle istem düzeneği 0,9667, aynı altmış örnekle ince ayar 0,9500. İstek başına bağlam 28,48 belirteçten 623,48 belirtece çıkıyordu. O yordam burada tekrarlanmaz; o sayılar bu dersin girdisidir. Bu dersin sorusu başkadır: bir görev verildiğinde hangisinin hangi problemi çözdüğü, ve hangi görevde erişimin hiçbir şey kazandırmadığı.
- EH77. Dağarcık, kavram ekseni, gömme, sorgu kümesi ve yenileme kurgudur, ders içinde üretilir. Hiçbir gerçek kurum, ürün, belge ya da gömme ucu yoktur.
- EH78. Bilgi tazeliği görevi: her yordamın bir yürürlük damgası vardır. Damga ince ayar anlık görüntüsünden sonra bir bölüm yordamda değişti. Doğru yanıt yürürlükteki damgadır.
- EH79. Biçim uyumu görevi: yanıtın iki alanlı sabit kalıba (
yordam | damga) uyması istenir. Bu kalıp kurgudur ve yalnız çıktı kanalını ilgilendirir. - EH80. Alan dili görevi: sorgu dilindeki yüzeyin (
hangi dilimdeyim) hangi yordama karşılık geldiğinin bulunması. Bu, bir önceki dersin ölçtüğü işin aynısıdır. - EH81. İnce ayar burada bir öğrenme benzeticisidir: eğitim kümesinde gördüğü yordamın sorgu yüzeyini doğrudan çözer, gördüğü sınıfta çıktı kalıbını uygular ve yürürlük damgasını anlık görüntüden verir. Görmediği yordamda dil modeli benzeticisinin tahminine düşer.
- EH82. Bedel iki ayrı birimdedir ve toplanmaz: erişimde istek başına ek belirteç ve erişim adımı, ince ayarda etiketli örnek sayısı. İkisinin ortak bir birimi yoktur.
- EH83. Ölçüler kırk sorgu üzerinde alınır; erişim üç parça getirir.
Üç Görev, Bir İş Yükü
Kurgu yenileme yordamların bir bölümünün yürürlük damgasını değiştirir. İnce ayar anlık görüntüsü eskisini taşır, dağarcık yenisini.
# KURGUDUR. Dagarcik, kavram ekseni, gomme, sorgu kumesi ve yenileme ders icinde # uretilir; hicbir gercek kurum, urun, belge ya da gomme ucu yoktur. TOHUM, M32 = 20260218, 0xFFFFFFFF BOYUT = 32 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 # ---- KURGU anlam ekseni: her kavramin belge dilinde ve sorgu dilinde ayri yuzeyi var SINIF = ["tarife", "ariza", "sayac", "kesinti", "bakim"] KOD = {"tarife": "TR", "ariza": "AR", "sayac": "SY", "kesinti": "KS", "bakim": "BK"} KAVRAM = { # kavram: (sinif, belge yuzeyi, sorgu yuzeyi) "basamak": ("tarife", "kademe esigi", "hangi dilimdeyim"), "birim": ("tarife", "birim ucret", "metrekup fiyati"), "abonetip": ("tarife", "abone tipi", "mesken mi isyeri mi"), "gecis": ("tarife", "tarife gecisi", "plan degistirme"), "arizakod": ("ariza", "ariza kodu", "hata numarasi"), "sizinti": ("ariza", "hat sizintisi", "su kacagi"), "basinc": ("ariza", "basinc dususu", "zayif akis"), "ekip": ("ariza", "saha ekibi", "gorevli ne zaman gelir"), "endeks": ("sayac", "endeks degeri", "sayac ustundeki rakam"), "okuma": ("sayac", "okuma yordami", "nasil kaydediliyor"), "degisim": ("sayac", "sayac degisimi", "cihaz yenileme"), "dogrula": ("sayac", "okuma dogrulamasi", "yanlis girilmis mi"), "planli": ("kesinti", "planli kesinti", "onceden duyurulan durma"), "duyuru": ("kesinti", "duyuru kanali", "nereden ogrenirim"), "sure": ("kesinti", "kesinti suresi", "ne kadar surer"), "geridonus": ("kesinti", "yeniden verme", "ne zaman gelir"), "periyot": ("bakim", "periyodik bakim", "duzenli kontrol"), "vana": ("bakim", "vana kontrolu", "musluk kapatma duzeni"), "filtre": ("bakim", "filtre degisimi", "temizleme parcasi"), "kalib": ("bakim", "kalibrasyon kaydi", "olcum ayari"), } ANAHTAR = list(KAVRAM) ORTAK = ["kayit", "bolge", "donem", "islem", "form", "onay", "not"] # ---- KURGU dagarcik BELGE = [] for i in range(200): r = uretec(TOHUM + 7919 * i) s = SINIF[ayrik(r(), [0.22, 0.24, 0.20, 0.18, 0.16])] kav = [k for k in ANAHTAR if KAVRAM[k][0] == s] ana = kav[int(r() * len(kav))] n = 2 + int(r() * 4) par, kavlar = [], [ana] for _ in range(n): y = kav[int(r() * len(kav))] kavlar.append(y) o = ORTAK[int(r() * len(ORTAK))] par.append(f"{KAVRAM[y][1]} icin {o} tutulur ve {KAVRAM[ana][1]} ile birlikte yazilir") BELGE.append({"kod": f"{KOD[s]}{i + 1:03d}", "sinif": s, "ana": ana, "kavram": kavlar, "baslik": f"{KAVRAM[ana][1]} yordami", "par": par}) # ---- KURGU gomme: yuzey once kavrama, kavram sonra boyuta dusuruluyor def _kavramla(m, alan=True): v = [0.0] * len(ANAHTAR) dm = " " + m.lower() + " " for i, k in enumerate(ANAHTAR): bel, sor = KAVRAM[k][1], KAVRAM[k][2] if bel in dm: v[i] += 1.0 if sor in dm: v[i] += 1.0 if alan else 0.0 # alan disi gomme sorgu dilini tanimaz if not alan: for o in ORTAK: if " " + o + " " in dm: for i in range(len(ANAHTAR)): v[i] += 0.05 return v IZDUS = [] for i in range(len(ANAHTAR)): r = uretec(TOHUM ^ (i + 1) * 2654435761) IZDUS.append([r() * 2 - 1 for _ in range(64)]) def gom(m, boyut=BOYUT, alan=True): k = _kavramla(m, alan) v = [0.0] * boyut for i, a in enumerate(k): if a: for j in range(boyut): v[j] += a * IZDUS[i][j % 64] n = sum(x * x for x in v) ** 0.5 return [x / n for x in v] if n else v def aci(a, b): return sum(x * y for x, y in zip(a, b)) # ---- KURGU sorgu kumesi: sorgu dili belge dilinden ayri SORGU = [] for i in range(40): r = uretec(TOHUM + 104729 * i) d = BELGE[int(r() * len(BELGE))] SORGU.append({"metin": f"{KAVRAM[d['ana']][2]} {ORTAK[int(r() * len(ORTAK))]}", "sinif": d["sinif"], "kavram": d["ana"]}) # KURGU yenileme: yordamlarin bir bolumu ince ayar anlik goruntusunden sonra degisti. DAMGA_EGITIM, DAMGA_GUNCEL = {}, {} for i, k in enumerate(ANAHTAR): DAMGA_EGITIM[k] = f"y{i + 1:02d}a" DAMGA_GUNCEL[k] = (f"y{i + 1:02d}b" if uretec(TOHUM + 31 * (i + 1))() < 0.45 else f"y{i + 1:02d}a") BAYAT = [k for k in ANAHTAR if DAMGA_EGITIM[k] != DAMGA_GUNCEL[k]] PARCA = [{"kod": d["kod"], "ana": d["ana"], "metin": p + " yururluk " + DAMGA_GUNCEL[d["ana"]]} for d in BELGE for p in d["par"]] PV = [gom(p["metin"]) for p in PARCA] OGRENME = [BELGE[int(uretec(TOHUM + 65537 * (i + 1))() * len(BELGE))]["ana"] for i in range(48)] print(f"dagarcik {len(BELGE)} belge , {len(PARCA)} parca , sorgu {len(SORGU)}") print(f"yenilenen yordam {len(BAYAT)} / {len(ANAHTAR)} , bayat yordama soran sorgu " f"{sum(1 for s in SORGU if s['kavram'] in BAYAT)} / {len(SORGU)}") print(f"ogrenme kumesi {len(OGRENME)} etiketli ornek , kapsadigi yordam " f"{len(set(OGRENME))} , kapsadigi sinif {len({KAVRAM[x][0] for x in set(OGRENME)})}")
dagarcik 200 belge , 693 parca , sorgu 40 yenilenen yordam 9 / 20 , bayat yordama soran sorgu 13 / 40 ogrenme kumesi 48 etiketli ornek , kapsadigi yordam 20 , kapsadigi sinif 5
Yirmi yordamdan dokuzu yenilendi ve kırk sorgunun on üçü artık ince ayarın bildiğinden başka bir yanıt istiyor. Öğrenme kümesi kırk sekiz etiketli örnektir ve tam kapsamlıdır: yirmi yordamın yirmisini, beş sınıfın beşini de görür. Bu, ince ayara verilebilecek en iyi koşuldur.
Dört Kurulum
Aynı kırk sorgu dört kurulumda çözülür: erişimsiz taban, yalnız erişim, yalnız ince ayar ve ikisi birlikte. Üç görev üç ayrı sütundur ve tek bir sayıda toplanmaz.
from math import exp def izno(m): h = 2166136261 for c in m: h = ((h ^ ord(c)) * 16777619) & M32 return h def getir(q, k=3): v = gom(q) s = sorted(range(len(PARCA)), key=lambda i: (-aci(v, PV[i]), i)) return [PARCA[i] for i in s[:k]] def coz(s, erisim, ince, tohum=TOHUM, sicaklik=0.6): """Erisim istemin girdisini, ince ayar modelin kendisini degistirir.""" par = getir(s["metin"]) if erisim else [] istem = s["metin"] + " || " + " ".join(p["metin"] for p in par) gorulen = set(OGRENME[:ince]) sq = " " + s["metin"].lower() + " " kav = next((x for x in ANAHTAR if KAVRAM[x][2] in sq and x in gorulen), None) if kav is None: # ince ayar bu yordami gormedi: benzetici tahmin eder dm = " " + istem.lower() + " " sn = next((KAVRAM[x][0] for x in ANAHTAR if KAVRAM[x][2] in sq), None) pu = {x: (0.15 if KAVRAM[x][0] == sn else 0.0) + dm.count(KAVRAM[x][1]) for x in ANAHTAR} ad = [x for x in ANAHTAR if pu[x]] a = [exp(pu[x] / sicaklik) for x in ad] t = sum(a) kav = ad[ayrik(uretec(tohum ^ izno(istem))(), [x / t for x in a])] if erisim: b = par[0]["metin"].split() damga = b[b.index("yururluk") + 1] else: damga = DAMGA_EGITIM[kav] if ince else "yok" bicim = ince > 0 and KAVRAM[kav][0] in {KAVRAM[x][0] for x in gorulen} return kav, damga, bicim, len(belirtecle(istem)) def olc(erisim, ince, tohum=TOHUM): n = len(SORGU) t = d = b = bel = 0 for s in SORGU: kav, damga, bic, nb = coz(s, erisim, ince, tohum) t += damga == DAMGA_GUNCEL[s["kavram"]] d += kav == s["kavram"] b += bic bel += nb return t / n, b / n, d / n, bel KURULUM = (("erisimsiz taban", 0, 0), ("yalniz erisim", 1, 0), ("yalniz ince ayar", 0, 48), ("ikisi birlikte", 1, 48)) print("kurulum tazelik bicim alandili belirtec erisim adimi etiketli ornek") for ad, e, i in KURULUM: t, b, d, bel = olc(e, i) print(f"{ad:<18} {t:>7.4f} {b:>7.4f} {d:>9.4f} {bel:>9} {e * len(SORGU):>13} {i:>15}") print("\nince ayar ornek sayisi supurmesi (erisim yok)") print("ornek gorulen kavram gorulen sinif tazelik bicim alandili") for i in (0, 6, 12, 24, 48): t, b, d, _ = olc(0, i) g = set(OGRENME[:i]) print(f"{i:>5} {len(g):>15} {len({KAVRAM[x][0] for x in g}):>14}" f" {t:>9.4f} {b:>7.4f} {d:>9.4f}") print("\nikinci kosum (tohum 20260219) , alan dili isabeti ve kosum farki") for ad, e, i in KURULUM: a, b = olc(e, i)[2], olc(e, i, TOHUM + 1)[2] print(f"{ad:<18} {a:>7.4f} {b:>8.4f} {b - a:>+9.4f}")
kurulum tazelik bicim alandili belirtec erisim adimi etiketli ornek
erisimsiz taban 0.0000 0.0000 0.3750 231 0 0
yalniz erisim 0.9500 0.0000 0.9500 2559 40 0
yalniz ince ayar 0.6750 1.0000 1.0000 231 0 48
ikisi birlikte 0.9500 1.0000 1.0000 2559 40 48
ince ayar ornek sayisi supurmesi (erisim yok)
ornek gorulen kavram gorulen sinif tazelik bicim alandili
0 0 0 0.0000 0.0000 0.3750
6 6 4 0.4500 0.7500 0.6250
12 9 5 0.4500 1.0000 0.7000
24 15 5 0.4500 1.0000 0.7750
48 20 5 0.6750 1.0000 1.0000
ikinci kosum (tohum 20260219) , alan dili isabeti ve kosum farki
erisimsiz taban 0.3750 0.2000 -0.1750
yalniz erisim 0.9500 0.9500 +0.0000
yalniz ince ayar 1.0000 1.0000 +0.0000
ikisi birlikte 1.0000 1.0000 +0.0000
Erişimin Kazanmadığı Görev
Üç sütun üç ayrı yanıt verir ve hiçbiri öbürünü kapsamaz.
Bilgi tazeliğinde erişim kazanır. Yalnız erişim 0,9500, tam kapsamlı ince ayar 0,6750. Aradaki fark rastlantı değildir: kaybedilen tam olarak yenilenmiş dokuz yordama soran on üç sorgudur. Süpürme sütunu bunu doğruluyor. Örnek sayısı altıdan kırk sekize çıkarken alan dili 0,6250’den 1,0000’e tırmanıyor, ama tazelik 0,4500’de duruyor ve ancak kapsam tamamlandığında 0,6750’de tavan yapıyor. Daha fazla örnek bunu düzeltmez, çünkü bayatlık bir kapsama sorunu değildir: model doğru öğrendiği şeyi doğru hatırlıyor, öğrendiği şey artık yürürlükte değil.
Biçim uyumunda erişim hiçbir şey kazandırmaz. Erişimsiz taban 0,0000, yalnız erişim de 0,0000. Getirilen üç parça bağlamı zenginleştirir, çıktı kalıbına dokunmaz. İnce ayar aynı görevi on iki örnekte 1,0000 yapar; kalıbı öğrenmek için gereken şey yordam kapsaması değil, sınıf kapsamasıdır ve beş sınıf on iki örnekte tamamlanıyor. Erişim istemin girdisini, ince ayar modelin çıktı davranışını değiştirir; biçim ikinci kümededir.
Alan dilinde ikisi de kazanır, tam kapsamda ince ayar öne geçer. Erişim 0,9500, ince ayar 1,0000. Ama ince ayarın 1,0000’i yirmi yordamın hepsini gören kırk sekiz örneğe bağlıdır; yirmi dört örnekte aynı sayı 0,7750‘dir. Erişimin 0,9500’ü ise etiketli örnek istemez.
Bedeller ortak birim taşımadığı için ayrı yazılır. Erişim toplam belirteci 231’den 2559’a çıkarır ve kırk erişim adımı ekler; istek başına 5,8 belirteçten 64,0 belirtece çıkmak demektir. İnce ayarın belirteci 231’de kalır ve erişim adımı yoktur, ama kırk sekiz etiketli örnek ister ve damga her yenilendiğinde bu örneklerin bir bölümü geçersizleşir. İkisi birlikte üç görevde de en iyi sütunu verir ve iki bedeli birden öder.
İki koşum farkı son tabloda. Erişimsiz taban ikinci koşumda 0,3750’den 0,2000’e düşüyor (−0,1750); bilgiye dayanmayan bir sayı oynaktır. Öbür üç kurulumda fark 0,0000. Hem bağlamdaki kanıt hem de öğrenilmiş eşleme, örneklemenin sonucu döndürmesini engelliyor.
Özet
- Erişim istemin girdisini, ince ayar modelin çıktı davranışını değiştirir; bu ayrım hangi görevin hangisiyle çözüleceğini belirler.
- Bilgi tazeliğinde erişim 0,9500, tam kapsamlı ince ayar 0,6750 yapar; kaybedilen tam olarak yenilenmiş dokuz yordama soran on üç sorgudur.
- Örnek sayısını artırmak tazeliği düzeltmez: alan dili 0,6250’den 1,0000’e çıkarken tazelik 0,4500’de durur ve 0,6750’de tavan yapar.
- Biçim uyumunda erişim 0,0000’dan 0,0000’a hiçbir şey katmaz; ince ayar on iki örnekte 1,0000 yapar, çünkü kalıp için yordam değil sınıf kapsaması gerekir.
- Bedeller toplanmaz: erişim 231 belirteci 2559’a çıkarıp kırk erişim adımı ekler, ince ayar belirteci sabit tutup kırk sekiz etiketli örnek ister.
Sonraki Adım
İki çözüm de bir varsayımı paylaşıyor: dağarcıktaki her şeyin düz metin olduğu. Kurgu belgelerin tamamı cümlelerden kuruluydu ve parçalama bir cümle dizisini bölmek demekti. Saha ekibinin gerçek yordam belgeleri böyle değildir; içlerinde satırları ve sütunları anlamı taşıyan tablolar vardır. Bir tablo cümle gibi bölündüğünde satır ile başlık birbirinden ayrılır ve parça tek başına hiçbir şey söylemez. Bir sonraki ders aynı sorgu kümesinde bunu ölçer: tablonun satır bazlı ve blok bazlı parçalanması aynı anmayı vermez.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.