Asosiy qismga o'tish

tez18: uchinchi kecha va buzilishning manzili

34-bob 7 kod bloki 4990 so'z

Maqsad

33-bob ochiq savol bilan tugagan edi: tez17 yangi so'rovlarda ancha yaxshi, lekin eski to'plamlarda jim xatosi 32 dan 47 ga chiqdi. tez18 shu yo'qotishni tuzatish uchun o'qitildi. Qisqa javob oldindan: tuzata olmadi. Oldindan yozilgan yetti qoidaning uchtasidan o'tmadi va mahsulotga qo'yilmaydi. O'n uch soatlik GPU kechasi shunga ketdi.

Bu bobda uch narsa bor. Birinchisi natijaning o'zi, yaxshi va yomon tomoni bilan. Ikkinchisi birinchi marta o'lchangan narsa: buzilish aynan qayerda yashayapti. Uchinchisi hali bilmaganimiz: har bir qayta o'qitish nega eski javoblarni buzadi. Buni bilmayman va bilgandek yozmayman.

Bobning birinchi ko'rinishi taqqoslash tugamasdan yozilgan edi: tez16 va tez17 ning javoblari oldingi yugurishlardan saqlangan edi. Endi ikkalasi ham tez18 bilan aynan bir xil tartibda qayta yugurildi va sonlar yakuniy. O'lchovlar build ichida emas: 5 600 ta saqlangan javob bitta engine bilan qayta baholangan va natijasi datasets/tez18/natija.json da, uni yasagan skript yonida turibdi.

Natijadan oldin yozilganlar

O'qitish fayli tez17 nikidan deyarli farq qilmaydi: 38 258 qatorning 38 246 tasi harfma-harf o'sha, 12 tasi qayta yozilgan va 850 tasi yangi. Yangi qatorlar ikkita yangi jadval juftida "eng katta N ta mijoz" kabi reytinglarni guruhli va guruhsiz ko'rinishda yonma-yon o'rgatadi. Jami 39 108 qator, 2 322 qadam, 2026-yil 11-noyabr 20:35 dan 12-noyabr 09:47 gacha.

Yetti qoida va 40 so'rovli yangi fresh7 to'plami birorta qator yasalishidan oldin muzlatildi. Ikki narsa ham oldindan ma'lum edi va yozib qo'yilgan edi:

  • Rejaning eng yaxshi holi ham birinchi qoidaga yetmasligi mumkin edi. tez17 ning saqlangan javoblarida sanadim: yangi qatorlar o'rgatadigan shakllarda 12 ta jim xato bor, hammasi tuzalsa ham 36 ta qoladi, chegara esa 32 (57-xato: buni qoidalarni taklif qilgandan keyin sanaganman). Egasi va tashqi tekshiruvchi chegarani o'zgartirmadi. Shuning uchun bu kecha boshidanoq "qabulga yetmasligi mumkin bo'lgan ta'mirlash tajribasi" deb atalgan.
  • Bitta model bir xil so'rovga ikki yugurishda har xil javob berishi mumkin ekan (55-xato): bir xil vazn va bir xil prompt bilan 135 rejadan 4 tasi farq qildi. Sababi topildi: prompt keshi va so'rovlarning tartibi. Shundan keyin tartib qat'iy: har bir to'plam fayli uchun yangi server, so'rovlar fayldagi tartibda. Sakkizta eng nozik so'rov esa qo'shimcha ravishda yolg'iz, kesh o'chirilgan holda, ikki martadan so'raladi.

Yana bir eslatma sonlar haqida. Eski to'plamlardagi uchta "so'rash kerak" yorlig'i eskirgan bo'lib chiqdi: ular hisoblangan ustun tool lari paydo bo'lishidan oldin yozilgan. Tashqi tekshiruvchining hukmi bilan ular tuzatildi va qoidalar tuzatilgan yorliqlar bilan o'lchanadi. Shuning uchun tez17 ning jim xatosi bu bobda 48 ko'rinadi, 33-bobda 47 edi. Eski yorliqlar bilan hisobot ham saqlanadi va hukmni o'zgartirmaydi.

Natija: yetti qoidadan to'rttasi

python18 qator
import json
from collections import Counter

natija = json.loads((DATA / "tez18" / "natija.json").read_text(encoding="utf-8"))
print(natija["holat"])
print()
for q in natija["qoidalar"]:
    hukm = "o'tdi" if q["otdi"] else "O'TMADI"
    izoh = "  (tayanch modellarga nisbatan)" if q["tayanchga_bogliq"] else ""
    print(f"{q['n']}-qoida, {q['nomi']}: {hukm}{izoh}")
    for nomi, qiymat, chegara in q["olchov"]:
        print(f"      {nomi}: {qiymat}  ({chegara})")
otdi = sum(q["otdi"] for q in natija["qoidalar"])
print(f"\njami: {otdi} tasidan o'tdi, {len(natija['qoidalar']) - otdi} tasidan o'tmadi")
print("skorerning o'z satri:", natija["hisobot_qoidalari"][-1])
print()
for model, t in natija["tayanch_takrori"].items():
    print(f"{model} qayta yugurildi: {t['sorovlar']} so'rov, javobi farq qilgani {t['javob_farqi']}, ishonchi farq qilgani {t['ishonch_farqi']}, saqlangan hukmi farq qilgani {t['saqlangan_hukm_farqi']}")
Chiqish
yakuniy: uchala model bir xil tartib va sozlamada yugurilgan, tayanch modellarning javoblari saqlangan arxiv bilan solishtirilgan

1-qoida, eski to'plamlar, 1 194 so'rov: O'TMADI
      to'g'ri javob: 1087  (kamida 1076)
      jim xato: 54  (ko'pi bilan 32)
      noaniq so'rov ushlandi (143 tadan): 124  (kamida 133)
2-qoida, fresh5, 176 so'rov: o'tdi
      to'g'ri javob: 163  (kamida 158)
      jim xato: 5  (ko'pi bilan 7)
      noaniq so'rov ushlandi (17 tadan): 17  (kamida 15)
3-qoida, eski shakllar: O'TMADI
      guruhli top_n (37 tadan): 29  (kamida 32)
      bitta eng katta yoki eng kichik qiymat (16 tadan): 13  (kamida 15)
4-qoida, sakkizta reyting so'rovi: O'TMADI
      kesh bilan (8 tadan): 3  (kamida 7)
      yolg'iz, kesh o'chiq, ikki takror (8 tadan): 3  (kamida 6)
5-qoida, bitta qator saqlandi: o'tdi
      fresh5 entity (16 tadan): 14  (kamida 14)
      eski bitta qator (7 tadan): 7  (kamida 7)
6-qoida, fresh5 toifalari: o'tdi  (tayanch modellarga nisbatan)
      eng yomon toifa, yaxshiroq tayanchga nisbatan: -1  (kamida -3)
7-qoida, fresh7, 40 so'rov: o'tdi  (tayanch modellarga nisbatan)
      to'g'ri javob: 37  (kamida 36)
      guruhli entity reytingi (18 tadan): 16  (kamida 15)
      jim xato: 2  (ko'pi bilan 4)

jami: 4 tasidan o'tdi, 3 tasidan o'tmadi
skorerning o'z satri: RULES PASSED 4 of 7, FAILED 3, NOT YET RUN 0

tez16 qayta yugurildi: 1370 so'rov, javobi farq qilgani 0, ishonchi farq qilgani 0, saqlangan hukmi farq qilgani 7
tez17 qayta yugurildi: 1370 so'rov, javobi farq qilgani 0, ishonchi farq qilgani 0, saqlangan hukmi farq qilgani 0

O'tmagan uchta qoida (1, 3 va 4) faqat tez18 ning o'z javoblariga bog'liq: chegaralari oldindan yozilgan sonlar. 6- va 7-qoidalar tayanch modellarga nisbatan o'lchanadi, shuning uchun tayanchlar qayta yugurildi.

Qayta yugurish hech narsani o'zgartirmadi: ikkala tayanch modelning har bir javobi va har bir ishonch soni arxivdagi bilan harfma-harf bir xil chiqdi. tez16 da yettita saqlangan hukm farq qiladi, javoblari esa o'sha: o'sha arxiv validator "guruhlash hech narsani o'zgartirmadi" holatini qadam-baqadam tekshirishni o'rganishidan oldin baholangan. Skorer har bir javobni baribir qaytadan baholaydi, shuning uchun bu hisobga ta'sir qilmaydi. Dastlabki va yakuniy hisobot bir-biridan faqat shu sanoq ustunida farq qiladi.

Yaxshi tomoni ham rost va kichik. Yangi so'rovlarda tez18 uchala modelning eng yaxshisi, lekin tez17 dan atigi bir-ikki javobga oldinda:

python11 qator
for toplam, modellar in natija["yangi_toplamlar"].items():
    for model, h in modellar.items():
        print(f"{toplam} {model}: to'g'ri {h['togri']}/{h['aniq'] + h['noaniq']}, xato reja {h['xato_reja']}, jim xato {h['jim_xato']}")
print()
print(f"{'eski shakl':22s} {'soni':>5s} {'tez16':>6s} {'tez17':>6s} {'tez18':>6s}")
for q in natija["shakllar"]:
    print(f"{q['shakl']:22s} {q['n']:5d} {q['tez16']:6d} {q['tez17']:6d} {q['tez18']:6d}")
print()
print("fresh7 toifalari (to'g'ri javob):")
for nomi, q in natija["fresh7_toifalar"].items():
    print(f"   {nomi:14s} {q['n']:3d} ta: tez16 {q['tez16']}, tez17 {q['tez17']}, tez18 {q['tez18']}")
Chiqish
fresh5 tez15: to'g'ri 116/176, xato reja 36, jim xato 16
fresh5 tez16: to'g'ri 125/176, xato reja 28, jim xato 16
fresh5 tez17: to'g'ri 161/176, xato reja 8, jim xato 4
fresh5 tez18: to'g'ri 163/176, xato reja 6, jim xato 5
fresh7 tez16: to'g'ri 28/40, xato reja 11, jim xato 9
fresh7 tez17: to'g'ri 36/40, xato reja 3, jim xato 3
fresh7 tez18: to'g'ri 37/40, xato reja 2, jim xato 2

eski shakl              soni  tez16  tez17  tez18
top_n grouped             37     32     25     29
one extreme value         16     15     12     13
top_n one row              7      1      7      7

fresh7 toifalari (to'g'ri javob):
   ask              2 ta: tez16 1, tez17 1, tez18 1
   extreme          6 ta: tez16 5, tez17 6, tez18 6
   rank_entity      8 ta: tez16 7, tez17 8, tez18 8
   rank_group      12 ta: tez16 10, tez17 10, tez18 10
   rank_record      6 ta: tez16 5, tez17 6, tez18 6
   top_group_one    6 ta: tez16 0, tez17 5, tez18 6

Ta'mirlash qisman ishladi: guruhli top_n 25 dan 29 ga ko'tarildi, lekin tez16 ning 32 tasiga yetmadi. Tashqi tekshiruvchi fresh7 dagi bir javoblik yutuqni ham tekshirdi: shaxslar reytingida (14 so'rov) tez17 va tez18 teng, 12 tadan. Bittasi tuzaldi, bittasi buzildi. Sof yutuq hududlar bo'yicha bitta so'rovdan keldi.

Sakkizta so'rov: qaror bitta tokenda

To'rtinchi qoida sakkizta reyting so'roviga qaraydi: "eng katta qoldig'i bor 10 ta qarzdor", "komissiya bo'yicha top 3 kassir" va ularning shovqinli nusxalari. To'g'ri javob guruhlashni talab qiladi, chunki jadvalda bir odamga ko'p qator to'g'ri keladi. Bu sakkiztasi kesh o'chirilgan holda ham so'ralgan va o'sha yozuvlarda har bir tokenning ehtimoli saqlangan:

python10 qator
print(f"{'so`rov':26s} {'model':6s} {'hukm':7s} {'o`rtacha':>9s} {'eng past':>9s}  eng past token")
for q in natija["sakkiz"]:
    for model in ("tez17", "tez18"):
        bir, ikki = q[model]
        assert (bir["javob"], bir["ortacha"]) == (ikki["javob"], ikki["ortacha"])
        hukm = "to'g'ri" if bir["togri"] else "xato"
        print(f"{q['suite'] + ' #' + str(q['id']):26s} {model:6s} {hukm:7s} {bir['ortacha']:9.3f} {bir['eng_past_ehtimol']:9.3f}  {bir['eng_past_token']!r}")
tez18 = [q["tez18"][0] for q in natija["sakkiz"]]
print(f"\ntez18: to'g'ri {sum(t['togri'] for t in tez18)}/8; kesh bilan ham {sum(q['kesh_bilan_togri'] for q in natija['sakkiz'])}/8; tez16 da {sum(q['tez16_togri'] for q in natija['sakkiz'])}/8")
print(f"eng past token 0.9 dan past bo'lgan javoblar: {sum(t['eng_past_ehtimol'] < 0.9 for t in tez18)}/8, shundan to'g'ri javoblar: {sum(t['eng_past_ehtimol'] < 0.9 and t['togri'] for t in tez18)}")
Chiqish
so`rov                     model  hukm     o`rtacha  eng past  eng past token
loans #3                   tez17  xato        0.994     0.844  '}}'
loans #3                   tez18  xato        0.982     0.575  '}}'
loans #39                  tez17  xato        0.991     0.757  '}}'
loans #39                  tez18  xato        0.992     0.796  '}}'
noisy_loans #3             tez17  xato        0.995     0.866  '}}'
noisy_loans #3             tez18  xato        0.986     0.652  '}}'
noisy_loans #39            tez17  xato        0.993     0.802  '}}'
noisy_loans #39            tez18  xato        0.995     0.851  '}}'
realistic_loans #4         tez17  xato        0.988     0.699  '}}'
realistic_loans #4         tez18  to'g'ri     0.984     0.609  ',"'
noisy_realistic_loans #4   tez17  xato        0.979     0.530  '}}'
noisy_realistic_loans #4   tez18  xato        0.984     0.611  '}}'
realistic_cash #3          tez17  xato        0.990     0.785  '}}'
realistic_cash #3          tez18  to'g'ri     0.994     0.807  ',"'
noisy_realistic_cash #3    tez17  xato        0.979     0.598  '}}'
noisy_realistic_cash #3    tez18  to'g'ri     0.996     0.879  ',"'

tez18: to'g'ri 3/8; kesh bilan ham 3/8; tez16 da 7/8
eng past token 0.9 dan past bo'lgan javoblar: 8/8, shundan to'g'ri javoblar: 3

Ikki takror bir xil chiqdi (blok buni o'zi tekshiradi), demak bu tasodifiy tebranish emas. Kassir so'rovlari tuzaldi, qarzdor so'rovlarining ko'pi tuzalmadi.

Jadvalning eng muhim ustuni oxirgisi. Har bir javobda rejani bitta token hal qiladi: }} (to'xta, guruhsiz) yoki ," (davom et, guruh qo'sh). Model tanlagan o'sha tokenning ehtimoli boshqa tokenlarnikidan ancha past, gate esa hamma tokenning o'rtachasini o'qiydi va o'ttiztacha ishonchli token orasida bitta ishonchsizi o'rtachani 0.94 chegarasidan pastga tushira olmaydi. Shuning uchun beshta xato javob ham 0.98 dan yuqori ishonch bilan foydalanuvchiga yetib boradi.

Bu yerda uch marta ehtiyot bo'lish kerak, uchalasini ham tashqi tekshiruvchi aytdi:

  • Bu topilma gate nega ko'rmasligini tushuntiradi. Qayta o'qitish nega xato tug'dirishini tushuntirmaydi.
  • Tanlangan tokenning 0.58 ehtimoli "boshqa reja 0.42" degani emas: qolgan ehtimol ko'p tokenga bo'linadi.
  • Eng past tokenga chegara qo'yish tayyor davo emas. 0.9 chegara sakkiztasining hammasini ushlaydi, uchta to'g'ri javobni ham. To'g'ri va xato javobni ajrata oladimi, buni faqat to'liq o'lchov ko'rsatadi.

To'liq token o'lchovi

Sakkizta so'rov juda kam. Shuning uchun tez18 hamma 1 410 so'rovda yana bir marta yugurildi, bu safar har bir tokenning ehtimoli saqlandi. O'qiladigan to'rtta son va ikkita rad etish sharti birorta natija ochilishidan oldin umumiy faylga yozib qo'yilgan edi: agar tez17 nikidan farq qiladigan rejalarda eng past tokenning medianasi 0.9 yoki undan yuqori chiqsa, yoki 54 ta jim xatoning yarmidan kami 0.9 dan past bo'lsa, bu yo'l noto'g'ri deb tashlanadi.

python16 qator
t = natija["tokenlar"]
r = t["takror"]
print(f"takror: {r['sorovlar']} so'rovdan {r['javob_va_ishonch_bir_xil']} tasida javob ham, ishonch ham birinchi yugurishdagi bilan bir xil")
print()
print(f"{'eski to`plamlar, tez18 rejalari':40s} {'soni':>5s} {'eng past token':>15s} {'0.9 dan past':>13s} {'o`rtacha':>9s}")
for k in t["kohortalar"]:
    print(f"{k['nom']:40s} {k['n']:5d} {k['eng_past_token_medianasi']:15.3f} {k['kesimdan_past']:13d} {k['ortacha_ishonch_medianasi']:9.4f}")
y, u = t["yetkazilgan"], t["kesimda_ushlanadi"]
print()
print(f"hozirgi himoya foydalanuvchiga yetkazadi: to'g'ri reja {y['togri_reja']}, jim xato {y['jim_xato']}, noaniq so'rovdagi taxmin {y['noaniqdagi_taxmin']}")
print(f"eng past token {t['kesim']} dan past bo'lganlari: to'g'ri reja {u['togri_reja']}, jim xato {u['jim_xato']}, taxmin {u['noaniqdagi_taxmin']}")
print()
print(f"jim xatoni to'g'ri rejadan ajratish (1.0 mukammal, 0.5 hech qanday): eng past token {t['ajratish']['eng_past_token']:.3f}, o'rtacha {t['ajratish']['ortacha']:.3f}")
print(f"{'qo`shimcha ushlanadigan to`g`ri reja':38s} {'eng past token':>15s} {'o`rtacha':>9s}   (ushlanadigan jim xato)")
for q in t["teng_narx"]:
    print(f"{q['togri_reja_ushlanadi']:38d} {q['eng_past_token_ushlaydi']:15d} {q['ortacha_ushlaydi']:9d}")
Chiqish
takror: 1410 so'rovdan 1410 tasida javob ham, ishonch ham birinchi yugurishdagi bilan bir xil

eski to`plamlar, tez18 rejalari           soni  eng past token  0.9 dan past  o`rtacha
to'g'ri reja                               967           0.989           164    0.9994
xato reja                                   68           0.690            53    0.9855
xato reja, o'tib ketgan (jim xato)          54           0.703            40    0.9868
xato reja, ushlangan                        14           0.590            13    0.9695
noaniq so'rovga yozilgan reja               24           0.606            19    0.9685
matni tez17 niki bilan bir xil reja        968           0.989           158    0.9994
matni tez17 nikidan boshqa reja             82           0.676            70    0.9839

hozirgi himoya foydalanuvchiga yetkazadi: to'g'ri reja 963, jim xato 54, noaniq so'rovdagi taxmin 19
eng past token 0.9 dan past bo'lganlari: to'g'ri reja 161, jim xato 40, taxmin 14

jim xatoni to'g'ri rejadan ajratish (1.0 mukammal, 0.5 hech qanday): eng past token 0.891, o'rtacha 0.893
qo`shimcha ushlanadigan to`g`ri reja    eng past token  o`rtacha   (ushlanadigan jim xato)
                                    50              27        25
                                   100              35        35
                                   164              40        38
                                   200              44        41

Rad etish shartlarining ikkalasi ham bajarilmadi, ya'ni iz to'g'ri: xato rejalarda va tez17 nikidan o'zgargan rejalarda eng past token ancha pastda turadi. Qat'iy tartib ham o'zini oqladi: 1 410 javobning hammasi qaytarildi.

Lekin jadvalning ikkinchi yarmi men kutgan narsani ko'rsatmadi. Eng past token o'rtachadan yaxshiroq o'lchov emas: ikkalasi xatoni to'g'ridan deyarli bir xil ajratadi, va ikkalasida ham qattiqroq chegaraning narxi bor. 54 ta jim xatoning 35 tasini to'xtatish uchun, qaysi son o'qilmasin, 963 ta to'g'ri javobning 100 tasini ham ushlab qolish, ya'ni foydalanuvchiga javob o'rniga aniqlashtiruvchi savol berish kerak bo'ladi.

Bu yerdan nima kelib chiqadi va nima kelib chiqmaydi:

  • O'lchangani: bu to'plamlarda 0.94 chegarasi xato rejalarning ko'pini o'tkazib yuboradi, qattiqroq chegara esa to'g'ri javoblar bilan to'lanadi. "Gate ko'r" degan birinchi gapim noto'g'ri edi: o'rtacha ham xatoni ko'radi.
  • Kelib chiqmaydigani: yangi chegara. Bu sonlarning hammasi allaqachon ko'rilgan so'rovlardan, 54 ning ichida shovqinli nusxalar bor. Chegarani tanlash uchun yangi so'rovlar va egasining qarori kerak: bitta xatoni to'xtatish uchun nechta to'g'ri javobdan voz kechishga rozimiz.
  • Ushlab qolish tuzatish emas. Beshta xato qarzdor reytingi savolga aylanadi, to'g'ri javobga emas, va tez18 to'rtinchi qoidadan baribir o'tmaydi.
  • Bularning hech biri qayta o'qitish nega eski javoblarni buzishini tushuntirmaydi.

Buzilishning manzili

"Har safar nimadir buziladi" degan gapni birinchi marta sonlarga ajratdim. To'rtta modelning eski to'plamlardagi javoblari, aniq so'rovlar:

python15 qator
modellar = ("tez15", "tez16", "tez17", "tez18")
satrlar = (("to'g'ri reja", "togri_reja"), ("xato reja", "xato_reja"), ("model o'zi so'radi", "model_soradi"),
           ("xato rejani gate ushladi", "gate_ushladi"), ("xato rejani validator ushladi", "validator_ushladi"),
           ("xato reja o'tib ketdi (jim xato)", "jim_xato"), ("to'g'ri reja ushlandi", "togri_reja_ushlandi"),
           ("xato reja, ishonchi 0.94 dan yuqori", "xato_reja_094_dan_yuqori"),
           ("noaniq so'rovda model o'zi so'radi", "noaniqda_model_soradi"))
print(f"{'':38s}" + "".join(f"{m:>7s}" for m in modellar))
for nomi, kalit in satrlar:
    print(f"{nomi:38s}" + "".join(f"{natija['himoya'][m][kalit]:7d}" for m in modellar))
print()
for q in natija["harakat"]:
    print(f"{q['juft']}: 1 194 javobdan {q['matn_ozgardi']} tasining matni o'zgardi: {q['savol_matni_ozgardi']} tasida faqat savol so'zlari, {q['reja_ozgardi']} tasida reja, {q['savol_va_reja_almashdi']} tasida savol va reja almashdi; mahsulot hukmi {q['mahsulot_hukmi_ozgardi']} tasida o'zgardi")
a = natija["jim_xato_aylanishi"]
print(f"\ntez16, tez17, tez18: kamida bittasida jim xato bo'lgan so'rovlar {a['kamida_bittasida']}, uchalasida ham {a['uchalasida']}")
print(f"tez18 ning {a['tez18_niki']} ta jim xatosidan {a['tez18_nikidan_tez16_togri_edi']} tasiga tez16 to'g'ri javob bergan edi")
Chiqish
                                        tez15  tez16  tez17  tez18
to'g'ri reja                              903    960    976    967
xato reja                                 125     65     63     68
model o'zi so'radi                         23     26     12     16
xato rejani gate ushladi                   20     13      9      3
xato rejani validator ushladi              43     20      6     11
xato reja o'tib ketdi (jim xato)           62     32     48     54
to'g'ri reja ushlandi                      23     19      4      4
xato reja, ishonchi 0.94 dan yuqori       105     52     54     65
noaniq so'rovda model o'zi so'radi        127    129    124    119

tez15 -> tez16: 1 194 javobdan 283 tasining matni o'zgardi: 130 tasida faqat savol so'zlari, 132 tasida reja, 21 tasida savol va reja almashdi; mahsulot hukmi 109 tasida o'zgardi
tez16 -> tez17: 1 194 javobdan 258 tasining matni o'zgardi: 127 tasida faqat savol so'zlari, 110 tasida reja, 21 tasida savol va reja almashdi; mahsulot hukmi 93 tasida o'zgardi
tez17 -> tez18: 1 194 javobdan 221 tasining matni o'zgardi: 122 tasida faqat savol so'zlari, 82 tasida reja, 17 tasida savol va reja almashdi; mahsulot hukmi 58 tasida o'zgardi

tez16, tez17, tez18: kamida bittasida jim xato bo'lgan so'rovlar 82, uchalasida ham 12
tez18 ning 54 ta jim xatosidan 29 tasiga tez16 to'g'ri javob bergan edi

Bu jadvaldan to'rtta narsa ko'rinadi.

  1. Model ko'proq xato reja yozayotgani yo'q. tez16, tez17 va tez18 da xato rejalar soni deyarli bir xil. Uch kecha bu sonni kamaytirmadi ham, ko'paytirmadi ham.
  2. Lekin har safar boshqa rejalar xato. Fayl 98 foiz o'sha bo'lsa ham, tez17 dan tez18 ga o'tganda 1 194 javobdan 58 tasining hukmi o'zgardi, bu 4.9 foiz. Matni o'zgargan javoblar ko'proq (221), lekin ularning 122 tasida model baribir savol beradi, faqat boshqa so'zlar bilan; buni birinchi yozganimda "javoblarning beshdan biri qayta yoziladi" deb oshirib aytgan edim va tekshiruvchi tuzatdi. tez18 ning jim xatolarining yarmidan ko'pi tez16 to'g'ri javob bergan so'rovlar. Bu eski rejalar gate dan o'tib ketgani emas, rejalarning o'zi o'zgargan.
  3. Yangi xatolar himoya ko'rmaydigan turdan. tez16 da gate va validator xato rejalarning yarmini ushlagan, tez18 da beshdan birini. Himoyaning kodi va sozlamasi o'zgarmagan: u boshqa xatolarga va boshqa ishonch sonlariga duch kelyapti. tez16 dagi ushlashlarning bir qismi 33-bobdagi rename xatosi yaratgan tasodifiy past ishonch edi, ya'ni u ham haqiqiy himoya emas edi.
  4. Model noaniq so'rovda kamroq so'rayapti. tez15 dan beri birorta ham savol qatori qo'shilmagan: to'rtta faylning har birida 2 750 ta. Bu ikki son yonma-yon turibdi, lekin biri ikkinchisining sababi ekani isbotlanmagan.

Endi manzil. O'sha javoblar to'plam qismlari bo'yicha, har bir katakda "xato reja / jim xato":

python13 qator
uchlik = ("tez16", "tez17", "tez18")
print(f"{'qism':42s} {'soni':>5s} " + "".join(f"{m:>9s}" for m in uchlik))
for q in sorted(natija["qismlar"], key=lambda q: -q["tez18"]["jim_xato"]):
    print(f"{q['qism']:42s} {q['n']:5d} " + "".join(f"{str(q[m]['xato_reja']) + ' / ' + str(q[m]['jim_xato']):>9s}" for m in uchlik))
bank = [q for q in natija["qismlar"] if q["qism"].startswith("eski bank")]
print()
print("eski bank to'plamlari va shovqinli nusxalari, jim xato: " + ", ".join(f"{m} {sum(q[m]['jim_xato'] for q in bank)}" for m in uchlik))
print("qolgan hamma qism, jim xato: " + ", ".join(f"{m} {natija['himoya'][m]['jim_xato'] - sum(q[m]['jim_xato'] for q in bank)}" for m in uchlik))
print()
print("tez18 ning toza bank to'plamlaridagi xato rejalari (iz: tez15, tez16, tez17, tez18; T to'g'ri, X xato reja, S so'radi):")
for q in natija["bank_xatolari"]:
    print(f"  {q['suite']} #{q['id']} [{q['iz']}, shovqinli nusxa {q['shovqinli_iz']}] ishonch {q['ishonch']:.3f}: {q['matn'][:60]}")
    print(f"      {q['javob'][:150]}")
Chiqish
qism                                        soni     tez16    tez17    tez18
eski bank to'plamlari, shovqinli nusxa       320     5 / 4  10 / 10  14 / 14
eski bank to'plamlari                        320     3 / 2    7 / 7  11 / 11
mixed_retail                                  53     3 / 3    6 / 6    7 / 7
fresh2                                        92     9 / 6    6 / 5    8 / 6
fresh4                                       128    17 / 5   14 / 9   12 / 6
agent to'plamlari                             84     9 / 6    9 / 7    7 / 5
haqiqiy jadvallar, birinchi savollar         105    13 / 4    8 / 4    7 / 4
fresh3                                        92     6 / 2    3 / 0    2 / 1

eski bank to'plamlari va shovqinli nusxalari, jim xato: tez16 6, tez17 17, tez18 25
qolgan hamma qism, jim xato: tez16 26, tez17 31, tez18 29

tez18 ning toza bank to'plamlaridagi xato rejalari (iz: tez15, tez16, tez17, tez18; T to'g'ri, X xato reja, S so'radi):
  deposits #20 [TTTX, shovqinli nusxa TTTX] ishonch 0.977: Менежерлар бўйича жами сумма, катталигидан бошлаб сарала
      {"steps":[{"tool":"sort","args":{"by":"Начисленные проценты","descending":true}}]}
  deposits #38 [XXXX, shovqinli nusxa XXXX] ishonch 0.999: Which 3 branches have the most deposits?
      {"steps":[{"tool":"top_n","args":{"by":"Amount (UZS)","n":3,"descending":true,"group":{"columns":["Филиал"],"agg":"sum"}}}]}
  deposits #48 [TXTX, shovqinli nusxa TXTX] ishonch 0.990: Yopilganlarni удали va mobil ilova orqali ochilganlarni ham
      {"steps":[{"tool":"remove_rows","args":{"column":"Статус","op":"=","value":"Yopilgan"}},{"tool":"filter","args":{"column":"Канал","op":"=","value":"Mo
  deposits #50 [XTXX, shovqinli nusxa XTXX] ishonch 0.952: Ulushini ko'rsat by kanal
      {"steps":[{"tool":"group_and_total","args":{"group_by":["Канал"],"value_column":"Начисленные проценты","agg":"sum"}}]}
  deposits #59 [TTTX, shovqinli nusxa TTTX] ishonch 0.998: o'sish bo'yicha sarala
      {"on":"result","steps":[{"tool":"sort","args":{"by":"change","descending":false}}]}
  loans #3 [XTXX, shovqinli nusxa XXXX] ishonch 0.981: Eng katta qoldig'i bor 10 ta qarzdor
      {"steps":[{"tool":"top_n","args":{"by":"qoldiq_uzs","n":10,"descending":true}}]}
  loans #29 [TTXX, shovqinli nusxa TTXX] ishonch 0.997: Clean up the issue date, the formats are mixed
      {"steps":[{"tool":"fix_dates","args":{"column":"kechikish_kuni"}}]}
  loans #39 [XTXX, shovqinli nusxa XTXX] ishonch 0.993: Top 10 qarzdor by qoldiq
      {"steps":[{"tool":"top_n","args":{"by":"qoldiq_uzs","n":10,"descending":true}}]}
  realistic_deposits #23 [TTTX, shovqinli nusxa TTTT] ishonch 0.988: сколько вкладов по филиалам, диаграмма
      {"steps":[{"tool":"group_and_total","args":{"group_by":["Филиал"],"value_column":"Номер вклада","agg":"count"}},{"tool":"make_chart","args":{"chart":"
  realistic_loans #23 [TTTX, shovqinli nusxa TTTX] ishonch 0.987: viloyat bo'yicha kreditlar soni diagramma
      {"steps":[{"tool":"make_chart","args":{"chart":"pie","x":"viloyat","y":"kredit_raqami","agg":"count"}}]}
  realistic_loans #35 [TTTX, shovqinli nusxa TTTT] ishonch 0.997: boshidan, hamma kreditlar viloyat bo'yicha soni
      {"on":"result","steps":[{"tool":"group_and_total","args":{"group_by":["viloyat"],"value_column":"kredit_raqami","agg":"count"}}]}

Buzilish bir joyda to'plangan: eng eski, sun'iy bank jadvallari (kreditlar, omonatlar, kassa, tranzaksiyalar) va ularning shovqinli nusxalari. tez16 dan beri qo'shilgan jim xatolarning deyarli hammasi shu yerda, va bu yerdagi har bir xato reja himoyadan o'tib ketadi. Qolgan hamma qismda jim xato jami uchtaga o'zgardi.

Ro'yxatga qarasangiz, bu o'n ikkiga yaqin alohida so'rov: har biri shovqinli nusxasi bilan ikki marta sanaladi. Ular bir turdan emas: guruhini yo'qotgan reyting, teskari tartib, boshqa ustun, "boshidan" so'zini e'tiborsiz qoldirish, ustunli o'rniga doiraviy diagramma. Oxirgisi haqida tekshiruvchi haqli ravishda eslatdi: so'rovda faqat "diagramma" deyilgan, bu mahsulot odatining buzilishi, ma'noning ochiq xatosi emas.

Hali bilmaganimiz

Nega qayta o'qitish eski javoblarni buzadi? Ikki tushuntirish bor va hozirgacha qilingan hech bir o'lchov ularni ajratmaydi.

  1. Bu retseptning har qanday qayta o'qitishi shuncha javobni qo'zg'atadi. Har bir model oldindan o'qitilgan bazaviy Qwen dan, yangi LoRA adapter bilan boshlanadi; retsept bir xil, fayl uzunligi va qadamlar soni boshqa. Bitta eski nazorat bor: tez8 ning fayli boshqa seed bilan (31-bobdagi churn8) 745 javobdan 15 tasini buzib, 8 tasini tuzatgan. O'lcham o'xshash, lekin bu bitta juftlik va eski fayl.
  2. tez17 va tez18 ga qo'shilgan qatorlar (hammasi "bajar" qatorlari, boshqa shakldagi jadvallarda) modelni eski log jadvallardan uzoqlashtiradi.

Ikkalasini toza ajratadigan bitta tajriba bor: aynan shu faylni boshqa seed bilan yana bir marta o'qitish. Agar u ham o'ntacha so'rovni buzsa-yu, boshqalarini buzsa, birinchi tushuntirish to'g'ri. Agar aynan shu o'n ikkitasi qaytarilsa, ikkinchisi. Bu yana bir GPU kechasi va hozircha boshlanmagan: uni boshlash egasining qarori.

O'lchangani shu: himoya qatlami bu xatolarning ko'pini ushlamaydi. Xato rejalar soni uch kechadan beri deyarli o'sha, o'zgargani ularning qaysi biri foydalanuvchiga yetib borishi. Model hajmi, LoRA yoki to'liq fine-tuning, adapterning kichikligi kabi tushuntirishlar esa na tasdiqlangan, na rad etilgan: ularning hech biri nazoratli taqqoslashda sinalmagan.

Xatolar jurnalidagi yangi qatorlar

python5 qator
jurnal = (TEZ.parents[1] / "12-mistakes-and-lessons.md").read_text(encoding="utf-8").splitlines()
for satr in jurnal:
    qism = [q.strip() for q in satr.split("|")]
    if len(qism) > 4 and qism[1].isdigit() and 55 <= int(qism[1]) <= 63:
        print(f"{qism[1]}. {qism[2]}: {qism[3][:150]}...")
Chiqish
55. 2026-11-11: Treated a benchmark run as repeatable because decoding is greedy (temperature 0) and never ran one condition twice. Rules with a margin of zero or one...
56. 2026-11-11: Reported the prompt diagnostic to the owner with two conclusions it does not support: that the confusion sits in the trained weights so the fix has to...
57. 2026-11-11: Proposed the seven adoption rules for tez18 (15 section 26, second version) without counting, on the saved tez17 answers, how far the planned change c...
58. 2026-11-11: Told the owner and wrote into 15 that the "Indian rupee" answer stays wrong after a value lookup "because the plan is wrong elsewhere". I had only see...
59. 2026-11-11: Audited the 850 new rows of train18 for column names that exist in the prompt, and reported the file ready, without checking that the rendered prompt ...
60. 2026-11-12: Told the owner the test of three models after the tez18 night would take "about 2 hours of CPU". The measured time of the last run of the same job (te...
61. 2026-11-12: Wrote clock times into the shared record (file 17) from my own guess of how long I had worked: 10:35 and 10:50 when the clock said 10:20 and 10:25, la...
62. 2026-11-12: Gave the owner a ten-point "what is to blame" list, and wrote into the public chapter, with four items worded past the measurement: "about 20% of answ...
63. 2026-11-12: Two hours after logging mistake 62 I did it again. After the token readings showed that the lowest token and the mean separate wrong from right equall...

Xulosa

  • tez18 mahsulotga qo'yilmaydi: yetti qoidadan uchtasi o'tmadi. Qoidalar natijadan oldin yozilgan edi va natija yoqmagani uchun o'zgarmaydi.
  • Ta'mirlash qisman ishladi (guruhli top_n 25 dan 29 ga, kassir reytingi tuzaldi) va yetarli bo'lmadi (chegara 32, sakkizta reyting so'rovidan uchtasi to'g'ri).
  • Uch kechadan beri xato rejalar soni o'zgarmayapti. O'zgarayotgani ularning joyi va himoya ularni ushlay olishi. Jim xato 32 dan 54 ga chiqqani shundan.
  • Buzilishning manzili bor: eski bank jadvallaridagi o'n ikkiga yaqin so'rov. Sababi hali yo'q. Uni ajratadigan tajriba ma'lum va u arzon emas.
  • Gate ning 0.94 chegarasi bu to'plamlarda xato rejalarning ko'pini o'tkazib yuboradi. Eng past token o'rtachadan yaxshiroq o'lchov bo'lib chiqmadi, qattiqroq chegara esa to'g'ri javoblar bilan to'lanadi: 35 ta jim xato uchun 100 ta to'g'ri javob. Yangi chegara tanlanmagan.
  • Tayanch modellar qayta yugurildi va har bir javobi qaytarildi. Shu tartib va shu sozlamada o'lchov takrorlandi.
  • Bir kunda tashqi tekshiruvchi mening beshta gapimni tuzatdi. Har safar gap bir xil edi: o'lchangan narsadan bir qadam nariga o'tib ketgan xulosa. Oxirgisi shu xatoni jurnalga yozganimdan ikki soat keyin bo'ldi (63-xato).

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar