Embedding
Úvod: co je embedding a proč je klíčový
Embedding je číselný vektor, který reprezentuje text (slovo, větu, odstavec, dokument) v spojitém prostoru tak, aby geometrická blízkost vektorů korelovala se sémantickou příbuzností. V moderním SEO, AIO/AEO a optimalizaci webů pro LLM umožňuje přesné párování záměru uživatele s obsahem i v případě synonym, parafrází či vícejazyčných dotazů. Embeddingy jsou základem pro RAG (Retrieval-Augmented Generation), deduplikaci, klasifikaci, shlukování a doporučování obsahu.
Pojmový rámec a terminologie
- Vstup: tokenizovaný text (slova/subwordy/znaky), případně multimodální vstupy (obrázky, zvuk).
- Model: neuronová síť trénovaná na úloze kontrastivního učení nebo jazykového modelování.
- Vektor: reálná čísla délky d (např. 384, 768, 1024…), často s jednotkovou normou.
- Podobnost: číselné skóre vyjadřující blízkost (kosinus, skalární součin, vzdálenost L2).
- ANN index: datová struktura pro rychlé vyhledání nejbližších sousedů v prostoru embeddingů.
Matematické základy: vektorový prostor a metriky
Nechť u, v ∈ ℝd jsou embeddingy. Používané metriky a transformace:
- Kosinusová podobnost:
cos(u,v) = (u·v) / (||u|| · ||v||). Je invariantní vůči měřítku; měří úhel mezi vektory. - Skalární součin:
u·v. Je rychlý, ale závisí na normě; často se kombinuje s normalizací. - Eukleidovská vzdálenost (L2):
||u−v||2. Vhodná, jsou-li vektory normalizovány. - Vztah metriky a normalizace: pokud
||u||=||v||=1, pakcos(u,v) = 1 − (1/2)||u−v||2.
Rozdělení: Vektory z moderních modelů mají pseudo-gaussovské rozdělení složek a tendenci ke koncentraci měr; proto je důležité porovnávat skóre v rámci téže domény/modelu a používat kalibraci prahů.
Normalizace, škálování a centrální limitace chyb
- L2 normalizace: transformace
u ← u / ||u||zajistí robustnost vůči délce textu a stabilitu kosinusové metriky. - Mean-centering: odečtení globálního průměru složek může potlačit dominantní směry (tzv. „common component removal“).
- Ošetření odlehlých hodnot: ořezání složek (např. na ±3σ) snižuje vliv extrémních hodnot při indexování ANN.
- Kalibrace skóre: používejte validační sady a izotonickou regresi nebo prahování podle požadované přesnosti/úplnosti.
Dimenzionalita, komprese a kompromisy
- Vysoká dimenze (≥768): vyšší přesnost, ale větší nároky na paměť a pomalejší ANN.
- Nižší dimenze (256–512): vyšší rychlost a nižší náklady, mírná ztráta přesnosti.
- PCA/OPQ: lineární redukce dimenze; Product Quantization (PQ) výrazně šetří RAM při přijatelném poklesu kvality.
- Float16/Int8: kvantizace pro inferenci i ukládání indexu (latence ↔ přesnost).
Tvorba embeddingů: vstupy, tokeny, kontext
- Granularita: generujte vektory pro věty/odstavce/stránky podle způsobu použití. Pro vyhledávání RAG je optimální odstavec (100–300 slov).
- Předzpracování: odstraňte balast, navigaci a skrytý šum; zachovejte klíčové entity, čísla a jednotky (
%,€). - Promptované varianty: pro dotazy (query) a dokumenty (passage) může model používat různé hlavy; dodržujte doporučený režim.
- Stabilita: verzujte model, tokenizer a parametry (dimenzi, normalizaci), aby byly výsledky reprodukovatelné.
Vícejazyčnost, přizpůsobení doméně a drift
- Vícejazyčnost: vícejazyčné embeddingy mapují výrazy z různých jazyků do společného prostoru; jsou vhodné pro domény .com a mezinárodní SEO.
- Přizpůsobení doméně: dodatečné trénování na vlastním korpusu (kontrastivní páry Q–A, titulek–odstavec) výrazně zvýší přesnost.
- Drift modelu: sledujte posun skóre v čase (posun rozdělení); při opětovném nasazení zachovejte dvojitý index a postupnou migraci.
Dělení dokumentů na chunky a kontextové okno
- Velikost chunku: 200–400 tokenů pro obecné texty; více pro technické dokumenty s rovnicemi/tabulkami.
- Překryv: 10–20 % snižuje riziko ztráty souvislostí na hranicích chunků.
- Kotvy: každý chunk má fragment URL
#id, aby asistenti citovali konkrétní pasáž.
Indexování a vyhledávání: ANN, HNSW, IVF, PQ
- HNSW (Hierarchical Navigable Small World): vynikající poměr přesnosti a latence; vyšší nároky na paměť. Parametry:
M,efConstruction,efSearch. - IVF (Inverted File Index): centra k-means; rychlý u velkých korpusů, dobře se kombinuje s PQ.
- PQ/OPQ: kvantizace vektorů do podprostorů; snižuje nároky na paměť i I/O.
- Flat (brute-force): maximální přesnost, vhodný pro malé kolekce nebo jako zlatý standard.
- Škálování: horizontální rozdělení na shardy podle hashování nebo tematických clusterů; repliky pro vysokou dostupnost.
Hybridní vyhledávání: BM25 × vektorová podobnost
Kombinace lexikálního skóre (BM25) a sémantické podobnosti řeší případy, kdy v textu dotazu nebo dokumentu chybějí klíčové entity.
- Fúze skóre:
score = λ · rankBM25 + (1−λ) · rankVec(Reciprocal Rank Fusion nebo normalizace z-skóre). - Bezpečnostní pojistka: pokud vektorová složka nenajde relevantní výsledky, vraťte top-N výsledků BM25.
Přerovnávání výsledků, filtrování a metadata
- Modely pro přerovnávání: cross-encoder (nákladnější, přesný) pro top-100 kandidátů z ANN.
- Filtry: strukturovaná metadata (jazyk, datum, typ obsahu) uplatněte před/po ANN.
- Odstraňování duplicit: blízké duplicity identifikujte pomocí kosinového prahu (např. > 0,95 po L2 normalizaci).
Embeddingy v pipeline RAG pro ChatGPT/LLM
- Ingest: procházení webu, extrakce textu, čištění, dělení na chunky, generování embeddingů + metadat.
- Úplnost: vyhledání top-K pasáží pomocí ANN; případně hybridně s BM25.
- Přerovnání výsledků: cross-encoder pro top-K, odstranění redundance (MMR – Maximal Marginal Relevance).
- Sestavení promptu: výběr top-M pasáží v rámci rozumného limitu tokenů; doplnění citací (URL#id).
- Odpověď: generování + následné zpracování (zdroje, data, jednotky); zaznamenávání logů pro observabilitu.
Hodnocení: Recall@k, MRR, nDCG, A/B
- Recall@k: podíl otázek, u kterých se relevantní pasáž objeví v top-k.
- MRR: průměrná převrácená pozice prvního relevantního výsledku.
- nDCG: hodnotí pořadí pasáží s různou mírou důležitosti (stupňovaná relevance).
- Metriky na úrovni odpovědí: přesnost odpovědi po RAG (Exact Match, F1), lidské hodnocení.
- A/B: porovnání modelů, dimenzí, prahů a hybridní fúze v reálném provozu.
Provoz: latence, cache, náklady a škálování
- Cache: LRU cache pro embeddingy dotazů; výsledky ANN ukládejte do cache pro často používané dotazy.
- Dávkování: dávkování při generování embeddingů výrazně snižuje náklady na 1 000 tokenů.
- Průběžné aktualizace: indexování téměř v reálném čase prostřednictvím „delta indexu“ a pravidelného sloučení.
- Monitoring: latence P50/P95, chybovost, velikost indexu, drift skóre, Recall@k v jednotlivých kanálech.
Bezpečnost, soukromí a soulad s předpisy (GDPR)
- Minimalizace osobních údajů: před generováním embeddingů osobní údaje zahashujte/anonymizujte.
- Právo na výmaz: udržujte mapování dokument → vektory → index; umožněte rychlé vyřazení a opětovné sestavení.
- Kontrola rozsahu: oddělené indexy pro „interní“ a „veřejná“ data; autorizace výsledků vyhledávání.
- Licence: při ingestování obsahu do vektorového indexu respektujte licenční podmínky zdrojů.
Antivzory a diagnostika problémů
- Smíšené verze modelu: v jednom indexu jsou vektory z r0 a r1 – skóre nelze porovnávat; vždy verzujte a migrujte dávkově.
- Příliš dlouhé chunky: „rozmazaná“ reprezentace, nízká přesnost; zmenšete je a přidejte překryv.
- Bez normalizace: délka dokumentů dominuje skóre; použijte L2.
- Chybějící metadata: nelze filtrovat podle jazyka, data ani typu – slabé výsledky z hlediska záměru.
- Nesmyslné prahy: globální práh pro různé domény; kalibrujte lokálně.
Osvědčené postupy a implementační kontrolní seznam
- Vyberte model podle jazyka/domény a stanovte dimenzi s ohledem na náklady.
- Zaveďte konzistentní L2 normalizaci a verzování (model, tokenizer, dimenze, normalizace).
- Rozdělte obsah na chunky (200–400 tokenů), s 10–20% překryvem a kotvami
#id. - Indexujte pomocí HNSW nebo IVF-PQ podle velikosti korpusu; zaznamenávejte parametry.
- Zapněte hybridní vyhledávání a přerovnávání výsledků pomocí cross-encoderu pro top-100.
- Vyhodnocujte Recall@10, MRR a nDCG; sledujte metriky na úrovni odpovědí po RAG.
- Zajistěte sanitizaci osobních údajů, právo na výmaz a oddělené indexy podle přístupových práv.
- Sledujte drift a pravidelně znovu vytvářejte embeddingy dynamických částí obsahu.
Přílohy: příklady schémat a výpočtů
Příklad JSON metadat jednoho chunku:
{ "doc_id": "manuál-123", "chunk_id": "manuál-123#c07", "lang": "sk", "title": "Instalace – kroky", "created_at": "2025-09-15", "updated_at": "2025-10-01", "entities": ["ProduktX", "Windows 11"], "hash": "sha256:…", "license": "CC BY 4.0", "url": "https://example.com/navod#c07" }
Kalibrace prahu podobnosti: z validační sady vypočítejte rozdělení cos(u,v) pro pozitivní/negativní páry a zvolte práh τ tak, aby maximalizoval F1 nebo splnil požadovanou precision (např. 0,9).
Výběr pasáží pomocí MMR: iterativně vybírejte pasáže, které maximalizují λ · sim(q, p) − (1−λ) · maxp'∈S sim(p, p'), čímž snižujete redundanci.
