33 puntos por GN⁺ 2025-01-16 | 2 comentarios | Compartir por WhatsApp
  • 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

 
mhj5730 2025-01-20

Qué buena recopilación de materiales.

 
GN⁺ 2025-01-16
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"

    • En el ejemplo de pgvector-python, se usa un modelo cross-encoder para hacer el re-ranking
    • También se puede usar un modelo de lenguaje para reordenar, pero puede rendir peor que un modelo especializado en re-ranking
    • En el enfoque RAG de Azure, se usa el AI Search semantic ranker que Bing utiliza para reordenar los resultados de búsqueda
  • Los vectores de palabras resuelven el problema de que dos palabras pueden estar fuertemente relacionadas incluso si no aparecen en el mismo contexto

    • "Python" y "Ruby" quizá no aparezcan en el mismo contexto, pero "scripting" puede encontrarse en el contexto de ambos
    • Sin embargo, muchas veces no funciona bien por la maldición de la dimensionalidad
    • Se plantea la idea de si los embeddings de palabras podrían representarse como vértices en lugar de vectores
  • En Estados Unidos, word2vec podría considerar espresso y cappuccino como casi idénticos, pero en Italia no sería así

    • El mejor enfoque es comparar directamente dos elementos usando una consulta al LLM
    • Un LLM puede considerar muy similares "¿Dónde dejé la billetera?" y "¿Dónde dejé las llaves?"
  • La similitud de coseno se usa en la mayoría de las búsquedas semánticas basadas en deep learning

    • Los modelos como SentenceTransformers se entrenan para usar similitud de coseno
    • Los modelos como CLIP también usan similitud de coseno para la representación vectorial de imágenes
  • Comparar directamente dos elementos usando una consulta al LLM es el enfoque más potente

    • Cross encoder es una solución rápida y con muy buen rendimiento
  • HyDE es un método que genera una respuesta hipotética a una pregunta y compara la similitud

    • Una mejor forma es estandarizar el formato de los chunks y generar la respuesta hipotética en ese mismo formato
  • La similitud de coseno y el RAG top-k se sienten anticuados

    • La similitud de coseno es solo una propiedad accidental de los datos
    • Los nuevos modelos de embeddings se entrenan para usar la similitud de coseno como medida de similitud
  • 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

    • Se puede mejorar el modelado de los datos de entrenamiento dejando que el modelo defina los embeddings, el formato y el proceso de búsqueda
  • 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