Aracılığıyla paylaş


Vektör veritabanları

Vektör veritabanı, verileri sayısal veri noktaları dizileri olan vektörler biçiminde depolar ve yönetir.

Vektörlerin kullanımı karmaşık sorgulara ve analizlere olanak tanır, çünkü vektörler vektör benzerliği arama, niceleme ve kümeleme gibi gelişmiş teknikler kullanılarak karşılaştırılabilir ve analiz edilebilir. Geleneksel veritabanları, veri analizinde giderek yaygınlaşan yüksek boyutlu verileri işlemek için uygun değildir. Ancak vektör veritabanları, metin, görüntü ve ses gibi yüksek boyutlu verileri vektör olarak temsil ederek işleyecek şekilde tasarlanmıştır. Vektör veritabanları makine öğrenmesi, doğal dil işleme ve görüntü tanıma gibi görevler için kullanışlıdır ve burada amaç büyük veri kümelerindeki desenleri veya benzerlikleri belirlemektir.

Bu makale vektör veritabanları hakkında biraz arka plan sağlar ve Microsoft Fabric'te Gerçek Zamanlı Zeka'da bir Eventhouse'u vektör veritabanı olarak nasıl kullanabileceğinizi kavramsal olarak açıklar. Pratik bir örnek için bkz . Öğretici: Eventhouse'ı vektör veritabanı olarak kullanma.

Temel kavramlar

Vektör veritabanlarında aşağıdaki temel kavramlar kullanılır:

Vektör benzerliği

Vektör benzerliği, iki veya daha fazla vektörnün ne kadar farklı (veya benzer) olduğunu gösteren bir ölçüdür. Vektör benzerliği araması, bir veri kümesinde benzer vektörleri bulmak için kullanılan bir tekniktir. Vektörler, Öklid uzaklığı veya kosinüs benzerliği gibi bir uzaklık ölçümü kullanılarak karşılaştırılır. İki vektör ne kadar yakın olursa, o kadar benzer olur.

Eklemeler

Eklemeler, vektör veritabanlarında kullanılmak üzere verileri vektör biçiminde temsil etmenin yaygın bir yoludur. Ekleme, anlamsal anlamını yakalamak için tasarlanmış sözcük, metin belgesi veya resim gibi bir veri parçasının matematiksel bir gösterimidir. Eklemeler, verileri analiz eden ve temel özelliklerini temsil eden bir dizi sayısal değer oluşturan algoritmalar kullanılarak oluşturulur. Örneğin, bir sözcük için ekleme, sözcüğün anlamını, bağlamını ve diğer sözcüklerle ilişkisini temsil edebilir. Ekleme oluşturma işlemi basittir. Standart python paketleri (örneğin spaCy, sent2vec, Gensim) kullanılarak oluşturulabilirken, Büyük Dil Modelleri (LLM) anlamsal metin araması için en yüksek kaliteli eklemeleri oluşturur. Örneğin, Azure OpenAI'deki bir ekleme modeline metin gönderebilirsiniz ve analiz için depolanabilen bir vektör gösterimi oluşturur. Daha fazla bilgi için bkz . Azure OpenAI Hizmeti'nde eklemeleri anlama.

Genel iş akışı

Vektör olarak depolanan metinleri ekleme, depolama ve sorgulama şeması.

Vektör veritabanı kullanmaya yönelik genel iş akışı aşağıdaki gibidir:

  1. Veri ekleme: Ekleme modeli kullanarak verileri vektör biçimine dönüştürün. Örneğin, OpenAI modelini kullanarak metin verileri ekleyebilirsiniz.
  2. Vektörleri depolama: Katıştırılmış vektörleri bir vektör veritabanında depolayın. Vektörleri depolamak ve yönetmek için ekli verileri bir Eventhouse'a gönderebilirsiniz.
  3. Ekleme sorgusu: Depolanan verileri eklemek için kullanılan ekleme modelini kullanarak sorgu verilerini vektör biçimine dönüştürün.
  4. Sorgu vektörleri: Veritabanında sorguya benzer girdileri bulmak için vektör benzerlik araması kullanın.

Vektör Veritabanı Olarak Eventhouse

Vektör Benzerliği Arama'nın merkezinde vektör verilerini depolama, dizin oluşturma ve sorgulama özelliği bulunur. Eventhouses, özellikle gerçek zamanlı analiz ve araştırma gerektiren senaryolarda büyük hacimli verileri işlemek ve analiz etmek için bir çözüm sağlar ve vektörleri depolamak ve aramak için mükemmel bir seçimdir.

Aşağıdaki bileşenleri Eventhouse bir vektör veritabanı kullanımını etkinleştirir:

Ölçek için iyileştirme

Vektör benzerlik aramasını iyileştirme hakkında daha fazla bilgi için blogu okuyun.

Performansı ve sonuçta elde edilen arama sürelerini en üst düzeye çıkarmak için aşağıdaki adımları izleyin:

  1. Embeddings sütununun kodlamasını Vector16 olarak ayarlayın; vektör katsayılarının 16 bit kodlaması (varsayılan 64 bit yerine).
  2. Ekleme vektörleri tablosunu işlemci başına en az bir parça içeren tüm küme düğümlerinde depolayın. Bu işlem aşağıdaki adımlarla gerçekleştirilir:
    1. Parçalama ilkesinin ShardEngineMaxRowCount öğesini değiştirerek parça başına ekleme vektörlerinin sayısını sınırlayın. Parçalama ilkesi, aramanın tüm kullanılabilir işlemcileri kullanabilmesi için düğüm başına birden çok uzantıya sahip tüm düğümlerdeki verileri dengeler.
    2. Birleştirme ilkesinin RowCountUpperBoundForMerge öğesini değiştirin. Birleştirme ilkesi, alma işleminden sonra birleştirme kapsamlarını engellemek için gereklidir.

Örnek iyileştirme adımları

Aşağıdaki örnekte, 1M vektörlerini depolamak için statik vektör tablosu tanımlanmıştır. Ekleme ilkesi Vektör16 olarak tanımlanır ve parçalama ve birleştirme ilkeleri tabloyu vektör benzerliği araması için en iyi duruma getirmek üzere ayarlanır. Bunun için kümenin her birinde 16 işlemci bulunan 20 düğüm olduğunu varsayalım. Tablonun parçaları en fazla 1000000/(20*16)=3125 satır içermelidir.

  1. Aşağıdaki KQL komutları, boş tabloyu oluşturmak ve gerekli ilkeleri ve kodlamayı ayarlamak için tek tek çalıştırılır:

    .create table embedding_vectors(vector_id:long, vector:dynamic)                                  //  This is a sample selection of columns, you can add more columns
    
    .alter column embedding_vectors.vector policy encoding type = 'Vector16'                         // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing
    
    .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }'       // Balanced data on all nodes and, multiple extents per node so the search can use all processors 
    
    .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }'      // Suppress merging extents after ingestion
    
  2. Verileri önceki adımda oluşturulan ve tanımlanan tabloya alın.

Sonraki adım