Cada vez que alguien arma un buscador con inteligencia artificial, aparece la misma pregunta: ¿necesito una base vectorial? A veces sí. Bastante seguido, la base de datos que ya tenés resuelve lo mismo con menos piezas que mantener. Para decidir hay que entender qué hace cada herramienta.
Embeddings: significado convertido en números
Un embedding es una lista de números (un vector) que representa un texto, y se obtiene con un modelo pensado para eso. La propiedad útil es que textos con significado parecido producen vectores cercanos entre sí. "Cómo restablezco mi contraseña" y "olvidé la contraseña de entrada" no comparten casi palabras, pero sus vectores quedan próximos.
Cuán cerca están dos vectores se mide con alguna función de similitud. Una muy usada es la similitud coseno, que compara el ángulo entre ambos:
import math
def similitud_coseno(a, b):
producto = sum(x * y for x, y in zip(a, b))
norma_a = math.sqrt(sum(x * x for x in a))
norma_b = math.sqrt(sum(y * y for y in b))
return producto / (norma_a * norma_b)
Un valor cercano a uno indica vectores muy parecidos. En la práctica, vos no lo calculás a mano: lo hace la herramienta de búsqueda. Lo importante es la idea: buscar deja de ser "contiene esta palabra" y pasa a ser "se parece a esto".
Qué hace una base vectorial
Almacena vectores junto con sus datos asociados (el texto original, el identificador, metadatos) y responde una pregunta: dado este vector, ¿cuáles son los más cercanos? Con pocos miles de vectores podés compararlos todos contra el de la consulta y ordenar. Con muchos millones, eso se vuelve lento, y las bases vectoriales usan estructuras de índice que buscan vecinos aproximados: sacrifican un poco de exactitud a cambio de mucha velocidad.
Ahí está su valor real. Si tu volumen es chico, ese problema no lo tenés.
La alternativa clásica
Las búsquedas por términos exactos y los índices de texto completo existen hace décadas y funcionan muy bien en lo suyo. Un índice de texto completo normaliza las palabras, ignora las muy comunes, ordena los resultados por relevancia y encuentra al instante coincidencias exactas de códigos, nombres propios, números de factura o mensajes de error.
Ahí los vectores suelen ser peores. Si el usuario busca el código "ERR-4021", querés el documento que contiene exactamente eso, no uno que se "parece". La búsqueda semántica tiende a diluir los términos exactos.
En cambio, los vectores ganan cuando la persona pregunta con palabras distintas de las del documento, cuando hay sinónimos, cuando la consulta es una frase larga o cuando se busca por tema más que por término.
Búsqueda híbrida
No hay que elegir una sola. La búsqueda híbrida ejecuta las dos y combina los resultados, por ejemplo unificando las dos listas ordenadas en una sola. Así cubrís las consultas con códigos y nombres exactos, y también las formuladas con lenguaje libre. Muchas bases relacionales y motores de búsqueda actuales ofrecen ambas capacidades en el mismo lugar, lo cual te ahorra sincronizar dos sistemas.
Cómo decidir
Hacete estas preguntas, en este orden:
- ¿Cuántos documentos tenés? Con volúmenes chicos o medianos, una extensión vectorial de tu base actual, o incluso comparar en memoria, alcanza sobrado.
- ¿Cómo consulta la gente? Si busca por términos precisos, empezá por texto completo. Si pregunta en lenguaje natural, los embeddings aportan.
- ¿Cambian mucho los datos? Cada documento nuevo o modificado requiere recalcular su embedding. Si cambia el modelo de embeddings, hay que recalcular todo y no se pueden mezclar vectores de modelos distintos.
- ¿Quién lo va a operar? Un servicio más es otra cosa para monitorear, respaldar y pagar. Si tu equipo es chico, ese costo pesa.
Una buena práctica es medir antes de comprometerte: armá veinte consultas típicas con el resultado esperado y fijate cuántas resuelve la búsqueda de texto actual. Si falla en las que importan por diferencias de vocabulario, ahí tenés el argumento para sumar vectores. Si no, probablemente ya tengas lo que necesitás.