Azure AI Search'te vektör sorgusu oluşturma
Azure AI Search'te vektör dizininiz varsa bu makalede şunların nasıl yapılacağını açıklanmaktadır:
Bu makalede çizim için REST kullanılır. Diğer dillerdeki kod örnekleri için vektör sorguları içeren uçtan uca çözümler için azure-search-vector-samples GitHub deposuna bakın.
Arama Gezgini'ni Azure portalında da kullanabilirsiniz.
Önkoşullar
Azure AI Search, herhangi bir bölgede ve herhangi bir katmanda.
Azure AI Search'te vektör dizini. Vektör dizinini onaylamak için dizininizdeki bir
vectorSearch
bölümü denetleyin.İsteğe bağlı olarak, sorgular sırasında yerleşik metinden vektöre veya görüntüden vektöre dönüştürme için dizininize bir vektörleştirici ekleyin.
Bu örnekleri kendi başınıza çalıştırmak istiyorsanız REST istemcisi ve örnek verileri olan Visual Studio Code. REST istemcisini kullanmaya başlamak için bkz . Hızlı Başlangıç: REST kullanarak Azure AI Search.
Sorgu dizesi girişini vektöre dönüştürme
Vektör alanını sorgulamak için sorgunun kendisi bir vektör olmalıdır.
Kullanıcının metin sorgu dizesini vektör gösterimine dönüştürmeye yönelik bir yaklaşım, uygulama kodunuzda bir ekleme kitaplığını veya API'yi çağırmaktır. En iyi yöntem olarak, her zaman kaynak belgelere ekleme oluşturmak için kullanılan aynı ekleme modellerini kullanın. azure-search-vector-samples deposunda ekleme oluşturmayı gösteren kod örnekleri bulabilirsiniz.
İkinci yaklaşım ise azure yapay zeka aramanın sorgu vektörleştirme girişlerinizi ve çıkışlarınızı işlemesini sağlamak için genel kullanıma sunulan tümleşik vektörleştirmeyi kullanmaktır.
Azure OpenAI ekleme modelinin dağıtımına gönderilen sorgu dizesinin REST API örneği aşağıda verilmiştir:
POST https://{{openai-service-name}}.openai.azure.com/openai/deployments/{{openai-deployment-name}}/embeddings?api-version={{openai-api-version}}
Content-Type: application/json
api-key: {{admin-api-key}}
{
"input": "what azure services support generative AI'"
}
Dağıtılan modele başarılı bir çağrı için beklenen yanıt 202'dir.
Yanıtın gövdesindeki "ekleme" alanı, "input" sorgu dizesinin vektör gösterimidir. Test amacıyla, sonraki birkaç bölümde gösterilen söz dizimini kullanarak bir sorgu isteğinde "embedding" dizisinin değerini "vectorQueries.vector" içine kopyalayabilirsiniz.
Dağıtılan modele yapılan bu POST çağrısının gerçek yanıtı, okunabilirlik için yalnızca ilk birkaç vektöre kırpılmış 1536 ekleme içerir.
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
-0.009171937,
0.018715322,
...
-0.0016804502
]
}
],
"model": "ada",
"usage": {
"prompt_tokens": 7,
"total_tokens": 7
}
}
Bu yaklaşımda uygulama kodunuz bir modele bağlanmak, eklemeler oluşturmak ve yanıtı işlemekle sorumludur.
Vektör sorgu isteği
Bu bölümde vektör sorgusunun temel yapısı gösterilmektedir. Vektör sorgusunu formüle etmek için Azure portalını, REST API'lerini veya Azure SDK'larını kullanabilirsiniz. 2023-07-01-Preview sürümünden geçiş gerçekleştiriyorsanız hataya neden olan değişiklikler vardır. Ayrıntılar için bkz . En son REST API'ye yükseltme.
2024-07-01, Search POST için kararlı REST API sürümüdür. Bu sürüm şu desteği destekler:
vectorQueries
, vektör araması için yapıdır.vectorQueries.kind
vector
bir vektör dizisi için olarak veya girişin bir dize olup olmadığını ve vektörleştiriciniz olup olmadığını olarak ayarlayıntext
.vectorQueries.vector
sorgudur (metin veya görüntünün vektör gösterimi).vectorQueries.weight
(isteğe bağlı) arama işlemlerine dahil edilen her vektör sorgusunun göreli kalınlığını belirtir (bkz . Vektör ağırlıklama).exhaustive
(isteğe bağlı) alan HNSW için dizinlenmiş olsa bile sorgu zamanında kapsamlı KNN'yi çağırır.
Aşağıdaki örnekte, vektör şu dizenin bir gösterimidir: "Hangi Azure hizmetleri tam metin aramayı destekler". Sorgu alanı hedefler contentVector
. Sorgu sonuçları döndürür k
. Gerçek vektörde 1536 ekleme vardır, bu nedenle okunabilirlik için bu örnekte kırpılır.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"count": true,
"select": "title, content, category",
"vectorQueries": [
{
"kind": "vector",
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"exhaustive": true,
"fields": "contentVector",
"weight": 0.5,
"k": 5
}
]
}
Vektör sorgusu yanıtı
Azure AI Search'te sorgu yanıtları varsayılan olarak tüm retrievable
alanlardan oluşur. Ancak, arama sonuçlarını bir deyimde listeleyerek alanların bir alt kümesiyle retrievable
sınırlamak yaygın bir select
durumdır.
Vektör sorgusunda, yanıttaki alanları vektöre almanız gerekip gerekmediğini dikkatle göz önünde bulundurun. Vektör alanları insan tarafından okunamaz, bu nedenle bir web sayfasına yanıt gönderirken sonucu temsil eden seçici olmayan alanları seçmeniz gerekir. Örneğin, sorgu üzerinde contentVector
yürütülürse, bunun yerine döndürebilirsiniz content
.
Sonuçta vektör alanlarının olmasını istiyorsanız, yanıt yapısının bir örneğini aşağıda bulabilirsiniz. contentVector
, kısa bir süre için burada kırpılmış bir ekleme dizesi dizisidir. Arama puanı ilgi düzeyini gösterir. Bağlam için diğer nonvector alanları dahil edilir.
{
"@odata.count": 3,
"value": [
{
"@search.score": 0.80025613,
"title": "Azure Search",
"category": "AI + Machine Learning",
"contentVector": [
-0.0018343845,
0.017952163,
0.0025753193,
...
]
},
{
"@search.score": 0.78856903,
"title": "Azure Application Insights",
"category": "Management + Governance",
"contentVector": [
-0.016821077,
0.0037742127,
0.016136652,
...
]
},
{
"@search.score": 0.78650564,
"title": "Azure Media Services",
"category": "Media",
"contentVector": [
-0.025449317,
0.0038463024,
-0.02488436,
...
]
}
]
}
Önemli noktalar:
k
en yakın kaç komşu sonucunun döndürüleceğini (bu örnekte üç) belirler. Algoritma sorgu vektörüne en yakın komşuları bulduğuk
için, düşük benzerliğe sahip belgeler olsa bile vektör sorguları her zaman en azk
belge olduğunu varsayarak sonuç döndürürk
.@search.score
, vektör arama algoritması tarafından belirlenir.Arama sonuçlarındaki alanlar tüm
retrievable
alanlar veya yanselect
tümcedeki alanlardır. Vektör sorgu yürütmesi sırasında, eşleşme yalnızca vektör verilerinde yapılır. Ancak, yanıt bir dizindeki herhangiretrievable
bir alanı içerebilir. Vektör alanı sonucunun kodunu çözme olanağı olmadığından, nonvector metin alanlarının eklenmesi, insan tarafından okunabilen değerleri için yararlıdır.
Birden çok vektör alanı
"vectorQueries.fields" özelliğini birden çok vektör alanına ayarlayabilirsiniz. Vektör sorgusu, listede sağladığınız fields
her vektör alanında yürütülür. Birden çok vektör alanını sorgularken, her birinin aynı ekleme modelinden eklemeler içerdiğinden ve sorgunun aynı ekleme modelinden de oluşturulduğundan emin olun.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"count": true,
"select": "title, content, category",
"vectorQueries": [
{
"kind": "vector",
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"exhaustive": true,
"fields": "contentVector, titleVector",
"k": 5
}
]
}
Birden çok vektör sorgusu
Çok sorgulu vektör araması, arama dizininizdeki birden çok vektör alanında birden çok sorgu gönderir. Bu sorgu isteğinin yaygın bir örneği, aynı modelin görüntü ve metin içeriğini vektörleştirebildiği çok modüllü vektör araması için CLIP gibi modellerin kullanılmasıdır.
Aşağıdaki sorgu örneği hem hem myTextVector
de myImageVector
içinde benzerlik arar, ancak her biri paralel olarak yürütülen sırasıyla iki farklı sorgu ekleme işlemi gönderir. Bu sorgu, Karşılıklı Rank Fusion (RRF) kullanılarak puanlanan bir sonuç üretir.
vectorQueries
bir dizi vektör sorgusu sağlar.vector
arama dizinindeki görüntü vektörlerini ve metin vektörlerini içerir. Her örnek ayrı bir sorgudur.fields
hedeflenen vektör alanını belirtir.k
sonuçlara dahil etmek için en yakın komşu eşleşmelerinin sayısıdır.
{
"count": true,
"select": "title, content, category",
"vectorQueries": [
{
"kind": "vector",
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "myimagevector",
"k": 5
},
{
"kind": "vector"
"vector": [
-0.002222222,
0.018708462,
-0.013770515,
. . .
],
"fields": "mytextvector",
"k": 5
}
]
}
Arama dizininizin görüntü dosyası için bir alan içerdiği varsayılarak arama sonuçları metin ve görüntülerin bir bileşimini içerir (arama dizini görüntüleri depolamaz).
Tümleşik vektörleştirme ile sorgulama
Bu bölümde, bir metin veya görüntü sorgusunu vektöre dönüştüren tümleşik vektörleştirmeyi çağıran bir vektör sorgusu gösterilir. Bu özellik için kararlı 2024-07-01 REST API, Arama Gezgini veya daha yeni Azure SDK paketlerini öneririz.
Önkoşul, vektörleştiricinin yapılandırıldığı ve bir vektör alanına atandığı bir arama dizinidir. Vektörleştirici, sorgu zamanında kullanılan bir ekleme modeline bağlantı bilgileri sağlar.
Arama Gezgini, sorgu zamanında tümleşik vektörleştirmeyi destekler. Dizininiz vektör alanları içeriyorsa ve vektörleştiricisi varsa, yerleşik metinden vektöre dönüştürmeyi kullanabilirsiniz.
Azure hesabınızla Azure portalında oturum açın ve Azure yapay zeka Arama hizmeti gidin.
Sol menüden Arama yönetimi>Dizinleri'ni genişletin ve dizininizi seçin. Arama Gezgini, dizin sayfasındaki ilk sekmedir.
Vektörleştiriciniz olduğunu doğrulamak için Vektör profillerini denetleyin.
Arama Gezgini'nde, sorgu görünümünde varsayılan arama çubuğuna bir metin dizesi girebilirsiniz. Yerleşik vektörleştiricisi dizenizi bir vektöre dönüştürür, aramayı gerçekleştirir ve sonuçları döndürür.
Alternatif olarak, sorguyu görüntülemek veya değiştirmek için JSON görünümünü görüntüle'yi>seçebilirsiniz. Vektörler varsa, Arama Gezgini otomatik olarak bir vektör sorgusu ayarlar. Aramada ve yanıtta kullanılan alanları seçmek, filtreler eklemek veya karma gibi daha gelişmiş sorgular oluşturmak için JSON görünümünü kullanabilirsiniz. Bu bölümün REST API sekmesinde bir JSON örneği sağlanır.
Vektör sorgusu yanıtında dereceli sonuç sayısı
Vektör sorgusu, sonuçlarda k
kaç eşleşme döndürüleceğini belirleyen parametresini belirtir. Arama altyapısı her zaman eşleşme sayısını döndürür k
. Dizindeki belge sayısından büyükse k
, belge sayısı döndürülebileceklerin üst sınırını belirler.
Tam metin araması hakkında bilgi sahibiyseniz, dizinde terim veya tümcecik yoksa sıfır sonuç beklemeniz gerekir. Ancak vektör aramasında, arama işlemi en yakın komşuları tanımlar ve en yakın komşular bu kadar benzer olmasa bile her zaman sonuç döndürür k
. Bu nedenle, özellikle sınırları ayarlamak için istemleri kullanmıyorsanız, önemli olmayan veya konu dışı sorgular için sonuçlar alabilirsiniz. Daha az ilgili sonuçlar daha kötü bir benzerlik puanına sahiptir, ancak daha yakın bir şey yoksa yine de "en yakın" vektörlerdir. Bu nedenle, anlamlı sonuç içermeyen bir yanıt yine de sonuç döndürebilir k
, ancak her sonucun benzerlik puanı düşük olur.
Tam metin araması içeren karma bir yaklaşım bu sorunu hafifletebilir. Başka bir azaltma, arama puanı üzerinde en düşük eşiği ayarlamaktır, ancak yalnızca sorgu tek bir vektör sorgusuysa. Karma sorgular en düşük eşiklere uygun değildir çünkü RRF aralıkları çok daha küçük ve geçicidir.
Sonuç sayısını etkileyen sorgu parametreleri şunlardır:
"k": n
yalnızca vektör sorguları için sonuçlar"top": n
"search" parametresi içeren karma sorguların sonuçları
Hem "k" hem de "top" isteğe bağlıdır. Belirtilmemişse, yanıttaki varsayılan sonuç sayısı 50'dir. "top" ve "skip" değerlerini daha fazla sonuçla sayfaya ayarlayabilir veya varsayılanı değiştirebilirsiniz.
Vektör sorgusunda kullanılan derecelendirme algoritmaları
Sonuçların derecelendirmesi aşağıdakilerden biri tarafından hesaplanır:
- Benzerlik ölçümü
- Birden çok arama sonucu kümesi varsa karşılıklı Rank Fusion (RRF).
Benzerlik ölçümü
Yalnızca vektör sorgusu için dizin vectorSearch
bölümünde belirtilen benzerlik ölçümü. Geçerli değerler: cosine
, euclidean
ve dotProduct
.
Azure OpenAI ekleme modellerinde kosinüs benzerliği kullanılır. Bu nedenle Azure OpenAI ekleme modellerini cosine
kullanıyorsanız önerilen ölçümdür. Desteklenen diğer derecelendirme ölçümleri şunlardır euclidean
: ve dotProduct
.
RRF kullanma
Sorgu birden çok vektör alanını hedeflediyse, birden çok vektör sorgusunu paralel olarak çalıştırıyorsa veya sorgu, anlamsal derecelendirmeyle veya sıralama olmadan vektör ve tam metin aramasının karmasıysa birden çok küme oluşturulur.
Sorgu yürütme sırasında vektör sorgusu yalnızca bir iç vektör dizinini hedefleyebilir. Bu nedenle, birden çok vektör alanı ve birden çok vektör sorgusu için arama altyapısı, her alanın ilgili vektör dizinlerini hedefleyen birden çok sorgu oluşturur. Çıkış, her sorgu için RRF kullanılarak birleştirilmiş sıralanmış sonuçlar kümesidir. Daha fazla bilgi için bkz . Reciprocal Rank Fusion (RRF) kullanarak ilgi puanı.
Vektör ağırlıklama
Arama işlemlerine dahil edilen her vektör sorgusunun göreli kalınlığını belirtmek için bir weight
sorgu parametresi ekleyin. Bu değer, aynı istekte veya karma sorgunun vektör bölümünden iki veya daha fazla vektör sorgusu tarafından oluşturulan birden çok derecelendirme listesinin sonuçları birleştirildiğinde kullanılır.
Varsayılan değer 1,0'dır ve değer sıfırdan büyük pozitif bir sayı olmalıdır.
Ağırlıklar, her belgenin karşılıklı derece füzyon puanlarını hesaplarken kullanılır. Hesaplama, ilgili sonuç kümesindeki belgenin weight
derecelendirme puanıyla değerin çarpanıdır.
Aşağıdaki örnek, iki vektör sorgu dizesi ve bir metin dizesi içeren karma sorgudur. Ağırlıklar vektör sorgularına atanır. İlk sorgu 0,5 veya ağırlığın yarısıdır ve istekteki önemini azaltır. İkinci vektör sorgusu iki kat daha önemlidir.
POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-07-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [1.0, 2.0, 3.0],
"fields": "my_first_vector_field",
"k": 10,
"weight": 0.5
},
{
"kind": "vector",
"vector": [4.0, 5.0, 6.0],
"fields": "my_second_vector_field",
"k": 10,
"weight": 2.0
}
],
"search": "hello world"
}
Vektör ağırlıklama yalnızca vektörler için geçerlidir. Bu örnekteki metin sorgusu ("merhaba dünya") 1,0 veya nötr ağırlıkta örtük bir ağırlığa sahiptir. Ancak, karma sorguda maxTextRecallSize ayarını yaparak metin alanlarının önemini artırabilir veya azaltabilirsiniz.
Düşük puanlama sonuçlarını dışlamak için eşikleri ayarlama (önizleme)
En yakın komşu araması her zaman istenen k
komşuları döndürdüğünden, arama sonuçlarında sayı gereksinimini karşılamanın bir parçası olarak birden çok düşük puan eşleşmesi k
elde etmek mümkündür. Düşük puanlı arama sonucunu dışlamak için, sonuçları en düşük puana göre filtreleyen bir threshold
sorgu parametresi ekleyebilirsiniz. Filtreleme, farklı geri çağırma kümelerinden sonuçların fümelenmesinden önce gerçekleşir.
Bu parametre hala önizleme aşamasındadır. REST API sürüm 2024-05-01-preview önizlemesini öneririz.
Bu örnekte, 0,8'in altındaki tüm eşleşmeler, sonuç sayısı altına k
düşse bile vektör arama sonuçlarından dışlanır.
POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-05-01-preview
Content-Type: application/json
api-key: [admin key]
{
"vectorQueries": [
{
"kind": "vector",
"vector": [1.0, 2.0, 3.0],
"fields": "my-cosine-field",
"threshold": {
"kind": "vectorSimilarity",
"value": 0.8
}
}
]
}
Karma arama için MaxTextSizeRecall (önizleme)
Vektör sorguları genellikle nonvector alanları içeren karma yapılarda kullanılır. BM25 dereceli sonuçların karma sorgu sonuçlarında gösterilenden fazla veya altta olduğunu fark ederseniz, karma derecelendirme için sağlanan BM25 dereceli sonuçları artırmayı veya azaltmayı ayarlayabilirsinizmaxTextRecallSize
.
Bu özelliği yalnızca hem "search" hem de "vectorQueries" bileşenlerini içeren karma isteklerde ayarlayabilirsiniz.
Bu parametre hala önizleme aşamasındadır. REST API sürüm 2024-05-01-preview önizlemesini öneririz.
Daha fazla bilgi için bkz . set maxTextRecallSize - Karma sorgu oluşturma.
Sonraki adımlar
Sonraki adım olarak Python, C# veya JavaScript'teki vektör sorgu kodu örneklerini gözden geçirin.