Aracılığıyla paylaş


Cosmos DB'de dizin vektör verileri (Azure ve Fabric)

Cosmos DB (Azure ve Fabric) verimli vektör dizin oluşturma ve arama olanağı sunar. 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.

Cosmos DB, vektör dizinleme yöntemini seçerken sunduğu esnekliği sunar:

  • Düz arama veya en yakın k komşu kesin arama (bazen kaba kuvvet 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.

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

Bu özellik 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. 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.

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.

Kapsayıcı vektör politikaları

Cosmos DB ile vektör araması yapmak için kapsayıcı için bir vektör ilkesi tanımlamanız gerekir. Bu ilke, kapsayıcı belgelerindeki vektörler için verimli benzerlik araması gerçekleştirmek üzere veritabanı motoru için temel bilgiler sağlar. Bu yapılandırma, bir tane belirtmeyi seçerseniz gerekli bilgileri vektör dizinleme ilkesine de bildirir. Aşağıdaki bilgiler, kapsanan vektör ilkesine dahildir:

  • path: vektörünü içeren özellik (gerekli).

  • datatype: vektör özelliğinin veri türü. Desteklenen türler şunlardır float32 : (varsayılan), 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 1536).

  • distanceFunction: Uzaklığı/benzerliği hesaplamak için kullanılan ölçüm. Desteklenen ölçümler şunlardır:

    • cosine, $-1$ (en az benzer) ile $+1$ (en benzer) değerlerine sahiptir.

    • dot product, $-\infty$ (en az benzer) ile $+\infty$ (en benzer) değerlerine sahiptir.

    • euclidean, $0$ (en benzer) ile $+\infty$ (en az benzer) değerlerine sahiptir.

Uyarı

Her benzersiz yolun en fazla bir ilkesi olabilir. Ancak, tümü farklı bir yolu hedeflerse 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 politika

Bu örnek, kosinüs benzerliği olan 1536 boyutlu float32 vektörlerini depolamaya yönelik temel kurulumu gösteren tek bir vektör yolu ile vektör ekleme ilkesi yapılandırmasını gösterir. Bu yapılandırma şunları gösterir:

  • /[0]: 1536 boyutlu vektörler için kosinüs benzerliğiyle float32 veri türünü kullanır (OpenAI eklemeleri için ortaktır)
{
  "vectorEmbeddings": [
    {
      "path": "/vector1",
      "dataType": "float32",
      "distanceFunction": "cosine",
      "dimensions": 1536
    }
  ]
}

İki vektör yolu olan ilke

Bu örnekte, her biri ayrı veri türleri, uzaklık işlevleri ve boyutları olan iki farklı vektör ekleme yolu ile bir vektör dizin oluşturma ilkesinin nasıl yapılandırıldığı gösterilmektedir. Bu yapılandırma şunları gösterir:

  • /[0]: 1536 boyutlu vektörler için kosinüs benzerliğiyle float32 veri türünü kullanır (OpenAI eklemeleri için ortaktır)
  • /[1]: 100 boyutlu vektörler için noktalı ürün uzaklığı ile int8 veri türünü kullanır (daha küçük eklemeler için bellek açısından daha verimli)
{
  "vectorEmbeddings": [
    {
      "path": "/vector1",
      "dataType": "float32",
      "distanceFunction": "cosine",
      "dimensions": 1536
    },
    {
      "path": "/vector2",
      "dataType": "int8",
      "distanceFunction": "dotproduct",
      "dimensions": 100
    }
  ]
}

Kapsayıcı vektör ilkesi ayarları hakkında daha fazla bilgi ve örnek için bkz. vektör dizin oluşturma ilkesi örnekleri.

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. Şu tür vektör dizin ilkeleri belirtebilirsiniz:

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 ilke, 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

Dikkate almak için birkaç nokta:

  • ve flat dizin türleri, quantizedFlat bir vektör araması sırasında her vektöri depolamak ve okumak için Cosmos DB'nin 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 bulmaları garanti edilir. Ancak düz bir dizindeki 505 vektörler için 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ının, 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 maliyeti olmalıdır. Bu dizin, daha küçük senaryolar veya vektör aramasını görece küçük bir vektör kümesine daraltmak için sorgu filtreleri 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 öneri 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, 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.

  • quantizedFlatve diskANN dizinleri, özelliği aracılığıyla vectorIndexes nesnede quantizerType iki niceleme yöntemini destekler: product ve spherical.

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/?"
    },
    {
      "path": "/vector1/*",
    },
    {
      "path": "/vector2/*",
    }
  ],
  "vectorIndexes": [
    {
      "path": "/vector1",
      "type": "quantizedFlat"
    },
    {
      "path": "/vector2",
      "type": "diskANN"
    }
  ]
}

Niceleme yöntemleri

Ayrıca, niceleme yöntemini vectorIndexes nesnesinde doğrudan belirtebilirsiniz. Cosmos DB iki niceleme yöntemini destekler: product, varsayılan yöntem ve spherical (Genel Önizleme'de), daha hızlı dizin oluşturma süreleri ve daha yüksek geri çağırma gibi daha iyi performans özellikleri sergileyebilecek. Quantization yöntemi, aşağıda gösterildiği gibi vectorIndexes nesnesindeki quantizerType özelliği kullanılarak belirtilebilir.

{
  "vectorIndexes": [
    {
      "path": "/vector1",
      "type": "diskANN",
      "quantizerType": "spherical"
    }
  ]
}

Önemli

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

Vektör araması gerçekleştirmek için VECTORDISTANCE kullanarak sorgular yapın

İstenen vektör ilkesine sahip bir kapsayıcı oluşturduktan ve kapsayıcıya vektör verileri ekledikten sonra, sorgudaki VECTORDISTANCE yerleşik işlevi kullanarak vektör araması yapabilirsiniz. Benzerlik puanını score adı altında projeksiyon yapan ve en benzerden en az benzere doğru sıralayan bir NoSQL sorgusu örneği:

SELECT TOP 10
  c.title,
  VECTORDISTANCE(c.contentVector, [1,2,3]) AS score 
FROM
  container c
ORDER BY
  VECTORDISTANCE(c.contentVector, [1,2,3])   

Önemli

Bir sorgu ifadesinde her zaman TOP N yan tümcesi kullanınSELECT. Aksi takdirde vektör araması sorgunun daha fazla istek birimine (RU) mal olmasını ve gerekenden daha yüksek gecikme süresine sahip olmasını sağlamak için çok daha fazla sonuç döndürmeye çalışır.