# Base de datos de vectores

Una base de datos de vectores, un almacén de vectores o un motor de búsqueda de vectores es una base de datos que puede almacenar vectores (listas de números de longitud fija) junto con otros elementos de datos. Las bases de datos vectoriales generalmente implementan uno o más algoritmos búsqueda aproximativa del vecino más próximo (ANN), para que uno pueda buscar en la base de datos con un vector de consulta (query en inglés) y recuperar los vectores de la base de datos que sean más similares o estén más cercanos del vector de consulta.
Los vectores son representaciones matemáticas de datos en un espacio de dimensiones muy grandes. En este espacio, cada dimensión corresponde a una característica de los datos, y el número de dimensiones oscila entre unos pocos cientos y decenas de miles, según la complejidad de los datos que se representan. La posición de un vector en este espacio representa sus características. Se pueden crear vectores a partir de palabras, frases o documentos completos, así como imágenes, audio y otros tipos de datos.
Estos vectores de características se pueden calcular a partir de datos sin procesar utilizando métodos de aprendizaje automático, como algoritmos de extracción de características, embeddings de palabras o redes de aprendizaje profundo . El objetivo es que los elementos de datos semánticamente similares reciban vectores de características cercanos entre sí.
Las bases de datos vectoriales se pueden utilizar para búsqueda de similitudes, búsqueda multimodal, motores de recomendaciones, modelos de lenguaje grandes (siglas en inglés LLM), etc.
Las bases de datos vectoriales también se utilizan a menudo para implementar la recuperación aumentada generativa (siglas en inglés RAG), un método para mejorar las respuestas específicas de dominio de modelos de lenguaje grandes. El componente de recuperación de un RAG puede ser cualquier sistema de búsqueda, pero normalmente se implementa como una base de datos vectorial. Se recopilan documentos de texto que describen el dominio de interés y, para cada documento o sección de documento, se calcula un vector de características (conocido como "embedding"), normalmente utilizando una red de aprendizaje profundo, y se almacena en una base de datos de vectores. Dada una instrucción de usuario (prompt en inglés) , se calcula el vector de características de la instrucción y se consulta la base de datos para recuperar los documentos más relevantes. A continuación, estos se agregan automáticamente a la ventana de contexto del LLM, y éste procede a generar una respuesta basada en la instrucción dada y en su contexto.

## Técnicas

Las técnicas más importantes para la búsqueda de similitudes en vectores de dimensiones muy grandes incluyen:
* Pequeño mundo navegable jerarquizado o estratificado (siglas en inglés HNSW)
* Locality-sensitive Hashing (LSH) y Sketching
* Product Quantization (PQ)
* Índice invertido
y combinaciones de estas técnicas.
En evaluaciones comparativas recientes, las implementaciones basadas en el HNSW se encuentran entre las de mayor rendimiento. Conferencias como International Conference on Similarity Search and Applications, SISAP y la Conference on Neural Information Processing Systems (NeurIPS) organizan competiciones sobre búsqueda de vectores en grandes bases de datos.

## Implementaciones

| Name | License |
| AllegroGraph | Proprietary (Managed Service) |
| Apache Cassandra | Apache License 2.0 |
| Chroma | Apache License 2.0 |
| Azure Cosmos DB | Proprietary (Managed Service) |
| Couchbase | BSL 1.1 |
| Elasticsearch | Server Side Public License, Elastic License |
| HDF5 Query Indexing | BSD 3-Clause |
| Lantern | BSL 1.1 |
| LlamaIndex | MIT License |
| Milvus | Apache License 2.0 |
| MongoDB Atlas | Server Side Public License (Managed service) |
| Neo4j | GPL v3 (Community Edition) |
| OpenSearch | Apache License 2.0 |
| Pinecone | Proprietary (Managed Service) |
| Postgres with pgvector | PostgreSQL License |
| Qdrant | Apache License 2.0 |
| Redis Stack | Redis Source Available License |
| Snowflake | Proprietary (Managed Service) |
| SurrealDB | BSL 1.1 |
| Typesense | GPL v3 (Community Edition) |
| Vespa | Apache License 2.0 |
| Weaviate | BSD 3-Clause |