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 machine learning para encontrar puntos de datos similares a un punto de datos determinado 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 machine learning e IA generativa, como la experiencia de búsqueda semántica, recomendación de productos, personalización, chatbots, detección de fraudes y 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 incrustación vectorial correspondiente.
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]} ]);
Creación de 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 IVFFlat índice segrega los vectores en listas y, posteriormente, busca en un subconjunto seleccionado de las listas más cercanas al 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 HNSW IVFFlat, ofrece un mejor rendimiento y recuperación de las consultas. Por el contrario IVFFlat, HNSW no implica ningún paso de entrenamiento, lo que permite generar el índice sin ninguna carga inicial de datos. En 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 hacer 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 agregar un índice vectorial puede generar resultados de consulta diferentes.
Plantillas
Puede usar las siguientes plantillas de createIndex
o runCommand
para crear un índice vectorial en un campo vectorial:
Parámetro | Requisito | Tipo de datos: | Descripción | Valores |
---|---|---|---|---|
|
opcional |
cadena |
Especifica el nombre del índice. |
Alfanumérico |
|
opcional |
Especifica el tipo de índice. |
Compatible: hnsw o ivfflat Valor predeterminado: HNSW (con el parche del motor a partir de la versión 3.0.4574) |
|
|
obligatorio |
entero |
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 IVFFlat |
entero |
Especifica el número de clústeres que el IVFFlat índice utiliza para agrupar los datos vectoriales. La configuración recomendada es el número de documentos/1000 para un máximo de un millón de documentos y |
Mínimo: 1 Máximo: consulte la tabla de listas por tipo de instancia que aparece en Características y limitaciones a continuación. |
|
opcional |
entero |
Especifica el número máximo de conexiones para un índice HNSW |
Predeterminado: 16 Rango: [2, 100] |
|
opcional |
entero |
Especifica el tamaño de la lista dinámica de candidatos para construir el gráfico del índice de HNSW.
|
Predeterminado: 64 Rango [4, 1000] |
Es importante que establezca adecuadamente el valor de los subparámetros, como lists
para IVFFlat m
y efConstruction
para 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, aumentar el valor m
y efConstruction
aumenta la precisión, pero también se incrementa el tiempo y el tamaño de creación del índice. Consulte los siguientes ejemplos:
Ejemplos
Obtención de una definición de índice
Puede ver los detalles de los índices, incluidos los índices vectoriales, mediante el comando getIndexes
:
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"
}
]
Consulta de 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 | Valores |
---|---|---|---|---|
|
obligatorio |
operador |
Se utiliza dentro del comando $search para consultar los vectores. |
|
|
obligatorio |
array |
Indica el vector de consulta que se utilizará para buscar vectores similares. |
|
|
obligatorio |
cadena |
Define el nombre del campo vectorial. |
|
|
obligatorio |
entero |
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 |
entero |
El número de clústeres 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 |
entero |
Especifica el tamaño de la lista dinámica de candidatos que el índice de 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
(IVFFlat) para lograr el rendimiento y la precisión deseados. Vea 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 IVFFlat índices, 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 de listas en función del número de dimensiones. Como referencia, en la siguiente tabla se proporcionan 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.4xl
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
Los índices vectoriales no admiten otras opciones de índice, como
compound
,sparse
opartial
.El índice de HNSW no admite la creación de índices en paralelo. Solo es compatible con el IVFFlat índice.
Consulta vectorial
Para una consulta de búsqueda vectorial, es importante afinar los parámetros, por ejemplo,
probes
oefSearch
, para obtener resultados óptimos. Cuanto mayor sea el valor del parámetroprobes
oefSearch
, mayor será la recuperación y menor será la velocidad. La configuración recomendada para iniciar el ajuste preciso del parámetro de sondas essqrt(# of lists)
.
Prácticas recomendadas
Descubra 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 consultas de búsqueda vectorial, es importante afinar los parámetros, por ejemplo,
probes
oefSearch
, para obtener resultados óptimos. Cuanto mayor sea el valor del parámetroprobes
oefSearch
, mayor será la recuperación y menor será la velocidad. La configuración recomendada para empezar a afinar el parámetroprobes
essqrt(lists)
.
Recursos