Aracılığıyla paylaş


SQL Veritabanı Altyapısı'nda vektör arama ve vektör dizinleri

Şunlar için geçerlidir: SQL Server 2025 (17.x) Microsoft Fabric'teAzure SQL VeritabanıAzure SQL Yönetilen Örneği SQL veritabanı

SQL Veritabanı Altyapısı, her tür veriyi depolama ve her türlü sorguyu çalıştırma olanağı sağlar: yapılandırılmış ve yapılandırılmamış ve bu veriler üzerinde vektör araması yapma. Tüm bu verileri birlikte aramanız gereken ve mimarinizi karmaşıklaştıracak ayrı bir arama hizmeti kullanmak istemediğiniz senaryolar için iyi bir seçimdir.

Uyarı

  • Vektör özellikleri, SQL Server 2025 veya Always-up-to-dategüncelleştirme ilkesiyle yapılandırılmış Azure SQL Yönetilen Örneği'nde kullanılabilir.

Vectors

Vektörler, bazı veriler hakkındaki bilgileri temsil eden sıralı sayı dizileridir (genellikle kayan sayılar). Örneğin, bir görüntü piksel değerlerinin vektöru olarak gösterilebilir veya bir metin dizesi ASCII değerlerinin vektöru olarak gösterilebilir. Verileri vektöre dönüştürme işlemine vektörleştirme adı verilir. SQL Server'daki vektör veri türü, bu sayı dizilerini verimli bir şekilde depolamak için tasarlanmıştır.

Eklemeler

Eklemeler, verilerin önemli özelliklerini temsil eden vektörlerdir. Eklemeler genellikle derin öğrenme modeli kullanılarak öğrenilir ve makine öğrenmesi ve yapay zeka modelleri bunları özellik olarak kullanır. Eklemeler, benzer kavramlar arasındaki anlamsal benzerliği de yakalayabilir. Örneğin, person ve human kelimeleri için bir gömme oluştururken, kelimelerin de anlamsal olarak benzer olması nedeniyle gömmelerinin (vektör gösterimi) değer olarak benzer olmasını bekleriz.

Azure OpenAI, metin verilerinden eklemeler oluşturmak için modeller sunar. Hizmet, metinleri belirteçlere ayırır ve OpenAI tarafından önceden eğitilen modelleri kullanarak eklemeler oluşturur. Daha fazla bilgi edinmek için bkz . Azure OpenAI ile ekleme oluşturma.

Eklemeler oluşturulduktan sonra bir SQL Server veritabanında depolanabilir. Bu, eklemeleri temsil ettikleri verilerin yanı sıra depolamanıza ve benzer veri noktalarını bulmak için vektör arama sorguları gerçekleştirmenize olanak tanır.

Vektör araması, bir veri kümesindeki belirli bir sorgu vektörine benzer tüm vektörleri bulma işlemini ifade eder. Bu nedenle, sözcüğün human sorgu vektörleri, veri kümesinin tamamında benzer vektörler ve dolayısıyla benzer sözcükler arar: bu örnekte sözcüğü person yakın eşleşme olarak bulmalıdır. Bu yakınlık veya uzaklık, kosinüs uzaklığı gibi bir uzaklık ölçümü kullanılarak ölçülür. Vektörler ne kadar yakın olursa o kadar benzerdir.

SQL Server, vektör veri türü aracılığıyla vektörler için yerleşik destek sağlar. Vektörler iyileştirilmiş ikili biçimde depolanır ancak kolaylık sağlamak için JSON dizileri olarak kullanıma sunulur. Vektörünün her öğesi tek duyarlıklı (4 bayt) kayan nokta değeri kullanılarak depolanır. Veri türüyle birlikte vektörler üzerinde çalışmak için ayrılmış işlevler vardır. Örneğin, VECTOR_DISTANCE işlevini kullanarak iki vektör arasındaki uzaklığı bulmak mümkündür. İşlev, belirttiğiniz uzaklık ölçümüne göre iki vektör arasındaki uzaklığı içeren bir skaler değer döndürür.

Vektörler genellikle kayan diziler olarak yönetildiğinden, vektör oluşturma işlemi yalnızca bir JSON dizisini vektör veri türüne dönüştürme işlemi yapılabilir. Örneğin, aşağıdaki kod bir JSON dizisinden bir vektör oluşturur:

SELECT 
    CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS v1,
    CAST(JSON_ARRAY(1.0, -0.2, 30) AS VECTOR(3)) AS v2;

Ya da örtük atama kullanın

DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);
SELECT @v1 as v1, @v2 as v2;

Aynı durum bir vektörün JSON dizisine dönüştürülmesi için de geçerli olur:

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT 
    CAST(@v AS NVARCHAR(MAX)) AS s,
    CAST(@v AS JSON) AS j

Tam arama ve vektör uzaklığı (tam olarak en yakın komşular)

En yakın k komşu (k-NN) araması olarak da bilinen tam arama, belirli bir vektör ile veri kümesindeki diğer tüm vektörler arasındaki uzaklığı hesaplamayı, sonuçları sıralamayı ve belirtilen mesafe ölçümüne göre en yakın komşuları seçmeyi içerir. Bu yöntem, en yakın komşuların kesin alınmasını garanti eder, ancak özellikle büyük veri kümeleri için hesaplama açısından yoğun olabilir.

Vektör uzaklığı işlevleri vektörler arasındaki yakınlığı ölçmek için kullanılır. Yaygın uzaklık ölçümleri arasında Öklid uzaklığı, kosinüs benzerliği ve noktalı ürün yer alır. Bu işlevler k-NN aramalarının gerçekleştirilmesi ve doğru sonuçların sağlanması için gereklidir.

Tam olarak en yakın komşu (ENN) vektör araması, belirtilen uzaklık ölçümüne göre en yakın komşuların alınmasını garanti etmek için tüm dizinlenmiş vektörlerde kapsamlı bir uzaklık hesaplaması yapar. Bu yöntem hassas ancak yoğun kaynak kullanımlı olduğundan doğruluğun en önemli olduğu daha küçük veri kümeleri veya senaryolar için uygundur.

SQL Veritabanı Altyapısı'nda k-NN aramaları, vektörler arasındaki mesafelerin verimli bir şekilde hesaplanması ve en yakın komşuların alınmasını kolaylaştıran VECTOR_DISTANCE işlevi kullanılarak gerçekleştirilebilir.

Aşağıdaki örnek, tabloda depolanan content_vector ilk 10 en benzer vektörünü verilen sorgu vektörine @qvdöndürmek için k-NN'nin nasıl yapılacağını gösterir.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) id, VECTOR_DISTANCE('cosine', @qv, [content_vector]) AS distance, title
FROM [dbo].[wikipedia_articles_embeddings]
ORDER BY distance

Arama yapmak için çok fazla vektör yoksa (genel öneri olarak 50.000'den az vektör) tam arama kullanmanız önerilir. Arama koşulu komşu araması için kullanılacak vektör sayısını 50.000 veya daha az olacak şekilde azalttığı sürece tabloda çok daha fazla vektör bulunabilir.

Yaklaşık vektör dizini ve vektör araması (yaklaşık en yakın komşular)

Uyarı

Yaklaşık vektör indeksi ve vektör araması önizleme aşamasında olup şu anda yalnızca SQL Server 2025 (17.x), Azure SQL Database ve Microsoft Fabric'teki SQL veritabanında mevcuttur.

Belirli bir sorgu vektöre yakın tüm vektörleri tanımlamak için sorgu vektör ve tabloda depolanan vektörler arasındaki uzaklığı hesaplamak için önemli kaynaklar gerekir. Belirli bir sorgu vektörünün yakınında tüm vektörleri aramak için tablonun tam bir taraması ve önemli CPU kullanımı gerekir. Buna "K-en yakın komşular" veya "k-NN" sorgusu denir ve en yakın "k" vektörlerini döndürür.

Vektörler, kullanıcı sorgularını yanıtlamak için yapay zeka modellerine yönelik benzer verileri bulmak için kullanılır. Bu, nokta (iç) ürün, kosinüs benzerliği veya Öklid uzaklığı gibi uzaklık ölçümlerini kullanarak sorgu vektörüne en yakın "k" vektörleri için veritabanını sorgulamayı içerir.

K-NN sorguları genellikle ölçeklenebilirlik ile mücadele eder, bu nedenle önemli hız kazanımları için çoğu durumda bazı doğruluklardan, özellikle hatırlamadan ödün vermek kabul edilebilir hale gelir. Bu yöntem yaklaşık en yakın komşu (ANN) olarak bilinir.

Hatırlama, vektörleri ve gömme yöntemlerini kullanan veya kullanmayı planlayan herkesin aşina olması gereken önemli bir kavramdır. Aslında, hatırlama oranı, kapsamlı bir aramanın döndüreceği tam en yakın komşularla karşılaştırıldığında, algoritma tarafından tanımlanan yaklaşık en yakın komşuların oranını ölçer. Bu nedenle, algoritmanın yaptığı yaklaşık değerin kalitesinin iyi bir ölçümüdür. Yaklaşık değer olmadan eşdeğer olan mükemmel bir geri çağırma 1'dir.

Yapay zeka uygulamaları için denge oldukça makuldür. Vektör eklemeler zaten yaklaşık kavramlar olduğundan, geri çekmenin 1'e yakın olması koşuluyla ANN'nin kullanılması sonuçları önemli ölçüde etkilemez. Bu, döndürülen sonuçların k-NN'den gelen sonuçlara çok benzer olmasını sağlarken, işletimsel veritabanları için son derece yararlı olan büyük ölçüde iyileştirilmiş performans ve önemli ölçüde azaltılmış kaynak kullanımı sunar.

Vektör dizinine başvururken kullanılan "dizin" teriminin ilişkisel veritabanlarında çalışmak için kullandığınız dizinden farklı bir anlamı olduğunu anlamak önemlidir. Aslında, vektör dizini yaklaşık sonuçlar döndürür.

SQL Veritabanı altyapısında vektör dizinleri DiskANN algoritmasını temel alır. DiskANN, belirli bir vektörle en yakın eşleşmeyi bulmak için dizine alınan tüm vektörlerde hızla gezinmek için bir grafik oluşturmaya dayanır. DiskANN, sınırlı hesaplama kaynakları kullanarak büyük vektör veri kümelerini dizine eklemeye ve aramaya yönelik graf tabanlı bir sistemdir. Bellek içi dizinlerden önemli ölçüde daha fazla veriyi işlemek için SSD'leri ve en düşük belleği verimli bir şekilde kullanırken, saniye başına yüksek sorgu (QPS) ve düşük gecikme süresi sağlayarak bellek, CPU ve G/Ç kullanımı ile arama performansı arasında bir denge sağlar.

En yakın yaklaşık komşu algoritması araması, önce CREATE VECTOR INDEX T-SQL komutu kullanılarak bir vektör dizini oluşturma ve ardından yaklaşık aramayı çalıştırmak için VECTOR_SEARCH T-SQL işlevi kullanılarak yapılabilir.

DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT 
    t.id, s.distance, t.title
FROM
    VECTOR_SEARCH(
        TABLE = [dbo].[wikipedia_articles_embeddings] AS t, 
        COLUMN = [content_vector], 
        SIMILAR_TO = @qv, 
        METRIC = 'cosine', 
        TOP_N = 10
    ) AS s
ORDER BY s.distance