Docs Menu
Docs Home
/ /

Cuantificación vectorial

La búsqueda vectorial de MongoDB admite la cuantificación automática de sus incrustaciones de vectores flotantes (tanto de 32-bit como de 64-bit). También ofrece soporte para la ingesta e indexación de sus vectores escalares y binarios precuantizados de ciertos modelos de incrustación.

La cuantización es el proceso de comprimir los vectores de fidelidad completa en menos bits. Reduce la cantidad de memoria principal necesaria para almacenar cada vector en un índice de búsqueda vectorial de MongoDB mediante la indexación de los vectores de representación reducida. Esto permite el almacenamiento de más vectores o vectores con dimensiones superiores. Por lo tanto, la cuantización reduce el consumo de recursos y mejora la velocidad. Recomendamos la cuantificación para aplicaciones con un gran número de vectores, como más de 100,000.

La cuantificación escalar implica, en primer lugar, identificar los valores mínimo y máximo de cada dimensión de los vectores indexados para establecer un rango de valores para una dimensión. Posteriormente, el rango se divide en intervalos o contenedores de igual tamaño. Finalmente, cada valor flotante se asigna a un contenedor para convertir los valores flotantes continuos en enteros discretos. En MongoDB Vector Search, esta cuantificación reduce el consumo de RAM de la incrustación de vectores a aproximadamente una cuarta parte (1/3.75) del coste de precuantificación.

La cuantificación binaria implica asumir un punto medio de 0 para cada dimensión, lo cual suele ser apropiado para incrustaciones normalizadas a una longitud de,1 como la text-embedding-3-large de OpenAI. Luego, cada valor del vector se compara con el punto medio y se le asigna un valor binario de 1 si es mayor que el punto medio y un valor binario de 0 si es menor o igual que el punto medio. En MongoDB Vector Search, esta cuantificación reduce el consumo de RAM de la incrustación vectorial a una veinticuatroava1/24 parte () del consumo previo a la cuantificación. La razón por la que no es 1/32 se debe a que la estructura de datos que contiene los Mundos Pequeños Navegables Jerárquicos El gráfico en sí, separado de los valores vectoriales, no está comprimido.

Al ejecutar una query, la búsqueda vectorial de MongoDB convierte el valor flotante del vector de query en un vector binario utilizando el mismo punto medio para una comparación eficiente entre el vector de query y los vectores binarios indexados. A continuación, vuelve a puntuar reevaluando los candidatos identificados en la comparación binaria utilizando los valores flotantes originales asociados con esos resultados del índice binario para refinar aún más los resultados. Los vectores de fidelidad completa se almacenan en su propia estructura de datos en el disco, y solo se referencian durante la repuntuación cuando configura la cuantización binaria o cuando realiza una búsqueda exacta contra vectores cuantizados binarios o escalares.

Tip

La siguiente tabla muestra los requisitos para la cuantización automática y la ingesta de vectores cuantizados.

Requisito
Para la ingestión de int1
Para la ingestión de int8
Para la cuantificación escalar automática
Para la cuantización binaria automática

Requiere configuraciones de definición de índice.

No

No

Requiere BSON binData formato

No

No

Almacenamiento en mongod

binData(int1)

binData(int8)

binData(float32)
array(double)
binData(float32)
array(double)

Método de similitud compatible

euclidean

cosine
euclidean
dotProduct
cosine
euclidean
dotProduct
cosine
euclidean
dotProduct

Máxima dimensionalidad

Múltiplo de 8

8192

8192

8192

Soporta búsqueda ANN y ENN

Nota

Atlas almacena todos los valores de punto flotante como el tipo de dato double internamente; por lo tanto, tanto las incrustaciones de 32bits como de 64bits son compatibles con la cuantización automática sin conversión.

Se puede configurar la búsqueda vectorial de MongoDB para cuantificar automáticamente las incrustaciones de vectores flotantes en su colección a tipos de representación reducida, como int8 (escalar) y binary en sus índices vectoriales.

Para establecer o cambiar el tipo de cuantización, se debe especificar un valor de campo quantization de scalar o binary en la definición de índice. Esto activa una reconstrucción del índice similar a cualquier otro cambio en la definición del índice. El tipo de cuantización especificado se aplica a todos los vectores indexados y vectores de query en tiempo de query. No es necesario que se modifique la query, ya que los vectores de query se cuantizan automáticamente.

Para la mayoría de los modelos de incrustación, recomendamos la cuantización binaria con re-evaluación. Si se desea utilizar modelos de dimensiones inferiores que no sean QAT, utilizar la cuantificación escalar, ya que tiene menos pérdida de representación y, por lo tanto, implica menos pérdida de capacidad de representación.

La búsqueda vectorial de MongoDB ofrece capacidades nativas para la cuantización escalar y la cuantización binaria con re-evaluación. La cuantización automática incrementa la escalabilidad y el ahorro de costos de las aplicaciones al disminuir los recursos computacionales necesarios para el procesamiento eficiente de los vectores. La cuantización automática reduce la memoria RAM de mongot en 3.75x para los escalares y en 24x para los binarios; los valores vectoriales se reducen en 4x y 32x respectivamente, pero el grafo de mundos pequeños navegables jerárquicos propiamente dicho no se reduce. Esto mejora el rendimiento, incluso al manejar el volumen más alto y la escalabilidad.

Recomendamos la cuantificación automática si tiene un gran número de vectores de fidelidad completa, típicamente más de 100,000 vectores. Después de la cuantización, se utilizan índices de vectores de representación reducida sin comprometer la precisión al recuperar los vectores.

Para habilitar la cuantificación automática:

1

En un índice de búsqueda vectorial de MongoDB nuevo o existente, especifique uno de los siguientes tipos de cuantificación en el campo fields.quantization para su definición de índice:

  • scalar: para generar vectores de bytes a partir de vectores de entrada de punto flotante.

  • binary: para generar vectores de bits a partir de vectores de entrada de punto flotante.

Si se especifica la cuantificación automática en datos que no sean un arreglo de valores flotantes, MongoDB búsqueda vectorial ignora silenciosamente ese vector en lugar de su indexación, y esos vectores se omitirán. Dado que Atlas almacena valores flotantes (tanto de 32bits como de 64bits) como el tipo double internamente, las incrustaciones de modelos que generan cualquiera de las dos precisiones funcionarán con cuantización automática.

2

El índice debería tardar aproximadamente un minuto en crearse. Mientras se crea, el índice está en un estado de sincronización inicial. Cuando termine de crearse, se pueden empezar a realizar los query en los datos de la colección.

El tipo de cuantización especificado se aplica a todos los vectores indexados y vectores de query en el momento de la query.

Al visualizar el índice cuantificado en la interfaz de usuario de Atlas, el tamaño del índice puede parecer mayor que el de un índice sin cuantificación. Esto se debe a que Size La Required Memory métrica representa la cantidad total de datos almacenados, que incluye el gráfico de mundos pequeños navegables jerárquicos (en memoria), los vectores cuantificados (en memoria) y los vectores de fidelidad completa (en disco). Para estimar la cantidad de memoria utilizada por el índice en tiempo de consulta, consulte la métrica.

La búsqueda vectorial de MongoDB también brinda soporte para la ingestión y la indexación de vectores cuantificados escalares y binarios de ciertos modelos de incrustación. Si aún no se tienen vectores cuantizados, se pueden convertir las incrustaciones a vectores BSON BinData con el subtipo float32, int1 o int8.

Recomendamos ingerir vectores BSON binData cuantizados para los siguientes casos de uso:

  • Necesita indexar la salida vectorial cuantizada de los modelos de incrustación.

  • Tienes un gran número de vectores flotantes y deseas reducir el almacenamiento y la huella de WiredTiger (como el uso de disco y memoria) en mongod.

BinData es un tipo de dato BSON que almacena datos binarios. Comprime las incrustaciones vectoriales y requiere aproximadamente tres veces menos espacio en disco en el clúster en comparación con las incrustaciones que utilizan un arreglo float32 estándar. Para aprender más, se debe consultar Compresión de vectores.

Este subtipo también le permite indexar sus vectores con tipos alternativos, como vectores int1 o int8, reduciendo la memoria necesaria para compilar el índice de búsqueda vectorial de MongoDB para su colección. Reduce la memoria RAM de mongot en 3.75x para los escalares y en 24x para los binarios; los valores vectoriales se reducen en 4x y 32x respectivamente, pero el grafo de mundos pequeños navegables jerárquicos no se reduce.

Si aún no hay vectores binData, se pueden convertir las incrustaciones a este formato utilizando cualquier driver compatible antes de escribir los datos en una colección. El siguiente procedimiento será una guía a través de los pasos para convertir las incrustaciones en vectores BinData con los subtipos float32, int8 y int1.

BSON Los vectores BinData con los subtipos float32, int1 y int8 son compatibles con los siguientes controladores:

Los ejemplos de este procedimiento utilizan datos nuevos o datos existentes e incrustaciones generadas mediante el modelo voyage-3-large de Voyage IA. El ejemplo para nuevos datos utiliza cadenas de texto de muestra, que se puede reemplazar por sus propios datos. El ejemplo para datos existentes utiliza un subconjunto de documentos sin incrustaciones de la colección listingsAndReviews en la base de datos sample_airbnb, que se puede reemplazar por su propia base de datos y colección (con o sin incrustaciones).

Se debe seleccionar si se quiere cuantizar los vectores binData para datos nuevos o para los datos que ya hay en el clúster utilizando el menú desplegable Data Source que se encuentra abajo. Se debe seleccionar también el lenguaje de programación preferido.

Se puede medir la precisión de la query de búsqueda vectorial de MongoDB evaluando cuán cerca se ajustan los resultados de una búsqueda ANN a los resultados de una búsqueda ENN contra los vectores cuantizados. Es decir, se puede comparar los resultados de la búsqueda ANN con los resultados de la búsqueda ENN para los mismos criterios de query y medir con qué frecuencia los resultados de la búsqueda ANN incluyen a los vecinos más cercanos en los resultados de la búsqueda ENN.

Para una demostración de cómo evaluar los resultados de la query, consultar Cómo medir la precisión de los resultados de su Query.

Volver

Revisa las opciones de implementación

En esta página