Aracılığıyla paylaş


Azure DocumentDB'de vektör araması için ürün niceleme

Ürün niceleme (PQ), Azure DocumentDB'de vektör aramasında kullanılan yüksek boyutlu vektör eklemelerini önemli ölçüde sıkıştıran güçlü bir tekniktir. Bu sıkıştırma bellek kullanımını azaltır ve en yakın komşu aramalarını hızlandırarak büyük vektör veri kümelerinin verimliliğini artırır. PQ hız ve ölçek için avantajlar sunsa da doğruluk pahasına gelebilir.

Fayda -ları

  • Azaltılmış Depolama: PQ, vektör dizinleri için gereken depolama alanını tam duyarlıklı (float32) vektörlere kıyasla büyük ölçüde düşürerek büyük veri kümelerinde önemli maliyet tasarrufu sağlar.
  • Daha Hızlı Arama: Sıkıştırılmış vektörlerle çalışmak, sistemin mesafeleri hesaplamasına ve en yakın olası komşuları tam duyarlıklı vektörlere göre çok daha hızlı bulmasına olanak tanır.
  • Geliştirilmiş Ölçeklenebilirlik: Düşük bellek yükü, kümenizdeki daha büyük ve daha yüksek boyutlu eklemeleri işlemek için ölçeklendirme vektör aramasına olanak tanır.

Nasıl çalışır?

Ürün niceleme, yüksek boyutlu vektör alanını birkaç alt boyutlu alt alana böler. Her alt alan daha sonra bir kümeleme algoritması (genellikle k ortalamaları) kullanılarak bağımsız olarak ölçülür. Her kümenin merkezi içindeki tüm vektörleri temsil eder. Her özgün vektör daha sonra her alt alanda ait olduğu küme kimliklerinin kısa bir koduyla temsil edilir.

Ürün nicelemesi kullanma

Vektör dizini oluşturmak için Ürün niceleme kullanarak createIndexes komutunu ve cosmosSearchOptions belirterek "compression": "pq" ve "kind" : "vector-diskann" kullanın.

{
    "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
            }
        }
    ]
}
Veri Alanı Türü Description
compression String Ürün niceleme'yi etkinleştirmek için "pq" ayarlayın.
pqCompressedDims tamsayı PQ sıkıştırmasından sonraki boyutlar (özgün boyutlardan küçük olmalıdır). Belirtilmezse otomatik olarak hesaplanır. Aralık: 1-8000.
pqSampleSize tamsayı PQ centroid eğitimi için örnek vektörlerin sayısı. Daha yüksek değer, daha kaliteli fakat daha uzun derleme süresi anlamına gelir. Varsayılan: 1000. Aralık: 1000-100000.

Uyarı

Ürün nicelemesi şu anda yalnızca dizin türüyle vector-diskann desteklenmektedir.

Uyarı

En iyi sonuçlar için, koleksiyonunuz veriye sahip olduktan sonra bir PQ dizini oluşturun. Koleksiyon boşsa, sistem ilk centroid'ler için rastgele vektörler kullanır. Belge sayısı değerinden küçükse pqSampleSize, eğitim verileri mevcut vektör verilerinizin aralığında rastgele verilerle doldurulur.

Sıkıştırılmış boyutlar nasıl ayarlanır?

Eğer pqCompressedDims belirtmezseniz, özgün vektöre dimensions göre otomatik olarak belirlenir.

Özgün Boyut Aralığı pqCompressedDims
[0 - 32) boyutlar / 2
[32 - 64) 16
[64 - 128) 32
[128 - 512) 64
[512 - 1536) 96
1536'nın üzerinde 128

PQ dizini oluşturma

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
            }
        }
    ]
} )

Oversampling ile aramayı iyileştirme

PQ sıkıştırması, uzaklık hesaplamalarında duyarlık kaybına neden olabilir. Azure DocumentDB, bunu azaltmak için $search işleciyle birlikte oversampling parametresini sunar.

oversampling faktörü (en az 1 olan bir ondalık), k (istenen sonuç sayısı) sayısından daha fazla aday vektörün sıkıştırılmış dizinden alınmasını belirtir. Bu ek adaylar, özgün, tam duyarlıklı vektörleri kullanarak aramayı iyileştirmek için kullanılır ve nihai k doğruluğunu artırır. Örneğin, en benzer 10 (k=10) vektöre ulaşmak için en iyi yöntemoversampling gibi bir değere ayarlamak olabilir. "oversampling": 1.5 ile sistem, ilk olarak dizinden 15 adayı alır ve ardından tam hassasiyet verilerini kullanarak en iyi 10 adayı seçerdi.

{
    "$search": {
        "cosmosSearch": {
            "vector": <vector_to_search>,
            "path": "<path_to_property>",
            "k": <num_results_to_return>,
            "oversampling": <float_value> 
        },
    }
}

Bu kod parçacığı, Product quantization ile $search işleci kullanılarak yapılan bir vektör aramasını gösterir. Bir queryVector girdisi alır ve v alanında arama yapar. Sorgu, 2.0 faktörünü kullanarak k: 10 en benzer 10 belgeyi (oversampling) ister ve bu da sıkıştırılmış dizin üzerinde aramanın doğruluğunu artırarak 20 adayı almayı sağlar.

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 ve Ürün nicelemesi karşılaştırması

Hem Yarı Hassasiyet hem de Çarpım Kantizasyonu (PQ) Azure DocumentDB'de vektör dizinlerini sıkıştırır, ama sıkıştırmayı gerçekleştirme ve aramayı etkileme şekilleri açısından farklılık gösterir.

Özellik Yarı-Hassasiyet Ürün niceleme (PQ)
Sıkıştırma Yöntemi Her vektör boyutunu 16 bit'e küçültür. Vektör alanını alt alanlara böler ve her birinin miktarını belirtir.
Maksimum Boyutlar 4.000'e kadar En fazla 16.000
Kesinlik Değişikliği Daha düşük bit derinliği nedeniyle hafif kayıp. Potansiyel olarak daha büyük kayıplar, pqCompressedDims aracılığıyla yapılandırılabilir.
Arama Hızı Daha küçük dizin nedeniyle orta düzeyde hız artışı. Yüksek oranda sıkıştırılmış vektörler nedeniyle önemli hız artışı.
Dizin Oluşturma Zamanı Nispeten hızlı. Centroid eğitimi (pqSampleSize) nedeniyle daha uzun olabilir.
Dizin Desteği HNSW, IVF. DiskANN.
Configuration Basit, etkinleştirin compression: "half". Diğer parametreler: pqCompressedDims, pqSampleSize.
Fazla Örnekleme Kullanımı Küçük hassasiyet kaybına yardımcı olur. Daha büyük sıkıştırmadan doğruluğu kurtarmak için gereklidir.
İdeal Kullanım Örnekleri Orta düzeyde bellek azaltımı, boyutların artması, kabul edilebilir hassasiyet ödünü. Büyük veri kümeleri, yüksek boyutlar, hızlı arama öncelikli, fazla örnekleme ile yönetilen kesinlik.

Ürün nicelemesi ile ilgili dikkat edilmesi gerekenler

  • Duyarlık ve Sıkıştırma: Daha yüksek PQ sıkıştırması daha küçük dizinlere ve daha hızlı aramaya yol açar ancak daha fazla duyarlık kaybına neden olur. Doğru dengeyi bulmak için ve pqCompressedDims ile oversampling denemeler yapın.
  • Dizin Oluşturma Zamanı: PQ dizini oluşturma işlemi, tarafından pqSampleSizeetkilenen centroid eğitim sürecinden dolayı daha uzun sürebilir.
  • Veri Dağıtımı: PQ, vektör verileri net bir küme yapısına sahip olduğunda en iyi şekilde çalışır.

Sonraki Adımlar