Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Búsqueda vectorial para Amazon DocumentDB
La búsqueda vectorial es un método utilizado en el aprendizaje automático para encontrar puntos de datos similares a un punto de datos dado mediante la comparación de sus representaciones vectoriales mediante métricas de distancia o similitud. Cuanto más cerca estén los dos vectores del espacio vectorial, más parecidos se considerarán los elementos subyacentes. Esta técnica ayuda a captar el significado semántico de los datos. Este enfoque es útil en diversas aplicaciones, como los sistemas de recomendación, el procesamiento del lenguaje natural y el reconocimiento de imágenes.
La búsqueda vectorial para Amazon DocumentDB combina la flexibilidad y la amplia capacidad de consulta de una base de datos de documentos basada en JSON con la potencia de la búsqueda vectorial. Si desea utilizar sus datos actuales de Amazon DocumentDB o una estructura de datos de documentos flexible para crear casos de uso de aprendizaje automático e IA generativa, como la experiencia de búsqueda semántica, la recomendación de productos, la personalización, los chatbots, la detección de fraudes y la detección de anomalías, la búsqueda vectorial para Amazon DocumentDB es la opción ideal para usted. La búsqueda vectorial está disponible en los clústeres basados en instancias de Amazon DocumentDB 5.0.
Temas
Inserción de vectores
Para insertar vectores en la base de datos de Amazon DocumentDB, puede utilizar los métodos de inserción existentes:
Ejemplo
En el siguiente ejemplo, se crea una colección de cinco documentos dentro de una base de datos de prueba. Cada documento incluye dos campos: el nombre del producto y su correspondiente incrustación vectorial.
db.collection.insertMany([ {"product_name": "Product A", "vectorEmbedding": [0.2, 0.5, 0.8]}, {"product_name": "Product B", "vectorEmbedding": [0.7, 0.3, 0.9]}, {"product_name": "Product C", "vectorEmbedding": [0.1, 0.2, 0.5]}, {"product_name": "Product D", "vectorEmbedding": [0.9, 0.6, 0.4]}, {"product_name": "Product E", "vectorEmbedding": [0.4, 0.7, 0.2]} ]);
Crear un índice vectorial
Amazon DocumentDB admite los métodos de indexación Jerarchical Navigable Small World (HNSW) y de indexación de archivos invertidos con compresión plana (IVFFlat). Un índice IVFFlat segrega los vectores en listas y, posteriormente, busca en un subconjunto seleccionado de esas listas que esté más cerca del vector de consulta. Por otro lado, un índice HNSW organiza los datos vectoriales en un gráfico de varias capas. Si bien HNSW tiene tiempos de creación más lentos en comparación con IVFFlat, ofrece un mejor rendimiento y recuperación de las consultas. A diferencia de IVFFlat, HNSW no implica ningún paso de entrenamiento, lo que permite generar el índice sin ninguna carga inicial de datos. Para la mayoría de los casos de uso, recomendamos utilizar el tipo de índice HNSW para la búsqueda vectorial.
Si no crea un índice vectorial, Amazon DocumentDB realiza una búsqueda exacta del vecino más cercano, lo que garantiza una recuperación perfecta. Sin embargo, en los escenarios de producción, la velocidad es crucial. Recomendamos utilizar índices vectoriales, que pueden cambiar un poco de memoria por mejorar la velocidad. Es importante tener en cuenta que añadir un índice vectorial puede generar resultados de consulta diferentes.
Plantillas
Puedes usar lo siguiente createIndex
o runCommand
plantillas para crear un índice vectorial en un campo vectorial:
Parámetro | Requisito | Tipo de datos | Descripción | Valor (s) |
---|---|---|---|---|
|
opcional |
cadena |
Especifica el nombre del índice. |
Alfanumérico |
|
opcional |
Especifica el tipo de índice. |
Compatible: hnsw o ifflat Predeterminado: HNSW (con el parche del motor a partir de la versión 3.0.4574) |
|
|
obligatorio |
integer |
Especifica el número de dimensiones de los datos vectoriales. |
Máximo de 2000 dimensiones. |
|
obligatorio |
cadena |
Especifica la métrica de distancia utilizada para el cálculo de similitud. |
|
|
necesario para IVF-Flat |
integer |
Especifica el número de clústeres que el índice IVFFlat utiliza para agrupar los datos vectoriales. La configuración recomendada es el número de documentos/1000 para un máximo de 1 millón de documentos y |
Mínimo: 1 Máximo: consulte la tabla de listas por tipo de instancia que aparece a continuación. Características y limitaciones |
|
opcional |
integer |
Especifica el número máximo de conexiones para un índice HNSW |
Predeterminado: 16 Rango [2, 100] |
|
opcional |
integer |
Especifica el tamaño de la lista dinámica de candidatos para construir el gráfico del índice HNSW.
|
Predeterminado: 64 Rango [4, 1000] |
Es importante que defina adecuadamente el valor de los subparámetros, como lists
los de IVFflat m
y efConstruction
HNSW, ya que esto afectará a la precisión/recuperación, al tiempo de creación y al rendimiento de la búsqueda. Un valor de lista más alto aumenta la velocidad de la consulta, ya que reduce el número de vectores de cada lista, lo que se traduce en regiones más pequeñas. Sin embargo, un tamaño de región más pequeño puede provocar más errores de recuperación, lo que se traduce en una menor precisión. En el caso de HNSW, al aumentar el valor m
y efConstruction
la precisión, también se incrementa el tiempo y el tamaño de creación del índice. Consulte los siguientes ejemplos:
Ejemplos
Obtener una definición de índice
Puede ver los detalles de sus índices, incluidos los índices vectoriales, mediante el getIndexes
comando:
Ejemplo
db.collection.getIndexes()
Ejemplo de salida
[
{
"v" : 4,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.collection"
},
{
"v" : 4,
"key" : {
"vectorEmbedding" : "vector"
},
"name" : "myIndex",
"vectorOptions" : {
"type" : "ivfflat",
"dimensions" : 3,
"similarity" : "euclidean",
"lists" : 1
},
"ns" : "test.collection"
}
]
Consultando vectores
Plantilla de consulta vectorial
Utilice la siguiente plantilla para consultar un vector:
db.collection.aggregate([ { $search: { "vectorSearch": { "vector": <query vector>, "path": "<vectorField>", "similarity": "<distance metric>", "k": <number of results>, "probes":<number of probes> [applicable for IVFFlat], "efSearch":<size of the dynamic list during search> [applicable for HNSW] } } } ]);
Parámetro | Requisito | Tipo | Descripción | Valor (s) |
---|---|---|---|---|
|
obligatorio |
operador |
Se utiliza dentro del comando $search para consultar los vectores. |
|
|
obligatorio |
matriz |
Indica el vector de consulta que se utilizará para buscar vectores similares. |
|
|
obligatorio |
cadena |
Define el nombre del campo vectorial. |
|
|
obligatorio |
integer |
Especifica el número de resultados que devuelve la búsqueda. |
|
|
obligatorio |
cadena |
Especifica la métrica de distancia utilizada para el cálculo de similitud. |
|
|
opcional |
integer |
El número de conglomerados que desea que inspeccione la búsqueda vectorial. Un valor más alto proporciona una mejor recuperación a costa de la velocidad. Se puede establecer en función del número de listas para la búsqueda exacta del vecino más cercano (momento en el que el planificador no utilizará el índice). La configuración recomendada para iniciar el ajuste preciso es. |
Valor predeterminado: 1 |
|
opcional |
integer |
Especifica el tamaño de la lista dinámica de candidatos que el índice HNSW utiliza durante la búsqueda. Un valor más alto de |
Predeterminado: 40 Rango [1, 1000] |
Es importante ajustar con precisión el valor de efSearch
(HNSW) o probes
(IVFlat) para lograr el rendimiento y la precisión deseados. Consulte los siguientes ejemplos de operaciones:
Ejemplo de salida
La salida de esta operación será similar a lo que se indica a continuación:
{ "_id" : ObjectId("653d835ff96bee02cad7323c"), "product_name" : "Product A", "vectorEmbedding" : [ 0.2, 0.5, 0.8 ] }
{ "_id" : ObjectId("653d835ff96bee02cad7323e"), "product_name" : "Product C", "vectorEmbedding" : [ 0.1, 0.2, 0.5 ] }
Características y limitaciones
Compatibilidad de versiones
La búsqueda vectorial para Amazon DocumentDB solo está disponible en los clústeres basados en instancias de Amazon DocumentDB 5.0.
Vectores
Amazon DocumentDB puede indexar vectores de hasta 2000 dimensiones. Sin embargo, se pueden almacenar hasta 16 000 dimensiones sin un índice.
Índices
-
Para la creación de índices IVFFlat, la configuración recomendada para el parámetro de listas es el número de documentos/1000 para un máximo de 1 millón de documentos y
sqrt(# of documents)
para más de 1 millón de documentos. Debido al límite de memoria de trabajo, Amazon DocumentDB admite un determinado valor máximo del parámetro lists en función del número de dimensiones. Como referencia, la siguiente tabla proporciona los valores máximos del parámetro de listas para vectores de 500, 1000 y 2000 dimensiones:Tipo de instancia Listas con 500 dimensiones Listas con 1000 dimensiones Listas con 2000 dimensiones t3.med
372
257
150
r5.l
915
741
511
r5.xl
1.393
1.196
901
r5.2xl
5.460
5.230
4.788
r5,4 x l
7.842
7.599
7.138
r5.8xl
11.220
10.974
10.498
r5.12xl
13.774
13.526
13.044
r5.16xl
15.943
15.694
15.208
r5.24xl
19.585
19.335
18.845
No hay otras opciones de índice
compound
, como los índices vectoriales,sparse
nipartial
compatibles con ellos.El índice HNSW no admite la creación de índices paralelos. Solo se admite para el índice IVFFlat.
Consulta vectorial
Para una consulta de búsqueda vectorial, es importante ajustar los parámetros, por ejemplo,
efSearch
para obtener resultados óptimos.probes
Cuanto mayor sea el valor delefSearch
parámetroprobes
o, mayor será la recuperación y menor será la velocidad. El ajuste recomendado para empezar a ajustar con precisión el parámetro de las sondas essqrt(# of lists)
.
Prácticas recomendadas
Conozca las prácticas recomendadas para trabajar con la búsqueda vectorial en Amazon DocumentDB. Esta sección se actualiza continuamente a medida que se identifican nuevas prácticas recomendadas.
-
La creación del índice de archivos invertidos con compresión plana (IVFFlat) implica agrupar y organizar los puntos de datos en función de las similitudes. Por lo tanto, para que un índice sea más eficaz, le recomendamos que cargue al menos algunos datos antes de crearlo.
-
Para las consultas de búsqueda vectorial, es importante ajustar los parámetros, por ejemplo,
efSearch
para obtener resultados óptimos.probes
Cuanto mayor sea el valor delefSearch
parámetroprobes
o, mayor será la recuperación y menor será la velocidad. El ajuste recomendado para iniciar el ajuste preciso delprobes
parámetro essqrt(lists)
.
Recursos