NoSQL için Azure Cosmos DB'de vektör araması

NoSQL için Azure Cosmos DB artık verimli vektör dizin oluşturma ve arama olanağı sunuyor. Bu özellik, çok modal, 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 çok modali 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 dizinleme yöntemini seçmenize izin vererek esneklik sunar:

  • Düzlem veya k-en yakın komşu tam araması (bazen güçlü yöntem olarak adlandırılır), daha küçük, odaklanmış vektör aramaları için %100 geri çağırma oranı 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.
  • DiskANN, Microsoft Research tarafından her ölçekte verimli, yüksek doğruluklu çoklu modal vektör aramasına güç sağlamak için geliştirilen son teknoloji vektör dizinleme algoritmalarından oluşan bir pakettir.

Vektör dizini oluşturma hakkında daha fazla bilgi edinmek için bkz. Vektör dizinleri.

Azure Cosmos DB vektör araması, WHERE yan tümceleri kullanılarak desteklenen diğer tüm Azure Cosmos DB NoSQL sorgu filtreleri ve dizinleriyle birleştirilebilir. Bu, vektör aramalarınızın uygulamalarınız için en uygun verileri sağlamasına olanak tanır.

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.


Note

Ultra yüksek aktarım hızı vektör arama özellikleriyle mi ilgileniyorsunuz? Azure Cosmos DB, ultra yüksek aktarım hızına sahip eklemeler ve aramalarla eşleştirilmiş büyük vektör veri kümeleri için tasarlanmış gelişmiş vektör arama özellikleri geliştiriyor. Tahmin edilebilir, düşük gecikme süresi ve eşleşmeyen maliyet verimliliği ile saniyede milyonlarca sorgu (QPS) barındırabilir. Erken erişim fırsatları hakkında daha fazla bilgi edinmek ve bu özellikler kullanılabilir olduğunda bildirim almak için kaydolun.

Genişletilmiş Özel Önizleme'ye kaydolun.

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) ve DiskANN'yi 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. Verilerinizin makine öğrenmesi modeli kullanılarak ve bir gömme API'si aracılığıyla oluşturulan vektör gömmeleri sorgulamak için kullanılır. Ekleme API'lerine örnek olarak Azure OpenAI Embeddings veya Hugging Face on Azure verilebilir.

Vektör araması, veri vektörleri ile sorgu vektörünüzün arasındaki mesafeyi ölçer. Sorgu vektörünüze en yakın veri vektörleri, anlam bakımından en benzer olanlardır.

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 bu özelliği etkinleştirmek için şu adımları izleyin:

  1. NoSQL için Azure Cosmos DB kaynak sayfanıza gidin.
  2. Sol bölmedeki Ayarlar'ın altında Özellikler'i seçin.
  3. Vektör Arama için NoSQL API'yi seçin.
  4. Özelliği etkinleştirmek istediğinizi onaylamak için özelliğin açıklamasını okuyun.
  5. NoSQL için Azure Cosmos DB'de vektör aramasını açmak için Etkinleştir'i seçin.

Tip

Alternatif olarak, Azure CLI kullanarak hesabınızın özelliklerini NoSQL vektör aramasını destekleyecek şekilde güncelleştirin.

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

Kayıt isteği otomatik olarak onaylanır, ancak geçerlilik kazanması 15 dakika sürebilir.

Note

Hiyerarşik bölüm anahtarları olan koleksiyonlarda vektör aramasını kullanmak istiyorsanız, hesabınızı arama sırasında bölümleme şemasından en iyi şekilde yararlanacak şekilde yapılandırmak için şu adreste ekibe ulaşın: cosmossearch@microsoft.com

Kapsayıcı vektör politikaları

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ıdaki belgelerde bulunan vektörler için veritabanı motorunun verimli bir benzerlik araması yapabilmesi amacıyla gerekli temel bilgileri 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:

  • path: Vektörleri içeren özellik yolu (gerekli).
  • datatype: Vektör özelliğinin veri türü. Desteklenen türler : float32, float16, int8ve uint8.
  • dimensions: Yoldaki her vektörünün boyutsallığı veya uzunluğu. Bir yoldaki tüm vektörler aynı sayıda boyuta sahip olmalıdır. Varsayılan değer: 1536.
  • distanceFunction: Uzaklığı/benzerliği hesaplamak için kullanılan ölçüm. Desteklenen ölçümler şunlardır:
    • cosine (varsayılan), -1 (en az benzer) ile +1 (en benzer) arasında değerlere sahiptir.
    • Nokta ürünü, -∞ (en az benzer) ile +∞ (en benzer) değerlerine sahiptir.
    • 0 (en benzer) ile +inf (en az benzer) değerlerine sahip euclidean.

Note

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

Note

Birçok ekleme modeli, float32 kullanarak bir vektörün öğelerini temsil eder. Bunun float16 yerine kullanmak vektörlerin depolama ayak izini 50%azaltabilir, ancak doğrulukta bir miktar azalma olabilir.

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

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

İki vektör yolu olan bir ilke

{
    "vectorEmbeddings": [
        {
            "path":"/vector1",
            "dataType":"float32",
            "distanceFunction":"cosine",
            "dimensions":1536
        },
        {
            "path":"/vector2",
            "dataType":"float16",
            "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:

Türü Description 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

Note

quantizedFlat ve diskANN dizinleri için en az 1.000 vektör eklenmesi gerekir. 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.

Dikkate alınması gereken birkaç nokta:

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

  • quantizedFlat dizini, indeks içinde 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, quantized flat ile yapılan vektör aramaları, flat dizinindeki vektör aramalarına göre daha düşük gecikme süresi, daha yüksek aktarım hızı ve daha düşük RU maliyetine sahip 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 aramanızın kapsamı belirlenmiş vektör sayısı 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.

  • diskANN dizini, 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, arama sorgunuzun kapsamı 50.000'den fazla vektör olarak belirlenmişse DiskANN tüm dizin türlerinin en yüksek performansına sahip olur.

Note

Yeni yol yapılandırmaları ekleyebilir veya var olanları kaldırabilirsiniz, ancak vektör ekleme ilkesinin veya vektör dizin oluşturma ilkesinin ayarlarını doğrudan değiştiremezsiniz. Bunu yapmak için önce mevcut vektör ilkesini ve/veya dizini bırakmanız, ardından yeni yapılandırmayla yeniden eklemeniz gerekir.

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

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

Important

Diziler içinde iç içe yerleştirilmiş wildcard karakterler (*, []) ve vektör yolları şu anda vektör ilkesinde veya vektör indeksinde desteklenmemektedir.

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 VectorDistance sistem işlevini kullanarak vektör araması yapabilirsiniz. Aşağıdaki örnekte, benzerlik puanını SimilarityScore takma adıyla projelendiren ve en benzerden en aza doğru sıralayan bir NoSQL sorgusu gösterilmektedir.

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

Important

Bir sorgu ifadesinde her zaman TOP N yan tümcesi kullanınSELECT. Aksi takdirde vektör araması çok daha fazla sonuç döndürmeye çalışır ve sorgu daha fazla RU'ya mal olur ve gerekenden daha yüksek gecikme süresine sahiptir.

Mevcut 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. 1.000'den az vektör dizine alınırsa 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. quantizedFlat veya DiskANN dizin türüyle dizine alınan vektörler en fazla 4.096 boyutta olabilir.
  • Vektör ekleme oranı sınırlı olmalıdır. Kısa bir süre içinde çok büyük veri alımı (5M vektörlerinin üzerinde) daha fazla dizin oluşturma süresi gerektirebilir.
  • Şu anda Paylaşılan Aktarım Hızına sahip 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