1 puntos por GN⁺ 2024-01-13 | 1 comentarios | Compartir por WhatsApp
  • A medida que las aplicaciones de IA manejan datos no estructurados y de alta dimensión, las bases de datos vectoriales se vuelven importantes como sistemas especializados para almacenar y buscar datos en forma de arreglos numéricos
  • La clave está en conectar registros según la similitud entre atributos de los datos, más que por filas y columnas o relaciones explícitas, para aprovechar significado implícito
  • Al codificar relaciones semánticas como vectores multidimensionales, se pueden realizar más rápido tareas analíticas como búsqueda por similitud, clustering y clasificación
  • En la IA generativa, se usan para gestionar grandes volúmenes de datos de alta dimensión y mejorar la velocidad de entrenamiento e inferencia, así como los resultados de personalización, mediante la búsqueda de vectores similares
  • La indexación avanzada reduce el conjunto de búsqueda a subconjuntos más relevantes, disminuye el tiempo de búsqueda y permite consultas complejas que combinan similitud con otras condiciones

Tipos de datos que manejan las bases de datos vectoriales

  • Una base de datos vectorial es una base de datos especializada para almacenar, gestionar y procesar vectores, que son representaciones de datos de alta dimensión
  • A diferencia de las bases de datos tradicionales, que almacenan datos en filas y columnas, las bases de datos vectoriales almacenan los datos como vectores en un espacio multidimensional
  • Cada vector es un arreglo de números que representa las características o atributos de un punto de datos

Conexiones basadas en significado y similitud

  • Las bases de datos tradicionales establecen relaciones entre elementos con base en enlaces explícitos o jerarquías
  • Las bases de datos vectoriales conectan registros algorítmicamente según la similitud de los atributos de los datos
  • Este enfoque puede crear conexiones más intuitivas a partir del significado implícito dentro de los elementos de la base de datos

Estructura orientada a consultas analíticas

  • Cuando los datos se codifican como vectores multidimensionales, es decir, arreglos numéricos que reflejan relaciones semánticas, se pueden ejecutar rápidamente tareas analíticas avanzadas
  • Entre las tareas compatibles están la búsqueda por similitud, el clustering y la clasificación
  • Este modelo computacional es adecuado para detección de patrones, analítica predictiva y aplicaciones con altas exigencias analíticas

Uso en IA e IA generativa

  • La expansión de la IA y el aprendizaje automático es uno de los principales factores detrás del aumento en la demanda de bases de datos vectoriales
  • En el ámbito de la IA generativa, las bases de datos vectoriales están diseñadas para almacenar y gestionar eficientemente grandes volúmenes de datos de alta dimensión
  • Como permiten buscar y recuperar rápidamente vectores similares, pueden acelerar de forma significativa los procesos de entrenamiento e inferencia de los modelos de IA generativa
  • También se utilizan para ayudar a que los sistemas de IA generativa ofrezcan contenido más personalizado y relevante a los usuarios

Indexación y condiciones de búsqueda complejas

  • Las bases de datos vectoriales usan técnicas avanzadas de indexación para consultar y buscar rápidamente vectores similares
  • Los índices reducen el objetivo de búsqueda a subconjuntos de vectores más pequeños y relevantes, lo que disminuye de forma importante el tiempo de búsqueda
  • También pueden procesar consultas complejas que combinan condiciones de similitud con otros criterios de búsqueda
  • Esta flexibilidad es importante en aplicaciones avanzadas de IA que requieren capacidades de búsqueda sofisticadas

1 comentarios

 
GN⁺ 2024-01-13
Opiniones de Hacker News
  • Algunos recursos adicionales:
    A Comprehensive Survey on Vector Database: Storage and Retrieval Technique, Challenge: https://arxiv.org/abs/2310.11703
    Survey of Vector Database Management Systems: https://arxiv.org/abs/2310.14021
    What are Embeddings: https://raw.githubusercontent.com/veekaybee/what_are_embeddi...
    Atribución: https://twitter.com/eatonphil/status/1745524630624862314 y https://twitter.com/ChristophMolnar/status/17457316026829826...
  • La diapositiva ¿se necesita una base de datos vectorial dedicada? es bastante interesante, pero en realidad no responde esa pregunta
    También es algo que me daba curiosidad, así que me gustaría tener criterios o reglas prácticas
    Hace poco estuve trabajando con embeddings usando la excelente herramienta llm de Simon Willison, y el enfoque es de lo más simple: almacenar los embeddings en SQLite, junto con algunas UDF para calcular distancias
    Esa simplicidad es atractiva, pero supongo que cuando el tráfico y los datos superan cierto nivel hace falta una base de datos más especializada; me gustaría tener una idea de dónde está ese umbral
    • Hace algunos años hice un índice vectorial usando LSH
      La búsqueda era lo más simple posible: recorrer todo y comparar con distancia de Hamming (xor y popcount), y en un solo núcleo de una MBP de 2011 podía escanear 200 mil hashes en menos de 10 ms para encontrar los elementos más parecidos
    • Alguna vez escalé el motor rápido y desprolijo que impulsa findsight.ai hasta decenas de millones de vectores, y los detalles están en esta charla: https://youtu.be/elNrRU12xRc?t=1556
      Eran alrededor de mil líneas de código, así que al final no hizo falta una base de datos vectorial externa
    • Honestamente, para unos 100 mil vectores, tenerlos todos en memoria o usar algo como SQLite o pgvector está perfectamente bien
      Pero por encima de eso, opciones decentes como Pinecone se vuelven complejas, lentas y absurdamente caras
      Hasta donde sé, la mejor opción es turbopuffer.com, que es unas 100 veces más barata que Pinecone y realmente parece escalar
      No aparece en la lista de bases de datos vectoriales recomendadas de las diapositivas, así que la dejo como una buena recomendación
    • Dependerá del caso, pero este artículo de hace unas semanas me ayudó mucho a enfocarme en cómo pensar qué necesitamos realmente: al final, lo que hacía falta era un motor de búsqueda
      https://news.ycombinator.com/item?id=38703943
  • Hace unos meses di una clase sobre bases de datos vectoriales para un cliente privado de TGE Data, y después decidí grabarla como una charla breve para una audiencia más amplia
    Esta charla combina teoría y demos sobre los conceptos básicos de vectores, bases de datos vectoriales, índices y búsqueda por similitud, y al final termina con demos de las bases de datos Pinecone y Weaviate
    • Genial. Entonces, ¿también hay video?
  • Es un buen material introductorio, pero siento que estas introducciones pasan demasiado rápido por el problema de la selección de características
    En esta etapa, el juicio humano entra de manera muy sutil, a veces casi imperceptible, y por fuera hace que parezca un sistema muy automatizado de “solo matemáticas”
    Si tomamos el audio como ejemplo, ¿qué características se van a extraer para crear un vector de N dimensiones? La respuesta fácil podría ser “tantas como sea posible”
    Pero, primero, incluso para características que pueden nombrarse fácilmente, quizá no se tenga acceso a los datos de caracterización
    Segundo, si no se tiene un conocimiento profundo del dominio, puede que ni siquiera se sepa que existen características latentes que deberían usarse
    Tercero, aun con conocimiento profundo del dominio, puede que todavía no se sepan cuáles son las características latentes que deberían usarse
    Por ejemplo, supongamos que eres fan de la música minimalista con desplazamiento de fase al estilo Reich. Haces una consulta indirecta a una base de datos vectorial para encontrar música similar a una obra representativa del género, como Piano Phase
    La base de datos usa varias características de audio y musicales, como frecuencia dominante, intervalos entre inicios de notas, volumen, características tímbricas basadas en la distribución de frecuencias, raíz y escala aparentes, etc.

Pero si el conjunto de características de la base de datos no incluye “intervalos constantes entre notas a lo largo del tiempo”, la consulta puede encontrar cosas con timbre, armonía, melodía y ritmo similares, pero hallar piezas que compartan la característica clave de que la fase relativa de las dos líneas melódicas cambia de forma constante queda puramente librado a la suerte
No es difícil crear ejemplos parecidos con cualquier tipo de dato: visual, texto, numérico, etc.
Por supuesto, esto no significa que las bases de datos vectoriales y la clasificación de características no sirvan
Una de las primeras preguntas que hay que hacerse cuando se encuentra, o no se encuentra, un patrón coincidente en un dataset específico es si hay una garantía sólida de que el conjunto de características está completo y, si no, cómo debería ampliarse

  • Las bases de datos vectoriales están orientadas a búsqueda y recuperación de resultados
    Normalmente, la forma de crear vectores es ajustar finamente un modelo grande preentrenado y extraer sus representaciones internas
    Como el dataset contiene consultas exitosas y resultados recuperados, basta con usar las entradas crudas para optimizar una función de pérdida según el objetivo de similitud que soporta la base de datos vectorial
    En modalidades comunes como tablas, texto, imágenes o audio, casi no interviene el juicio humano en la selección de características; simplemente se aplica atención
    Como referencia, los modelos modernos de texto a vector como E5-Mistral ni siquiera requieren curación humana del dataset

  • Señalaste muy bien eso de “no sabes lo que no sabes”
    Me alegra ver a otro fan de Steve Reich, y me da curiosidad recibir recomendaciones de piezas similares a mi favorita, Music for 18 Musicians

  • Es una excelente visión general, pero la última sección no aborda la pregunta obvia de si usar un almacén vectorial como Postgres+pgvector o una base de datos vectorial como Pinecone
    Me gustaría ver más presentaciones que discutan varios compromisos —velocidad de consulta, velocidad de inserción y construcción de índices, facilidad de uso, etc.— para ayudar a elegir lo adecuado para cada aplicación

    • Hace un tiempo empecé a reunir comparativas de varias herramientas de búsqueda vectorial: http://vectorsearch.dev/
      Los PR son bienvenidos en cualquier momento
    • A lo primero lo llamaría una extensión vectorial
      Una base de datos es un almacén al que se le agregan varias funciones
  • digitaloceanspaces.com es un proveedor de hosting estilo S3, así que estaría bueno que Hacker News lo tratara de forma especial y, en lugar de mostrar el dominio simplemente como digitaloceanspaces.com, lo mostrara como algo tipo tge-data-web.nyc3.digitaloceanspaces.com
    Aunque parece que S3 tiene el mismo problema: https://news.ycombinator.com/item?id=38876761
    Hay precedentes en otros casos. Los sitios de subdominios x.github.io reciben tratamiento especial aquí: https://news.ycombinator.com/from?site=lfranke.github.io

  • Este material parece bastante peligroso como punto de partida para un ingeniero
    Me parecen cuestionables expresiones como que se agrupan por significado o que están optimizadas para análisis
    El clustering depende de los embeddings calculados. Si crees que los embeddings aproximan bien el significado de los datos, puede estar bien pensarlo así
    Pero es fácil imaginar embeddings que rompan esa idea. Por ejemplo, si pasas un archivo de audio y un archivo de texto con el mismo significado por el mismo proceso de embedding, si no es multimodal probablemente quedarán lejos en el espacio vectorial de embeddings
    Creo que en el futuro sin duda aparecerán embeddings que ubiquen elementos cerca en el espacio vectorial según su forma de uso, más que por similitud semántica
    Si estás creando un sistema de recomendaciones, no quieres agrupar de cerca varias variantes de una compra única
    Por ejemplo, los vuelos semánticamente más parecidos serían otros vuelos al mismo destino en otros horarios, o vuelos a aeropuertos cercanos, pero en la práctica quizá quieras agrupar los hoteles que suelen comprar quienes compraron ese vuelo
    Las bases de datos vectoriales también pueden incluir dimensiones adicionales en los datos, como conciencia temporal. No es obligatorio usar vectores que codifiquen significado
    Por eso, las bases de datos vectoriales están optimizadas para consultas o búsquedas basadas en vectores de entrada, no se parecen a consultas OLAP
    Se parecen más a Elasticsearch que a Snowflake. Si esperas usar una base de datos vectorial para reportes o análisis a gran escala sobre el espacio vectorial, que yo sepa hoy no hay un producto realmente usable para eso

    • El cálculo de embeddings todavía es un misterio para mí
      Entiendo ir de una foto de una manzana a un vector que representa su “manzaneidad”, y comparar ese vector con otros vectores usando matemática común
      Lo que no entiendo es quién/qué toma la imagen como entrada y produce el vector como salida
      Lo mismo con los documentos. Si quisiera agregar una dimensión añadiendo un número más al arreglo, ¿qué parte de la base de datos vectorial tendría que modificar para que esa dimensión se incluya en el cálculo del vector?
      ¿O el proceso de convertir documentos, imágenes o lo que sea en una representación vectorial ocurre fuera de la base de datos, mediante algún otro método?
      Edición: el cálculo de embeddings parece ser tarea de un algoritmo de machine learning, pero entonces ese algoritmo también debe entrenarse primero. Al final, todo desemboca en una cadena infinita de entrenamiento
  • No entiendo por qué PQ aparece listado como una “estrategia de indexación”
    PQ es una técnica de compresión y cuantización de vectores, no un medio para particionar el espacio de búsqueda
    Puedes codificar vectores con PQ en búsqueda exhaustiva/índice plano, índice IVF o HNSW, y en Faiss existen como IndexPQ, IndexIVFPQ e IndexHNSWPQ, respectivamente
    Si quisieras, también podrías usarlo con árboles k-D o ANNOY
    También es problemático decir “usa HNSW o Annoy para datasets muy grandes cuando la velocidad de consulta es más importante que la precisión”
    Las técnicas basadas en grafos tienen un gran overhead de memoria y costo de construcción, y no son prácticas para datasets de escala de 1.000 millones
    Suelen ser más precisas y rápidas que las técnicas IVF, porque para obtener una precisión similar IVF debe visitar muchas celdas
    En cambio, IVF, a diferencia de otras técnicas, puede escalar hasta bases de datos de escala de 1 billón sin gran overhead, ofreciendo a la vez un compromiso razonable entre velocidad y precisión
    Yo diría: “úsalo para datasets de tamaño medio donde la velocidad de consulta importa, pero también quieres alta precisión, y un índice plano/exhaustivo no es viable”

    • Convierte un espacio continuo en un espacio discreto
      Primero haces PQ y luego ejecutas KNN sobre el nuevo vector discreto
      Así puedes comprimir el espacio de vocabulario a un tamaño fijo
  • En la tabla de la diapositiva 15, parece que las celdas de Indexing & Search Efficiency de Traditional Databases y Vector Databases están intercambiadas

    • A mí también me parece que la última fila está intercambiada
  • ¿Hay alguna recomendación de una base de datos de embeddings embebida como SQLite?
    Sería para problemas de pequeña escala, pero me gustaría que fuera más cómoda que LMDB + FAISS

    • Puedes echarle un vistazo a txtai(https://github.com/neuml/txtai)
      Puede ejecutarse dentro de un proceso de Python, almacena el contenido en SQLite y admite guardar los vectores de embeddings en formatos locales de índices vectoriales (Faiss, HNSW, Annoy)
      Por cierto, soy el autor principal de txtai
    • Acabo de terminar una prueba de concepto para búsqueda por similitud en comentarios de HN con DuckDB
      https://github.com/patricktrainer/hackernews-comment-search
    • Como referencia, la herramienta llm de Simon Willison usa solo SQLite y algunas UDF
      Esa simplicidad es atractiva, pero no tengo muy claro cuándo y por qué deja de ser suficiente
    • Tengo entendido que en Python se puede usar Chroma [1] en modo embebido
      Para Go, hace poco empecé a crear chromem-go, inspirado en la interfaz de Chroma: https://github.com/philippgille/chromem-go
      Todavía no tiene funciones avanzadas ni está pensado para usos a gran escala, pero el demo de RAG funciona
      [1] https://github.com/chroma-core/chroma
    • https://github.com/asg017/sqlite-vss