SmartEnergyShare.info
Technologie

Vaše AI možná potřebuje lepší hledání. Větší model to nezachrání

Vaše AI možná potřebuje lepší hledání. Větší model to nezachrání - Technologie | SmartEnergyShare

Stačila jedna RTX 3090 a 14,5 hodiny trénování. Tom Aarsen na ní připravil specializovaný vyhledávací model, který v jeho medicínském testu překonal porovnávané univerzální modely. Žádná serverovna za miliony. Hlavně správná data a úloha, kterou šlo rozumně změřit. Výsledek popsal v návodu na Hugging Face.

Má to ovšem háček. Stejné dotrénování některé jiné výchozí modely zhoršilo. Tlačítko „trénovat“ tedy není automat na inteligenci. A právě proto stojí vícevektorové embeddingy za bližší pohled.

Vaše AI možná potřebuje lepší hledání. Větší model to nezachrání

Představte si firemního asistenta, který má najít postup pro restart konkrétního střídače. Vrátí obecný návod k fotovoltaice. Odpověď zní sebevědomě, terminologie sedí, jen ten správný přístroj nikde. Generátor přitom může fungovat přesně podle zadání. Chyba vznikla o krok dřív, při výběru podkladů.

Běžný embeddingový model převede text na jeden číselný vektor. Ten zastupuje celý odstavec nebo dokument. Je to praktické a úsporné. Jenže identifikátor zařízení, drobná výjimka nebo odborný výraz se při takovém zhuštění mohou ztratit.

Vícevektorový model uchovává reprezentace jednotlivých tokenů, tedy částí textu. Dotaz a dokument porovnává podrobněji. U klasického přístupu ColBERT hledá operace MaxSim pro každý token dotazu nejlepší odpovídající token dokumentu. Výsledná skóre se sečtou. Podrobnosti vysvětluje průvodce vícevektorovými modely.

To ovšem nezaručuje správné pochopení čísel, záporů ani podmínek. Podobnost pořád není logický důkaz. Pro přesný kód chyby proto zachovejte také klasické textové vyhledávání.

Praktický návrh? Nejprve levně vyberte kandidáty pomocí BM25 nebo jednovektorového modelu. Vícevektorovým modelem potom přepočítejte jejich pořadí. Počet kandidátů, například 100, berte jako parametr experimentu. Pokud správný dokument neprojde prvním kolem, druhé kolo ho zázračně nevykouzlí.

Vyberte základ podle dat, ne podle nejhezčího žebříčku

Sentence Transformers 6.0 přidává třídu `MultiVectorEncoder` a související trénovací rozhraní. Odpadá tedy část skládání vlastního trénovacího systému. Neodpadá rozhodování, co vlastně učíte. Dostupné rozhraní popisuje dokumentace knihovny.

Rozdíl mezi trénováním od začátku a dotrénováním je zásadní. Pro první firemní projekt použijte existující vícevektorový model. Při vytvoření modelu ze základního transformátoru může vzniknout nová, náhodně inicializovaná projekční vrstva. Takový model potřebuje trénování, než začne smysluplně vyhledávat.

Zajímavým kandidátem je `lightonai/mLateOn-unsupervised`. Jeho modelová karta uvádí licenci Apache 2.0. Název „unsupervised“ neznamená prázdný mozek. Jde o předtrénovaný základ určený k dalšímu přizpůsobení.

Aarsen na 25 000 medicínských dvojicích zlepšil tento model z NDCG@10 0,9087 na 0,9398. Naproti tomu `lightonai/LateOn` stejný experiment zhoršil z 0,9185 na 0,9105. Výsledky patří ke konkrétnímu testu; nejsou příslibem pro české smlouvy nebo servisní protokoly. Viz tabulka experimentů.

Pro češtinu si proto připravte vlastní zkoušku. Zahrňte skloňování, zkratky, překlepy a dotazy kombinující český popis s anglickým označením součástky. Nálepka „vícejazyčný“ není certifikát kvality pro každý jazyk.

Před stahováním si také ujasněte licenci dat. Otevřené váhy modelu vám automaticky nedávají právo využít cizí databázi zákaznických požadavků.

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 →

Nejdražší surovina nejsou grafické karty. Jsou to správné dvojice

Základní trénovací příklad tvoří dotaz a relevantní pasáž. Třeba „Kde změním omezení přetoků?“ a odstavec skutečného návodu, který daný postup vysvětluje. Do pozitivního příkladu nepatří libovolný text obsahující slovo „přetok“.

Pro první pilot bych připravil několik tisíc ověřených dvojic. Je to návrh pracovního rozsahu, nikoli univerzální minimum. Začněte skutečnými dotazy podpory. Syntetické otázky mohou dataset rozšířit, ale část ručně zkontrolujte. Generátor rád prozradí odpověď už neobvykle přesnou formulací otázky. Pak testujete spíš opisování než hledání.

Data rozdělte podle původních dokumentů. Pokud se sousední odstavce stejného manuálu dostanou do trénování i testu, výsledek může působit lepší, než bude v provozu. U verzovaných příruček hlídejte také téměř totožná vydání.

Přidejte obtížné negativní příklady: dokumenty, které vypadají relevantně, ale odpověď neobsahují. Návod pro jiný střídač stejné značky je užitečnější než recept na bábovku. Zároveň ověřte, že negativní dokument skutečně není správnou alternativní odpovědí.

Důležitá je délka pasáží. Rozdělujte je podle významových celků a zachovejte nadpisy. Odstavec začínající „Tato výjimka neplatí…“ bez předchozího kontextu často nikomu nepomůže.

Pro trénování připravte soubor `trenink.jsonl`, jeden záznam na řádek:

```json {"dotaz":"Jak obnovím komunikaci měřidla?","pasaz":"Ověřený postup z příslušného servisního návodu."} ```

Text pasáže nahraďte skutečným podkladem. Příklad ukazuje pouze formát, nikoli použitelná trénovací data.

První trénink: krátký skript, několik důležitých pastí

Začněte v odděleném prostředí. Následující příkazy předpokládají Linux, Python a funkční instalaci PyTorch s podporou vaší grafické karty:

```bash python -m venv .venv source .venv/bin/activate python -m pip install -U "sentence-transformers[train]>=6,<7" python -m pip freeze > zavislosti.txt ```

Uložený seznam verzí se hodí při opakování experimentu. Stejně zaznamenejte revizi modelu a podobu datasetu. Jinak budete za měsíc luštit, proč „ten samý“ trénink dává jiné výsledky.

Toto je výchozí skript pro pilot, nikoli zde provedený benchmark:

```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 ( CachedMultiVectorMultipleNegativesRankingLoss, )

data = load_dataset( "json", data_files="trenink.jsonl", split="train" ).select_columns(["dotaz", "pasaz"])

model = MultiVectorEncoder( "lightonai/mLateOn-unsupervised", model_kwargs={"torch_dtype": "float32"}, processor_kwargs={"model_max_length": 512}, )

ztrata = CachedMultiVectorMultipleNegativesRankingLoss( model=model, mini_batch_size=2, )

nastaveni = MultiVectorEncoderTrainingArguments( output_dir="vystup", num_train_epochs=1, per_device_train_batch_size=32, learning_rate=2e-5, bf16=True, prompts={"dotaz": "[Q] ", "pasaz": "[D] "}, batch_sampler=BatchSamplers.NO_DUPLICATES, logging_steps=10, save_strategy="epoch", report_to="none", )

trener = MultiVectorEncoderTrainer( model=model, args=nastaveni, train_dataset=data, loss=ztrata, ) trener.train() model.save_pretrained("model-pro-vyhledavani") ```

Rozhraní a formát vstupů vycházejí z dokumentace trénování. Pořadí sloupců zde určuje jejich roli. Značky `[Q]` a `[D]` odpovídají zvolenému modelu; při změně modelu je ověřte.

Limit 512 tokenů je úsporná volba pro krátké pasáže. Delší vstupy ořízne. `bf16=True` vyžaduje odpovídající podporu hardwaru a softwaru.

Použitá ztrátová funkce pracuje s ostatními dokumenty v dávce jako s negativními příklady. Její varianta s mezipamětí omezuje nároky zpracováním po menších částech. Běžná akumulace gradientů tento mechanismus sama nenahrazuje. Podrobnosti nabízí přehled ztrátových funkcí.

Kolik to stojí a kdy pomůže LoRA

Jedna spotřebitelská karta může stačit, jak ukazuje úvodní experiment. Délku vlastního běhu ale zjistíte měřením. Závisí na počtu příkladů, délce textů, velikosti modelu i nastavení dávek.

Nejprve spusťte několik desítek kroků. Sledujte obsazenou paměť, dobu kroku a případné chyby. Pro základní kontrolu NVIDIA karty poslouží:

```bash nvidia-smi ```

Rozpočet oddělte od marketingových cen. Pokud celý počítač během patnáctihodinového trénování odebírá průměrně 450 W, spotřebuje 6,75 kWh. Při modelové ceně 6 Kč/kWh vychází elektřina na 40,50 Kč. Nezahrnuje to nákup počítače, opotřebení ani práci.

U pronájmu použijte stejnou matematiku. Při hypotetické sazbě 20 Kč za hodinu zaplatíte za 15 hodin 300 Kč. Nejde o aktuální nabídku poskytovatele. Připočítejte případné úložiště a opakované experimenty. Deset nepovedených běhů už je jiná položka.

Pokud narážíte na paměť, zvažte LoRA přes knihovnu PEFT. Trénuje menší sadu přidaných parametrů místo celého základu. Sentence Transformers podporuje adaptéry také u vícevektorových modelů. Projekční vrstva mimo základní transformátor přitom může zůstat plně trénovatelná. Viz návod k adaptérům.

LoRA ovšem nezmenší automaticky budoucí index dokumentů. Šetří hlavně část trénovacích nároků. Pořád musíte zpracovat tokeny a spočítat jejich vzájemné podobnosti.

Skutečný účet přijde při indexování a měření kvality

Spočítejme si čistá data. Jeden dokument se 180 uloženými tokenovými vektory, každý o 128 rozměrech ve dvoubajtovém formátu, zabere 46 080 bajtů. Milion dokumentů znamená přibližně 46 GB. Bez metadat a režie vyhledávacího indexu.

Pro srovnání: milion jednovektorových reprezentací o 768 rozměrech ve stejném formátu představuje přibližně 1,54 GB. V tomto modelovém příkladu je rozdíl třicetinásobný. Konkrétní systém může používat jiné délky, rozměry nebo kompresi.

Proto měřte celý postup. Sledujte Recall@10, tedy podíl relevantních dokumentů nalezených mezi prvními deseti výsledky. Přidejte NDCG@10, které zohledňuje jejich pořadí. A také latenci p95: čas, do něhož se vejde 95 procent dotazů.

Pro pilot si odložte například 300 ručně posouzených otázek. Stejnými otázkami porovnejte BM25, původní embeddingový model a dotrénovanou variantu. Model vybírejte na validační sadě. Závěrečný test nechte stranou až do konce.

Ollama se hodí pro jednoduché lokální experimenty a provoz generátoru odpovědí. Její dokumentované embeddingové rozhraní vrací jeden vektor na vstupní text. Vícevektorové vyhledávání proto není pouhá výměna názvu modelu ve stejném požadavku.

Po dotrénování také znovu zakódujte dokumenty. Starý index a nové dotazové reprezentace mohou být neslučitelné. Model i index nasazujte jako společnou verzi a uchovejte možnost návratu.

Energetický asistent musí poznat rozdíl mezi manuálem a předpovědí

V energetice se nabízí konkrétní využití: hledání v provozních postupech, smlouvách a servisních protokolech. Materiály ke sdílení elektřiny nebo k řešením pro firmy mohou posloužit jako tematický základ návrhu asistenta. Nejde o tvrzení, že tyto stránky popsaný model používají.

Oddělte přitom dokumenty od měření. Asistent může najít význam alarmu. Aktuální hodnotu spotřeby ale musí získat z datového systému, například z vrstvy IoT monitoringu. Vektorová podobnost elektroměr nenahradí.

Podobně IBM Granite Time Series PatchTST-FM-r2 řeší předpovědi časových řad, nikoli hledání textových pasáží. IBM jej představuje s komerčně použitelnou licencí; jeho výsledky je potřeba hodnotit v příslušných prognostických úlohách. Viz oznámení IBM.

Širší nabídku energetických služeb najdete na smartenergyshare.com. Pro související čtení o cenách a nákupu energie poslouží [ShareElectric.cz](https://share-electric.cz). Pravidla sdílení ověřujte u [ERÚ](https://eru.gov.cz/sdileni-elektriny-energeticka-spolecenstvi), nikoli podle sebevědomí chatbota.

Před nasazením nastavte přístupová práva k dokumentům a zobrazování zdrojů. Správně nalezená smlouva je pořád problém, pokud ji vidí nesprávný zaměstnanec.

Začněte tedy stovkami skutečných otázek a měřením. Moje sázka: řadě firem přinese lepší vyhledávání větší užitek než další zvětšování generátoru. Nejdřív to ale musí prokázat jejich vlastní test.

Zdroje

  • Hugging Face: trénování vícevektorových modelů — Primární zdroj uvedeného experimentu na RTX 3090 a srovnání výchozích modelů. Výsledky se vztahují k autorově medicínské evaluaci. Pomohou sestavit hypotézu pro vlastní test, nepředstavují předem daný výsledek pro jiný obor nebo češtinu.
  • Sentence Transformers: dokumentace trénování — Technický podklad pro přípravu dat, volbu modelu a propojení trénovacích komponent. Při úpravě ukázkového skriptu kontrolujte dokumentaci odpovídající instalované verzi knihovny, zejména pořadí vstupů, délkové limity a nastavení vyhodnocování.
  • Sentence Transformers: trénování s adaptéry PEFT — Praktický zdroj k použití LoRA u vícevektorových modelů. Vysvětluje zapojení adaptérů do základního transformátoru i postavení projekční vrstvy. Hodí se při rozhodování, které parametry trénovat a kde hledat paměťové úspory.
  • ERÚ: sdílení elektřiny a energetická společenství — Český primární zdroj pro energetický příklad. Slouží k ověřování pravidel a pojmů, které by případný asistent citoval uživateli. Technickou kvalitu embeddingových modelů neposuzuje.
  • IEA: energetika a umělá inteligence — Mezinárodní kontext vztahu výpočetní infrastruktury a energetiky. Pro rozpočet konkrétního trénování však použijte vlastní měření příkonu, skutečnou délku běhu a cenu elektřiny; makroekonomická zpráva tyto provozní údaje nenahradí.

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: RPSavings.cz SmartEnergyShare není dodavatel elektřiny: Jak funguje el... Vice o sdílení elektřiny