Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Produktquantisierung (Product Quantization, PQ) ist eine leistungsstarke Technik in Azure DocumentDB, die hochdimensionale Vektoreinbettungen erheblich komprimiert, die in der Vektorsuche verwendet werden. Diese Komprimierung reduziert die Speichernutzung und beschleunigt die Suchen nach dem nächsten Nachbarn, wodurch die Effizienz für große Vektordatensätze verbessert wird. Während PQ Vorteile für Geschwindigkeit und Skalierung bietet, kann es auf Kosten der Genauigkeit kommen.
Vorteile
- Reduzierter Speicher: PQ verringert den für Vektorindizes benötigten Speicher erheblich im Vergleich zu Float32-Vektoren mit voller Genauigkeit, was zu erheblichen Kosteneinsparungen für große Datasets führt.
- Schnellere Suche: Die Arbeit mit komprimierten Vektoren ermöglicht es dem System, Entfernungen zu berechnen und potenzielle nächste Nachbarn viel schneller zu finden als bei Vollpräzisionsvektoren.
- Verbesserte Skalierbarkeit: Geringerer Arbeitsspeicheraufwand ermöglicht die Skalierungsvektorsuche, um größere und mehrdimensionale Einbettungen in Ihrem Cluster zu verarbeiten.
Funktionsweise
Die Produktquantisierung teilt den hochdimensionalen Vektorraum in mehrere unterdimensionale Unterräume auf. Jeder Unterraum wird dann unabhängig mit einem Clustering-Algorithmus (in der Regel k-means) quantisiert. Die Mitte jedes Clusters stellt alle Vektoren darin dar. Jeder ursprüngliche Vektor wird dann durch einen kurzen Code der Cluster-IDs dargestellt, zu denen er in jedem Unterbereich gehört.
Verwenden der Produktquantisierung
Verwenden Sie zum Erstellen eines Vektorindex mit Produktquantisierung den createIndexes Befehl mit der Angabe "compression": "pq" und "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
}
}
]
}
| Feld | Typ | Description |
|---|---|---|
compression |
Schnur | Setzen Sie auf "pq", um die Produktquantisierung zu aktivieren. |
pqCompressedDims |
integer | Dimensionen nach der PQ-Komprimierung (müssen kleiner als originale Abmessungen sein). Wird automatisch berechnet, wenn sie weggelassen wird. Bereich: 1-8000. |
pqSampleSize |
integer | Anzahl der Beispielvektoren für die PQ-Zentroidbestimmung. Höherer Wert bedeutet eine bessere Qualität, aber längere Buildzeit. Standard: 1000. Bereich: 1000-100000. |
Hinweis
Die Produktquantisierung wird derzeit nur mit dem vector-diskann Indextyp unterstützt.
Hinweis
Um optimale Ergebnisse zu erzielen, erstellen Sie einen PQ-Index, nachdem Ihre Sammlung Daten enthält. Wenn die Sammlung leer ist, verwendet das System Zufallsvektoren für anfängliche Schwerpunkte. Wenn die Anzahl der Dokumente kleiner als pqSampleSizeist, werden die Schulungsdaten mit zufälligen Daten innerhalb des Bereichs Ihrer vorhandenen Vektordaten aufgefüllt.
Wie komprimierte Abmessungen festgelegt werden
Wenn Sie pqCompressedDims nicht spezifizieren, wird es automatisch basierend auf dem ursprünglichen Vektor dimensions bestimmt.
| Originaler Dimensionsbereich | pqCompressedDims |
|---|---|
| [0 - 32) | Abmessungen / 2 |
| [32 - 64) | 16 |
| [64 - 128) | 32 |
| [128 - 512) | 64 |
| [512 - 1536) | 96 |
| über 1536 | 128 |
Erstellen eines PQ-Indexes
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
}
}
]
} )
Verbessern der Suche mit Oversampling
Die PQ-Komprimierung kann zu Genauigkeitsverlusten bei Entfernungsberechnungen führen. Um dies zu verringern, bietet Azure DocumentDB den oversampling Parameter im $search Operator an.
Der oversampling Faktor (ein Gleitkomma mit mindestens 1) gibt an, wie viele weitere Kandidatenvektoren aus dem komprimierten Index abgerufen werden sollen als k (die Anzahl der gewünschten Ergebnisse). Diese zusätzlichen Kandidaten werden verwendet, um die Suche mithilfe der ursprünglichen Vektoren mit vollständiger Genauigkeit zu verfeinern und die endgültige Spitzengenauigkeit k zu verbessern. Um beispielsweise die top 10 (k=10) ähnlichsten Vektoren abzurufen, empfiehlt es sich, einen Wert wie oversampling oder 2,0 festzulegen. Mit "oversampling": 1.5 würde das System zuerst 15 Kandidaten aus dem Index abfragen und dann die besten 10 mit vollpräzisen Daten optimieren.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
Dieser Codeausschnitt veranschaulicht eine Vektorsuche mithilfe des $search Operators mit Produktquantisierung. Es benötigt eine queryVector Eingabe und durchsucht das v Feld. Die Abfrage fordert die 10 am häufigsten ähnlichen Dokumente (k: 10) mit einem oversampling Faktor von 2,0 an, der 20 Kandidaten abruft, die die Genauigkeit der Suche über den komprimierten Index verbessern.
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 im Vergleich zur Produkt quantisierung
Sowohl Halbgenauigkeit als auch die PQ-Komprimierung (Product Quantization) komprimieren Vektorindizes in Azure DocumentDB, unterscheiden sich jedoch darin, wie sie die Komprimierung erreichen und sich auf die Suche auswirken:
| Merkmal | Halbpräzision | Produktquantisierung (PQ) |
|---|---|---|
| Compression-Methode | Reduziert jede Vektordimension auf 16 Bit. | Dividiert den Vektorraum in Unterspaces und quantisiert die einzelnen Vektorräume. |
| Max. Abmessungen | Bis zu 4.000 | Bis zu 16.000 |
| Genauigkeitsänderung | Leichter Verlust aufgrund niedrigerer Bittiefe. | Potenziell größerer Verlust, konfigurierbar über pqCompressedDims. |
| Suchgeschwindigkeit | Moderate Geschwindigkeitssteigerung aufgrund kleinerer Index. | Erhebliche Geschwindigkeitssteigerung durch hochkomprimierte Vektoren. |
| Indexerstellungszeit | Relativ schnell. | Kann aufgrund des Zentroid-Trainings (pqSampleSize) länger sein. |
| Indexunterstützung | HNSW, IVF. | DiskANN. |
| Configuration | Einfach, aktivieren Sie compression: "half". |
Weitere Parameter: pqCompressedDims, pqSampleSize. |
| Oversampling-Verwendung | Hilft bei geringfügigen Genauigkeitsverlusten. | Wichtig für die Wiederherstellung der Genauigkeit bei starker Komprimierung. |
| Ideale Anwendungsfälle | Moderate Speicherreduzierung, erhöhte Dimensionen, akzeptable Genauigkeitsabnahme. | Große Datensätze, hochdimensionale Daten, schnelle Suche priorisiert, Präzision durch Übersampling gesteuert. |
Überlegungen zur Produktquantisierung
-
Genauigkeit im Vergleich zur Komprimierung: Eine höhere PQ-Komprimierung führt zu kleineren Indizes und schnelleren Suchvorgängen, aber zu einem höheren Genauigkeitsverlust. Experimentieren Sie mit
pqCompressedDimsundoversampling, und finden Sie das richtige Gleichgewicht. -
Index-Erstellungszeit: Die Erstellung von PQ-Indexen kann länger dauern aufgrund des Zentroidentrainings, beeinflusst von
pqSampleSize. - Datenverteilung: PQ funktioniert am besten, wenn Vektordaten eine klare Clusterstruktur aufweisen.