De harapos a riquezas

De la pobreza a la opulencia el camino hacia la riqueza

10 Aplicaciones de la búsqueda vectorial para comprender profundamente tus datos y modelos

Representación artística de la búsqueda vectorial para la exploración de datos. Imagen generada por DALLE-3.

A medida que los modelos de lenguaje grandes (LLMs, por sus siglas en inglés) han ganado popularidad, los motores de búsqueda vectorial han acompañado el camino. Las bases de datos vectoriales son la base de los sistemas de memoria a largo plazo para los LLMs.

Al encontrar de manera eficiente información relevante para pasar al modelo de lenguaje como contexto, los motores de búsqueda vectorial pueden proporcionar información actualizada más allá del límite de entrenamiento y mejorar la calidad de la salida del modelo sin necesidad de ajustes finos. Este proceso, comúnmente conocido como generación con recuperación aumentada (RAG, por sus siglas en inglés), ha llevado al desafío algorítmico una vez esotérico de la búsqueda del vecino más cercano aproximado (ANN, por sus siglas en inglés) al centro de atención.

En medio de toda esta conmoción, se podría perdonar a alguien por pensar que los motores de búsqueda vectorial están inexorablemente ligados a los modelos de lenguaje grandes. Pero hay mucho más en esta historia. ¡La búsqueda vectorial tiene multitud de aplicaciones poderosas que van mucho más allá de mejorar la generación con recuperación aumentada para los LLMs!

En este artículo, te mostraré diez de mis usos favoritos de la búsqueda vectorial para comprender datos, explorar datos, interpretar modelos y más.

Aquí están las aplicaciones que cubriremos, en orden aproximado de complejidad creciente:

Búsqueda de similitud de imágenes

Búsqueda de similitud de imágenes en imágenes del conjunto de datos de mascotas de Oxford-IIIT (LICENCIA). Imagen cortesía del autor.

Tal vez el lugar más sencillo para comenzar sea la búsqueda de similitud de imágenes. En esta tarea, tienes un conjunto de datos que consiste en imágenes, que pueden ser desde un álbum de fotos personal hasta un repositorio masivo de miles de millones de imágenes capturadas por miles de cámaras distribuidas durante varios años.

La configuración es simple: calcula embeddings para cada imagen en este conjunto de datos y genera un índice vectorial a partir de estos vectores de embeddings. Después de este cálculo inicial, no se requiere más inferencia. Una excelente manera de explorar la estructura de tu conjunto de datos es seleccionar una imagen del conjunto y consultar el índice vectorial para obtener los k vecinos más cercanos, es decir, las imágenes más similares. Esto puede proporcionar una idea intuitiva de cuánto se pobló el espacio de imágenes alrededor de las imágenes consultadas.

Para obtener más información y código funcional, consulta aquí.

Búsqueda inversa de imágenes

Búsqueda inversa de imágenes en una imagen de Unsplash (cortesía de Mladen Šćekić) frente al conjunto de datos Oxford-IIIT Pet. Imagen cortesía del autor.

De manera similar, una extensión natural de la búsqueda de similitud de imágenes es encontrar las imágenes más similares dentro del conjunto de datos a una imagen externa. ¡Esta puede ser una imagen de tu sistema de archivos local o una imagen de internet!

Para realizar una búsqueda inversa de imágenes, creas el índice vectorial para el conjunto de datos como se muestra en el ejemplo de búsqueda de similitud de imágenes. La diferencia ocurre en tiempo de ejecución, cuando calculas la incrustación para la imagen de consulta y luego consultas la base de datos vectorial con este vector.

Para obtener más información y código funcional, consulta aquí.

Búsqueda de similitud de objetos para ovejas en el conjunto de datos COCO-2017 en la división de validación (LICENCIA). Imagen cortesía del autor.

Si deseas profundizar en el contenido dentro de las imágenes, entonces la búsqueda de similitud de objetos o “parches” puede ser lo que buscas. Un ejemplo de esto es la reidentificación de personas, donde tienes una sola imagen con una persona de interés y deseas encontrar todas las instancias de esa persona en tu conjunto de datos.

La persona puede ocupar solo pequeñas partes de cada imagen, por lo que las incrustaciones para las imágenes completas en las que se encuentran pueden depender en gran medida del resto del contenido de estas imágenes. Por ejemplo, puede haber varias personas en una imagen.

Una mejor solución es tratar cada parche de detección de objetos como si fuera una entidad separada y calcular una incrustación para cada uno. Luego, crear un índice vectorial con estas incrustaciones de parches y realizar una búsqueda de similitud con un parche de la persona que deseas reidentificar. Como punto de partida, puedes intentar usar un modelo ResNet.

Dos aspectos sutiles aquí:

  1. En el índice vectorial, debes almacenar metadatos que asignen cada parche a su imagen correspondiente en el conjunto de datos.
  2. Deberás ejecutar un modelo de detección de objetos para generar estos parches de detección antes de instanciar el índice. También es posible que desees calcular incrustaciones de parches solo para ciertas clases de objetos, como persona, y no para otros, como silla, mesa, etc.

Para obtener más información y código funcional, consulta aquí.

Búsqueda difusa/semántica a través de bloques de texto generados por el motor OCR Tesseract en las páginas de mi tesis de doctorado. Incrustaciones calculadas utilizando el modelo GTE-base. Imagen cortesía del autor.

La reconocimiento óptico de caracteres (OCR, por sus siglas en inglés) es una técnica que te permite digitalizar documentos como notas escritas a mano, antiguos artículos de revista, registros médicos y esas cartas de amor guardadas en tu armario. Motores OCR como Tesseract y PaddleOCR funcionan identificando caracteres individuales y símbolos en las imágenes y creando “bloques” continuos de texto, como párrafos.

Una vez que tienes este texto, puedes realizar búsquedas de palabras clave en el texto predicho, como se muestra aquí. Sin embargo, este método de búsqueda es susceptible a errores de un solo carácter. Si el motor de OCR reconoce accidentalmente una “l” como un “1”, una búsqueda de palabras clave para “control” fallaría (¡qué ironía!).

¡Podemos superar este desafío utilizando la búsqueda vectorial! Incrusta los bloques de texto utilizando un modelo de incrustación de texto como GTE-base de la biblioteca Sentence Transformers de Hugging Face, y crea un índice vectorial. Luego podemos realizar búsquedas difusas y/o semánticas en nuestros documentos digitalizados incrustando el texto de búsqueda y consultando el índice. A alto nivel, los bloques de texto dentro de estos documentos son análogos a los parches de detección de objetos en búsquedas de similitud de objetos.

Para obtener más información y código funcional, consulta aquí.

Búsqueda semántica de imágenes utilizando lenguaje natural en la división de validación COCO 2017. Imagen cortesía del autor.

Con modelos multimodales, podemos extender la noción de búsqueda semántica de texto a imágenes. Modelos como CLIP, OpenCLIP y MetaCLIP fueron entrenados para encontrar representaciones comunes de imágenes y sus leyendas, de modo que el vector de incrustación para una imagen de un perro sería muy similar al vector de incrustación para el texto “una foto de un perro”.

Esto significa que es sensato (es decir, “permitido”) crear un índice vectorial con las incrustaciones CLIP para las imágenes en nuestro conjunto de datos y luego ejecutar una consulta de búsqueda vectorial contra esta base de datos vectorial donde el vector de consulta sea la incrustación CLIP de un texto de búsqueda.

💡 ¡Tratando cada fotograma de un video como imágenes y agregando la incrustación de cada fotograma a un índice vectorial, también puedes realizar una búsqueda semántica en videos!

Para obtener más información y código funcional, consulta aquí.

Recuperación Cruzada Modal

Recuperación cruzada modal de imágenes que coinciden con un archivo de audio de un tren. Implementado utilizando ImageBind con un índice vectorial Qdrant, en la división de validación COCO 2017. Video cortesía del autor.

En cierto sentido, la búsqueda semántica en un conjunto de datos de imágenes es una forma de recuperación cruzada modal. Una forma de conceptualizarlo es que estamos recuperando imágenes correspondientes a una consulta de texto. ¡Con modelos como ImageBind, podemos llevar esto un paso más allá!

ImageBind incrusta datos de seis modalidades diferentes en el mismo espacio de incrustación: imágenes, texto, audio, profundidad, térmico y unidad de medida inercial (IMU). Esto significa que podemos generar un índice vectorial para datos en cualquiera de estas modalidades y consultar este índice con una muestra de cualquier otra de estas modalidades. ¡Por ejemplo, podemos tomar un clip de audio de un automóvil tocando la bocina y recuperar todas las imágenes de automóviles!

Para obtener más información y código funcional, consulta aquí.

Sondeo de Similaridad Percetual

Una parte muy importante de la historia de búsqueda vectorial que hasta ahora hemos pasado por alto es el modelo. Los elementos en nuestro índice vectorial son incrustaciones de un modelo. Estas incrustaciones pueden ser la salida final de un modelo de incrustación personalizado, o pueden ser representaciones ocultas o latentes de un modelo entrenado en otra tarea como clasificación.

Independientemente, el modelo que utilizamos para incrustar nuestras muestras puede tener un impacto importante en qué muestras se consideran más similares a otras muestras. Un modelo CLIP captura conceptos semánticos, pero tiene dificultades para representar información estructural dentro de las imágenes. Un modelo ResNet, por otro lado, es muy bueno para representar similitud en la estructura y el diseño, operando a nivel de píxeles y parches. Luego existen modelos de incrustación como DreamSim, que pretenden cerrar la brecha y capturar la similitud de nivel medio, alineando la noción de similitud del modelo con lo percibido por los humanos.

La búsqueda vectorial nos proporciona una forma de explorar cómo un modelo está “viendo” el mundo. Al crear un índice vectorial separado para cada modelo en el que estamos interesados (en los mismos datos), podemos desarrollar rápidamente una intuición sobre cómo diferentes modelos representan los datos por debajo.

Aquí hay un ejemplo que muestra búsquedas de similitud con las incrustaciones de los modelos CLIP, ResNet y DreamSim para una misma imagen de consulta en el conjunto de datos NIGHTS:

Búsqueda de similitud con incrustaciones ResNet50 en una imagen del conjunto de datos NIGHTS (Imágenes generadas por Stable Diffusion - LICENCIA MIT RAIL). Los modelos ResNet operan a nivel de píxeles y parches. Por lo tanto, las imágenes recuperadas son estructuralmente similares a la consulta pero no siempre semánticamente similares.
Búsqueda de similitud con incrustaciones CLIP en la misma imagen de consulta. Los modelos CLIP respetan la semántica subyacente de las imágenes pero no su diseño.
Búsqueda de similitud con incrustaciones DreamSim en la misma imagen de consulta. DreamSim une la brecha, buscando el mejor compromiso de similitud de nivel medio entre características semánticas y estructurales.

Para obtener más información y código de funcionamiento, visita aquí.

Comparando las Representaciones de los Modelos

Comparación heurística de las representaciones de los modelos ResNet50 y CLIP del conjunto de datos NIGHTS. Las incrustaciones de ResNet se han reducido a 2D usando UMAP. Al seleccionar un punto en el gráfico de las incrustaciones y resaltar las muestras cercanas, podemos ver cómo ResNet captura la similitud compositiva y de paleta, pero no la similitud semántica. Al ejecutar una búsqueda vectorial en la muestra seleccionada con las incrustaciones de CLIP, podemos ver que las muestras más similares según CLIP no están localizadas según ResNet.

Podemos obtener nuevos conocimientos sobre las diferencias entre dos modelos combinando la búsqueda vectorial y técnicas de reducción de dimensionalidad como la aproximación uniforme del manifolds (UMAP). Así es cómo:

Las incrustaciones de cada modelo contienen información sobre cómo el modelo está representando los datos. Usando UMAP (o t-SNE o PCA), podemos generar representaciones de baja dimensionalidad (ya sea 2D o 3D) de las incrustaciones del modelo1. Al hacerlo, sacrificamos algunos detalles, pero esperamos preservar información sobre qué muestras se perciben como similares a otras muestras. Lo que ganamos es la capacidad de visualizar estos datos.

Con la visualización de las incrustaciones del modelo1 como fondo, podemos elegir un punto en este gráfico y realizar una consulta de búsqueda vectorial en esa muestra con respecto a las incrustaciones del modelo2. ¡Entonces puedes ver dónde se encuentran los puntos recuperados dentro de la visualización en 2D!

El ejemplo anterior utiliza el mismo conjunto de datos NIGHTS que en la última sección, visualizando las incrustaciones de ResNet, que capturan una mayor similitud compositiva y estructural, y realiza una búsqueda de similitud con las incrustaciones CLIP (semánticas).

Interpolación de conceptos

Interpolación entre los conceptos “husky” y “chihuahua” con incrustaciones CLIP en el conjunto de datos Oxford-IIIT Pet

Estamos llegando al final de las diez aplicaciones, pero por suerte para ti, guardé algunas de las mejores para el final. Hasta ahora, los únicos vectores con los que hemos trabajado son las incrustaciones. El índice de vectores se llena con las incrustaciones y los vectores de consulta también son incrustaciones. Pero a veces hay una estructura adicional en el espacio de las incrustaciones que podemos aprovechar para interactuar de manera más dinámica con nuestros datos.

Un ejemplo de esta interacción dinámica es lo que me gusta llamar “interpolación de conceptos”. Así es cómo funciona: toma un conjunto de datos de imágenes y genera un índice de vectores usando un modelo multimodal (texto e imagen). Elige dos indicaciones de texto como “soleado” y “lluvioso”, que representan conceptos, y establece un valor alpha en el rango [0,1]. Podemos generar los vectores incrustados para cada concepto de texto y sumar estos vectores en una combinación lineal especificada por alpha. Luego normalizamos el vector y lo usamos como consulta en nuestro índice de vectores de imágenes incrustadas.

Debido a que estamos interpolando linealmente entre los vectores incrustados para las dos indicaciones de texto (conceptos), ¡estamos interpolando entre los propios conceptos! Podemos cambiar alpha dinámicamente y consultar nuestra base de datos de vectores cada vez que haya una interacción.

💡Esta noción de interpolación de conceptos es experimental (es decir, no siempre es una operación bien definida). Descubro que funciona mejor cuando las indicaciones de texto están conceptualmente relacionadas y el conjunto de datos es lo suficientemente diverso como para tener resultados diferentes en diferentes lugares a lo largo del espectro de interpolación.

Para obtener más información y código funcional, consulte aquí.

Exploración del espacio de conceptos

Recorriendo el espacio de los “conceptos” moviéndose en la dirección de varias indicaciones de texto mediante sus incrustaciones, ilustrado para la división de prueba del conjunto de datos COCO 2017. Imágenes y texto incrustados con un modelo CLIP. Imagen cortesía del autor.

Por último, pero no menos importante, tenemos lo que me gusta llamar “exploración del espacio de conceptos”. Al igual que en la interpolación de conceptos, comienza con un conjunto de datos de imágenes y genera incrustaciones con un modelo multimodal como CLIP. A continuación, selecciona una imagen del conjunto de datos. Esta imagen servirá como punto de partida, desde el cual estarás “recorriendo” el espacio de conceptos.

A partir de ahí, puedes definir una dirección en la que quieres moverte proporcionando una cadena de texto como representación de un concepto. Establece la magnitud del “paso” que deseas dar en esa dirección y el vector incrustado de la cadena de texto (con un coeficiente multiplicativo) se sumará al vector incrustado de la imagen inicial. El vector “destino” se utilizará para consultar la base de datos de vectores. Puedes agregar arbitrariamente muchos conceptos en cantidades arbitrarias y observar cómo se actualiza en tiempo real el conjunto de imágenes recuperadas.

Al igual que con la “interpolación de conceptos”, esto no siempre es un proceso estrictamente bien definido. Sin embargo, me parece cautivador y funciona bastante bien cuando el coeficiente aplicado a las incrustaciones de texto es lo suficientemente alto como para tenerlas suficientemente en cuenta.

Para obtener más información y código funcional, consulte aquí.

Conclusión

Los motores de búsqueda de vectores son herramientas increíblemente poderosas. Claro, son las estrellas del mejor espectáculo de la ciudad, el RAG-time. Pero las bases de datos de vectores son mucho más versátiles que eso. Permiten una comprensión más profunda de los datos, ofrecen información sobre cómo los modelos representan esos datos y ofrecen nuevas formas de interactuar con nuestros datos.

Las bases de datos vectoriales no están limitadas a los LLM. Se vuelven útiles siempre que se utilizan incrustaciones, y las incrustaciones se encuentran justo en la intersección del modelo y los datos. Cuanto más rigurosamente entendamos la estructura de los espacios de incrustación, más dinámicas y generalizadas se volverán nuestras interacciones de búsqueda de vectores habilitadas por datos y modelos.

Si encontraste esta publicación interesante, es posible que también desees consultar estas publicaciones impulsadas por la búsqueda de vectores:

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Aprendizaje Automático

3 preguntas Jacob Andreas sobre modelos de lenguaje grandes

El científico de CSAIL describe la investigación de procesamiento de lenguaje natural a través de modelos avanzados d...

Inteligencia Artificial

Enfoque de IA produce un perro robótico 'inteligente atléticamente

Un equipo internacional de investigadores ha desarrollado un algoritmo basado en visión que permite a los robots cuad...

Inteligencia Artificial

Premio Gordon Bell otorgado por simulaciones de materiales que logran precisión cuántica a gran escala

Un equipo de investigadores de instituciones estadounidenses e indias fue galardonado con el Premio Gordon Bell 2023 ...

Noticias de Inteligencia Artificial

La IA puede algún día realizar milagros médicos. Por ahora, ayuda a realizar trabajos administrativos.

Los médicos dicen que el mejor uso para la inteligencia artificial generativa en el cuidado de la salud es aliviar la...

Inteligencia Artificial

Anunciando nuevas herramientas para ayudar a cada negocio a aprovechar la IA generativa

Desde startups hasta empresas, organizaciones de todos los tamaños están comenzando a utilizar la IA generativa. Quie...

Inteligencia Artificial

Conoce T2I-Adapter-SDXL Modelos de Control Pequeños y Eficientes.

Los T2I-Adapters son herramientas plug-and-play que mejoran los modelos de texto a imagen sin requerir un nuevo entre...