Vektorové reprezentace (embedding) v SEO a analýze textu

Embedding

Úvod: co je embedding a proč je klíčový

Embedding je číselný vektor, který reprezentuje text (slovo, větu, odstavec, dokument) v kontinuálním prostoru tak, aby geometrická blízkost vektorů korelovala sémantickou příbuzností. V moderním SEO, AIO/AEO a optimalizaci LLM webů umožňuje přesné párování úmyslu uživatele s obsahem i při synonymii, parafrázích či vícejazyčných dotazech. Embeddingy jsou základem pro RAG (Retrieval-Augmented Generation), deduplikaci, klasifikaci, klastrová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 v jednotkové normě.
  • Podobnost: číselné skóre vyjadřující blízkost (kosinus, skalární součin, L2 vzdálenost).
  • 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||). Invariantní vůči škále; měří úhel mezi vektory.
  • Skalární součin: u·v. Rychlý, ale závislý na normě; často se kombinuje s normalizací.
  • Euclidovská vzdálenost (L2): ||u−v||2. Vhodná, pokud jsou vektory normalizované.
  • Vazba metriky a normalizace: pokud ||u||=||v||=1, potom cos(u,v) = 1 − (1/2)||u−v||2.

Distribuce: Vektory z moderních modelů mají pseudo-gaussovské rozložení komponent a tendenci ke koncentraci měr; proto je důležité porovnávat skóre v rámci stejné 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 komponent může potlačit dominantní směry (tzv. „common component removal“).
  • Zpracování odlehlých hodnot: ořezávání komponent (např. na ±3σ) snižuje vliv extrémů při ANN indexaci.
  • Skórovací kalibrace: používejte validační sady a isotonickou regresi nebo prahování podle požadované přesnosti/recall.

Dimenzionalita, komprese a trade-offy

  • Vysoká dimenze (≥768): vyšší přesnost, ale větší paměťové nároky a pomalejší ANN vyhledávání.
  • Nižší dimenze (256–512): rychlost a nižší náklady, mírná ztráta přesnosti.
  • PCA/OPQ: lineární redukce dimenzionality; Product Quantization (PQ) výrazně šetří RAM s akceptovatelným poklesem 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 účelu. Pro vyhledávání v RAG je optimální odstavec (100–300 slov).
  • Předzpracování: odstranit boilerplate, navigaci, skrýt šum; zachovat klíčové entity, čísla a jednotky (%, ).
  • Promptované nuance: pro dotazy (query) a dokumenty (passage) může model používat odlišné hlavy; dodržte doporučený režim.
  • Stabilita: verzujte model, tokenizer a parametry (dimenze, normalizace), aby byly výsledky reprodukovatelné.

Multijazyčnost, doménové přizpůsobení a drift

  • Multilingvní: vícejazyčné embeddingy mapují výrazy z různých jazyků do společného prostoru; vhodné pro .com domény a mezinárodní SEO.
  • Doménová adaptace: doplňkové tréninky na vlastním korpusu (kontrastivní páry Q–A, titulek–odstavec) výrazně zlepší přesnost.
  • Modelový drift: sledujte posun skóre v čase (posun distribucí); při redeployi udržujte dvojitý index a postupnou migraci.

Chunkování dokumentů a okno kontextu

  • Velikost chunku: 200–400 tokenů pro obecné texty; delší pro technické dokumenty s rovnicemi/tabulkami.
  • Překryv: 10–20 % snižuje riziko ztráty souvislosti na hranách chunků.
  • Kotvy: každý chunk má URL fragment #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řesnost/latence; paměťově náročnější. Parametry: M, efConstruction, efSearch.
  • IVF (Inverted File Index): k-means centroidy; rychlý při velkých korpusech, dobře se kombinuje s PQ.
  • PQ/OPQ: kvantizace vektorů do subprostorů; snižuje paměť i I/O nároky.
  • Flat (brute-force): maximální přesnost, vhodný pro malé kolekce nebo jako zlatý standard.
  • Škálování: horizontální shardování podle hashování nebo podle clusterů témat; 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 chybí klíčové entity v textu dotazu nebo dokumentu.

  • Skórovací fúze: score = λ · rankBM25 + (1−λ) · rankVec (Reciprocal Rank Fusion nebo z-score normalizace).
  • Fail-safe: pokud vektorová složka nenajde relevantní výsledky, vraťte top-N BM25.

Reranking, filtrace a metadata

  • Rerank modely: cross-encoder (nákladnější, přesný) na top-100 kandidátů z ANN.
  • Filtry: strukturovaná metadata (jazyk, datum, typ obsahu) aplikujte před/po ANN.
  • De-dup: blízké duplicity identifikujte prahem kosinu (např. > 0,95 po L2 normalizaci).

Embeddings v RAG pipeline pro ChatGPT/LLM

  1. Ingest: crawling, extrakce textu, čištění, chunkování, generování embeddingů + metadat.
  2. Recall: ANN vyhledání top-K pasáží; volitelně hybrid s BM25.
  3. Rerank: cross-encoder pro top-K, odstranění redundance (MMR – Maximal Marginal Relevance).
  4. Skladba promptu: výběr top-M pasáží pod rozumný limit tokenů; doplnění citací (URL#id).
  5. Odpověď: generace + postprocessing (zdroje, data, jednotky); logging pro observabilitu.

Hodnocení: Recall@k, MRR, nDCG, A/B

  • Recall@k: podíl otázek, pro které se relevantní pasáž objeví v top-k.
  • MRR: průměrná inverzní pozice prvního relevantního výsledku.
  • nDCG: hodnotí pořadí s různou důležitostí pasáží (graded relevance).
  • Answer-level metriky: přesnost odpovědi po RAG (Exact Match, F1), lidské hodnocení.
  • A/B: srovnání modelů, dimenzí, prahů, hybridní fúze v reálném provozu.

Provoz: latence, cache, náklady a škálování

  • Cache: LRU cache na embeddingy dotazů; výsledky ANN cacheujte pro „hot queries“.
  • Batching: dávkování při generování embeddingů výrazně snižuje cenu na 1k tokenů.
  • Streaming aktualizací: near-real-time indexace přes „delta index“ a pravidelné slučování.
  • Monitoring: latence P50/P95, chybovost, velikost indexu, drift skóre, Recall@k na kanálech.

Bezpečnost, soukromí a soulad (GDPR)

  • PII minimalismus: osobní údaje hashování/anonymizace před generováním embeddingů.
  • Právo na výmaz: udržujte mapu dokument → vektory → index; umožněte rychlé vyradení a re-build.
  • Scope kontrola: oddělené indexy pro „interní“ vs. „veřejná“ data; autorizace nad výsledky vyhledávání.
  • Licence: respektujte licenční podmínky zdrojů při ingestování obsahu do vektorového indexu.

Antivzory a diagnostika problémů

  • Smíšené verze modelu: ve stejném indexu vektory z r0 a r1 – skóre nesrovnatelné; vždy verzujte a migrujte dávkově.
  • Příliš dlouhé chunky: „rozmazaná“ reprezentace, nízká přesnost; zkraťte a přidejte překryv.
  • Bez normalizace: délky dokumentů dominují skóre; použijte L2 normalizaci.
  • Chybějící metadata: nemožnost filtrovat podle jazyka, data, typu – slabé výsledky pro intenci.
  • Nesmyslné prahy: globální práh pro různé domény; kalibrujte lokálně.

Best practices a implementační checklist

  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. Chunkujte obsah (200–400 tokenů), s 10–20 % překryvem a kotvami #id.
  4. Indexujte v HNSW nebo IVF-PQ podle velikosti korpusu; logujte parametry.
  5. Zapněte hybridní vyhledávání a cross-encoder reranking na top-100.
  6. Hodnoťte Recall@10, MRR, nDCG; sledujte answer-level metriky po RAG.
  7. Zajistěte PII sanitizaci, právo na výmaz a oddělené indexy podle přístupových práv.
  8. Monitorujte drift a pravidelně re-embeddujte dynamické části obsahu.

Přílohy: příklady schémat a výpočtů

Příklad JSON metadat jednoho chunku:

{ "doc_id