İngilizce dilinde oku

Aracılığıyla paylaş


NoSQL için Azure Cosmos DB'de Vektör Arama

NoSQL için Azure Cosmos DB artık verimli vektör dizin oluşturma ve arama olanağı sunuyor. Bu özellik, yüksek boyutlu vektörleri işlemek için tasarlanmıştır ve her ölçekte verimli ve doğru vektör araması sağlar. Artık vektörleri doğrudan verilerinizle birlikte belgelerde depolayabilirsiniz. Veritabanınızdaki her belge yalnızca geleneksel şema içermeyen veriler değil, aynı zamanda belgelerin diğer özellikleri olarak yüksek boyutlu vektörler de içerebilir. Vektörler temsil ettikleri verilerle aynı mantıksal ünitede depolandığından, veri ve vektörlerin bu birlikte yerleştirilmesi, verimli dizin oluşturma ve arama işlemlerine olanak tanır. Vektörleri ve verileri bir arada tutmak veri yönetimini, yapay zeka uygulama mimarilerini ve vektör tabanlı işlemlerin verimliliğini basitleştirir.

NoSQL için Azure Cosmos DB, vektör dizin oluşturma yöntemini seçerken sunduğu esnekliği sunar:

  • "Düz" veya en yakın k komşu tam arama (bazen deneme yanılma olarak adlandırılır) daha küçük, odaklanmış vektör aramaları için %100 geri çağırma sağlayabilir. özellikle sorgu filtreleri ve bölüm anahtarlarıyla birleştirildiğinde.
  • KNN aramasında daha iyi verimlilik için DiskANN tabanlı niceleme yöntemlerini kullanarak vektörleri sıkıştıran nicelenmiş düz dizin.
  • Microsoft Research tarafından her ölçekte verimli, yüksek doğruluklu vektör aramasına güç sağlamak için geliştirilen son teknoloji vektör dizinleme algoritmaları paketi olan DiskANN.

Vektör dizini oluşturma hakkında daha fazla bilgiyi burada bulabilirsiniz

Azure Cosmos DB'de vektör araması, yan tümceleri kullanılarak WHERE desteklenen diğer tüm Azure Cosmos DB NoSQL sorgu filtreleri ve dizinleriyle birleştirilebilir. Bu, vektör aramalarınızın uygulamalarınıza en uygun veriler olmasını sağlar.

Bu özellik, Azure Cosmos DB'nin temel özelliklerini geliştirerek yapay zeka uygulamalarında vektör verilerini ve arama gereksinimlerini işlemek için daha çok yönlü hale getirir.


Vektör deposu nedir?

Vektör deposu veya vektör veritabanı , yüksek boyutlu bir alanda verilerin matematiksel temsilleri olan vektör eklemelerini depolamak ve yönetmek için tasarlanmış bir veritabanıdır. Bu alanda, her boyut verilerin bir özelliğine karşılık gelir ve gelişmiş verileri temsil etmek için on binlerce boyut kullanılabilir. Vektörlerin bu boşluktaki konumu, özelliklerini temsil eder. Sözcükler, tümcecikler veya belgelerin tamamı, görüntüler, ses ve diğer veri türlerinin tümü vektörleştirilebilir.

Vektör deposu nasıl çalışır?

Vektör deposunda, eklemeleri dizine almak ve sorgulamak için vektör arama algoritmaları kullanılır. Bazı iyi bilinen vektör arama algoritmaları Hiyerarşik Gezinilebilir Küçük Dünya (HNSW), Ters Dosya (IVF), DiskANN vb. içerir. Vektör arama, bir özellik alanında tam eşleşmeler yerine veri özelliklerine göre benzer öğeleri bulmanıza yardımcı olan bir yöntemdir. Bu teknik, benzer metin arama, ilgili görüntüleri bulma, önerilerde bulunma ve hatta anomalileri algılama gibi uygulamalarda kullanışlıdır. EklemeLER API'sini kullanarak makine öğrenmesi modeli kullanarak oluşturduğunuz verilerinizin vektör eklemelerini sorgulamak için kullanılır. Ekleme API'lerine örnek olarak Azure OpenAI Eklemeleri veya Azure'da Yüz Tanımayı Kucaklama verilebilir. Vektör araması, veri vektörleri ile sorgu vektörünüzün arasındaki mesafeyi ölçer. Sorgu vektörünüzün en yakın veri vektörleri, en benzer olduğu saptanan vektörlerdir.

NoSQL için Azure Cosmos DB'deki Tümleşik Vektör Veritabanı'nda eklemeler özgün verilerin yanı sıra depolanabilir, dizinlenebilir ve sorgulanabilir. Bu yaklaşım, verileri ayrı bir saf vektör veritabanında çoğaltmanın ek maliyetini ortadan kaldırır. Ayrıca bu mimari, vektör eklemeleri ve özgün verileri bir arada tutarak çok modalı veri işlemlerini daha iyi kolaylaştırır ve daha fazla veri tutarlılığı, ölçeklendirme ve performans sağlar.

Vektör dizin oluşturma ve arama özelliğini etkinleştirme

NoSQL için Azure Cosmos DB'de vektör dizin oluşturma ve arama, Azure Cosmos DB'nizin Özellikler sayfasında etkinleştirilmeyi gerektirir. Kaydolmak için aşağıdaki adımları izleyin:

  1. NoSQL için Azure Cosmos DB kaynak sayfanıza gidin.

  2. "Ayarlar" menü öğesinin altındaki "Özellikler" bölmesini seçin.

  3. "NoSQL için Azure Cosmos DB'de Vektör Arama" özelliğini seçin.

  4. Etkinleştirmek istediğinizi onaylamak için özelliğin açıklamasını okuyun.

  5. Vektör dizin oluşturma ve arama özelliğini açmak için "Etkinleştir" seçeneğini belirleyin.

    İpucu

    Alternatif olarak, Hesabınızın özelliklerini NoSQL vektör aramasını destekleyecek şekilde güncelleştirmek için Azure CLI'yı kullanın.

    Azure CLI
    az cosmosdb update \
         --resource-group <resource-group-name> \
         --name <account-name> \
         --capabilities EnableNoSQLVectorSearch
    

Not

Kayıt isteği otomatik olarak onaylanır; ancak hesabın tamamen etkinleştirilmesi 15 dakika sürebilir.

Kapsayıcı Vektör İlkeleri

NoSQL için Azure Cosmos DB ile vektör araması yapmak için kapsayıcı için bir vektör ilkesi tanımlamanız gerekir. Bu, kapsayıcının belgelerinde bulunan vektörler için verimli benzerlik araması yapmak için veritabanı altyapısı için temel bilgiler sağlar. Bu ayrıca, bir tane belirtmeyi seçerseniz vektör dizin oluşturma ilkesine gerekli bilgileri bildirir. Aşağıdaki bilgiler, kapsanan vektör ilkesine dahildir:

Not

Her benzersiz yolun en fazla bir ilkesi olabilir. Ancak, tümü farklı bir yolu hedeflemesi koşuluyla birden çok ilke belirtilebilir.

Kapsayıcı vektör ilkesi JSON nesneleri olarak tanımlanabilir. Geçerli kapsayıcı vektör ilkelerine iki örnek aşağıda verilmiştir:

Tek vektör yolu olan bir ilke

JSON
{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        }
    ]
}

İki vektör yolu olan bir ilke

JSON
{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        },
        {
            "path":"/vector2",
            "dataType":"int8",
            "distanceFunction":"dotproduct",
            "dimensions":100
        }
    ]
}

Vektör dizin oluşturma ilkeleri

Vektör dizinleri, sistem işlevini kullanarak VectorDistance vektör aramaları yaparken verimliliği artırır. Vektör araması, vektör dizini kullanılırken daha düşük gecikme süresine, daha yüksek aktarım hızına ve daha az RU tüketimine sahiptir. Aşağıdaki vektör dizin ilkesi türlerini belirtebilirsiniz:

Type Açıklama Maksimum boyutlar
flat Vektörleri diğer dizine alınan özelliklerle aynı dizinde depolar. 505
quantizedFlat Dizinde depolamadan önce vektörleri niceleştirir (sıkıştırır). Bu, az miktarda doğruluk karşılığında gecikme süresini ve aktarım hızını iyileştirebilir. 4096
diskANN Hızlı ve verimli yaklaşık arama için DiskANN tabanlı bir dizin oluşturur. 4096

Not

quantizedFlat ve diskANN dizinleri en az 1.000 vektör eklenmesini gerektirir. Bu, niceleme işleminin doğruluğunu sağlamaktır. 1.000'den az vektör varsa, bunun yerine tam tarama yürütülür ve vektör arama sorgusu için daha yüksek RU ücretlerine yol açar.

Dikkate almak için birkaç nokta:

  • ve quantizedFlat dizin türleri, flat vektör araması yaparken her vektöri depolamak ve okumak için Azure Cosmos DB'nin dizinini kullanır. Dizin içeren flat vektör aramaları deneme yanılma aramalarıdır ve %100 doğruluk veya geri çekme üretir. Başka bir ifadeyle, veri kümesindeki en benzer vektörleri bulmak garanti edilir. Ancak düz bir dizindeki vektörler için boyut sınırlaması 505 vardır.

  • Dizin, quantizedFlat dizinde nicelenmiş (sıkıştırılmış) vektörleri depolar. Dizinli quantizedFlat vektör aramaları da deneme yanılma aramalarıdır, ancak vektörler dizine eklemeden önce ölçüleceğinden doğrulukları %100'ün biraz altında olabilir. Ancak, ile quantized flat vektör aramalarının dizindeki flat vektör aramalarına göre daha düşük gecikme süresi, daha yüksek aktarım hızı ve daha düşük RU maliyeti olmalıdır. Bu, daha küçük senaryolar veya vektör aramasını görece küçük bir vektör kümesine daraltmak için sorgu filtrelerini kullandığınız senaryolar için iyi bir seçenektir. quantizedFlat dizine eklenecek vektör sayısı fiziksel bölüm başına yaklaşık 50.000 veya daha az olduğunda önerilir. Ancak bu yalnızca genel bir yönergedir ve her senaryo farklı olabileceği için gerçek performans test edilmelidir.

  • DizindiskANN, Microsoft Research tarafından geliştirilen yüksek performanslı vektör dizinleme algoritmaları paketi olan DiskANN kullanan vektörler için özel olarak tanımlanan ayrı bir dizindir. DiskANN dizinleri en düşük gecikme süresi, en yüksek aktarım hızı ve en düşük RU maliyeti sorgularından bazılarını sunarken yüksek doğruluğu korumaya devam edebilir. Genel olarak, fiziksel bölüm başına 50.000'den fazla vektör varsa DiskANN tüm dizin türleri arasında en yüksek performansa sahip olandır.

Geçerli vektör dizini ilkelerine örnekler aşağıda verilmiştir:

JSON
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        },
        {
            "path": "/vector1/*"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "diskANN"
        }
    ]
}
JSON
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?"
        },
        {
            "path": "/vector1/*",
        },
        {
            "path": "/vector2/*",
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector1",
            "type": "quantizedFlat"
        },
        {
            "path": "/vector2",
            "type": "diskANN"
        }
    ]
}

Önemli

Ekleme için iyileştirilmiş performans sağlamak için dizin oluşturma ilkesinin "excludedPaths" bölümüne eklenen vektör yolu. "excludedPaths" öğesine vektör yolu eklenmemesi, vektör eklemeleri için daha yüksek RU ücreti ve gecikme süresine neden olur.

Önemli

Joker karakterler (*, []) şu anda vektör ilkesinde veya vektör dizininde desteklenmiyor.

VectorDistance() kullanarak sorgularla vektör araması yapma

İstenen vektör ilkesine sahip bir kapsayıcı oluşturduktan ve kapsayıcıya vektör verileri ekledikten sonra, sorgudaki Vektör Uzaklığı sistem işlevini kullanarak vektör araması yapabilirsiniz. Benzerlik puanını diğer ad SimilarityScoreolarak projeleyen ve en küçük benzere en benzer şekilde sıralayan bir NoSQL sorgusu örneği:

SQL
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3])   

Önemli

Sorgu deyiminde SELECT her zaman bir yan tümce kullanınTOP N. Aksi takdirde vektör araması çok daha fazla sonuç döndürmeyi dener ve sorgu daha fazla RU'ya mal olur ve gerekenden daha yüksek gecikme süresine sahip olur.

Geçerli sınırlamalar

NoSQL için Azure Cosmos DB'de vektör dizin oluşturma ve aramanın bazı sınırlamaları vardır.

  • quantizedFlat ve diskANN dizinleri, nicelemenin doğru olduğundan emin olmak için dizine alınması için en az 1.000 vektör gerektirir. Dizine 1.000'den az vektör eklenirse bunun yerine tam tarama kullanılır ve RU ücretleri daha yüksek olabilir.
  • Dizin türüyle flat dizine alınan vektörler en fazla 505 boyutta olabilir. veya DiskANN dizin türüyle quantizedFlat dizine alınan vektörler en fazla 4.096 boyutta olabilir.
  • Dizin, quantizedFlat DiskANN ile aynı niceleme yöntemini kullanır.
  • Vektör ekleme oranı sınırlı olmalıdır. Çok büyük veri alımı (5M vektörün üzerinde) ek dizin derleme süresi gerektirebilir.
  • Vektör arama özelliği şu anda mevcut kapsayıcılarda desteklenmiyor. Bunu kullanmak için yeni bir kapsayıcı oluşturulmalıdır ve kapsayıcı düzeyinde vektör ekleme ilkesi belirtilmelidir.
  • Paylaşılan aktarım hızı veritabanları desteklenmez.
  • Şu anda Analiz Deposu (ve Synapse Link) ve Paylaşılan Aktarım Hızı olan hesaplarda vektör dizin oluşturma ve arama desteklenmez.
  • Bir kapsayıcıda vektör dizin oluşturma ve arama etkinleştirildikten sonra devre dışı bırakılamaz.

Sonraki adım