Moravian AI/ThinEmbed: komprimované dotazové enkodéryENCS

ThinEmbed: komprimované dotazové enkodéry

Dotazová strana embedding modelu zkomprimovaná do malého souboru, který běží v prohlížeči přes WebGPU. Index dokumentů zůstává přesně takový, jaký je; mění se jen dotazový enkodér. Každé číslo níže srovnává komprimovaného klienta s modelem v plné přesnosti na týchž dotazech, proti vlastnímu fp32 indexu modelu.

Velikost, kvalita a rychlost v prohlížeči

harrier-0.6b na SciFact, testovací split, 300 dotazů; nDCG@10 proti vlastnímu fp32 indexu modelu. Jeden notebook v klidu, integrovaná GPU Intel, headless Chrome; latence na dotaz; špičková paměť všech procesů Chrome. Řádky ThinEmbed jsou vydané soubory.

dotazový enkodérsoubornDCG@10p50p95načteníšpičková paměť
harrier-0.6b, plná přesnost (reference, v prohlížeči neběží)1 143 MiB (fp16)0,7559––––
Q3_K, formát llama.cpp, wllama na WebGPU235,1 MiB0,7481444 ms754 ms4,2 s2 080 MiB
IQ2_M, formát llama.cpp, wllama na WebGPU199,3 MiB0,7387508 ms1 012 ms5,2 s1 983 MiB
Q2_K, formát llama.cpp, wllama na WebGPU192,4 MiB0,7413405 ms680 ms4,7 s2 124 MiB
Q2_K, formát llama.cpp, wllama na CPU (WebAssembly, 8 vláken)192,4 MiB0,74251 669 ms3 363 ms4,4 s1 228 MiB
ThinEmbed, 2,10 bitu na váhu, WebGPU119,5 MiB0,7375103 ms113 ms2,4 s1 592 MiB
ThinEmbed, 1,83 bitu na váhu, WebGPU105,3 MiB0,7109102 ms112 ms2,5 s1 501 MiB

Soubory Q3_K a Q2_K jsou naše exporty GPTQ do formátů llama.cpp; vlastní kvantizér llama.cpp při této velikosti dosáhne stejné kvality. Jedno zařízení, jeden model, jeden korpus: diskrétní GPU a telefony změřené nejsou. Zdroj: vq_results.md §2.

Nejmenší soubory proti jiným přístupům

harrier-0.6b na SciFact, testovací split, 300 dotazů, fp32 0,7559. Nativně: llama.cpp na CPU. Prohlížeč: náš WebGPU runtime. Simulace: torch simulace kvantovaných vah.

dotazový enkodérsoubornDCG@10měřeno
Q3_K, náš export GPTQ, kalibrace generickou angličtinou (vydaný)235,1 MiB0,7475nativně
IQ2_M, kvantizér llama.cpp, doménová imatrix199,3 MiB0,7418nativně
Q2_K, náš export GPTQ, kalibrace korpusem SciFact192,4 MiB0,7440nativně
IQ2_XS, nejmenší formát llama.cpp, doménová imatrix177,5 MiB0,7097nativně
BitNet-embedding-270m, ternární, trénovaný Microsoftem (jiný model s vlastním indexem)140 MiB0,7350nativně
ThinEmbed, 2,10 bitu na váhu (vydaný)119,5 MiB0,7375prohlížeč; simulace 0,7380
ThinEmbed, 1,83 bitu na váhu (vydaný)105,3 MiB0,7109prohlížeč = simulace
ThinEmbed, 1,58 bitu na váhu (nevydaný)~91 MiB0,7074simulace; ±0,03 mezi seedy rotace

Párově proti BitNet-270m na 2,12 bitu na váhu: SciFact +0,007 [−0,014; +0,028] a NFCorpus −0,005 [−0,020; +0,009], oboje nerozlišitelné; ArguAna +0,044 [+0,023; +0,065]. Zdroje: vq_results.md §1, karta modelu ThinEmbed-harrier-0.6b.

Čeština: WebFAQ-cs

Qwen3-Embedding-0.6B na WebFAQ-cs (PaDaS-Lab/webfaq-retrieval, CC BY 4.0): 71 529 pasáží, 7 231 lidsky hodnocených testovacích otázek; nDCG@10 proti vlastnímu fp32 indexu modelu.

dotazový enkodérsoubornDCG@10kosinus k fp32překryv top-10p50
Qwen3-Embedding-0.6B, plná přesnost (reference)–0,7308–––
ThinEmbed, 3,57 bitu na váhu (2-d kódové knihy) a celá tabulka tokenů (vydaný)237,0 MiB0,70720,9460,755112 ms

Řádek ThinEmbed: torch simulace souboru na celém testovacím splitu. V prohlížeči (integrovaná GPU Intel) soubor reprodukuje simulaci na prvních 50 otázkách na čtvrté desetinné místo (0,6393 proti 0,6393); p95 130 ms, načtení 2,5 s. Kalibrace na 3 000 trénovacích otázkách WebFAQ-cs, jeden seed. Vydané skalární české soubory jsou místo toho měřené na indexu rozhodnutí Nejvyššího soudu (viz vydané soubory). Zdroj: karta modelu ThinEmbed-Qwen3-Embedding-0.6B-vq.

Vydané soubory

Každý soubor je dotazový enkodér pro právě jeden dokumentový enkodér a jeho nastavení; index se nemění. Kvalita v % vlastního fp32 nDCG@10 modelu, testovací splity, pokud není uvedeno jinak.

repozitářzákladní model · licencesouboryměřeno
ThinEmbed-harrier-0.6bmicrosoft/harrier-oss-v1-0.6b · MITQ3_K, kalibrace generickou angličtinou, 235,1 MiBSciFact 98,9 · NFCorpus 99,3 · ArguAna 101,3 · SciDocs 99,2 %
ThinEmbed-harrier-0.6bMITQ2_K, syntetické dotazy SciDocs, 192,4 MiBSciDocs 94,5 %
ThinEmbed-harrier-0.6bMITQ2_K, kalibrace generickou angličtinou, 192,4 MiBSciFact 96,4 · SciDocs 90,1 %
ThinEmbed-harrier-0.6b-vqMIT2,10 / 1,83 bitu na váhu, soubory SciDocs 127,0 / 112,8 MiB, soubory SciFact 119,5 / 105,3 MiBSciDocs 94,7 / 91,3 % · SciFact 97,6 / 94,0 % (prohlížeč)
ThinEmbed-harrier-0.6b-vqMITvarianty s prompt K/V, 2,10 / 1,83 bitu na váhu, SciDocs 129,1 / 114,9 MiB, SciFact 121,6 / 107,3 MiBSciDocs 96,6 / 93,8 % · SciFact, všech 1 109 dotazů, 98,1 / 95,8 % (s uloženými klíči a hodnotami promptu)
ThinEmbed-Qwen3-Embedding-0.6B-vqQwen/Qwen3-Embedding-0.6B · Apache-2.03,57 bitu na váhu, čeština, 237,0 MiBWebFAQ-cs 96,8 % (ověřeno v prohlížeči)
ThinEmbed-Qwen3-Embedding-0.6BApache-2.0Q4_K_M / Q5_K_M, anglická kalibrace, 339,9 / 385,4 MiBSciFact 100,0 / 99,8 · NFCorpus 99,4 / 100,1 · ArguAna 100,1 / 100,1 · SciDocs 99,3 / 100,1 %
ThinEmbed-Qwen3-Embedding-0.6BApache-2.0Q4_K_M / Q5_K_M, česká kalibrace, 339,9 / 385,4 MiBindex Nejvyššího soudu 98,7 / 99,5 %
ThinEmbed-bge-m3BAAI/bge-m3 · MITQ4_K_M / Q3_K, česká kalibrace, 354,6 / 320,6 MiBindex Nejvyššího soudu 99,2 / 98,3 % · SciFact 99,6 / 100,0 %

Index rozhodnutí Nejvyššího soudu: 55 071 segmentů, 1 137 syntetických dotazů; data nejsou veřejná. Karta modelu každého repozitáře uvádí kompatibilitu, recept a sha256 každého souboru. Zdroje: karty modelů v docs/release repozitáře.

Jak se měřilo

Testovací split a vlastní fp32 index modelu, nativně v llama.cpp nebo v prohlížeči. Každý běh je předem registrovaný s predikcí a pravidlem pro ukončení, srovnání mění jednu věc a rozdíly jsou párové bootstrapové intervaly přes dotazy (10 000 tahů), čtené proti rozptylu kalibračního tahu (zhruba 0,01 nDCG@10) a mezi stroji (±0,006).

Rychlý start

V prohlížeči s balíčkem npm @moravian/thinembed-vq. Vyžaduje WebGPU se shader-f16 (Chrome, Edge); bez CPU fallbacku.

import { loadVqwClient } from 'https://moravian.ai/vqweb/vqweb.js';   // or: npm install @moravian/thinembed-vq

const client = await loadVqwClient(
  'https://huggingface.co/moravianai/ThinEmbed-Qwen3-Embedding-0.6B-vq/resolve/main/qwen3-0.6b-vq3.5d2-webfaq_q-vocfull.vqw');
const q = await client.embed('Kolik stojí parkování v centru Prahy?');   // Float32Array(1024), L2-normalised
// score = dot(q, d) against your Qwen/Qwen3-Embedding-0.6B document vectors

Změření klienta na vlastním indexu s balíčkem PyPI thinembed; vektory dokumentů, které už máte, se nikdy nepřepočítávají:

pip install "thinembed[torch]"

eq import  --name mycorpus --docs corpus.jsonl --doc-emb index.f32 --doc-ids ids.json --teacher qwen3-0.6b --language cs
eq synth   --dataset mycorpus --lang Czech --n-per-doc 2 --as-calib     # synthetic queries + calibration text
eq cache   --dataset mycorpus --teacher qwen3-0.6b                      # fp32 query vectors of the unchanged model
eq compile --model model-f16.gguf --types Q4_K_M Q3_K --calib data/calib/mycorpus_synth_q.txt --table q4_0
eq eval    --dataset mycorpus --teacher qwen3-0.6b --clients models/*.gguf --bin llama-embedding --rule
eq compare results/perq/mycorpus_<a>.npz results/perq/mycorpus_<b>.npz  # paired bootstrap, same queries