La quantification produit accélère les grandes collections privées de vecteurs en divisant les représentations vectorielles en sous-espaces et en remplaçant chaque sous-vecteur par le code compact d’un centroïde appris.
Il s’agit d’un mécanisme spécifique au sein de la vaste famille de la quantification vectorielle. Au lieu de réduire chaque coordonnée indépendamment, la PQ apprend plusieurs petits dictionnaires de codes et représente une représentation vectorielle de grande dimension sous forme d’une séquence d’identifiants de codes. Un serveur de recherche domestique peut conserver beaucoup plus de ces codes en mémoire et estimer les distances aux requêtes à partir de tables précalculées, ce qui réduit à la fois le nombre d’octets nécessaires au stockage des vecteurs et la quantité d’opérations en précision complète requises lors d’un balayage étendu des candidats.
La PQ divise une représentation vectorielle de grande dimension en plusieurs sous-vecteurs
Supposons qu’une représentation vectorielle ait une dimension `d`. La PQ choisit `M` sous-quantificateurs et répartit les coordonnées en `M` blocs de dimension inférieure, afin que chaque bloc puisse être modélisé séparément.
Le nombre de sous-quantificateurs détermine en combien de blocs de dimension inférieure la représentation vectorielle d’origine est divisée, et donc combien d’identifiants de codes composent une représentation PQ.
Cette factorisation explique le nom de la quantification produit : l’approximation complète est assemblée à partir de choix effectués indépendamment dans plusieurs sous-espaces, plutôt qu’à partir d’un dictionnaire de codes gigantesque couvrant le vecteur complet. Les sous-espaces doivent répartir les dimensions du vecteur de manière compatible. Leur taille et leur nombre influencent la compression, le coût d’entraînement des dictionnaires de codes, la précision des distances et l’adéquation de la distribution des données avec cette représentation factorisée.
Chaque sous-espace apprend un dictionnaire de codes composé de centroïdes représentatifs
La PQ est généralement entraînée sur un échantillon représentatif de la collection. Pour chaque sous-espace, une opération de regroupement identifie des vecteurs centroïdes représentant des groupes de sous-vecteurs similaires.
Un quantificateur produit utilise généralement les k-moyennes pour apprendre les centroïdes au sein de chaque sous-espace, en minimisant l’erreur d’approximation entre les sous-vecteurs d’entraînement et les représentants qui leur sont attribués.
Après l’entraînement, la base de données n’a plus besoin de stocker toutes les coordonnées d’origine dans le code de recherche compact. Elle doit seulement conserver l’identifiant du centroïde le plus proche pour chaque sous-espace.
Si l’échantillon d’entraînement représente mal les futurs documents du foyer, les centroïdes appris risquent de mal approximer les vecteurs ultérieurs. La qualité du dictionnaire de codes constitue donc une limite d’implémentation, et non un détail ponctuel que l’on peut négliger.
Le vecteur stocké devient une courte séquence d’identifiants de codes
Pour chaque sous-vecteur, l’encodeur recherche le centroïde le plus proche et stocke l’index de ce centroïde. La concaténation des `M` index forme le code PQ de la représentation vectorielle complète.
Le stockage de m codes de sous-vecteurs avec un nombre de bits configurable remplace un long tableau de nombres flottants par une courte séquence d’identifiants de centroïdes, accompagnée de dictionnaires de codes partagés.
Par exemple, huit bits par sous-quantificateur permettent de représenter 256 choix de centroïdes dans ce sous-espace. Le code vectoriel total augmente alors avec le nombre de sous-quantificateurs, plutôt qu’avec une précision de 32 bits pour chaque dimension d’origine. Les dictionnaires de codes et la surcharge de l’index consomment toujours de la mémoire : la collection complète est donc plus volumineuse que les seuls octets des codes. Les économies deviennent surtout importantes lorsque le nombre de vecteurs est suffisamment élevé pour amortir ces dictionnaires de codes partagés.
Une requête construit des tables de recherche de distances pour chaque sous-espace
Lorsqu’une requête arrive, le système la divise selon les mêmes sous-espaces et calcule sa distance par rapport à chaque centroïde de chaque dictionnaire de codes. Ces valeurs forment de petites tables de recherche.
Une table de distances entre la requête et les centroïdes précalcule la distance entre la requête et chaque centroïde de chaque sous-espace, afin que les distances aux candidats puissent être assemblées à partir de petites recherches dans des tables plutôt qu’avec des opérations sur des vecteurs complets.
Pour estimer la distance jusqu’à un vecteur stocké dans la base, la recherche ne reconstruit plus chaque coordonnée complète. Elle lit chaque identifiant de code, recherche la distance correspondante dans le sous-espace, puis additionne ces valeurs.
Cette méthode fondée sur des tables est souvent appelée calcul de distance asymétrique, car la requête peut rester en haute précision tandis que les vecteurs de la base de données sont représentés par des codes quantifiés.
Les codes compacts améliorent la localité du cache à mesure que les collections grandissent
Les balayages de grandes collections de vecteurs sont souvent limités par le déplacement des données des candidats en mémoire plutôt que par la complexité mathématique d’une seule opération de distance.
Des codes courts permettent de faire tenir davantage de candidats dans les caches du processeur et réduisent la bande passante nécessaire à chaque comparaison.
La méthode de calcul de distances compressées peut être accélérée par des recherches dans des tables adaptées au SIMD, car la recherche fondée sur la quantification produit lit de manière répétée des codes compacts et cumule les distances des sous-espaces.
Dans une collection privée à domicile, cela peut faire la différence entre un index dont la représentation de recherche active reste en RAM et un index qui entre constamment en concurrence avec le LLM local, la base de données et le cache du système de fichiers.
L’avantage diminue lorsque la collection est minuscule, lorsque le filtrage des métadonnées réduit chaque requête à une poignée de vecteurs ou lorsqu’une autre couche d’index domine la latence.
La PQ sacrifie généralement une partie du rappel au profit de la compression et de la vitesse
Les codes de centroïdes approximent les sous-vecteurs d’origine : deux candidats peuvent donc changer d’ordre lorsque leurs distances réelles sont proches. Une compression plus agressive laisse généralement moins d’informations pour les distinguer.
Considérer la quantification produit comme une compression avec perte clarifie cette limite : des codes plus petits réduisent la mémoire dédiée aux vecteurs, mais l’erreur de quantification peut modifier le classement des voisins proches.
Augmenter le nombre de sous-quantificateurs ou de bits peut préserver davantage de détails, mais agrandit chaque code ainsi que les structures de recherche. Des codes plus petits économisent davantage de mémoire, mais augmentent le risque d’erreur de quantification. La configuration utile dépend du corpus. Des manuels très proches, des versions dupliquées de documents et la recherche de code source à granularité fine peuvent exiger davantage de précision qu’une recherche sémantique générale portant sur des notes domestiques variées.
Une première passe compacte peut être suivie d’un réordonnancement en précision complète
La PQ n’oblige pas à faire aveuglément confiance à l’ordre des distances compressées pour obtenir le résultat final. Un système peut récupérer un ensemble plus large de candidats avec la PQ, puis recalculer leur score en utilisant les vecteurs d’origine stockés ailleurs.
Dans le cadre de la recherche sémantique de vecteurs, la PQ modifie la représentation utilisée pour comparer les candidats ; la provenance, le filtrage des métadonnées, le réordonnancement et le RAG continuent d’intervenir autour de cette étape vectorielle.
Cette approche en deux étapes répartit la mémoire et le calcul de manière asymétrique : les codes compressés gèrent l’espace étendu des candidats, tandis que les vecteurs exacts ne sont consultés que pour une courte liste restreinte.
La quantification produit accélère une collection privée lorsque les codes compacts réduisent sensiblement l’ensemble de travail et les transferts liés aux calculs de distance, sans faire baisser le rappel mesuré sous le niveau de qualité des données requis par le système RAG local.
Centre Tech & IA
Plus à lire

Une passerelle d’IA locale peut-elle imposer une limite stricte de contexte avant l’allocation du GPU ?
Une explication axée sur le mécanisme du hard context gate, de ses compromis en matière de ressources partagées, de trois FAQ sur la duplication...

Un serveur d’IA domestique peut-il mapper en mémoire les poids d’un modèle depuis un NAS distant via 2.5GbE ?
Une explication axée sur les mécanismes du mappage de la mémoire d’un modèle NAS distant, ses compromis en matière de ressources partagées, trois questions...

Plusieurs conteneurs peuvent-ils partager un seul GPU intégré sans fuite de charges de travail ?
Une explication de l’isolation des conteneurs d’iGPU axée sur les mécanismes, de ses compromis liés aux ressources partagées, de trois FAQ sur la diffusion...

