strizh-ru-retriever-ը լաբորատորիայի կոմպակտ ռուսերեն նախադասությունների էնկոդերն է. 24,4 մլն պարամետր, չորս շերտ, մեկ 384-չափանի էմբեդինգ ամեն տեքստի համար , առանց query/document պրեֆիքսների, հրապարակված Apache-2.0-ով՝ կողքին GGUF կշիռներով։ Թե ինչպես է այն ստացվել — ներառյալ սխալը, որի անունով այս էջը կոչված է — ամբողջական պատմությունը ռուսերեն լոնգրիդ է Habr-ում, և հենց այդ հոդվածն է այստեղ մեջբերված ամեն թվի առաջնային աղբյուրը։ Սա ուղեկից էջն է. նույն պատմությունը՝ սեղմված, որտեղ թվերը հոդվածից արված մեջբերումներ են, ոչ թե ռեեստրի claim-եր։
Ինչու՞ սեղմել էմբեդեր, որն առանց այդ էլ տեղավորվում է
Ոչ հիշողության համար։ Բազային մոդելն այնքան փոքր է, որ կապրի ամենուր; վերջացողը հաշվարկն էր։ Ինքնուրույն տեղակայված RAG-ում էմբեդերը կիսում է սիլիցիումը գեներատորի հետ, և ամեն էմբեդված հարցում — առավել ևս կորպուսի ամեն վերաինդեքսավորում — գողացվում է LLM-ի դեկոդի բյուջեից։ Ինչպես ասում է հոդվածը, վերջանում էր ոչ թե հիշողությունը, այլ GPU-ի ժամանակը։ Նպատակը առաջին փուլի ռետրիվեր էր՝ այնքան էժան, որ սպասարկող LLM-ի կողքին նստելիս չզգացվի, և այնքան պարզ, որ փաթաթաններն այն սխալ գործածել չկարողանան — դրա համար այն ընդունում է հում տեքստ՝ առանց query/document պրեֆիքսների, որոնք ամեն ինտեգրացիա մոռանում է ավելացնել։
Ինչը ձախողվեց, մինչև որևէ բան աշխատեց
Բազան deepvk/RuModernBERT-small-ն էր. 12 transformer շերտ, մոտ 35 մլն պարամետր ։
Ակնհայտ կարճ ուղին — MSE-ով փոքր մոդելի էմբեդինգները մեծ ուսուցչի
էմբեդինգներին մոտեցնելը — դարձավ հոդվածի լավագույն նախազգուշական հեքիաթը.
loss-ը կայունացավ մոտ 0.00062-ի վրա, իսկ որոնումը ծնվեց մեռած՝ Recall@10 = 0.029 ։
Պրոքսի-նպատակը կատարելապես սերտաճեց մի բանի, որը խնդիրը չէր։ Աշխատող
բաղադրատոմսը ծայրից ծայր կոնտրաստիվ է. նախ 12-շերտանոց դոնորը սովորեցվում
է որպես ռետրիվեր, ապա [0, 5, 9, 11] շերտերը պահվում են որպես ջերմ մեկնարկ ուսանողի համար ,
հետո քառաշերտ մոդելը վերաուսուցվում է 220 հազար զույգանոց խառը ռուսերեն-անգլերեն հավաքածուի վրա ՝
ավելի մեծ ռետրիվերի հանած կոշտ նեգատիվներով։
Ի՞նչ պահեց սեղմումը
Հոդվածի որակի բենչմարքը MIRACL-ru dev-ն է՝ ֆիլտրված ենթաբազմության վրա, 1000 հարցումից 758-ը ; Recall@10-ը, ինչպես հրապարակված է այնտեղ .
| Մոդել | Recall@10 |
|---|---|
| bge-m3 | 0.831 |
| multilingual-e5-small | 0.829 |
| USER2-small | 0.819 |
| strizh-ru-retriever | 0.751 |
| rubert-tiny2 | 0.633 |
Չֆիլտրված բազմության վրա արդյունքը 0.800 է ։ Այնպես որ ոչ, փոքր մոդելը մեծերին չի հաղթում, և հոդվածն էլ չի ձևացնում, թե հաղթում է. այն զիջում է չափված մի կտոր recall bge-m3-ի դիմաց և դրա փոխարեն գնում է մի կարգ այլ տեղ։ Strix Halo տուփի վրա llama.cpp/Vulkan-ով, 16 զուգահեռությամբ, այն էմբեդում էր մոտ չորս հազար կարճ հարցում վայրկյանում — 3614-ից 4450՝ ըստ գործարկումների — bge-m3-ի մոտ 448-ի և multilingual-e5-small-ի 1837-ի դիմաց ։ Սպասարկող 35B դասի MoE-ի կողքին օնլայն 200 QPS էմբեդինգ-բեռով այն LLM-ին արժեցավ գեներացիայի մոտ 2%, որտեղ bge-m3-ն արժենում էր 7% ; ամբողջական վերաինդեքսավորման տակ հարևան LLM-ը STRIZH-ի կողքին պահեց 14,0 տրանզակցիա րոպեում՝ bge-m3-ի կողքի 6,0-ի դիմաց ։ GGUF ֆայլերը 52 ՄԲ են F16-ում, 29 ՄԲ՝ Q8_0-ում, 26 ՄԲ՝ Q4_0-ում ։ Սա է փոխանակումը՝ իր գնապիտակով։
Մեկ սխալ թիվը
Վրիպումն այս պատմության ամենավերապատմելի մասն է։ Թողարկված
tokenizer_config.json-ում մնացել էր model_max_length: 256
— հետք կոնտրաստիվ ուսուցումից, որն աշխատում էր 256-թոքենանոց հաջորդականություններով, մինչդեռ ճարտարապետությունն ընդունում է 8192 ։
Ամեն ստանդարտ փաթաթան կարդում է այդ դաշտը և լուռ կտրում մուտքը։ Ոչինչ չի
փլուզվում, ոչինչ չի զգուշացնում; մոդելը պարզապես երկար հատվածի մեծ մասը
երբեք չի տեսնում։ Այն երևաց լաբորատորիայի ներքին RAG կորպուսի վրա
dogfood-ի ժամանակ — 163 գեներացված հարց սեփական փաստաթղթերի վրա
— որտեղ նույն checkpoint-ը ուղղված բագով տալիս էր Recall@10 = 0.589, իսկ բագի հետ՝ 0.448. անկում 14,1 տոկոսային կետով ՝
ուղիղ rubert-tiny2-ի մակարդակ։ Կոնֆիգ ֆայլի մեկ թիվը քիչ էր մնում
չեղարկեր ամբողջ ուսուցումը, և կարճ հարցումներով ոչ մի բենչմարք դա երբեք
չէր բռնի։
Սա մեր լաբորատորիայի հիմնադիր դիտարկումն է՝ այլ գլխարկով. կոնֆիգուրացիայից կտրված որակի թիվը քողարկված կոնֆիգ է։ Checkpoint-ն ուներ մեկ Recall@10; checkpoint-գումարած-առաքված-կոնֆիգը՝ ուրիշ, և օգտագործողների համար իրականը միայն երկրորդն է։ Ուղղումը — և release checklist-ի նոր կետը, որ tokenizer-ի գործող կարգավորումները համեմատում է ճարտարապետության հետ — դուրս եկավ հրապարակային թողարկումից առաջ։
Որտեղ է ամեն ինչ, և ինչ այս էջը ՉԻ պնդում
Առաջնային աղբյուրը Habr-ի լոնգրիդն է (ռուսերեն)՝ ուսուցման բոլոր իտերացիաներով, գնահատման մեթոդաբանությամբ և վերապահումներով։ Մոդելն ու նրա GGUF սարքումները Hugging Face-ում են, իսկ արտեֆակտի ինքնությունը՝ արտեֆակտների էջում։ Ինչ այս էջը չի պնդում. վերևի թվերից ոչ մեկը լաբորատորիայի ռեեստրի claim չէ։ Դրանք հոդվածից արված մեջբերումներ են — մեկ լաբորատորիայի աշխատանք, գնահատված սեփական հեղինակի կողմից, արագության թվերը՝ մեկ մեքենայից — և պահում են հոդվածի սեփական վերապահումները։ Թե ինչ կպահանջեր դրանցից մեր ռեեստրային կարգի պրոտոկոլը, առանձին հաշվետվություն է։