Asosiy qismga o'tish

Haqiqiy modelni o'qitish: kitoblarda yozilmagan qism

32-bob 2 kod bloki 1622 so'z

Nega bu bob kerak

Fine-tuning haqidagi kitob va qo'llanmalar retseptni yaxshi o'rgatadi: learning rate, LoRA rank, epoch soni, loss egri chizig'i. Ularning deyarli hammasi boshqa birov tayyorlab qo'ygan toza dataset bilan ishlaydi va model o'qib bo'lgach to'xtaydi. Tez ning retsepti uchta kitob bilan solishtirildi (Raschka, LLM Engineer's Handbook, Godoy; 16-faylning 8–12-bo'limlari) va har safar joyida chiqdi. Shunga qaramay o'qitishlarning ko'pi qabul qilinmadi.

Sabab har safar boshqa joyda edi: ma'lumotni o'zimiz yasashimiz va uning odamlar aslida qanday so'rashiga mos ekanini isbotlashimiz kerak edi. Bu qism kitoblarda deyarli yozilmaydi — u kompaniyalar ichida, xatolar orqali o'rganiladi. Bu bob o'sha xatolardan chiqqan amaliy qoidalar. Har bir qoidada: kitoblar nima deydi, Tez da nima bo'ldi (qaysi bobda o'lchangan) va nima qilish kerak.

Xatolar jurnalining boshida har bir harakatdan oldin o'qiladigan ro'yxat bor. U shu kitob qurilayotganda jurnalning o'zidan o'qiladi:

python8 qator
jurnal = (TEZ.parents[1] / "12-mistakes-and-lessons.md").read_text(encoding="utf-8").splitlines()
boshi = jurnal.index(next(s for s in jurnal if s.startswith("## Before every action")))
oxiri = jurnal.index(next(s for s in jurnal if s.startswith("## Mistakes")))
qoidalar = [s for s in jurnal[boshi + 1:oxiri] if s[:1].isdigit()]
xatolar = [s for s in jurnal if s.startswith("| ") and s.split("|")[1].strip().isdigit()]
print(f"jurnalda {len(xatolar)} ta xato, har biri o'lchangan narxi va undan keyingi qoidasi bilan")
for qoida in qoidalar:
    print(qoida[:160])
Chiqish
jurnalda 38 ta xato, har biri o'lchangan narxi va undan keyingi qoidasi bilan
1. Read this file.
2. Say in one line what will change and why. Wait for approval before code.
3. Changing tools.json, the schema or the grammar: generate the real llama.cpp grammar and check key order against the training data order. Rerun the current mo
4. Comparing models: same engine, same grammar, same questions, same machine. If the grammar changed, rerun both models; rescoring old answers is not enough.
5. New table, tool or setting: run the whole pipeline on one plan (plans, phrase, check, second check, export) before a long batch.
6. Long command chains: check every path exists with `ls` first.
7. Time estimates: take them from the measured time of the last run of the same job, never from a guess.
8. New training data: measure its length mix and tool mix against the test suites before generating, not after.
9. Never call a model better until the pass rules are measured.
10. Building a train file by hand: soup takes the last `val_split` share of the file as validation (`soup_cli/data/loader.py`, `_split_val`), so never append ne
11. Before designing data, a checker, a gate or a retrain: read 16-research-notes.md and compare the issue with the findings there first.

1. Retsept kamdan-kam aybdor, ma'lumot ko'pincha aybdor

Kitoblar: giperparametrlarni tanlashga ko'p sahifa ajratadi. Tez da: tez8, tez12-agent va tez13-agent bir xil soup.yaml bilan o'qitildi; farq faqat ma'lumotda edi, natijalar esa keskin farq qildi (31-bob). Nima qilish kerak: natija yomon bo'lsa, birinchi bo'lib retseptni emas, ma'lumotni savolma-savol tekshiring — qaysi savol buzildi va o'qitish faylida shunga o'xshash qator bormi, bormi bo'lsa nimani o'rgatadi.

2. Har bir xulq uchun yuzlab misol kerak

Kitoblar: "ma'lumot ko'p bo'lsin" deydi. Tez da: umumiy hajm muammo bo'lmadi — 30 ming qator 4B model uchun yetarli. Muammo alohida xulqlarda edi: bir necha yuz qatorli xulq o'rganildi, 30 tadan kam qatorlisi o'rganilmadi (31-bob). Nima qilish kerak: "qancha ma'lumot" emas, "har bir xulq uchun qancha qator" deb so'rang va sanang. Gate har bir asbob, har bir qiymat va har bir reja shakli uchun qator sonini o'qitishdan oldin tekshiradi (16-bob).

3. Qo'shgan narsangiz qo'shmagan narsangizni bosib ketadi

Kitoblar: buni "catastrophic forgetting" deb ataydi va asosan model og'irliklari haqida gapiradi. Tez da: unutish og'irliklarda emas, ma'lumot ulushida bo'ldi. Har bir yangi qator "bajar" deb o'rgatadi; aniqlashtirib so'rash qatorlari qo'shilmagani uchun ularning ulushi har o'qitishda kamaydi:

python6 qator
import json

qatorlar = [json.loads(q) for q in (DATA / "agent" / "oqitish_qatorlari.jsonl").read_text(encoding="utf-8").splitlines()]
for fayl in ("tez8", "tez12-agent", "tez13-agent"):
    q = [r for r in qatorlar if r["fayl"] == fayl]
    print(f"{fayl:13s} {len(q):6d} qator, so'rash qatorlari {sum(r['savol'] for r in q):4d} ({sum(r['savol'] for r in q) / len(q):.1%})")
Chiqish
tez8           19886 qator, so'rash qatorlari  980 (4.9%)
tez12-agent    27127 qator, so'rash qatorlari  980 (3.6%)
tez13-agent    32377 qator, so'rash qatorlari  980 (3.0%)

So'rash qatorlari soni o'zgarmadi, lekin fayl kattalashgani sari ularning ulushi tushdi va tez13-agent ko'rilmagan noaniq savollarda umuman so'ramay qo'ydi (31-bob). Nima qilish kerak: faqat yangi xulqni emas, eski xulqlarning ham ulushini har o'qitishdan oldin o'lchang. Yangi asbob qo'shsangiz, o'sha asbob uchun "bajarib bo'lmaydi" va "aniqlashtir" qatorlarini ham o'sha partiyada qo'shing.

4. Ma'lumotni yozgan model uni tekshirmasin

Kitoblar: sintetik ma'lumotni "teacher model" yozadi, boshqa model tekshiradi deydi. Tez da: teacher ham, checker ham bir oiladan bo'lgani uchun ikkalasi bir xil taxmin qildi — foydalanuvchi aytmagan saqlash joyini ikkalasi ham "Downloads" deb to'ldirdi va yuzlab noto'g'ri qator tekshiruvdan o'tdi (31-bob). Nima qilish kerak: qoida bilan tekshirsa bo'ladigan narsani qoida bilan tekshiring (so'rovda aytilmagan argument rejada bo'lmasin), model esa faqat qolganini tekshirsin. Model checker solishtira olmaydigan argumentlarni (fayl nomi kabi) alohida ro'yxatga oling.

5. Ma'lumotni haqiqiy so'rovlar bilan o'qitishdan oldin solishtiring

Kitoblar: test to'plami alohida bo'lsin deydi. Tez da: test to'plami alohida edi, lekin o'qitish ma'lumoti undan butunlay boshqacha yozilgan edi — odamlar joyni o'z tilida aytadi ("ish stoliga"), Excel uchun shunchaki "saqla" deydi; teacher esa "Desktop" va "Excel" deb yozardi (31-bob). Nima qilish kerak: test savollarini o'qitish uchun ishlatmang, lekin ularning shaklini o'lchang — so'z soni, til, qanday atash — va o'qitish ma'lumotini xuddi shu o'lchovlar bilan solishtiring. Farq yarmidan katta bo'lsa, o'qitmang.

6. Shovqinni o'lchang: bir xil ma'lumot, boshqa seed

Kitoblar: bitta modelni bitta raqam bilan baholaydi. Tez da: tez8 ni xuddi shu ma'lumot bilan, faqat boshqa seed bilan qayta o'qitish (churn8) 745 savoldan 15 tasini buzdi va 8 tasini tuzatdi (31-bob). Demak "yangi model 10 ta savolni buzdi" degan gap o'z-o'zidan hech narsa anglatmaydi. Nima qilish kerak: har bir yangi retsept uchun bir marta seed egizagini o'qiting va qaror chegarasini shu shovqindan yuqori qo'ying (24-bob).

7. Qarorni o'qitishdan oldin yozing

Kitoblar: "eng yaxshi checkpoint ni tanlang" deydi. Tez da: har bir model uchun qabul qilish qoidasi o'qitishdan oldin yozildi (14-bob, 15-faylning 6-bo'limi); natija kelgach qoida o'zgartirilmadi. tez13-agent eski savollarda deyarli tez8 ga yetdi va grafiklarda o'sdi, lekin ko'rilmagan savollarda tushgani uchun qabul qilinmadi. Nima qilish kerak: chegaralarni raqam bilan oldindan yozing. Natijani ko'rgandan keyin chegarani surish — o'zingizni aldash.

8. Ko'rilmagan, odam yozgan savollar — yagona haqiqat

Kitoblar: validation loss va test aniqligini ko'rsatadi. Tez da: tez13-agent ning validation loss i tez12-agent nikidan past edi, sintetik validation qatorlarida u 96% to'g'ri edi — lekin odam yozgan 92 ta ko'rilmagan savolda tez8 dan past chiqdi (31-bob). Sintetik qatorlar o'qitish qatorlari bilan bir xil teacher dan chiqqani uchun ular modelga oson. Nima qilish kerak: odamlar yozgan va o'qitishda ishlatilmaydigan savollar to'plamini saqlang — ham yakuniy baho uchun, ham ishonch darvozasini moslash uchun (bu ikkisi alohida to'plam bo'lsin).

9. Bir vaqtda bitta o'zgarish

Kitoblar: buni kamdan-kam aytadi. Tez da: tez8 dan keyin bir nechta o'zgarishni birga kiritgan har bir model nima uchun yaxshi yoki yomon chiqqanini aniqlab bo'lmadi (21-bob). Nima qilish kerak: retseptni o'zgartirmoqchi bo'lsangiz, ma'lumotni o'zgartirmang, va aksincha. Shunda natija o'zgarsa, sababi ma'lum bo'ladi.

10. Har bir xatoni o'sha kuni yozing

Kitoblar: muvaffaqiyatni yozadi. Tez da: xatolar jurnali narxi bilan yuritildi — qancha GPU soati, qaysi savollar — va har bir xatodan keyin "endi qoida shu" qatori qo'shildi. Har bir yangi ishdan oldin jurnal o'qiladi. Shuning uchun bitta xato ikki marta takrorlanmaydi; takrorlangan joyda esa (so'rash qatorlari) bu jurnalda ochiq yozilgan (38-xato). Nima qilish kerak: xato jurnalini loyihaning birinchi kunidan boshlang.

11. Matnni qayta yozing, yangi qator qo'shmang

Kitoblar: augmentation ni ko'pincha "yangi qator qo'shish" deb tushuntiradi. Tez da: bu maslahat professordan keldi. Saqlash so'rovlaridagi so'zlar odamlar aytadigan shaklga almashtirildi ("Desktopga" o'rniga "ish stoliga", "Excel faylga saqla" o'rniga "saqla" yoki "saqlab qo'y", lotincha papka nomi o'rniga kirillchasi — so'rovda ham, rejada ham), lekin bitta ham yangi qator qo'shilmadi. 12 396 ta agent juftidan 1 162 tasi qayta yozildi: joyni o'z tilida aytish 24% dan 59% ga, oddiy "saqla" 8% dan 24% ga, kirill papka nomlari 18% dan 33% ga chiqdi (testlarda 69, 33 va 38%; o'lchov 15-faylning 14-bo'limida). Yangi qator qo'shilmagani uchun boshqa xulqlarning ulushi o'zgarmaydi — 3-qoidadagi tuzoqqa tushilmaydi. Har bir qayta yozilgan qator yana qoida bilan tekshiriladi: so'rovda aytilmagan argument rejada qolsa, asl matn qoladi.

12. Darvoza uchun alohida odamlar to'plami

Kitoblar: validation to'plami o'qitish ma'lumotidan ajratilsin deydi. Tez da: sintetik validation qatorlari modelga juda oson bo'lgani uchun ishonch darvozasini ular bo'yicha moslab bo'lmadi (31-bob). Professor maslahati: 3–5 kishiga Tez ni berib, har biridan 40–50 ta savolni o'zi yozadigandek yozdirish, ularning 20–25% i noaniq bo'lsin (qaysi ustun ekani aniq emas yoki ikki ma'noli). Bu to'plam hech qachon o'qitishga kirmaydi va test to'plami ham emas — u faqat darvoza chegarasini tanlash uchun.

Yakun

Haqiqiy model o'qitish — asosan ma'lumot ishi: uni yasash, o'lchash, haqiqiy so'rovlar bilan solishtirish va har bir xulq uchun yetarli ekanini isbotlash. Retsept — eng oson qismi. Kitoblarda yozilmagan qism shu: modelni o'qitishdan oldin ma'lumotni o'qib chiqing, savolma-savol.

Bu bobni bepul o'qidingiz.

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

Telegramda yozish Narxlar