- Los científicos de datos convierten todo en vectores. Ese es el lenguaje de la IA
- Pero aplicar la similitud del coseno a ciegas puede llevar a conclusiones equivocadas
- Este artículo explica cómo usar la similitud de forma más intencional para obtener mejores resultados.
Embeddings
- Los embeddings son representaciones vectorizadas de datos, muy útiles para expresar relaciones entre entidades o encontrar elementos similares
- Por ejemplo, "brother" y "sister" no tienen relación como IDs en bruto, pero al vectorizarlos es posible representar su relación semántica
- Los vectores se usan como estructura de entrada para modelos de machine learning o por sí solos para búsqueda de similitud
- Los embeddings de oraciones basados en modelos de lenguaje grandes (LLM) son hoy uno de los usos más populares de los embeddings
- Esta potencia exige responsabilidad en seguridad de datos y en el uso intencional
Ejemplo: comparar oraciones con similitud del coseno
- Comparación de tres oraciones
- A: "Python can make you rich."
- B: "Python can make you itch."
- C: "Mastering Python can fill your pockets."
- Comparación basada en caracteres
- Si se comparan las cadenas en bruto, A y B difieren en 2 caracteres, mientras que A y C difieren en 21
- Pero semánticamente A y C son más parecidas (ambas hablan de dinero)
- Comparación basada en vectores
- Usando OpenAI text-embedding-3-large se generan vectores de embedding como estos:
- A:
[-0.003738, -0.033263, -0.017596, 0.029024, -0.015251, ...]
- B:
[-0.066795, -0.052274, -0.015973, 0.077706, 0.044226, ...]
- C:
[-0.011167, 0.017812, -0.018655, 0.006625, 0.018506, ...]
- Número de dimensiones del vector: 3072 (es largo, pero puede reducirse sin degradar la calidad)
- Cálculo de la similitud del coseno
- A y C: 0.750 (semánticamente similares)
- A y B: 0.576 (similares en lo literal)
- Resultado: el significado es un factor de similitud más importante que la ortografía
¿Qué es la similitud del coseno?
- La similitud del coseno (
cosine similarity) mide la similitud calculando el coseno del ángulo entre dos vectores
- Como los vectores existen en espacios de alta dimensión, la intuición geométrica suele fallar
- Matemáticamente, es el producto punto (
dot product) de vectores normalizados
- Propiedades principales:
- Vectores idénticos dan 1
- Vectores aleatorios tienden a estar cerca de 0 (por el efecto de promediado en alta dimensión)
- El resultado está entre -1 y 1
- Esa simplicidad puede ser engañosa
- Que el valor esté entre 0 y 1 no significa que sea una probabilidad ni una escala con significado intrínseco
- Ej.: un valor de 0.6 puede no representar una similitud fuerte
- Los valores negativos rara vez indican oposición semántica
- En la mayoría de los casos son resultados sin sentido o cercanos al ruido
- Si se usa GloVe(
glove.6B.300d) para buscar palabras similares a "dog":
- Las palabras cercanas suelen ser razonables
- Las más lejanas a menudo producen resultados sin sentido
- La similitud del coseno es como la "cinta adhesiva" (
duct tape): simple y rápida para comparar todo tipo de vectores
- Se puede usar con imágenes, texto, audio, código, etc.
- Pero no deja de ser un parche que puede ocultar problemas más profundos
- Por ejemplo, como arreglar una tubería con cinta adhesiva: difícil de confiar y nada permanente
- A veces parece funcionar bien, pero cuando falla es difícil entender por qué
- Con frecuencia eso lleva a buscar soluciones improvisadas, que pueden crear nuevos problemas
Relación entre la similitud del coseno y el coeficiente de correlación
- El coeficiente de correlación de Pearson se calcula en tres pasos:
- Restar la media para centrar los datos
- Normalizar el vector a un vector unitario
- Calcular el producto punto (
dot product) entre los dos vectores
- Cuando los vectores están centrados y normalizados:
- Coeficiente de Pearson = similitud del coseno = producto punto
- Forma práctica de uso
- No se centra ni normaliza el vector en cada comparación por pares
- En su lugar, se procesa previamente y luego solo se calcula el producto punto
- Si se puede usar similitud del coseno, también se puede usar el coeficiente de Pearson de la misma forma
- Ambas métricas pueden aplicarse prácticamente en el mismo contexto
Problemas al usar la similitud del coseno como medida de similitud
- Usar la similitud del coseno como objetivo de entrenamiento de un modelo de machine learning es matemáticamente válido
- El problema aparece fuera del ámbito donde la similitud del coseno es adecuada:
- Cuando la función de pérdida usada para entrenar el modelo no es la similitud del coseno
- Cuando el objetivo de entrenamiento no coincide con las necesidades de la aplicación real
- En general, los modelos se entrenan con vectores no normalizados:
- Ej.: predicción de probabilidades basada en producto punto (
dot product) y funciones de pérdida logísticas
- Algunos modelos minimizan la distancia euclidiana para aprender a acercar elementos de la misma clase
- La normalización aporta propiedades matemáticas (limitar el resultado entre -1 y 1), pero es un "parche"
- Solo los modelos entrenados con similitud del coseno, o con una función directa de esta, pueden usarse con seguridad
- Incluso si un modelo fue entrenado explícitamente con similitud del coseno, la definición de similitud sigue siendo ambigua:
- Para un crítico literario: compartir temas
- Para un bibliotecario: clasificación por género
- Para un lector: respuesta emocional
- Para un tipógrafo: número de páginas y formato
- La similitud del coseno simplifica muchas definiciones distintas en un solo número, lo que puede llevar a engaño
- Ejemplo: "espresso" y "cappuccino"
- word2vec puede tratar esas dos palabras como casi iguales (desde una perspectiva estadounidense)
- Pero en Italia no se considerarían iguales
Casos en los que falla la similitud del coseno
- Ejemplo simple: una pregunta para encontrar unas llaves
- Pregunta: "What did I do with my keys?"
- Oraciones de comparación:
- "I left them in my pocket"
- "They are on the table"
- "What did I put my wallet?"
- "What I did to my life?"
- Problemas
- Al usar similitud del coseno:
- La oración más cercana no es una respuesta adecuada, sino otra pregunta ("What I did to my life?")
- Depende de la similitud estructural de la oración, no de la relevancia semántica
- Las oraciones sobre Python muestran similitud cercana a 0, reflejando correctamente que no tienen relación
- Limitaciones del mundo real
- En aplicaciones reales se manejan miles de documentos
- En datasets grandes que exceden la ventana de contexto, se vuelve más sensible al ruido
- A medida que crece el dataset, la puntuación de similitud empieza a parecer una ruleta de alta dimensión
¿Qué alternativas hay en lugar de la similitud del coseno?
El enfoque más potente
- Usar consultas con LLM:
- Usar un modelo de lenguaje potente para comparar dos elementos
- Ej.: "Is {sentence_a} a plausible answer to {sentence_b}?"
- Con un LLM es posible hacer comparaciones con sentido:
- Distinguir preguntas simples de respuestas
- Entregar resultados en formatos estructurados como JSON
- Pero si el dataset es grande, resulta ineficiente y costoso
Optimización de embeddings
- Generar embeddings específicos para la tarea:
- Fine-tuning para ajustar los pesos de un modelo existente
- Transfer learning para aprovechar el conocimiento del modelo y crear embeddings nuevos y más enfocados
- Similitud simétrica:
- Representar en el espacio vectorial la pregunta "¿A y B son similares?"
- Reducir dimensiones innecesarias y conservar solo las características relevantes
- Similitud asimétrica:
- Ej.: expresar como probabilidad "¿El documento B es una respuesta correcta para la pregunta A?"
- Transformar consulta y clave en espacios especializados para cada una
Prompt engineering
- Agregar prompts para fijar el contexto:
- Ej.: "Nationality of {person}" para enfatizar el contexto relacionado con la nacionalidad
- En vez de prompts simples, usar oraciones más específicas:
- "This is a country that has produced many influential historical figures, including {person}"
- La calidad del resultado mejora mucho, aunque no es perfecta
Reescritura de texto y extracción de contexto
- Preprocesamiento del texto antes del embedding:
- Con prompts simples como "resume el siguiente texto en inglés estándar en no más de 200 palabras" se puede eliminar similitud superficial
- Permite ignorar elementos formales innecesarios (errores tipográficos, formato, etc.) y enfocarse en el contenido
- Generación de contexto estructurado:
- Resumir una conversación con un cliente para extraer requisitos y problemas con claridad:
- "Resume la conversación en un máximo de 10 puntos en Markdown"
- Las páginas también pueden convertirse al mismo formato para lograr una correspondencia más precisa
Conclusión
- Diversos métodos alternativos compensan las debilidades de la similitud del coseno y ofrecen resultados más confiables
- Conviene elegir y aplicar el enfoque adecuado según la situación del proyecto
Resumen
- Límites de la similitud del coseno:
- La similitud del coseno entrega valores entre -1 y 1, pero no deben interpretarse como probabilidades
- La mayoría de los modelos no se entrenan con la similitud del coseno como objetivo, y los resultados no son más que correlaciones no garantizadas
- Incluso si el modelo aprendió similitud del coseno, hay que entender si esa definición de similitud coincide con lo que necesitamos
- Cómo usar eficazmente la similitud vectorial:
- Entrenar embeddings especializados para los datos
- Diseñar prompts que se enfoquen en los aspectos relevantes
- Limpiar y estandarizar el texto antes de generar embeddings
2 comentarios
Qué buena recopilación de materiales.
Opiniones en Hacker News
En las aplicaciones RAG que usan similitud de coseno, conviene reordenar los resultados usando un "semantic re-ranker" o un "modelo de re-ranking L2"
Los vectores de palabras resuelven el problema de que dos palabras pueden estar fuertemente relacionadas incluso si no aparecen en el mismo contexto
En Estados Unidos, word2vec podría considerar espresso y cappuccino como casi idénticos, pero en Italia no sería así
La similitud de coseno se usa en la mayoría de las búsquedas semánticas basadas en deep learning
Comparar directamente dos elementos usando una consulta al LLM es el enfoque más potente
HyDE es un método que genera una respuesta hipotética a una pregunta y compara la similitud
La similitud de coseno y el RAG top-k se sienten anticuados
Después de probar el enfoque RAG, hubo decepción, y se piensa que debería estructurarse para que el modelo pueda hacer RAG durante el entrenamiento
En gráficos 3D y física, la importancia y la precisión son claras, pero en machine learning el espacio vectorial representa demasiadas cosas, así que el uso del producto punto se siente ambiguo