Հաշվետվություն

Ռուսերեն retrieval-էմբեդեր 24 մլն պարամետրում — և մեկ թիվը, որը քիչ էր մնում փչացներ այն

strizh-ru-retriever-ի պատմությունը. ինչպես RuModernBERT-small-ը շերտային prune-ով դարձավ քառաշերտ էնկոդեր, ինչու դիստիլյացիայի կարճ ուղին տվեց գեղեցիկ loss և մեռած որոնում, ինչ պահեց սեղմումը — և կոնֆիգում մոռացված արժեքը, որ լուռ կտրում էր ամեն մուտք։

lab_single_run internal research 21 օգոստոսի, 2026 թ. · Ֆինանսավորում: Սեփական ֆինանսավորում, ներքին հետազոտություն

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-m30.831
multilingual-e5-small0.829
USER2-small0.819
strizh-ru-retriever0.751
rubert-tiny20.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 չէ։ Դրանք հոդվածից արված մեջբերումներ են — մեկ լաբորատորիայի աշխատանք, գնահատված սեփական հեղինակի կողմից, արագության թվերը՝ մեկ մեքենայից — և պահում են հոդվածի սեփական վերապահումները։ Թե ինչ կպահանջեր դրանցից մեր ռեեստրային կարգի պրոտոկոլը, առանձին հաշվետվություն է։

Ինչպես մեջբերել

AGmind Systems Lab (2026-08-21). Ռուսերեն retrieval-էմբեդեր 24 մլն պարամետրում — և մեկ թիվը, որը քիչ էր մնում փչացներ այն. Evidence level: lab_single_run. https://agmind.ai/hy/reports/russian-embedder-24m-params/
← Հաշվետվություններ