Կոնտեքստային պատուհանի ամեն պլան սկսվում է ենթադրությունից, թե քանի նիշ է տեղավորվում մեկ թոքենում։ Մերը ռուսերենի համար սխալ դուրս եկավ — հրապարակայնորեն, սառեցված կորպուսում — և չափված ուղղումն ավելի օգտակար է, քան սկզբնական թվերը, ուստի հրապարակեցինք այն որպես տվյալներ՝ կորպուսը լուռ վերակառուցելու փոխարեն։
Ինչ էինք ենթադրում և ինչ չափեցինք
Long-context կորպուսը կտրվում էր 2k/8k/16k/32k թոքենի անվանական
աստիճանների՝ նիշ-մեկ-թոքենին գնահատականով. մոտ 4 անգլերեն արձակի համար և
2.2՝ ռուսերենի։ Անգլերեն ենթադրությունը դիմացավ; ռուսերենը՝ ոչ։ Տարր առ
տարր չափված արժեքները, վերցված runtime-ի սեփական prompt-eval հաշվառումից և
հրապարակված
tokens-measured.json
ֆայլում .
| Կորպուսի տարր (անվանական աստիճան) | Գնահատված թոքեններ | Չափված թոքեններ | Հարաբերակցություն |
|---|---|---|---|
| en-32k (Դիքենս) | 32034 | 30005 | 0.94 |
| ru-2k (Դոստոևսկի) | 2054 | 1372 | 0.67 |
| ru-8k | 8061 | 5295 | 0.66 |
| ru-16k | 16059 | 10415 | 0.65 |
| ru-32k | 32044 | 21062 | 0.66 |
Անգլերենը մնաց անվանականից ~6%-ի սահմաններում։ Ռուսերենը դուրս եկավ մոտ երկու երրորդի վրա. այս թոքենիզատորը (Qwen3.6-ինը, ներդրված GGUF-ում) գրական ռուսերենի վրա ծախսում է մոտ 3.3 նիշ մեկ թոքենին, ոչ թե 2.2, ինչպես ենթադրել էր կորպուսի կառուցողը ։
Ինչ է սա նշանակում գործնականում
- Փաստաթղթի նույն բյուջեն տարբեր լեզուներում տարբեր խորություն է գնում։ «32k կոնտեքստի» պլանը, որը լցված էր ռուսերեն արձակով մեր ենթադրած խտությամբ, իրականում զբաղեցրեց մոտ 21k թոքեն — պատուհանը մեկ երրորդով ավելի դատարկ էր, քան ասում էր իր պիտակը։ Հակառակ ուղղությամբ. 32k թոքենն իսկապես լցնելու համար ռուսերեն տեքստ է պետք մոտ մեկուկես անգամ ավելի, քան կանխատեսում էր գնահատականը։
- Chars-per-token-ը կախված է թոքենիզատորից և լեզվից։ Անգլերենի վրա չափված հարաբերակցությունը չի տեղափոխվում կիրիլիցայի վրա; մեկ թոքենիզատորի վրա չափվածը չի տեղափոխվում մյուսի վրա։ Եթե ձեր RAG-չանկինգը, կոնտեքստի բյուջետավորումը կամ գնային հաշվարկը բոլոր լեզուների համար օգտագործում են chars/token մեկ հաստատուն, այն սխալ է դրանցից առնվազն մեկում։
- Չափեք, ոչ թե գնահատեք. runtime-ն ինքն է ասում։ llama.cpp սերվերի
ամեն պատասխան կրում է prompt-թոքենների հաշվառում; մեկ անցում սեփական
կորպուսի վրայով ֆոլկլորային հաստատունը փոխարինում է չափված փաստով։
Ամբողջ
tokens-measured.json-ը հենց դա է։
Ինչպես սա երևան եկավ (և ինչ արեց մեր իսկ պիտակների հետ)
Սխալ պիտակը բռնվեց մեր long-context աշխատանքի վերանայման ժամանակ. կորպուսի
approx_tokens դաշտը շեղվեց սերվերի սեփական հաշվառումից մեր իսկ
հրապարակված գործարկման լոգերում։ Կորպուսի ֆայլն ինքը սառեցված է հեշով և չի
փոխվել; չափված արժեքներն այժմ դրված են նրա կողքին, ուղղումը գրանցված է
errata էջում, իսկ խորությունների հրապարակված claim-երը միայն
անգլերեն են և հետևաբար չեն տուժել։ Տուժած ռուսերեն աստիճաններն ամենուր,
որտեղ հանդիպում են, պիտակված են չափված արժեքներով։
Ավելի խորը նախապատմությունը — ինչու է կիրիլիցան թանկ թոքենիզացվում, մի քանի թոքենիզատորի վրա, տնտեսագիտությամբ հանդերձ — մեր ռուսերեն լոնգրիդում է Habr-ում։
Սահմանափակումներ
- Այստեղ չափված է մեկ թոքենիզատոր (Qwen3.6 GGUF); Habr-ի հոդվածը դիտարկում է ուրիշներ, և հարաբերակցությունները տարբերվում են ընտանիքից ընտանիք։ Մեկ թոքենին 3.3 նիշ թիվը գրական արձակի մասին է. կոդի հետ խառը կամ տեխնիկական ռուսերենը թոքենիզացվում է այլ կերպ։
- Սրանք prompt-թոքենների հաշվիչներ են, ոչ թե որակի պնդումներ։ Ինչ է խորությունն անում որոնման ու ազնվության հետ — long-context workload-ի գործն է. տես կոնտեքստի օգտակար խորությունը։