La similarité cosinus possède plusieurs applications dans le monde réel, et en utilisant des vecteurs d’embedding, nous pouvons comparer des significations du monde réel de manière programmatique. Python est l’une des langues les plus populaires pour les sciences des données, et elle propose diverses bibliothèques pour calculer la similarité cosinus avec facilité. Dans cet article, nous allons discuter de la façon dont vous pouvez implémenter la similarité cosinus en Python en utilisant l’aide des bibliothèques Scikit-Learn et NumPy.
Qu’est-ce que la Similarité Cosinus?
La similarité cosinus est une mesure de la similarité entre deux vecteurs non nuls dans un espace n-dimensionnel. Elle est utilisée dans diverses applications, telles que l’analyse de texte et les systèmes de recommandation, pour déterminer à quel point deux vecteurs sont similaires en termes de direction dans l’espace vectoriel.
Formule de Similarité Cosinus
La similarité cosinus entre deux vecteurs, A et B, est calculée en utilisant la formule suivante:
Similarité Cosinus (A, B) = (A · B) / (||A|| * ||B||)
Dans cette formule, A · B représente le produit scalaire des vecteurs A et B. Ceci est calculé en multipliant les composantes correspondantes des deux vecteurs et en additionnant les résultats. ||A|| représente la norme euclidienne (magnitude) du vecteur A, qui est la racine carrée de la somme des carrés de ses composantes. Elle est calculée comme ||A|| = √(A₁² + A₂² + … + Aₙ²). ||B|| représente la norme euclidienne (magnitude) du vecteur B, calculée de la même manière que ||A||.
Comment Calculer la Similarité Cosinus
Pour calculer la similarité cosinus, vous commencez par effectuer le calcul pour le produit scalaire des deux vecteurs. Ensuite, vous le divisez par le produit de leurs magnitudes. La valeur résultante sera dans la plage de -1 à 1, où:
- Si la similarité cosinus est 1, cela signifie que les vecteurs ont la même direction et sont parfaitement similaires.
- Si la similarité cosinus est 0, cela signifie que les vecteurs sont perpendiculaires l’un à l’autre et n’ont aucune similarité.
- Si la similarité cosinus est -1, cela signifie que les vecteurs ont des directions opposées et sont parfaitement dissimilaires.
Dans l’analyse de texte, la similarité cosinus est utilisée pour mesurer la similarité entre les vecteurs de documents, où chaque document est représenté comme un vecteur dans un espace à haute dimension, chaque dimension correspondant à un terme ou mot dans le corpus. En calculant la similarité cosinus entre les vecteurs de documents, vous pouvez déterminer à quel point deux documents sont similaires ou dissimilaires l’un à l’autre.
Bibliothèques pour le Calcul de la Similarité Cosinus
NumPy
: Parfaite pour les opérations numériques, et optimisée pour la vitesse.scikit-learn
: Offre divers algorithmes d’apprentissage automatique et inclut une méthode pour la similarité cosinus dans son package de métriques.
Les exemples suivants montrent comment la similarité cosinus peut être calculée en utilisant Python. Nous utiliserons nos deux vecteurs de critique de livre maintenant familiers [5,3,4] et [4,2,4].
Python pur
Bien que nous ayons précédemment calculé cela à la main, bien sûr, un ordinateur peut le faire ! Voici comment vous pouvez calculer la similarité cosinus en utilisant Python sans bibliothèques supplémentaires:
A = [5, 3, 4]
B = [4, 2, 4]
# Calculate dot product
dot_product = sum(a*b for a, b in zip(A, B))
# Calculate the magnitude of each vector
magnitude_A = sum(a*a for a in A)**0.5
magnitude_B = sum(b*b for b in B)**0.5
# Compute cosine similarity
cosine_similarity = dot_product / (magnitude_A * magnitude_B)
print(f"Cosine Similarity using standard Python: {cosine_similarity}")
NumPy
Vecteurs d’incorporation auront généralement de nombreuses dimensions — des centaines, des milliers, voire des millions, ou plus ! Avec NumPy, vous pouvez calculer la similarité cosinus en utilisant des opérations sur les tableaux, qui sont hautement optimisées.
import numpy as np
A = np.array([5, 3, 4])
B = np.array([4, 2, 4])
dot_product = np.dot(A, B)
magnitude_A = np.linalg.norm(A)
magnitude_B = np.linalg.norm(B)
cosine_similarity = dot_product / (magnitude_A * magnitude_B)
print(f"Cosine Similarity using NumPy: {cosine_similarity}")
Scikit-Learn
La fonction cosine_similarity
de scikit-learn facilite encore davantage le calcul d’opérations de similarité cosinus hautement optimisées:
from sklearn.metrics.pairwise import cosine_similarity
A = np.array([[5, 3, 4]])
B = np.array([[4, 2, 4]])
cosine_similarity_result = cosine_similarity(A, B)
print(f"Cosine Similarity using scikit-learn: {cosine_similarity_result[0][0]}")
Conseils pour optimiser les calculs de similarité cosinus en Python
Si vous comptez utiliser Python pour calculer directement la similarité cosinus, voici quelques points à considérer:
- Utiliser des bibliothèques optimisées comme NumPy ou scikit-learn : Ces bibliothèques sont optimisées pour la performance et sont généralement plus rapides que Python pur.
- Utiliser Numba : Numba est un compilateur JIT open-source pour le code Python et NumPy, construit spécifiquement pour optimiser les fonctions de calcul scientifique.
- Utiliser les GPU : Si vous avez accès à une GPU, utilisez des bibliothèques Python telles que Tensorflow qui ont été optimisées pour fonctionner sur une GPU.
- Paralléliser les calculs : Si vous disposez des capacités matérielles, envisagez de paralléliser vos calculs pour les accélérer.
Rechercher de grandes quantités de vecteurs avec Vector Search sur AstraDB
Si vous devez rechercher de grandes quantités de vecteurs, vous pourriez trouver plus efficace et évolutif d’utiliser une base de données vectorielle telle que la capacité de Vector Search de DataStax Astra. Vector Search sur Astra DB offre une plateforme puissante pour vous aider à effectuer des recherches vectorielles avec des calculs de similarité cosinus intégrés afin que vous puissiez tirer plus d’enseignements de vos données.
Source:
https://dzone.com/articles/how-to-implement-cosine-similarity-in-python