Aracılığıyla paylaş


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

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.kindvector 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 contentVectoryü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ğu k için, düşük benzerliğe sahip belgeler olsa bile vektör sorguları her zaman en az k 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 yan select 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 herhangi retrievable 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 myTextVectorde 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.

  1. Azure hesabınızla Azure portalında oturum açın ve Azure yapay zeka Arama hizmeti gidin.

  2. Sol menüden Arama yönetimi>Dizinleri'ni genişletin ve dizininizi seçin. Arama Gezgini, dizin sayfasındaki ilk sekmedir.

  3. Vektörleştiriciniz olduğunu doğrulamak için Vektör profillerini denetleyin.

    Arama dizinindeki vektörleştirici ayarının ekran görüntüsü.

  4. 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 kdüş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.