24 puntos por GN⁺ 2024-04-18 | 1 comentarios | Compartir por WhatsApp

Guía de uso de embeddings para desarrolladores de apps

  • Los embeddings vectoriales son eficaces para medir similitud entre distintos tipos de entrada, por lo que son adecuados para funciones de búsqueda y recomendación. También funcionan bien en otros idiomas, como francés o japonés.
  • Pgvector es una extensión de Postgres que permite almacenar y consultar embeddings, y es potente porque permite combinar la lógica SQL con operaciones sobre embeddings sin agregar un nuevo servicio.
  • A diferencia de los LLM, usar embeddings se siente más parecido a trabajar con código determinista convencional.

Desarrollo de un proyecto de búsqueda y recomendación de íconos

  • Después de configurar Pgvector, se crea una estrategia para codificar los datos de íconos como vectores de embedding.
  • Se usa el modelo text-embedding-3-small de OpenAI.
  • Se mide la similitud entre la consulta de búsqueda y el embedding de cada ícono con cosine similarity.
  • Se combina la búsqueda por embeddings con lógica de negocio, como el filtrado por conjunto de íconos.
  • Se presenta un ejemplo de algoritmo de ranking que aprovecha datos de clics en íconos para una consulta de búsqueda.
  • Se usa la comparación de embeddings para recomendar íconos similares al ícono seleccionado.

Resumen del enfoque de implementación

  • Se elige pgvector/Postgres como base de datos vectorial. También hay otras opciones, como MongoDB.
  • Se desarrolla en Typescript usando drizzle-orm. También hay varias librerías para otros lenguajes y frameworks.
  • La app está alojada en Neon. También se pueden usar servicios de hosting de bases de datos administradas como fly.io o Supabase.
  • Se usa el modelo de embeddings text-embedding-3-small de OpenAI. También se pueden elegir otros modelos desde el leaderboard de Huggingface.
  • Se embeben como pares clave-valor los atributos del ícono más relevantes para la búsqueda.
  • Se usa cosine similarity como función de distancia. Pgvector también soporta l2 distance e inner product.
  • Los resultados de búsqueda se limitan a los 50 mejores. Si se usa un rango de distancia, se recomienda definirlo de forma amplia y combinarlo con limit.

Opinión de GN⁺

  • En la mayoría de los proyectos, probablemente bastará con agregar capacidades vectoriales a la base de datos existente, como con pgvector. Parece que adoptar una base de datos vectorial aparte solo sería necesario en servicios a gran escala.
  • Una gran ventaja es que la lógica de negocio puede combinarse de forma natural con la búsqueda por embeddings. Se puede aprovechar toda la potencia de SQL.
  • La idea de reflejar datos de feedback de usuarios en el algoritmo de ranking es muy buena. Parece que permitiría mejorar continuamente la precisión de la búsqueda.
  • En comparación con los LLM, los servicios basados en embeddings tienen un comportamiento más claro y también son más fáciles de depurar, por lo que parecen mucho más sencillos de aplicar en servicios reales.
  • Hay disponibles diversos modelos de embeddings de código abierto, así que incluso cuando es difícil desarrollar un modelo propio, es posible aprovechar embeddings de alta calidad con facilidad.

1 comentarios

 
GN⁺ 2024-04-18
Opiniones de Hacker News

Resumen de comentarios de Hacker News

Facilidad de las incrustaciones de documentos y la búsqueda por similitud usando modelos RAG

  • Con las librerías sentence-transformers y faiss, se puede implementar fácilmente la incrustación de documentos y la búsqueda por similitud
  • Puede ser un proyecto divertido intentar lograr un rendimiento mejor que el sistema de recomendaciones de The New York Times
  • El canal de YouTube de James Briggs explica bien este tema

Comprender los conceptos básicos de los embeddings

  • Incluso sin IA/deep learning, se pueden crear embeddings asignando un índice único a cada palabra y acumulando valores según la frecuencia
  • También es posible hacer búsquedas por similitud usando similitud de coseno, etc.
  • Los embeddings basados en deep learning añaden funciones como filtrado de palabras/tokens y manejo de sinónimos sobre estos conceptos básicos

Falta una explicación detallada del proceso de generación de embeddings

La dificultad de manejar palabras homónimas o ambiguas

  • Debido a palabras ambiguas, los resultados de búsqueda pueden salir de forma no intencional (por ejemplo, al buscar "king" aparece un ícono de ruler)
  • Junto con la ventaja de poder encontrar íconos relacionados, también puede ser un reto interesante

Se pueden usar embeddings sin un vector store

  • En entornos de producción con grandes volúmenes de datos, un vector store es importante por temas como la latencia, pero para proyectos pequeños se puede implementar de forma simple con Numpy, etc.
  • Se puede calcular la similitud usando el producto punto entre un vector de consulta normalizado y una matriz de registros con el operador @ de Numpy

Cómo ejecutar la lógica de embeddings en un entorno local

  • Se plantea la duda de cómo generar embeddings directamente en un entorno local o en una base de datos sin depender de la API de OpenAI

Posibilidades de usar embeddings al redactar documentación técnica

  • Desde la aparición de ChatGPT, entre quienes escriben documentación técnica ha habido bastante discusión sobre su uso potencial como herramienta de búsqueda semántica
  • Puede ayudar a mejorar la eficiencia en la fase de investigación necesaria para redactar documentación

Cómo almacenar y usar embeddings

  • Lo habitual es generar los embeddings, almacenarlos y luego cargarlos cuando se necesiten
  • En casos simples, también se pueden pasar directamente como un arreglo para usarlos
  • La parte difícil es almacenar los embeddings, pero no hace falta una base de datos especial; también se puede hacer con un BLOB de SQLite
  • Los embeddings no "expiran"

Falta de explicación de conocimientos previos para desarrolladores que empiezan en IA

  • El artículo pasa directamente al uso de embeddings y bases de datos vectoriales sin explicar esos conceptos
  • Para quienes buscan un buen punto de partida como desarrolladores de apps interesados en IA, probablemente habría hecho falta una introducción a esos conceptos relacionados