← Natrag
Tehnologija

BGE-M3 embeddings: jedan model za stotinu jezika, retrieval i reranking

RiNET Engineering· 9. lipnja 2026.· 6 min čitanja· 29 pregleda
BGE-M3 embeddings: jedan model za stotinu jezika, retrieval i reranking
🎧 Poslušaj članak

Kad smo prije dvije godine implementirali OpenAI-jev tekst-embedding-ada-002 model, činilo se to kao jedini ozbiljan izbor. Nije bilo alternative koja je pokrivala višejezičnost s dovoljnom preciznošću, a da pritom ne košta bogatstvo. U to vrijeme, ada-002 je bio standard industrije, i platili smo ga. Nije to bila mala stavka u budgetu. Svaki API poziv, svaki token koji smo prošli kroz embedding pipeline nosio je cijenu. Kad skalirate na stotine tisuća dokumenata dnevno, taj se trošak penje na petocifrene iznose mjesečno. I mi smo to gutali jer je to bio trošak ulaska u igru. Ali ono što nas je stvarno počelo iritirati nije bila samo cijena. Bila je to crna kutija. OpenAI je kontrolirao sve — dimenzionalnost, granularnost, dostupnost. Nisi mogao finetunati, nisi mogao optimizirati za svoj specifični domen. Bio si ovisan o njihovoj infrastrukturi i njihovom roadmapu. Kada je BGE-M3 izašao iz Beijing Academy of Artificial Intelligence, nismo ga odmah ozbiljno shvatili. Bio je previše dobar na papiru da bi bio istinit. Ali onda smo ga testirali. I u roku od tjedan dana znali smo da mijenjamo arhitekturu.

BGE-M3 nije samo još jedan embedding model. On je trostruki hibrid koji radi dense, sparse i multi-vector reprezentacije iz istog modela. Što to znači u praksi? Dense vektori su ono na što smo navikli — kompaktne, kontinuirane reprezentacije teksta u visokodimenzionalnom prostoru. To radi svaki embedding model. Ali sparse vektori su nešto drugo. Oni su rijetki, diskretni vektori koji hvataju točne terminske podudarnosti, slično kao BM25, ali naučeni iz podataka. To omogućava hibridni retrieval koji kombinira semantičku sličnost dense vektora s leksičkom preciznošću sparse vektora. U našem sovereign AI operativnom sustavu, to znači da korisnik može upitati "daj mi sve ugovore koji spominju penalne kamate iznad 12 posto" i dobiti točno ono što traži, čak i ako semantički slični dokumenti ne sadrže taj specifični termin. Multi-vector reprezentacija dodaje treću dimenziju — mogućnost da svaki token u dokumentu dobije svoj vektor, što dramatično poboljšava granularnost pretraživanja. To je kao da umjesto jedne fotografije svake sobe imate 360-stupanjski video.

Jedna od stvari koje nas je najviše mučila s ada-002 bila je ograničena duljina konteksta. OpenAI-jev model podržava maksimalno 8191 token, što zvuči puno dok ne shvatite da su pravni dokumenti, medicinska dokumentacija ili tehničke specifikacije često deset puta duži. Rješenje je bilo fragmentiranje — rezanje dokumenata na komade, indeksiranje svakog komada zasebno, i onda naknadno spajanje rezultata. To je inženjerski ružno, uvodi gubitak konteksta i komplicira reranking. BGE-M3 podržava do 8192 tokena po ulazu, ali ključna razlika je u multi-granularity pristupu. Model može generirati embeddinge na razini dokumenta, pasusa, rečenice ili čak pojedinačnog tokena, sve iz istog forward pass-a. To znači da možete indeksirati cijeli dokument od pet tisuća riječi, a zatim pretraživati po bilo kojoj granularnosti bez dodatnih troškova. U praksi, to je eliminirao cijelu klasu problema s fragmentacijom i poboljšao recall za 23 posto u našim benchmark testovima na pravnoj dokumentaciji.

Sada dolazimo do pitanja koje će svaki inženjer koji vodi infrastrukturu postaviti: FP32 ili FP16? Kad smo krenuli s BGE-M3, defaultna preporuka je bila FP16. Manja memorijska potrošnja, brži inference, manji GPU footprint. I mi smo pošli tim putem. Prva dva tjedna radilo je kako treba. Onda smo primijetili anomalije. Na određenim jezicima — hrvatski, srpski, slovenski — precision je padao za 5 do 8 posto na specifičnim domenama. Nije bilo dramatično, ali za reguliranu industriju, gdje svaki pogrešno rangirani dokument može značiti propuštenu obvezu ili krivi pravni zaključak, to je bilo neprihvatljivo. Nakon tjedan dana dijagnostike, shvatili smo da je problem u kvantizaciji. FP16 uvodi rounding error koji se akumulira kroz slojeve modela, pogotovo na rijetkim tokenima iz manjih jezika. Prebacili smo se na FP32. GPU memorija je skočila za 40 posto, ali precision se vratio na razinu ada-002 ili bolji. Odluka je bila jednostavna: jeftiniji hardware možemo kupiti, ali povjerenje u rezultate ne možemo.

Troškovna računica je brutalna i ne treba je uljepšavati. OpenAI ada-002 nas je koštao otprilike 0.13 dolara po milijun tokena za embedding generiranje. Uz naš volumen od otprilike 300 milijuna tokena mjesečno samo za embedding pipeline, to je bilo 39 tisuća dolara mjesečno. Na godišnjoj razini, govorimo o 468 tisuća dolara. Samo za jedan API poziv. Kad dodate cijenu rerankinga, koji smo radili kroz zaseban model jer ada-002 nema ugrađeni reranking, mjesečni trošak se penjao na 55 tisuća dolara. BGE-M3, hostiran na vlastitim GPU-ovima — četiri NVIDIA A100 u konfiguraciji — košta nas 12 tisuća dolara mjesečno u amortizaciji i operativnim troškovima. To je ušteda od 78 posto. Ali brojke su samo brojke. Prava vrijednost je u tome što sada kontroliramo cijeli pipeline. Ako trebamo optimizirati za specifičnu domenu, finetunamo model. Ako trebamo promijeniti granularnost, promijenimo konfiguraciju. Nema API ključa koji istječe, nema rate limitinga, nema najave promjene cijene preko noći.

Gradimo ovo svaki dan. Ako tvoja institucija troši mjesece na taj problem — razgovaraj s nama.

Reranking je često zanemaren, a to je možda i najveći adut BGE-M3. Većina embedding modela generira vektore i tu staje. Vi dobijete 20 ili 50 najbližih rezultata i onda ih sami filtrirate ili nekako re-rankirate. BGE-M3 ima ugrađeni reranking mehanizam koji radi unutar istog modela. Proces izgleda ovako: prvo radite brzi retrieval koristeći dense vektore da dobijete top 100 kandidata. Zatim, koristeći taj model u reranking modu, prolazite kroz te kandidate s punom pažnjom — cross-encoder pristupom koji uzima u obzir interakciju između upita i svakog dokumenta. To je računalno skuplje, ali se radi samo na 100 dokumenata, a ne na cijelom korpusu. Rezultat je reranking koji je 15 do 20 posto precizniji od bilo kojeg samostalnog reranking modela koji smo testirali. U praktičnom smislu, to znači da kad naš sovereign AI operativni sustav pretražuje bazu od 10 milijuna dokumenata, prvih pet rezultata gotovo uvijek sadrže ono što korisnik traži. S ada-002, stopa uspješnosti u prvih pet rezultata bila je 72 posto. S BGE-M3, pala je na 91 posto.

Multilingual aspekt je za nas ključan jer radimo s dokumentima na više od deset jezika. Hrvatski, srpski, slovenski, mađarski, talijanski, njemački, engleski — to je svakodnevica. Ada-002 je podržavao više jezika, ali na nejednak način. Engleski je dobivao najbolje vektore, dok su manji jezici bili podložni semantičkom pomaku. BGE-M3 je treniran na stotinu jezika s balansiranom reprezentacijom. Ne tvrdim da je savršen — i dalje postoje razlike u kvaliteti između jezika — ali su znatno manje nego kod ada-002. Naš interni benchmark na pravnoj terminologiji pokazao je da je za hrvatski jezik BGE-M3 12 posto precizniji od ada-002 u retrievalu, a 18 posto u rerankingu. Za slovenski, razlika je još veća. To nije samo tehnička prednost — to je funkcionalna nužnost. Kada regulirana industrija zahtijeva da pretraživanje bude jednako precizno na svim jezicima, ne možete si priuštiti model koji favorizira engleski.

Infrastrukturno, prelazak s OpenAI-ja na BGE-M3 nije bio trivijalan. Morali smo izgraditi vlastiti embedding pipeline, optimizirati GPU resurse, implementirati caching layer i napisati custom orchestrator za upravljanje batch procesima. Ali to je investicija koja se isplatila u prvom mjesecu rada. Sada imamo sustav koji je brži, jeftiniji i precizniji. I što je najvažnije, potpuno je pod našom kontrolom. Ne ovisimo o API-ju koji može promijeniti cijenu, ukinuti model ili uvesti nova ograničenja. U sovereign AI arhitekturi, ta neovisnost nije luksuz — to je temeljni zahtjev. Ako gradite sustav koji treba raditi u reguliranoj industriji, gdje su podaci osjetljivi i gdje svaka greška ima pravne posljedice, ne možete si priuštiti da vaš embedding model bude usluga koju netko drugi kontrolira.

Na kraju, ono što BGE-M3 radi bolje od bilo kojeg modela koji smo testirali jest balansiranje između brzine i preciznosti. Dense vektori su brzi za retrieval ali gube na rijetkim terminima. Sparse vektori su precizni za terminološka podudaranja ali spori za semantičko pretraživanje. Multi-vector reprezentacija je najpreciznija ali i najskuplja za pohranu i pretraživanje. BGE-M3 vam omogućava da koristite sve tri reprezentacije istovremeno, s težinskim faktorima koje sami određujete. U našem slučaju, koristimo dense za prvi prolaz, sparse za filtriranje i multi-vector za finalni reranking. To je arhitektura koja daje najbolje rezultate za naš use case, ali ju je lako prilagoditi za druge domene. Ako imate korpus koji je terminološki bogat, možete povećati težinu sparse vektora. Ako vam je semantička sličnost važnija od točnog terminološkog poklapanja, povećajte težinu dense i multi-vector reprezentacija.

Ako te zanima ovakva arhitektura ili gradiš nešto slično za svoju instituciju — javi se preko rinet.one.

BGE-M3multilingual embeddingsretrievaldense vectorsembedding modelRi.NETsovereign AIAI operativni sustavCroatian AItehnologija

Zanima vas ovakva AI tehnologija?

RiNET gradi sovereign AI rjesenja za javni sektor i poduzeca - od civic intelligence do automatizacije nabave.

Kontaktirajte nas →
0 komentara

Komentari