Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La cuantificación de productos (PQ) es una técnica eficaz en Azure Cosmos DB para núcleo virtual de MongoDB que comprime significativamente las incrustaciones de vectores de alta dimensión que se usan en la búsqueda vectorial. Esta compresión reduce el uso de memoria y acelera las búsquedas de vecinos más cercanos, lo que mejora la eficacia de los conjuntos de datos vectoriales de gran tamaño. Aunque PQ ofrece ventajas para la velocidad y la escala, puede ser a expensas de la precisión.
Ventajas
- Almacenamiento reducido: PQ reduce considerablemente el almacenamiento necesario para los índices vectoriales en comparación con los vectores de precisión completa (float32), lo que da lugar a un ahorro considerable de costos para grandes conjuntos de datos.
- Búsqueda más rápida: Trabajar con vectores comprimidos permite al sistema calcular distancias y encontrar posibles vecinos más cercanos mucho más rápido que con vectores de precisión completa.
- Escalabilidad mejorada: La menor sobrecarga de memoria permite que la búsqueda de vectores escalable gestione incrustaciones más grandes y de mayor dimensionalidad dentro de su clúster.
Cómo funciona
La cuantificación del producto divide el espacio vectorial de alta dimensión en varios subespacios dimensionales inferiores. Cada subespacio se cuantifica de forma independiente mediante un algoritmo de agrupación en clústeres (normalmente k-means). El centro de cada clúster representa todos los vectores que contiene. A continuación, cada vector original se representa mediante un código corto de los identificadores de clúster a los que pertenece en cada subespacio.
Uso de la cuantificación de productos
Para crear un índice vectorial con cuantización del producto, utilice el comando createIndexes
con cosmosSearchOptions
especificando "compression": "pq"
y "kind" : "vector-diskann"
.
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "<string_value>", // "COS", "L2"
"dimensions": <integer_value>, // Max 16,000
"compression": "pq",
"pqCompressedDims": <integer_value>, // Dimensions after compression (< original)
"pqSampleSize": <integer_value> // Samples for centroid generation
}
}
]
}
Campo | Tipo | Descripción |
---|---|---|
compression |
cuerda / cadena | Establézcalo en "pq" para habilitar la cuantificación de productos. |
pqCompressedDims |
entero | Dimensiones después de la compresión PQ (debe ser menor que las dimensiones originales). Se calcula automáticamente si se omite. Intervalo: 1-8000. |
pqSampleSize |
entero | Número de vectores de muestra para el entrenamiento del centroide PQ. Un valor mayor significa una mejor calidad, pero mayor tiempo de compilación. Valor predeterminado: 1000. Rango: 1000-100000. |
Nota:
La cuantificación de productos solo se admite actualmente con el tipo de vector-diskann
índice.
Nota:
Para obtener los mejores resultados, cree un índice PQ después de que la recopilación tenga datos. Si la colección está vacía, el sistema usa vectores aleatorios para los centroide iniciales. Si el número de documentos es menor que pqSampleSize
, los datos de entrenamiento se rellenan con datos aleatorios dentro del intervalo de los datos vectoriales existentes.
Cómo se establecen las dimensiones comprimidas
Si no especifica pqCompressedDims
, determina automáticamente en función del vector dimensions
original :
Intervalo de dimensiones original | pqCompressedDims |
---|---|
[0 - 32) | dimensiones/2 |
[32 - 64) | 16 |
[64 - 128) | 32 |
[128 - 512) | 64 |
[512 - 1536) | 96 |
por encima de 1536 | 128 |
Creación de un índice PQ
db.runCommand(
{
"createIndexes": "your_vector_collection",
"indexes": [
{
"key": { "v": "cosmosSearch" },
"name": "diskann_pq_index",
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "COS",
"dimensions": 1536,
"compression": "pq",
"pqCompressedDims": 96,
"pqSampleSize": 2000
}
}
]
} )
Mejora de la búsqueda con sobremuestreo
La compresión PQ puede provocar una pérdida de precisión en los cálculos de distancia. Para reducir esto, Azure Cosmos DB para MongoDB (núcleo virtual) ofrece el parámetro oversampling
en el operador $search
.
El oversampling
factor (un valor flotante con un mínimo de 1) especifica cuántos más vectores candidatos se recuperarán del índice comprimido que k
(el número de resultados deseados). Estos candidatos adicionales se usan para refinar la búsqueda mediante los vectores originales de precisión completa, lo que mejora la precisión final del k
superior. Por ejemplo, para obtener los 10 principales vectores (k
=10) más similares, un procedimiento recomendado podría ser establecer oversampling
en un valor como 1,5 o 2,0. Con "oversampling": 1.5
, el sistema obtendría primero 15 candidatos del índice y, a continuación, refinaría los 10 primeros con los datos de precisión completa.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
Este fragmento de código muestra una búsqueda vectorial mediante el $search
operador con la cuantificación de productos. Toma un queryVector
como entrada y busca en el campo v
. La consulta solicita los 10 documentos más similares (k: 10
), utilizando un oversampling
factor de 2.0, que recupera 20 candidatos que mejoran la precisión de la búsqueda en el índice comprimido.
db.your_vector_collection.aggregate([
{
$search: {
"cosmosSearch": {
"vector": [0.1, 0.5, 0.9, ...],
"path": "v",
"k": 10,
"oversampling": 2.0 // Retrieve 2 * 10 = 20 candidates for reranking
},
"returnStoredSource": true
}
}
])
Half-Precision vs. cuantización de producto
Tanto la precisión media como la cuantificación de productos (PQ) comprimen los índices de vectores en Azure Cosmos DB para MongoDB (núcleo virtual), pero difieren en cómo logran la compresión y afectan a la búsqueda:
Característica | Precisión media | Cuantificación de productos (PQ) |
---|---|---|
Método de Compresión | Reduce cada dimensión vectorial a 16 bits. | Divide el espacio vectorial en subespacios y cuantifica cada uno. |
Dimensiones máximas | Hasta 4000 | Hasta 16 000 |
Cambio de precisión | Pérdida leve debido a una profundidad de bits inferior. | Pérdida potencialmente mayor, configurable mediante pqCompressedDims . |
Velocidad de búsqueda | Aumento de velocidad moderada debido a un índice más pequeño. | Aumento significativo de la velocidad debido a vectores altamente comprimidos. |
Tiempo de compilación del índice | Relativamente rápido. | Puede ser más largo debido al entrenamiento del centroide (pqSampleSize ). |
Compatibilidad con índices | HNSW, IVF. | DiskANN. |
Configuración | Sencillo, habilite compression: "half" . |
Más parámetros: pqCompressedDims , pqSampleSize . |
Uso de sobremuestreo | Ayuda con una pérdida de precisión menor. | Esencial para recuperar la precisión de una compresión mayor. |
Casos de uso ideales | Reducción moderada de la memoria, aumento de las dimensiones, equilibrio de precisión aceptable. | Grandes conjuntos de datos, dimensiones altas, búsqueda rápida priorizada, precisión administrada con sobremuestreo. |
Consideraciones para la cuantificación de productos
- Precisión frente a compresión: Una mayor compresión PQ conduce a índices más pequeños y una búsqueda más rápida, pero una mayor pérdida de precisión. Experimente con
pqCompressedDims
yoversampling
para encontrar el equilibrio correcto. - Tiempo de compilación del índice: La creación de índices PQ puede tardar más tiempo debido al proceso de entrenamiento centroide, influenciado por
pqSampleSize
. - Distribución de datos: PQ funciona mejor cuando los datos vectoriales tienen una estructura de clúster clara.