Jeden vektor může spolknout detail, který rozhoduje

Vaše AI může přečíst správný manuál a přesto doporučit postup pro jiný střídač. Stačí, aby vyhledávání přehlédlo dvě číslice v označení modelu. Větší generátor odpovědí tuhle chybu nemusí zachránit. Jen ji vysvětlí přesvědčivěji.
Vícevektorové embeddingy nabízejí způsob, jak při hledání zachovat více detailů. Sentence Transformers 6 pro ně přidává vlastní rozhraní i trénování. A nejde jen o laboratorní hračku: Tom Aarsen zveřejnil příklad oborového doladění na jediné RTX 3090, který běžel 14,5 hodiny. Výsledky se týkají jeho lékařského testu, nikoli automaticky vašich dokumentů. Přesto je to zajímavá vstupenka do světa vlastního vyhledávání. Původní návod na Hugging Face.
Jeden vektor může spolknout detail, který rozhoduje
Běžný embeddingový model převádí text na jeden vektor. Odstavec, dotaz nebo popis výrobku skončí jako seznam čísel. Vyhledávač potom porovnává jejich podobnost. Je to rychlé a úsporné, ale všechny informace se musí vejít do společné reprezentace.
Vícevektorový model zachovává vektory jednotlivých tokenů, tedy částí textu. Typická architektura ColBERT používá 128 rozměrů na token. Dotaz a dokument zpracuje samostatně. Teprve při vyhodnocení je porovná pomocí operátoru MaxSim: pro každý token dotazu najde nejpodobnější token dokumentu a výsledná maxima sečte. Tomu se říká pozdní interakce. Vysvětlení architektury a MaxSim.
Představte si dotaz „nastavení přetoků pro třífázový střídač při výpadku komunikace“. Nestačí najít text o fotovoltaice. Potřebujete současně správné zařízení, provozní situaci a konkrétní nastavení. Vícevektorové porovnávání dává jednotlivým požadavkům větší prostor.
Zázrak to ale není. MaxSim není kontrola logické správnosti a negace mu může pořád zamotat hlavu. Pro sériová čísla, přesné kódy chyb nebo identifikátory smluv proto ponechte také doslovné vyhledávání a filtry. Pokud uživatel zadá konkrétní číslo zařízení, databáze má ověřit shodu. Nemá o ní filozofovat.
Praktický návrh tedy začíná kombinací metod. Slovní vyhledávání zachytí přesné výrazy. Sémantické hledání parafráze. Vícevektorový model může rozhodnout, které kandidátní pasáže opravdu odpovídají podrobnostem dotazu.
Nejdřív připravte česká data. Grafika zatím počká
Pro český projekt začněte kandidátem s vícejazyčným zaměřením, například `lightonai/mLateOn`, dostupným na Hugging Face. Označení „vícejazyčný“ ale nenahrazuje český test. Vyzkoušejte skloňování, zkratky, překlepy i směs češtiny s anglickými názvy funkcí.
Jako pracovní rozsah pilotu si stanovte třeba 2 000 až 10 000 ručně zkontrolovaných dvojic. Není to garantované minimum. Je to rozumně ohraničený experiment. Každý záznam obsahuje dotaz a pasáž, která na něj skutečně odpovídá. Přidat můžete obtížný negativní příklad: podobný dokument se zásadním rozdílem.
U energetických podkladů může správná pasáž popisovat registraci skupiny sdílení, zatímco negativní příklad řeší registraci energetického společenství. Terminologie je podobná, úkol odlišný. Pro referenční odpovědi používejte například informace ERÚ o sdílení elektřiny, nikoli text vygenerovaný bez kontroly.
Dokumenty rozdělte na trénovací, validační a testovací část ještě před vytvářením otázek. Jinak se různé odstavce stejného manuálu snadno objeví na obou stranách. Model pak při zkoušce poznává učebnici.
Uchovávejte původ pasáže, datum platnosti a identifikátor dokumentu mimo textové vstupy trénování. Pro pracovní korpus mohou posloužit i veřejná vysvětlení témat na SdíleníElektřiny.com a Share-Electric.cz. Pravidla a číselné údaje však ověřujte proti primárním podkladům. Syntetické otázky berte jako návrhy k revizi, ne jako hotovou pravdu.
Chcete ušetřit na energiích?
Zjistěte, kolik můžete ušetřit sdílením elektřiny z FVE nebo optimalizací bateriového úložiště.
Spočítat úsporu →Trénování v Sentence Transformers: od instalace k vlastnímu modelu
Použijte samostatné prostředí. Následující příklad míří na rozhraní řady 6 a předpokládá funkční PyTorch s podporou vaší grafické karty:
```bash python3 -m venv .venv source .venv/bin/activate python -m pip install "sentence-transformers[train]>=6,<7" python -m pip freeze > zavislosti.txt ```
Připravte soubory `trenink.jsonl` a `validace.jsonl`. Každý řádek bude obsahovat dvě textová pole: `dotaz` a `pasaz`. Validační soubor musí vycházet z oddělených dokumentů. Další metadata k modelu neposílejte.
Níže je základní trénovací kostra podle dokumentace Sentence Transformers. Vyžaduje vlastní data; nejde o zde spuštěný experiment.
```python from datasets import load_dataset from sentence_transformers import ( MultiVectorEncoder, MultiVectorEncoderTrainer, MultiVectorEncoderTrainingArguments, ) from sentence_transformers.base.sampler import BatchSamplers from sentence_transformers.multi_vector_encoder.losses import ( MultiVectorMultipleNegativesRankingLoss, )
data = load_dataset( "json", data_files={ "train": "trenink.jsonl", "validation": "validace.jsonl", }, ) data = data.select_columns(["dotaz", "pasaz"])
model = MultiVectorEncoder( "lightonai/mLateOn", model_kwargs={"torch_dtype": "float32"}, )
nastaveni = MultiVectorEncoderTrainingArguments( output_dir="vystup", num_train_epochs=1, per_device_train_batch_size=8, per_device_eval_batch_size=8, learning_rate=2e-5, bf16=True, batch_sampler=BatchSamplers.NO_DUPLICATES, eval_strategy="epoch", save_strategy="epoch", logging_steps=20, report_to="none", )
trener = MultiVectorEncoderTrainer( model=model, args=nastaveni, train_dataset=data["train"], eval_dataset=data["validation"], loss=MultiVectorMultipleNegativesRankingLoss(model), )
trener.train() model.save_pretrained("model-energetika") ```
Uložte jej jako `trenovat.py` a spusťte příkazem `python trenovat.py`. Nastavení `bf16=True` vyžaduje kompatibilní hardware. Velikost dávky osm ani rychlost učení nejsou univerzální optimum. Jsou výchozím bodem.
Před dlouhým během zkontrolujte konfiguraci tokenizace a délkové limity modelu. Kritická věta na konci příliš dlouhé pasáže se může odříznout. Pro první pokus připravte krátké tematické úseky a ověřte jejich skutečnou délku tokenizátorem. Do záznamu experimentu přidejte revizi modelu, otisk dat a verze závislostí.
Co model učíte a proč samotných sto kroků nic neslibuje
Použitá ztrátová funkce zvýhodňuje správnou pasáž oproti ostatním dokumentům v dávce. Ty slouží jako negativní příklady. Pokud máte podobné, ale nesprávné pasáže připravené zvlášť, lze trénovat také na trojicích dotaz, správný dokument a nesprávný dokument. Podporované formáty shrnuje přehled ztrátových funkcí.
Pozor na falešné negativní příklady. Dvě různé stránky mohou správně odpovídat na tutéž otázku. Trénování je přesto může postavit proti sobě. Odstranění textových duplicit pomůže, ale významově rovnocenné odpovědi musí odhalit kontrola dat.
Při nedostatku paměti existuje také `CachedMultiVectorMultipleNegativesRankingLoss`. Umožňuje pracovat s větší dávkou přes menší dílčí výpočty. Obyčejná akumulace gradientů totiž sama nespojí negativní příklady ze všech mikrodávek do jednoho společného porovnání. Trénovací dokumentace.
A co lákavá představa doladit 350milionový model ve stovce kroků pomocí GRPO? U strukturovaných výstupů sledujete jiný cíl: například zda generátor dodrží formát odpovědi. Tady optimalizujete pořadí dokumentů. Počet kroků proto nelze přenést jako kuchařský recept.
Prvních sto kroků využijte pro kontrolu, že běh funguje, paměť stačí a ztráta nedělá nesmysly. O úspěchu rozhodne vyhledávání na odložených otázkách. Klesající křivka je příjemná podívaná, ale zákazník hledá správný odstavec, nikoli pěkný graf.
Kolik zaplatíte: elektřina bývá menší problém než index
Aarsenův běh na RTX 3090 trval 14,5 hodiny. Je to konkrétní publikovaný příklad, ne časový odhad pro libovolný korpus. Počet pasáží, jejich délka, dávka i průběžné vyhodnocování dobu výrazně mění. Popis experimentu.
Pro vlastní rozpočet použijme výslovně modelové předpoklady: celý počítač odebírá průměrně 450 wattů a elektřina stojí 6 Kč/kWh. Za 14,5 hodiny spotřebuje 6,525 kWh, tedy přibližně 39 Kč. Není v tom pořízení počítače, opotřebení ani práce člověka.
Pokud si dosadíte hypotetický pronájem GPU za 20 Kč za hodinu, stejná doba vyjde na 290 Kč. Tato sazba není aktuální nabídka poskytovatele. Připočtěte disk, případné přenosy a opakované pokusy. Hodina kontroly špatně označených dat může stát víc než celý výpočet.
Druhou položkou je úložiště. Následující výpočet předpokládá milion pasáží, 200 uložených tokenových vektorů na pasáž a dva bajty na číslo:
| Reprezentace | Samotná vektorová data | |---|---:| | Jeden vektor o 768 rozměrech | 1,536 GB | | 200 vektorů o 128 rozměrech | 51,2 GB |
Rozdíl je přibližně třiatřicetinásobný. Tabulka nezahrnuje indexovou režii, metadata ani zálohy.
Spotřebu měřte na celém stroji. Pro energetické sledování provozu je relevantní také IoT monitoring SmartEnergyShare; samo měření ale nenahrazuje profilování GPU. Širší souvislosti spotřeby výpočetních center rozebírá zpráva IEA o energetice a AI.
Nasazení bez zbytečně drahé infrastruktury
Nejprve zkuste dvoustupňové hledání. Levnější vyhledávač vybere například 100 kandidátů. Vícevektorový model je přerovná a generátoru předá několik nejlepších pasáží. Tím omezíte počet dokumentů, nad kterými počítáte podrobnou podobnost.
Pro uložení tokenových reprezentací můžete využít otevřenou databázi Qdrant. Podporuje vícevektorová pole s porovnáváním `MAX_SIM`; její dokumentace popisuje i přerovnávání předvybraných kandidátů. Nestačí založit několik běžných vektorových polí a předpokládat, že dostanete stejné chování. Návod Qdrantu.
Ollama se hodí jako jednoduchá místní vrstva pro generování odpovědí nebo jako základní varianta embeddingového vyhledávání. Její standardní embeddingové rozhraní vrací vektor pro každý vstup; nepovažujte je automaticky za náhradu tokenového výstupu ColBERTu. Dokumentace embeddingů Ollama.
LoRA představuje další možnost úspory při doladění. Místo aktualizace všech vah trénuje malé přídavné matice. Snižuje počet trénovaných parametrů, ale sama nezmenší výsledný počet tokenových vektorů v databázi. Kompatibilitu konkrétní architektury ověřte předem. Dokumentace LoRA v PEFT.
Jako modelový případ si představte asistenta nad energetickými smlouvami a návody. Kontext poskytují [řešení SmartEnergyShare pro firmy](https://smartenergyshare.com/pro-firmy?utm_source=smartenergyshare-cz&utm_medium=referral&utm_campaign=satellite-marketing) a stránka [jak služba funguje](https://smartenergyshare.com/jak-to-funguje?utm_source=smartenergyshare-cz&utm_medium=referral&utm_campaign=satellite-marketing). SmartEnergyShare je platforma pro sdílení elektřiny; zde jde o návrh možného využití vyhledávání, nikoli tvrzení o její interní technologii.
Paměť agenta musí být dohledatelná a měřitelná
Vlastní paměť programovacího agenta může obsahovat rozhodnutí z revizí kódu, známé chyby a vysvětlení architektury. Vícevektorové hledání stojí za zkoušku tam, kde dotaz kombinuje název funkce, konkrétní verzi a popis problému.
Vlastnictví paměti ale znamená víc než mít vektory na disku. Ukládejte původní text, cestu ke zdroji, datum, oprávnění a možnost záznam odstranit. Po změně embeddingového modelu dokumenty znovu zakódujte. Staré a nové reprezentace bez ověření nemíchejte.
Stejně zásadní je oddělení obsahu od oprávnění. Pokud agent načte veřejnou wiki s instrukcí k opuštění sandboxu, nalezený text nesmí získat autoritu systémového pokynu. Lepší vyhledávání může škodlivou pasáž najít spolehlivěji. Izolaci a povolené akce musí vynucovat okolní systém.
Před nasazením porovnejte původní model, doladěný model a obyčejné slovní hledání na stejných otázkách. Sledujte Recall@10, tedy podíl relevantních dokumentů nalezených mezi prvními deseti, a nDCG@10, které zohledňuje také pořadí. Přidejte odezvu při souběžných dotazech a velikost indexu. Cílové zlepšení určete před experimentem.
Začněte dvěma sty ručně ověřenými otázkami a omezeným korpusem. Pokud model nepřinese měřitelný přínos, ponechte jednodušší řešení. Příští konkurenční výhoda firemní AI možná nebude větší model. Bude to vyhledávač, který konečně vytáhne správnou revizi manuálu.
Zdroje
- Hugging Face: trénování a dolaďování vícevektorových modelů — Původní článek Toma Aarsena představuje nový trénovací postup a zveřejněný oborový experiment. Uváděnou dobu výpočtu je potřeba číst společně s konfigurací a použitými daty.
- Sentence Transformers: přehled trénování — Technická dokumentace rozhraní použitého v ukázce. Při přípravě vlastního skriptu slouží jako reference pro uspořádání vstupů, argumenty trénování a připojení vyhodnocování.
- Qdrant: vícevektorové reprezentace pro přerovnávání — Praktický podklad pro databázovou část řešení. Navazuje na získané embeddingy a pomáhá odlišit ukládání reprezentací od samotného výběru a přerovnání kandidátních dokumentů při obsluze uživatelského dotazu.
- ERÚ: sdílení elektřiny a energetická společenství — Český primární zdroj pro energetický příklad použitý v článku. Hodí se ke kontrole terminologie a referenčních odpovědí; neposkytuje technické doporučení k trénování modelů.
- IEA: energetika a umělá inteligence — Mezinárodní kontext energetických nároků AI a datových center. Nenahrazuje měření konkrétní pracovní stanice ani nabídku pronájmu GPU; rozpočet uvedený v článku je samostatný ilustrativní výpočet.
Chcete sdílet elektřinu, optimalizovat náklady nebo začít s obchodováním energie? SmartEnergyShare je platforma pro sdílení energie z FVE, správu bateriových úložišť a chytré řízení spotřeby. Registrace zdarma →
Další články na toto téma najdete na: Share-Electric.cz Příklad výstupu EMO monitoring sidecar Vice o sdílení elektřiny