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.
| Slovo | Vektor A | Vektor B |
| miluji | 1 | 0 |
| programování | 1 | 1 |
| a | 1 | 1 |
| matematika | 1 | 1 |
| rád | 0 | 1 |
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)
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.
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é.
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.
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.
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.
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.
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ý.
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:
- Cosine Similarity: https://www.geeksforgeeks.org/dbms/cosine-similarity/
- What is cosine similarity?: https://www.ibm.com/think/topics/cosine-similarity
- Cosine similarity: https://en.wikipedia.org/wiki/Cosine_similarity