Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La quantisation de produit (PQ) est une technique puissante dans Azure DocumentDB qui compresse considérablement les incorporations de vecteurs à haute dimension utilisées dans la recherche vectorielle. Cette compression réduit l’utilisation de la mémoire et accélère les recherches voisines les plus proches, ce qui améliore l’efficacité des jeux de données vectoriels volumineux. Bien que le PQ offre des avantages pour la vitesse et l’échelle, cela peut être au détriment de la précision.
Avantages
- Stockage réduit : Le PQ réduit considérablement le stockage nécessaire pour les index vectoriels par rapport aux vecteurs de précision totale (float32), ce qui entraîne des économies substantielles pour les jeux de données volumineux.
- Recherche plus rapide : L’utilisation de vecteurs compressés permet au système de calculer les distances et de trouver des voisins les plus proches potentiels beaucoup plus rapidement que avec des vecteurs de précision totale.
- Scalabilité améliorée : Une surcharge de mémoire plus faible permet l'extension de la recherche vectorielle pour gérer des embeddings plus grands et de dimensions plus élevées au sein de votre cluster.
Fonctionnement
La quantisation de produit divise l’espace vectoriel à haute dimension en plusieurs sous-espaces de dimension inférieure. Chaque sous-espace est ensuite quantifié indépendamment à l’aide d’un algorithme de clustering (généralement k-moyennes). Le centre de chaque cluster représente tous les vecteurs qu’il contient. Chaque vecteur d’origine est ensuite représenté par un code court des ID de cluster auquel il appartient dans chaque sous-espace.
Utilisation de la quantisation du produit
Pour créer un index vectoriel avec la quantisation de produit, utilisez la createIndexes commande en spécifiant cosmosSearchOptions et "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
}
}
]
}
| Champ | Type | Descriptif |
|---|---|---|
compression |
ficelle | Réglez sur "pq" pour activer la quantification de produit. |
pqCompressedDims |
entier | Dimensions après la compression PQ (doivent être inférieures aux dimensions d’origine). Calculé automatiquement s’il est omis. Plage : 1 à 8000. |
pqSampleSize |
entier | Nombre d’exemples de vecteurs pour l’apprentissage du centroïde PQ. Une valeur plus élevée signifie une meilleure qualité mais un temps de génération plus long. Valeur par défaut : 1000. Plage : 1 000 – 100 000. |
Note
La quantisation du produit est actuellement prise en charge uniquement avec le type d’index vector-diskann .
Note
Pour obtenir de meilleurs résultats, créez un index PQ une fois que votre collection a des données. Si la collection est vide, le système utilise des vecteurs aléatoires pour les centroïdes initiaux. Si le nombre de documents est inférieur à pqSampleSize, les données d’apprentissage sont complétées avec des données aléatoires dans la plage de vos données vectorielles existantes.
Définition des dimensions compressées
Si vous ne spécifiez pqCompressedDimspas, il détermine automatiquement en fonction du vecteur dimensionsd’origine :
| Plage de dimensions d’origine | pqCompressedDims |
|---|---|
| [0 - 32) | dimensions / 2 |
| [32 - 64) | 16 |
| [64 - 128) | 32 |
| [128 - 512) | 64 |
| [512 - 1536) | 96 |
| au-dessus de 1536 | 128 |
Créer un index 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
}
}
]
} )
Amélioration de la recherche par suréchantillonnage
La compression PQ peut entraîner une perte de précision dans les calculs de distance. Pour réduire ce problème, Azure DocumentDB propose le oversampling paramètre dans l’opérateur $search .
Le facteur oversampling (un nombre à virgule flottante avec un minimum de 1) spécifie combien de vecteurs candidats récupérer depuis l'index compressé, par rapport à k (le nombre de résultats souhaités). Ces candidats supplémentaires sont utilisés pour affiner la recherche à l’aide des vecteurs originaux et de précision complète, améliorant ainsi la précision maximale k finale. Par exemple, pour obtenir les 10 premiers (k=10) les vecteurs les plus similaires, une bonne pratique peut être de définir oversampling une valeur telle que 1,5 ou 2.0. Avec "oversampling": 1.5, le système obtiendrait d’abord 15 candidats à partir de l’index, puis affinerait les 10 premiers à l’aide des données de précision complète.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
Cet extrait de code illustre une recherche vectorielle à l’aide de l’opérateur $search avec la quantification par produit. Il prend une queryVector entrée et recherche le v champ. La requête demande les 10 documents les plus similaires (k: 10), à l’aide d’un oversampling facteur de 2,0, qui récupère 20 candidats améliorant la précision de la recherche sur l’index compressé.
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
}
}
])
Demi-précision et Quantification du produit
La quantification en demi-précision et la quantification produit (PQ) compressent toutes deux les index vectoriels dans Azure DocumentDB, mais elles diffèrent dans la manière dont elles réalisent la compression et affectent la recherche :
| Caractéristique | Demi-précision | Quantisation du produit (PQ) |
|---|---|---|
| Méthode de compression | Réduit chaque dimension de vecteur à 16 bits. | Divise l’espace vectoriel en sous-espaces et quantifie chacun d’eux. |
| Dimensions maximales | Jusqu’à 4 000 | Jusqu’à 16 000 |
| Changement de précision | Légère perte due à une faible profondeur de bits. | Perte potentiellement plus grande, configurable via pqCompressedDims. |
| Vitesse de recherche | Augmentation modérée de la vitesse due à un index plus petit. | Augmentation significative de la vitesse due à des vecteurs fortement compressés. |
| Heure de génération de l’index | Relativement rapide. | Peut être plus long en raison de la formation du centroïde (pqSampleSize). |
| Prise en charge des index | HNSW, IVF. | DiskANN. |
| Configuration | Simple, activez compression: "half". |
Autres paramètres : pqCompressedDims, pqSampleSize. |
| Utilisation du suréchantillonnage | Aide avec une perte de précision mineure. | Essentiel pour récupérer la précision à partir d’une compression plus grande. |
| Cas d’usage idéaux | Réduction modérée de la mémoire, dimensions accrues, compromis de précision acceptable. | Jeux de données volumineux, dimensions élevées, recherche rapide hiérarchisée, précision gérée avec surachantillonnage. |
Considérations relatives à la quantisation du produit
-
Précision et compression : Une compression PQ plus élevée entraîne des index plus petits et une recherche plus rapide, mais une perte de précision accrue. Expérimentez avec
pqCompressedDimsetoversamplingpour trouver le bon équilibre. -
Heure de génération de l’index : La création d’index PQ peut prendre plus de temps en raison du processus de formation centroïde, influencé par
pqSampleSize. - Distribution des données : Le PQ fonctionne mieux lorsque les données vectorielles ont une structure de cluster claire.