Implementando la similitud del coseno en Python – CodesCode

La similitud del coseno es una herramienta indispensable que tiene una amplia gama de aplicaciones, desde simplificar búsquedas en grandes conjuntos de datos hasta comprender el lenguaje natural.

La similitud del coseno tiene varias aplicaciones en el mundo real, y utilizando vectores de embedding, podemos comparar significados en el mundo real de manera programática. Python es uno de los lenguajes más populares para la ciencia de datos, y ofrece varias bibliotecas para calcular la similitud del coseno de manera fácil. En este artículo, discutiremos cómo puedes implementar la similitud del coseno en Python utilizando la ayuda de las bibliotecasScikit-Learn y NumPy.

¿Qué es la similitud del coseno?

La similitud del coseno es una medida de la similitud entre dos vectores no nulos en un espacio n-dimensional. Se utiliza en diversas aplicaciones, como análisis de texto y sistemas de recomendación, para determinar qué tan similares son dos vectores en términos de su dirección en el espacio vectorial.

Fórmula de la similitud del coseno

La similitud del coseno entre dos vectores, A y B, se calcula utilizando la siguiente fórmula:

Similitud del coseno (A, B) = (A · B) / (||A|| * ||B||)

En esta fórmula, A · B representa el producto escalar de los vectores A y B. Esto se calcula multiplicando los componentes correspondientes de los dos vectores y sumando los resultados. ||A|| representa la norma euclidiana (magnitud) del vector A, que es la raíz cuadrada de la suma de los cuadrados de sus componentes. Se calcula como ||A|| = √(A₁² + A₂² + … + Aₙ²). ||B|| representa la norma euclidiana (magnitud) del vector B, calculada de la misma manera que ||A||.

Cómo calcular la similitud del coseno

Para calcular la similitud del coseno, primero completas el cálculo del producto escalar de los dos vectores. Luego, divídelo por el producto de sus magnitudes. El valor resultante estará en el rango de -1 a 1, donde:

  • Si la similitud del coseno es 1, significa que los vectores tienen la misma dirección y son perfectamente similares.
  • Si la similitud del coseno es 0, significa que los vectores son perpendiculares entre sí y no tienen similitud.
  • Si la similitud del coseno es -1, significa que los vectores tienen direcciones opuestas y son perfectamente diferentes.

En el análisis de texto, la similitud del coseno se utiliza para medir la similitud entre vectores de documentos, donde cada documento se representa como un vector en un espacio de alta dimensionalidad, con cada dimensión correspondiendo a un término o palabra en el corpus. Al calcular la similitud del coseno entre vectores de documentos, puedes determinar qué tan similares o diferentes son dos documentos entre sí.

Bibliotecas para el cálculo de la similitud del coseno

  • NumPy: Excelente para operaciones numéricas y está optimizada para velocidad.
  • scikit-learn: Ofrece varios algoritmos de aprendizaje automático e incluye un método para calcular la similitud del coseno en su paquete de métricas.

A continuación, se muestran algunos ejemplos para mostrar cómo se puede calcular la similitud del coseno usando Python. Usaremos nuestros dos ya familiares vectores de reseña de libros [5,3,4] y [4,2,4].

Python puro

Aunque previamente lo calculamos manualmente, por supuesto, ¡una computadora puede hacerlo! Así es cómo puedes calcular la similitud del coseno utilizando Python sin bibliotecas adicionales:

A = [5, 3, 4]B = [4, 2, 4]# Calcular el producto puntoproducto_punto = sum(a*b for a, b in zip(A, B))# Calcular la magnitud de cada vectormagnitude_A = sum(a*a for a in A)**0.5magnitude_B = sum(b*b for b in B)**0.5# Calcular la similitud del ceseno
similitud_coseno = producto_punto / (magnitud_A * magnitud_B)print(f"Similitud del coseno usando Python estándar: {similitud_coseno}")

NumPy

Los vectores de embedding generalmente tienen muchas dimensiones, ¡cientos, miles, incluso millones o más! Con NumPy, puedes calcular la similitud del coseno utilizando operaciones de matrices, que están altamente optimizadas.

import numpy as npA = np.array([5, 3, 4])B = np.array([4, 2, 4])producto_punto = np.dot(A, B)magnitud_A = np.linalg.norm(A)magnitud_B = np.linalg.norm(B)similitud_coseno = producto_punto / (magnitud_A * magnitud_B)print(f"Similitud del coseno usando NumPy: {similitud_coseno}")

Scikit-Learn

La función cosine_similarity de Scikit-learn hace aún más fácil calcular operaciones de similitud de coseno altamente optimizadas:

from sklearn.metrics.pairwise import cosine_similarityA = np.array([[5, 3, 4]])B = np.array([[4, 2, 4]])cosine_similarity_result = cosine_similarity(A, B)print(f"Similitud de coseno usando scikit-learn: {cosine_similarity_result[0][0]}")

Consejos para la optimización de cálculos de similitud de coseno en Python

Si vas a utilizar Python para calcular directamente la similitud de coseno, hay algunas cosas que debes considerar:

  • Utiliza bibliotecas optimizadas como NumPy o scikit-learn: Estas bibliotecas están optimizadas para el rendimiento y son generalmente más rápidas que Python básico.
  • Utiliza Numba: Numba es un compilador JIT de código abierto para Python y NumPy, diseñado específicamente para optimizar funciones de cómputo científico.
  • Utiliza GPUs: Si tienes acceso a una GPU, utiliza bibliotecas de Python como TensorFlow que han sido optimizadas para su uso en una GPU.
  • Paraleliza tus cálculos: Si tienes la capacidad de hardware, considera paralelizar tus cálculos para acelerarlos.

Busca un gran número de vectores con la búsqueda de vectores en AstraDB

Si necesitas buscar un gran número de vectores, es posible que encuentres más eficiente y escalable utilizar una base de datos de vectores como la capacidad de búsqueda de vectores de DataStax Astra. La búsqueda de vectores en Astra DB ofrece una plataforma potente para ayudarte a ejecutar búsquedas de vectores con cálculos de similitud de coseno incorporados para que puedas obtener más información de tus datos.


Leave a Reply

Your email address will not be published. Required fields are marked *