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ü benzer öğeleri bulmak ve verileri kümeleme, niceleme ve vektör benzerliği araması gibi gruplar halinde düzenlemek için gelişmiş teknikler kullanarak vektörleri karşılaştırabilir ve analiz edebilirsiniz.

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 kavramsal olarak Eventhouse Microsoft Fabric Real-Time Intelligence'da vektör veritabanı olarak nasıl kullanabileceğinizi 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. Ökliduzaklığı veya kosinüs benzerliği gibi bir uzaklık ölçümü kullanarak vektörleri karşılaştırırsınız. İ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. Verileri analiz eden algoritmalar kullanarak eklemeler oluşturur ve temel özelliklerini temsil eden bir dizi sayısal değer oluşturursunuz. Ö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) kullanarak bunları oluşturabilirsiniz ancak Büyük Dil Modelleri (LLM), anlamsal metin araması için en yüksek kalitede eklemeler oluşturur. Örneğin, Azure OpenAI içindeki bir ekleme modeline metin gönderebilirsiniz ve analiz için depolayabileceğiniz bir vektör gösterimi oluşturur. Daha fazla bilgi için bkz. Azure OpenAI Service'da 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 araması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. Bu özellik Eventhouse'un vektörleri depolamak ve aramak için mükemmel bir seçim olmasını sağlar.

Eventhouse'un aşağıdaki bileşenleri bunu vektör veritabanı olarak kullanmanızı sağlar:

  • Diziler ve özellik torbaları gibi yapılandırılmamış verileri depolayan dinamik veri türü. Vektör değerlerini depolamak için bu veri türünü kullanın. Özgün nesneyle ilgili meta verileri tablonuzda ayrı sütunlar olarak depolayarak vektör değerini daha da artırabilirsiniz.
  • Kayan noktalı sayıların vektörlerini 16 bit duyarlıkta depolamak için tasarlanmış kodlama türü Vector16 . Bu kodlama, varsayılan 64 bit yerine Bfloat16 kodlamasını kullanır. Depolama gereksinimlerini dört katsayıya düşürdüğünden ve series_dot_product() ve series_cosine_similarity() gibi vektör işleme işlevlerini büyüklüğe göre hızlandırdığından ML vektör eklemelerini depolamak için bu kodlamayı kullanın.
  • Eventhouse'da depolanan vektörlerin üzerinde vektör benzerlik aramaları yapmak için kullanabileceğiniz series_cosine_similarity işlevi.

Ölçeklendirme için optimize et

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

Performansı ve sonuçta elde edilen arama sürelerini en üst düzeye çıkarmak için şu 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. Katıştırma vektörleri tablosunu işlemci başına en az bir parça içeren tüm küme düğümlerinde depolayın. Bu hedefi gerçekleştirmek için şu adımları izleyin:
    1. Parçalama ilkesinin ShardEngineMaxRowCount öğesini değiştirerek parça başına ekleme vektörlerinin sayısını sınırlayın. Bu ayar, daha hızlı aramalar için verilerinizi tüm kullanılabilir bilgi işlem kaynaklarına dağıtır.
    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 bir vektör tablosu tanımlarsınız. Ekleme ilkesini Vektör16 olarak tanımlarsınız ve tabloyu vektör benzerliği araması için en iyi duruma getirmek için parçalama ve birleştirme ilkelerini ayarlarsınız. Bu örnekte, kümenin 20 düğümü ve her düğümün 16 işlemcisi olduğunu varsayalım. Tablo parçaları en fazla 1.000.000/(20*16)=3.125 satır içermelidir.

  1. Aşağıdaki KQL komutlarını tek tek çalıştırarak boş tabloyu oluşturun ve gerekli ilkeleri ve kodlamayı ayarlayın:

    .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