Kosinová podobnost kalkulačka

Kosinová podobnost (angl. cosine similarity) je míra podobnosti mezi dvěma vektory, kterou používáme v strojním učení, NLP a vyhledávání informací.


Jak vypočítat kosinovou podobnost

Pro výpočet kosinové podobnosti stačí zadat dva vektory, které mezi sebou porovnáme:

  • vektor A s hodnotami prvků (např. 1, 0, 0, 1, 0),
  • vektor B s hodnotami prvků (např. 1, 1, 1, 0, 0),
  • klikneme na tlačítko „Vypočítat“,
  • kalkulačka zobrazí kosinovou podobnost v rozmezí −1 až 1 a zároveň její interpretaci.

Co je kosinová podobnost

Kosinová podobnost je matematická metrika, která vyjadřuje, jak moc jsou si dva vektory podobné. Namísto měření vzdálenosti mezi body se dívá na úhel mezi vektory:

  • malý úhel -> vektory směřují podobně ->vysoká podobnost,
  • velký úhel ->vektory jsou odlišné ->nízká podobnost.

Kosinovou podobnost používáme v oblastech jako:

  • strojní učení – např. porovnávání embeddings (vektorové reprezentace),
  • zpracování přirozeného jazyka (NLP) – měří podobnosti mezi texty nebo větami,
  • vyhledávání informací a doporučující systémy – doporučování produktů nebo dokumentů podobných zadanému.

Vzorec kosinové podobnosti

Hodnota kosinové podobnosti se pohybuje od 0 až 1 (v praxi) nebo od -1 až 1 (při povolených záporných hodnotách):

  • 1 → úplná shoda, vektory jsou totožné,
  • 0 → žádná podobnost, vektory jsou kolmé,
  • -1 → zcela opačné směrování (vzácné v praxi).

Matematicky podobnost vypočítáme pomocí skalárního součinu vektorů a jich velikostí (normy):

kosinová podobnost = (A · B) / (||A|| · ||B||)

nebo i pro snazší pochopení:

kosinová podobnost = (A1 * B1 + A2 * B2 + … + An * Bn) / (√(A12+ A22+ … + A2) * √(B12+ B22+ … + Bn2))

Kde:

  • A1, A2, …, An = prvky vektora A,
  • B1, B2, …, Bn = prvky vektoru B,
  • A1 * B1 + … An * Bn = skalární součin vektorů,
  • √(A12+ … + A2) = velikost (norma) vektoru A,
  • √(B12+ … + Bn2) = velikost (norma) vektoru B.

Poznámky:

  • oba vektory musí mít stejný počet prvků (stejnou dimenzi),
  • kalkulačka podporuje libovolnou velikost vektoru.

Příklad kosinové podobnosti – porovnání textů

Představme si, že chceme zjistit, jak moc jsou si podobné dvě věty:

  • „Miluji programování a matematiku.“
  • „Matematiku a programování mám rád.“

V NLP se tyto věty často reprezentují jako vektory podle frekvence slov.

SlovoVektor AVektor B
miluji10
programování11
a11
matematika11
rád01

Takže vektor A = (1, 1, 1, 1, 0) a vektor B (0, 1, 1, 1, 1)

Řešení:

Výpočet provedeme v následujících krocích:

  • Skalární součin vektorů
  • Velikosti (normy) vektorů
    • ∣∣A∣∣ = √(12+ 12+ 12+ 12+ 02) = √4 = 2
    • ∣∣B∣∣ = √(02+ 12+ 12+ 12+ 12) = √4 = 2
  • Kosinová podobnost
    • vypočítáme podle vzorce: A * B / ∣∣A∣∣ * ∣∣B∣∣ = 3 / 2 * 2 = 0,75

Výsledek (interpretace):

  • hodnota 0,75 znamená, že věty jsou dost podobné, i když ne úplně stejné,
  • malý rozdíl vzniká kvůli slovům „miluji“ a „rád“, které se liší,
  • hodnota 1 by znamenala úplnou shodu, 0 žádnou podobnost, případně -1 zcela opačné směřování (při povolených záporných hodnotách vektoru).

Využití kosinové podobnosti

  • Google, YouTube, Spotify či Netflix používají kosinovou podobnost při porovnávání textů, uživatelských preferencí nebo obsahu, například: když hledáme film nebo píseň podobnou té, kterou jsme již sledovali/slyšeli, algoritmus vyhodnotí „vektory“ charakteristik a doporučí nám podobné obsah,
  • využívá se například při automatickém sumarizování textů, strojovém překladu nebo chatbotech,
  • umožňuje AI „pochopit“, které objekty nebo data jsou si podobná, aniž by musela porovnávat přesné hodnoty,
  • pomocí vektorových reprezentací lze srovnávat vizuální a audio vzory – např. rozpoznávání obličeje, hlasové asistenty, nebo identifikace podobných obrázků,
  • pomáhá analyzovat velké datové soubory, genetické sekvence, chemické molekuly – všude tam, kde potřebujeme kvantifikovat „podobnost“ mezi objekty.

Nejčastěji kladené dotazy (FAQ)

Kdy je lepší použít kosinovou podobnost místo euklidovské vzdálenosti?

Kosinová podobnost je vhodnější tehdy, když nás zajímá směr dat, nikoli jejich velikost. Typicky u textových dat (např. frekvence slov), kde absolutní hodnoty nejsou tak důležité jako jejich poměr.

Proč se kosinová podobnost často používá v práci s texty?

Protože texty lze převést na vektory (např. pomocí TF-IDF nebo embeddings) a kosinová podobnost dokáže dobře zachytit významovou podobnost i v případě, že věty nejsou identické.

Jaký je rozdíl mezi kosinovou podobností a skalárním součinem?

Skalární součin bere v úvahu i velikost vektorů, zatímco kosinová podobnost ho normalizuje podle jejich délek. Díky tomu dostaneme hodnotu, která vyjadřuje čistě podobnost směru.

Lze kosinovou podobnost použít i pro velmi velké vektory (např. tisíce prvků)?

Ano, a právě v takových případech se používá nejčastěji – například v AI modelech nebo vyhledávačích. Výpočet je efektivní i pro vysokodimenzionální data.

Co ovlivňuje přesnost výsledku při porovnávání textů?

Především způsob, jakým text převedeme na vektor (např. bag-of-words vs. embeddings). Kvalitnější reprezentace znamená přesnější vyhodnocení podobnosti.

Je kosinová podobnost vhodná i pro binární data (0 a 1)?

Ano, často se používá i pro binární vektory (např. přítomnost/nepřítomnost vlastnosti). V takovém případě měří, kolik prvků mají vektory společných vzhledem k jejich velikosti.

Jak se kosinová podobnost chová u velmi řídkých dat (sparse vectors)?

Velmi dobře – právě proto je populární v oblasti NLP. I když většina hodnot je nulová, výpočet zůstává efektivní a smysluplný.

Může kosinová podobnost nahradit korelaci?

Ne úplně. Korelace měří lineární závislost mezi proměnnými, zatímco kosinová podobnost měří podobnost směru vektorů. V některých případech se ale mohou chovat podobně.

Zdroje: