La búsqueda vectorial es una técnica de búsqueda que se emplea para encontrar elementos o puntos de datos similares, normalmente representados como vectores, en grandes colecciones. Los vectores, o incrustaciones, son representaciones numéricas de palabras, entidades, documentos, imágenes o videos. Los vectores capturan las relaciones semánticas entre los elementos, lo que permite un procesamiento eficaz por parte de los modelos de machine learning y las aplicaciones de inteligencia artificial.
A diferencia de la búsqueda tradicional, que suele emplear la búsqueda por palabras clave, la búsqueda vectorial se basa en técnicas de búsqueda de similitud vectorial como la búsqueda del vecino más cercano (knn) para recuperar puntos de datos similares a un vector de consulta basado en alguna métrica de distancia. Los vectores capturan relaciones semánticas y similitudes entre puntos de datos, lo que permite la búsqueda semántica en lugar de una simple búsqueda por palabras clave.
Para ilustrar la diferencia entre la palabra clave tradicional y la búsqueda vectorial, veamos un ejemplo. Supongamos que está buscando información sobre la mejor pizzería y busca "mejor pizzería" en un motor de búsqueda tradicional de palabras clave. La búsqueda por palabra clave busca páginas que contengan las palabras exactas "mejor", "pizza" y "restaurante" y solo devuelve resultados como "Mejor restaurante de pizza" o "Pizzería cerca de mí". La búsqueda tradicional de palabras clave se centra en hacer coincidir las palabras clave en lugar de comprender el contexto o la intención detrás de la búsqueda.
Por el contrario, en una búsqueda vectorial semántica, el motor de búsqueda comprende la intención detrás de la consulta. Semántica, por definición, significa relacionar con el significado en el lenguaje, es decir, la búsqueda semántica comprende el significado y el contexto de una consulta. En este caso, buscaría contenido que hablara sobre las pizzerías mejor calificadas o altamente recomendadas, incluso si las palabras exactas "mejor pizzería" no se emplean en el contenido. Los resultados son más relevantes para el contexto y pueden incluir artículos o guías que hablen sobre pizzerías de alta calidad en varios lugares.
Los métodos de búsqueda tradicionales suelen representar datos utilizando tokens o características discretas, como palabras clave, etiquetas o metadatos. Como se muestra en nuestro ejemplo anterior, estos métodos se basan en coincidencias exactas para recuperar resultados relevantes. Por el contrario, la búsqueda vectorial representa los datos como vectores densos (un vector en el que la mayoría o todos los elementos son distintos de cero) en un espacio vectorial continuo, el espacio matemático en el que los datos se representan como vectores. Cada dimensión del vector denso corresponde a una característica o aspecto latente de los datos, una característica o atributo subyacente que no se observa directamente sino que se infiere de los datos a través de modelos matemáticos o algoritmos. Estos rasgos latentes capturan los patrones y relaciones ocultos en los datos, lo que permite representaciones más significativas y precisas de los elementos como vectores en un espacio de alta dimensión.
Los métodos de búsqueda tradicionales pueden tener dificultades de escalabilidad para conjuntos de datos grandes o de alta dimensión debido a limitaciones computacionales y de memoria. Por el contrario, las incrustaciones vectoriales son más fáciles de escalar a conjuntos de datos más grandes y modelos más complejos. A diferencia de las representaciones dispersas de datos donde la mayoría de los valores son ceros en todas las dimensiones, las incrustaciones son representaciones vectoriales densas que tienen valores distintos de cero en la mayoría de las dimensiones. Esto permite que las incrustaciones vectoriales almacenen más información en un espacio más pequeño y de menor dimensión, lo que requiere menos memoria.1 Como resultado, los algoritmos y modelos de machine learning pueden emplear incrustaciones de manera más eficiente con menos recursos computacionales.
Para esta explicación, nos centraremos en las representaciones vectoriales aplicables en el procesamiento de lenguaje natural (PLN), es decir, vectores que representan palabras, entidades o documentos.
Vamos a ilustrar el proceso de vectorización mediante la vectorización de un pequeño corpus de oraciones: "el gato se sentó en la alfombra", "el perro jugó en el patio" y "los pájaros cantaron en los árboles".
El primer paso para construir embedings vectoriales es limpiar y procesar el conjunto de datos sin procesar. Esto puede implicar la eliminación del ruido y la estandarización del texto. Para nuestro ejemplo, no haremos ninguna limpieza ya que el texto ya está limpio y estandarizado.
A continuación, se elige un modelo de incrustación para capacitarlo en el conjunto de datos. El modelo de incrustación capacitado se emplea para generar incrustaciones para cada punto de datos del conjunto de datos. Para los datos de texto, los modelos de incrustación de código abierto más populares son Word2Vec, GloVe, FastText o modelos basados en transformadores previamente capacitados como BERT o RoBERTa2.
Para nuestro ejemplo, usaremos Word2Vec para generar nuestras incrustaciones.
A continuación, las incrustaciones se almacenan en una base de datos vectorial o se emplea un complemento de búsqueda vectorial para un motor de búsqueda, como Elasticsearch. En la búsqueda vectorial, la relevancia de un resultado de búsqueda se establece evaluando la similitud entre el vector de consulta, que se genera al vectorizar la consulta, y el vector de documento, que es una representación de los datos que se consultan. Es necesario crear índices en la base de datos vectorial para permitir una recuperación rápida y eficiente de incrustaciones basadas en consultas similares. Se pueden emplear técnicas como el mundo pequeño navegable jerárquico (HNSW) para indexar las incrustaciones y facilitar la búsqueda de similitudes en el momento de la consulta. HNSW organiza el conjunto de datos y permite la búsqueda rápida de vecinos más cercanos agrupando vectores similares durante el proceso de construcción del índice.
Finalmente, se debe establecer un mecanismo o procedimiento para generar vectores para nuevas consultas. Esto suele implicar la creación de una API o servicio que tome las consultas de búsqueda de los usuarios como entrada en tiempo real, las procese empleando el mismo modelo vectorial y genere una representación vectorial correspondiente. Este vector se puede emplear para buscar en la base de datos y obtener los resultados más relevantes.
La distancia euclidiana es una medida de la distancia en línea recta entre dos puntos. Se calcula como la raíz cuadrada de la suma de las diferencias al cuadrado entre las coordenadas correspondientes de los dos puntos.
Esta fórmula se puede extender a espacios de dimensiones superiores agregando más términos para dar cuenta de dimensiones adicionales.
La similitud del coseno es una medida de similitud entre dos vectores en un espacio multidimensional. Calcula el coseno del ángulo entre los dos vectores, indicando qué tan cerca están alineados los vectores entre sí.
Matemáticamente, la similitud del coseno, cos(θ), entre dos vectores se calcula como el producto escalar de los dos vectores dividido por el producto de sus magnitudes.
La similitud del coseno varía de -1 a 1, donde:
La similitud de coseno es particularmente útil cuando se trata de vectores, ya que se centra en la relación direccional entre vectores en lugar de sus magnitudes.
Si bien las métricas de distancia mencionadas anteriormente se pueden emplear para medir la similitud de vectores, resulta ineficiente y lento comparar todos los vectores posibles con el vector de consulta en el momento de la consulta para la búsqueda de similitud. Para resolver esto, podemos usar una búsqueda de vecino más cercano (ANN).
En lugar de encontrar una coincidencia exacta, los algoritmos de ANN buscan de manera eficiente los vectores que están aproximadamente más cerca de una consulta determinada en función de alguna métrica de distancia, como la distancia euclidiana o la similitud del coseno. Al permitir cierto nivel de aproximación, estos algoritmos pueden reducir significativamente el costo computacional de la búsqueda del vecino más cercano sin la necesidad de calcular similitudes de incrustación en todo un corpus.
Uno de los algoritmos RNA más populares son los gráficos HNSW. La estructura jerárquica navegable del grafo small world indexa el conjunto de datos y facilita la búsqueda rápida de vecinos más próximos agrupando vectores similares a medida que construye el índice. HNSW organiza los datos en barrios, vinculándolos con probables conexiones. Al indexar un vector denso, identifica la vecindad adecuada y sus conexiones potenciales, almacenándolas en una estructura de grafos. Durante una búsqueda HNSW con una consulta de vector denso, localiza el punto de entrada de vecindad óptimo y devuelve los vecinos más cercanos.
La búsqueda vectorial tiene numerosos casos de uso en distintos ámbitos debido a su capacidad para recuperar eficazmente elementos similares basar en sus representaciones vectoriales. Algunas aplicaciones habituales de la búsqueda vectorial son
La búsqueda vectorial se emplea en los motores de búsqueda para recuperar documentos, artículos, sitios web u otros contenidos textuales en función de su similitud con una consulta. Permite a los usuarios encontrar información pertinente aunque los términos exactos empleados en la consulta no estén presentes en los documentos.
La búsqueda vectorial es fundamental en el marco de generación aumentada de recuperación (RAG) para recuperar el contexto relevante de un gran corpus de texto. RAG es un marco para la IA generativa que combina la búsqueda vectorial con modelos de lenguaje generativo para generar respuestas.
En las tareas tradicionales de generación de lenguaje, se emplean modelos de lenguaje grandes (LLM) como GPT (Generative Pre-trained Transformer) de OpenAI o Granite Models de IBM para construir respuestas basadas en la instrucción de entrada. Sin embargo, estos modelos pueden tener dificultades para producir respuestas que sean contextualmente relevantes, objetivamente precisas o actualizadas. RAG aborda esta limitación incorporando un paso de recuperación antes de la generación de respuestas. Durante la recuperación, la búsqueda vectorial se puede emplear para identificar información contextualmente pertinente, como pasajes o documentos relevantes de un gran corpus de texto, generalmente almacenados en una base de datos vectorial. A continuación, se emplea un LLM para generar una respuesta basada en el contexto recuperado.
Más allá de la generación de lenguaje, RAG y la búsqueda vectorial tienen otras aplicaciones en otras tareas de NLP, como respuesta a preguntas, chatbots, resumen y generación de contenido.
La búsqueda vectorial se puede integrar en enfoques de búsqueda híbridos para mejorar la eficacia y la flexibilidad del proceso de búsqueda. La búsqueda híbrida combina la búsqueda vectorial con otras técnicas de búsqueda, como la búsqueda basada en palabras clave o la búsqueda basada en metadatos. La búsqueda vectorial puede emplear para recuperar elementos basar en su similitud con una consulta, mientras que otros métodos de búsqueda pueden emplear para recuperar elementos basar en coincidencias exactas o criterios específicos.
Las tiendas de vectores se emplean en motores de búsqueda de imágenes y videos para indexar y recuperar contenido visual basado en la similitud. Las incrustaciones de imágenes y videos se almacenan como vectores, lo que permite a los usuarios buscar imágenes o videos visualmente similares en grandes conjuntos de datos.
Los motores de recomendación en servicios de streaming, así como en plataformas de comercio electrónico, redes sociales y medios visuales, pueden funcionar mediante la búsqueda vectorial. La búsqueda vectorial permite recomendar productos, películas, música u otros elementos en función de su similitud con elementos con los que los usuarios interactuaron o que les gustaron anteriormente.
La búsqueda vectorial se emplea en aplicaciones de datos geoespaciales para recuperar datos espaciales, como puntos de interés, características geográficas o trayectorias espaciales en función de su proximidad o similitud con una ubicación o patrón de consulta. Permite la búsqueda y el análisis espacial eficientes en sistemas de información geográfica y servicios basados en la ubicación.
1 Bahaaldine Azarmi y Jeff Vestal, Búsqueda vectorial para practicantes con Elastic, Packt Publishing, 2023
2 Vicki Boykis, “¿Qué son las incrustaciones?”, 2023, https:\/\/vickiboykis.com\/what_are_embeddings
3 Trey Grainger, Doug Turnbull and Max Irwin, AI Powered Search, Manning Publications, 2024