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 DocumentDB 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 costa 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 escalar la búsqueda de vectores para manejar embeddings más grandes y de mayor dimensión dentro del 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 de producto, use el comando createIndexes, especificando cosmosSearchOptions, "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 | Description |
|---|---|---|
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 de 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 dimensionsoriginal :
| Rango 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 DocumentDB ofrece el oversampling parámetro en el $search operador .
El factor oversampling (un número flotante con un mínimo de 1) indica cuántos vectores candidatos adicionales se deben recuperar del índice comprimido en comparación con 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 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
}
}
])
Media Precisión frente a Cuantización de productos
Tanto la precisión media como la cuantificación de productos (PQ) comprimen los índices de vectores en Azure DocumentDB, pero difieren en cómo logran la compresión y afectan a la búsqueda:
| Característica | Media Precisión | 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 prolongarse debido al entrenamiento centroide (pqSampleSize). |
| Compatibilidad con índices | HNSW, IVF. | DiskANN. |
| Configuración | Simplemente, habilite compression: "half". |
Más parámetros: pqCompressedDims, pqSampleSize. |
| Uso de sobremuestreo | Ayuda a mitigar pequeñas pérdidas de precisión. | 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
pqCompressedDimsyoversamplingpara 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.