La búsqueda vectorial es un método de recuperación que representa las consultas y los documentos como vectores (listas ordenadas de números) y devuelve los documentos cuyos vectores están más cerca del vector de la consulta. Como los números los produce un modelo entrenado para situar cerca los significados similares, la búsqueda vectorial puede relacionar una pregunta con un pasaje aunque no compartan ninguna palabra.
Es el mecanismo detrás de la mayoría de los sistemas de búsqueda semántica y una de las principales formas en que las herramientas de búsqueda con IA encuentran pasajes que leer antes de redactar una respuesta.
¿Cómo funciona la búsqueda vectorial?
Un sistema de búsqueda vectorial tiene una fase de indexación, que se hace por adelantado, y una fase de consulta, que se hace cada vez que alguien busca.
- Dividir el contenido. Los documentos se cortan en fragmentos, normalmente de un párrafo o de unos cientos de tokens. Cada fragmento se convierte en un elemento buscable.
- Generar la incrustación (embedding) de cada fragmento. Un modelo de embeddings lee el fragmento y produce un vector, por ejemplo una lista de varios cientos o unos pocos miles de números.
- Almacenar los vectores. Los vectores se guardan en un índice vectorial, junto con una referencia al texto original y cualquier metadato, como la URL o la fecha.
- Generar el embedding de la consulta. Cuando llega una pregunta, el mismo modelo de embeddings la convierte en un vector de la misma longitud.
- Encontrar los vecinos más cercanos. El índice devuelve los vectores almacenados más cercanos al vector de la consulta, y el sistema busca el texto al que apuntan.
La consulta y los documentos deben procesarse con el mismo modelo. Los vectores de dos modelos distintos viven en espacios diferentes, y las distancias entre ellos no significan nada.
¿Qué es un embedding?
Un embedding es el vector que un modelo produce para un fragmento de texto. Cada posición de la lista es una dimensión, y ninguna dimensión por sí sola tiene un significado legible. La información está en la posición del vector completo respecto a los demás: los textos sobre temas similares quedan cerca entre sí, y los textos sin relación quedan lejos.
Los modelos de embeddings son redes neuronales, a menudo relacionadas con la arquitectura de un modelo de lenguaje grande, entrenadas con pares de textos que deberían coincidir, como una pregunta y su respuesta. El entrenamiento acerca los pares que coinciden y aleja los que no. Un modelo entrenado así sitúa "cómo reinicio mi router" cerca de un pasaje titulado "Restaurar la configuración de fábrica de tu módem".
La cercanía se mide con una función de similitud. Las más comunes son:
- La similitud del coseno, que compara el ángulo entre dos vectores e ignora su longitud.
- El producto escalar, que multiplica las dimensiones correspondientes y suma los resultados. Para vectores normalizados a la misma longitud, ordena los resultados igual que la similitud del coseno.
- La distancia euclidiana, que mide la distancia en línea recta entre dos puntos.
¿Cómo encuentra coincidencias rápidamente un índice vectorial?
Comparar una consulta con cada vector almacenado es exacto, pero lento cuando un índice contiene millones o miles de millones de fragmentos. La mayoría de los sistemas en producción usan en su lugar la búsqueda de vecinos más cercanos aproximados (ANN), que encuentra vectores con una probabilidad muy alta de estar entre los más cercanos sin revisarlos todos.
Se usan mucho dos familias de métodos ANN:
- Los índices basados en grafos, como HNSW (hierarchical navigable small world), enlazan cada vector con algunos de sus vecinos. Una búsqueda empieza en un punto de entrada y recorre el grafo hacia la consulta, pasando en cada paso al vecino que esté más cerca.
- Los índices basados en clústeres, como IVF (inverted file index), agrupan los vectores en clústeres alrededor de puntos centrales. Una búsqueda compara primero la consulta con los centros y luego revisa solo los vectores de los pocos clústeres más cercanos.
Ambos sacrifican un poco de precisión a cambio de una gran ganancia de velocidad. Parámetros como cuántos clústeres revisar o qué tan amplia es la búsqueda en el grafo permiten al operador elegir en qué punto de ese equilibrio se sitúa el sistema. Los vectores también pueden comprimirse para ahorrar memoria, lo que reduce un poco más la precisión.
¿En qué se diferencia la búsqueda vectorial de la búsqueda por palabras clave?
La búsqueda por palabras clave, también llamada búsqueda léxica, compara las palabras de una consulta con las palabras de los documentos, normalmente con una fórmula de puntuación como BM25 que premia los términos poco frecuentes que aparecen a menudo. La búsqueda vectorial compara por significado, y cada enfoque resuelve mejor que el otro algunos casos.
| Búsqueda por palabras clave | Búsqueda vectorial | |
|---|---|---|
| Compara por | Palabras compartidas | Significado similar |
| Sinónimos y paráfrasis | Se pierden salvo que se añadan manualmente | Normalmente se encuentran |
| Cadenas exactas (códigos de producto, nombres, mensajes de error) | Se encuentran de forma fiable | A veces se pierden o se difuminan |
| Estructura del índice | Índice invertido de términos | Índice vectorial de embeddings |
| Explicar un resultado | Fácil: las palabras coincidentes son visibles | Más difícil: la cercanía no tiene una razón legible |
Como sus debilidades son complementarias, muchos sistemas ejecutan ambas y combinan los resultados. Esto se llama búsqueda híbrida. Un método de combinación común, la fusión por rango recíproco (reciprocal rank fusion), combina las posiciones de cada resultado en las dos listas en lugar de sus puntuaciones brutas, ya que las puntuaciones por palabras clave y las de similitud están en escalas distintas.
¿Qué lugar ocupa la búsqueda vectorial en la búsqueda con IA?
Las herramientas de búsqueda con IA usan la recuperación para dar a un modelo de lenguaje texto actualizado con el que responder, un patrón llamado generación aumentada por recuperación. La búsqueda vectorial suele ser uno de los pasos de recuperación. Un motor de búsqueda web puede aportar páginas candidatas, que luego se dividen en fragmentos y se convierten en embeddings para que el sistema pueda elegir los pasajes más cercanos a la pregunta.
Los vecinos más cercanos suelen ser una lista preliminar. Un reranker (un modelo más lento que lee la consulta y cada pasaje juntos) normalmente los vuelve a puntuar antes de que los mejores lleguen al modelo de lenguaje, una etapa posterior que se trata en cómo elige la búsqueda con IA qué fuentes citar. La búsqueda vectorial decide qué pasajes entran siquiera en la competencia.
¿Qué significa la búsqueda vectorial para un sitio web?
La búsqueda vectorial puntúa fragmentos, así que la unidad que compite es el pasaje. Una página puede ser relevante en conjunto y aun así perder si ningún fragmento suyo está cerca de la pregunta. Un párrafo que expone su tema, nombra el producto o concepto del que trata y responde a una sola pregunta tiende a producir un embedding que queda cerca de las consultas sobre ese tema.
De esto se derivan varias consecuencias prácticas:
- Los pasajes que dependen del contexto anterior ("como se mencionó arriba", "esta función") generan malos embeddings, porque el fragmento pierde el sujeto al recortarse.
- Las secciones largas que mezclan varios temas producen vectores que quedan entre esos temas y no coinciden con fuerza con ninguno.
- Los nombres exactos, los números de modelo y los nombres de marca son el punto más débil de la búsqueda vectorial, así que escribirlos en texto plano también ayuda a que la parte de palabras clave de un sistema híbrido encuentre la página.
- Los encabezados que coinciden con la forma en que la gente formula sus preguntas dan un sujeto claro al fragmento que tienen debajo.
La optimización para motores generativos recomienda los mismos hábitos de escritura, y el mecanismo descrito aquí es en buena parte la razón.