Embedding: číselná reprezentace textu pro vyhledávání podobností

Embedding: Číselná reprezentácia textu pre vyhľadávanie podobností

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, pak cos(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

  1. Ingest: procházení webu, extrakce textu, čištění, dělení na chunky, generování embeddingů + metadat.
  2. Úplnost: vyhledání top-K pasáží pomocí ANN; případně hybridně s BM25.
  3. Přerovnání výsledků: cross-encoder pro top-K, odstranění redundance (MMR – Maximal Marginal Relevance).
  4. Sestavení promptu: výběr top-M pasáží v rámci rozumného limitu tokenů; doplnění citací (URL#id).
  5. 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

  1. Vyberte model podle jazyka/domény a stanovte dimenzi s ohledem na náklady.
  2. Zaveďte konzistentní L2 normalizaci a verzování (model, tokenizer, dimenze, normalizace).
  3. Rozdělte obsah na chunky (200–400 tokenů), s 10–20% překryvem a kotvami #id.
  4. Indexujte pomocí HNSW nebo IVF-PQ podle velikosti korpusu; zaznamenávejte parametry.
  5. Zapněte hybridní vyhledávání a přerovnávání výsledků pomocí cross-encoderu pro top-100.
  6. Vyhodnocujte Recall@10, MRR a nDCG; sledujte metriky na úrovni odpovědí po RAG.
  7. Zajistěte sanitizaci osobních údajů, právo na výmaz a oddělené indexy podle přístupových práv.
  8. 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.