Los embeddings son una gran herramienta, permiten la comparación semántica de cadenas de texto. Esto puede utilizarse para numerosas aplicaciones, como búsquedas semánticas, recomendaciones, detección de anomalías, medición de anomalias y clasificación.

Comprendiendo los Embeddings

En esencia, un embedding es una lista de números que describe un texto, dado un modelo específico.

Por ejemplo, el modelo de OpenAI produce una matriz de 1,536 números, donde cada número captura algún aspecto del texto. Dos matrices se consideran similares en la medida en que tienen valores similares para cada elemento.

Esta similitud puede calcularse incluso sin entender lo que representa cada valor individual.

Es esencial tener en cuenta que las matrices solo deben compararse si provienen del mismo modelo, ya que diferentes modelos pueden producir matrices muy diferentes.

Generando Embeddings

Para convertir un texto en un embedding, se pueden usar varios modelos. Aquí hay un ejemplo de uso de la libreria sentence-transformers, para generar embeddings en Python:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')

# Frases de ejemplo
sentences = ["Esta es una frase de ejemplo", "Esta es otra"]
embeddings = model.encode(sentences)

Comparando Embeddings

Una vez generados los embeddings, pueden compararse utilizando varias medidas de similitud, como la similitud del coseno o la distancia euclidiana. Aquí hay un ejemplo de comparación de embeddings utilizando la similitud del coseno en Python:

from sklearn.metrics.pairwise import cosine_similarity

# Asumiendo que embeddings es una matriz 2D con cada fila siendo un embedding
similarity_matrix = cosine_similarity(embeddings)

# La similitud entre la primera y la segunda oración es:
print(similarity_matrix[0][1])

Almacenando Embeddings

Después de obtener un vector de embedding, puede usarse para buscar cadenas similares o almacenarse para comparaciones futuras.

Si planeas almacenar miles de vectores, se recomienda una base de datos vectorial dedicada. Esto permite el rápido descubrimiento de vectores cercanos sin tener que comparar contra cada vector cada vez. Sin embargo, si no tienes muchos vectores, pueden almacenarse directamente en una base de datos normal, lo que permite la búsqueda y comparación en milisegundos utilizando la base de datos vectorial.