Aracılığıyla paylaş


Vektör dizini oluşturma

Azure AI Search'te vektör deposu vektör ve nonvector alanlarını tanımlayan bir dizin şemasına, ekleme alanını oluşturup sıkıştıran algoritmalar için vektör yapılandırmasına ve sorgu isteklerinde kullanılan vektör alanı tanımlarındaki ayarlara sahiptir.

Dizin Oluştur veya Güncelleştir API'si vektör deposunu oluşturur. Vektör verilerini dizine almak için şu adımları izleyin:

  • Vektör algoritmaları ve isteğe bağlı sıkıştırma ile şema tanımlama
  • Vektör alanı tanımları ekleme
  • Önceden belirlenmiş verileri ayrı bir adım olarak yükleyin veya dizin oluşturma sırasında veri öbekleme ve kodlama için tümleşik vektörleştirmeyi kullanın

Bu makalede iş akışı açıklanır ve çizim için REST kullanılır. Temel iş akışını anladıktan sonra, test ve üretim kodunda bu özellikleri kullanma yönergeleri için azure-search-vector-samples deposundaki Azure SDK kod örnekleriyle devam edin.

İpucu

Azure portalını kullanarak vektör dizini oluşturun ve tümleşik veri öbeklemesi ile vektörleştirmeyi deneyin.

Önkoşullar

  • Azure AI Search, herhangi bir bölgede ve herhangi bir katmanda. Ocak 2019'den önce oluşturulan hizmetlerde vektör dizini oluşturabilen küçük bir alt küme vardır. Bu sizin için geçerliyse vektörleri kullanmak için yeni bir hizmet oluşturun. Tümleşik vektörleştirme (Azure AI'yi çağıran beceri kümeleri) içeren iş yüklerinin dizine alınması için Azure AI Search'in Azure OpenAI veya Azure AI hizmetleriyle aynı bölgede olması gerekir.

  • Dizine yüklemek için önceden var olan vektör eklemeleriniz olmalıdır veya dizin oluşturucu işlem hattındaki beceri kümesinden ekleme modellerinin çağrıldığı tümleşik vektörleştirmeyi kullanabilirsiniz.

  • Bu sınırı vektör alanına atayabilmeniz için eklemeleri oluşturmak için kullanılan modelin boyut sınırını bilmeniz gerekir. Tümleşik vektörleştirme, sınırlı sayıda ekleme modeli destekler. Metin ekleme-ada-002 için boyutlar 1536'da sabitlenir. Metin ekleme-3-küçük veya metin ekleme-3-büyük için vektör uzunluğu sırasıyla 1 ile 1536 ve 3072 arasında değişir.

  • Hangi benzerlik ölçümünü kullanacağınızı da bilmeniz gerekir. Azure OpenAI'ye model eklemek için benzerlik kullanılarak cosinehesaplanır.

  • Dizin oluşturma konusunda bilgi sahibi olmanız gerekir. Şemada belge anahtarı için bir alan, aramak veya filtrelemek istediğiniz diğer alanlar ve dizin oluşturma ve sorgular sırasında gereken davranışlar için diğer yapılandırmalar bulunmalıdır.

Belgeleri dizin oluşturma için hazırlama

Dizin oluşturmadan önce vektör ve seçici olmayan veri alanlarını içeren bir belge yükü oluşturun. Belge yapısı dizin şemasına uygun olmalıdır.

Belgelerinizi emin olun:

  1. Her belgeyi benzersiz olarak tanımlayan bir alan veya meta veri özelliği sağlayın. Tüm arama dizinleri bir belge anahtarı gerektirir. Belge anahtarı gereksinimlerini karşılamak için, kaynak belgenin dizinde benzersiz olarak tanımlayabilen bir alanı veya özelliği olmalıdır. Bu kaynak alan, türündeki Edm.String ve key=true arama dizinindeki bir dizin alanına eşlenmelidir.

  2. Kaynak alanlarda vektör verileri (tek duyarlıklı kayan nokta sayıları dizisi) sağlayın.

    Vektör alanları, alan üst düzey bir alan (iç içe veya karmaşık bir türün parçası değil) olduğu, alan başına bir ekleme olan modellerin katıştırılmasıyla oluşturulan bir dizi içerir. En basit tümleştirme için Azure OpenAI'de metin belgeleri için metin ekleme-3 modeli veya görüntüler için Görüntü Alma REST API'si gibi ekleme modellerini öneririz.

    Dizin oluşturuculara ve beceri kümelerine bağımlılık alabiliyorsanız, dizin oluşturma sırasında görüntüleri ve metin içeriğini kodlayan tümleşik vektörleştirmeyi kullanmayı göz önünde bulundurun. Alan tanımlarınız vektör alanlarına yöneliktir, ancak gelen kaynak veriler, dizin oluşturma sırasında vektör dizilerine dönüştürülen metin veya görüntüler olabilir.

  3. Sorgu yanıtı için ve aynı istekte tam metin araması veya anlam derecelendirmesi içeren karma sorgu senaryoları için insan tarafından okunabilir içerik içeren diğer alanlar sağlayın.

Arama dizininiz, desteklemek istediğiniz tüm sorgu senaryoları için alanlar ve içerik içermelidir. Ürün adlarını, sürümlerini, meta verilerini veya adreslerini aramak veya filtrelemek istediğinizi varsayalım. Bu durumda benzerlik araması özellikle yararlı olmaz. Anahtar sözcük arama, coğrafi arama veya filtreler daha iyi bir seçim olacaktır. Vektör ve nonvector verilerinden oluşan kapsamlı bir alan koleksiyonu içeren arama dizini, sorgu oluşturma ve yanıt oluşturma için maksimum esneklik sağlar.

Vektör ve seçici olmayan alanları içeren belge yüküne kısa bir örnek, bu makalenin yük vektör verileri bölümünde verilmiştir.

Vektör arama yapılandırması ekleme

Vektör yapılandırması, vektör düğümleri arasında "en yakın komşu" bilgileri oluşturmak için dizin oluşturma sırasında kullanılan parametreleri belirtir:

  • Hiyerarşik Gezinilebilir Küçük Dünya (HNSW)
  • Kapsamlı KNN

Bir alanda HNSW'yi seçerseniz sorgu zamanında kapsamlı KNN'yi seçebilirsiniz. Ancak diğer yön çalışmıyor: Kapsamlı'yı seçerseniz, yaklaşık aramayı etkinleştiren ek veri yapıları mevcut olmadığından daha sonra HNSW araması isteyemezsiniz.

İsteğe bağlı olarak, vektör yapılandırması vektör boyutunu küçültmeye yönelik niceleme yöntemlerini de belirtir:

  • Sayıl
  • İkili (yalnızca 2024-07-01 ve daha yeni Azure SDK paketlerinde kullanılabilir)

En son sürüme geçme yönergeleri için bkz . REST API'yi yükseltme.

2024-07-01 genel kullanıma sunulmuştur. Aşağıdakilere sahip bir vektör yapılandırmasını destekler:

  • vectorSearch.algorithms HNSW ve kapsamlı KNN desteği.
  • vectorSearch.compressions skaler ve ikili niceleme, fazla örnekleme ve özgün vektörlerle yeniden boyutlandırmayı destekler.
  • vectorSearch.profiles algoritma ve sıkıştırma yapılandırmalarının birden çok bileşimini sağlar.

İçeriğinizi vektörleştirmeye yönelik bir stratejiniz olduğundan emin olun. Yerleşik kodlama için tümleşik vektörleştirme ve sorgu zamanı vektörleştiricileri öneririz.

  1. Dizini oluşturmak için Dizin Oluştur veya Güncelleştir API'sini kullanın.

  2. Dizinde, ekleme alanını oluşturmak için kullanılan arama algoritmalarını belirten bir vectorSearch bölüm ekleyin.

     "vectorSearch": {
         "compressions": [
             {
                 "name": "scalar-quantization",
                 "kind": "scalarQuantization",
                 "rerankWithOriginalVectors": true,
                 "defaultOversampling": 10.0,
                     "scalarQuantizationParameters": {
                         "quantizedDataType": "int8"
                     }
             },
             {
                 "name": "binary-quantization",
                 "kind": "binaryQuantization",
                 "rerankWithOriginalVectors": true,
                 "defaultOversampling": 10.0,
             }
         ],
         "algorithms": [
             {
                 "name": "hnsw-1",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 4,
                     "efConstruction": 400,
                     "efSearch": 500,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "hnsw-2",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 8,
                     "efConstruction": 800,
                     "efSearch": 800,
                     "metric": "hamming"
                 }
             },
             {
                 "name": "eknn",
                 "kind": "exhaustiveKnn",
                 "exhaustiveKnnParameters": {
                     "metric": "euclidean"
                 }
             }
    
         ],
         "profiles": [
           {
             "name": "vector-profile-hnsw-scalar",
             "compression": "scalar-quantization",
             "algorithm": "hnsw-1"
           }
         ]
     }
    

    Önemli noktalar:

    • Sıkıştırma, algoritma ve profil yapılandırmalarının adları dizin içindeki türü için benzersiz olmalıdır.

    • vectorSearch.compressions.kindveya binaryQuantizationolabilirscalarQuantization.

    • vectorSearch.compressions.rerankWithOriginalVectors özgün, sıkıştırılmamış vektörleri kullanarak benzerliği yeniden hesaplar ve ilk arama sorgusu tarafından döndürülen en iyi sonuçları yeniden hesaplar. Sıkıştırılmamış vektörler, false olsa stored bile arama dizininde bulunur. Bu özellik isteğe bağlıdır. Varsayılanı doğrudur

    • vectorSearch.compressions.defaultOversampling , bilgilerdeki azalmayı nicelemeden dengelemek için daha geniş bir olası sonuç kümesini dikkate alır. Olası sonuçlara yönelik formül, sorgudaki formülden ve bir fazla örnekleme çarpanından oluşur k . Örneğin, sorgu 5'ini k belirtiyorsa ve fazla örnekleme 20 ise, sorgu bu amaç için özgün sıkıştırılmamış vektörü kullanarak yeniden boyutlandırmada kullanılmak üzere etkin bir şekilde 100 belge istemektedir. Yalnızca en üstteki k yeniden kaydedilen sonuçlar döndürülür. Bu özellik isteğe bağlıdır. Varsayılan değer 4'dür.

    • vectorSearch.compressions.scalarQuantizationParameters.quantizedDataType olarak ayarlanmalıdır int8. Şu anda desteklenen tek temel veri türü budur. Bu özellik isteğe bağlıdır. Varsayılan int8 değeridir.

    • vectorSearch.algorithms.kind "hnsw" veya "exhaustiveKnn"şeklindedir. Bunlar, dizin oluşturma sırasında vektör içeriğini düzenlemek için kullanılan En Yakın Yaklaşık Komşular (ANN) algoritmalarıdır.

    • vectorSearch.algorithms.m çift yönlü bağlantı sayısıdır. Varsayılan değer 4'dür. Aralık 4 ile 10 arasındadır. Düşük değerler sonuçlarda daha az kirlilik döndürmelidir.

    • vectorSearch.algorithms.efConstruction dizin oluşturma sırasında kullanılan en yakın komşu sayısıdır. Varsayılan değer 400'dür. Aralık 100 ile 1.000 arasındadır.

    • "vectorSearch.algorithms.fSearch arama sırasında kullanılan en yakın komşu sayısıdır. Varsayılan değer 500'dür. Aralık 100 ile 1.000 arasındadır.

    • vectorSearch.algorithms.metric Azure OpenAI kullanıyorsanız "kosinüs" olmalıdır, aksi takdirde kullandığınız ekleme modeliyle ilişkili benzerlik ölçümünü kullanın. Desteklenen değerler , cosinedotProduct, euclidean, ( hamming ikili verilerin dizinini oluşturmak için kullanılır).

    • vectorSearch.profiles daha zengin tanımları kabul etmek için bir soyutlama katmanı ekleyin. Bir profil içinde vectorSearchtanımlanır ve her vektör alanında ada göre başvurulur. Sıkıştırma ve algoritma yapılandırmalarının bir birleşimidir. Bu, vektör alanına atadığınız özelliktir ve alanların algoritmasını ve sıkıştırmasını belirler.

Alanlar koleksiyonuna vektör alanı ekleme

Alanlar koleksiyonu belge anahtarı için bir alan, vektör alanları ve karma arama senaryoları için ihtiyacınız olan diğer alanları içermelidir.

Vektör alanları, veri türleri, vektörlerin çıktısını almak için kullanılan ekleme modelini temel alan bir dimensions özellik ve bir vektör profili ile karakterize edilir.

2024-07-01 genel kullanıma sunulmuştur.

  1. Dizini oluşturmak için Dizin Oluştur veya Güncelleştir'i kullanın.

  2. Aşağıdaki özniteliklere sahip bir vektör alanı tanımlayın. Alan başına oluşturulan bir ekleme depolayabilirsiniz. Her vektör alanı için:

    • type bir vektör veri türü olmalıdır. Collection(Edm.Single) , modelleri eklemek için en yaygın olanıdır.
    • dimensions ekleme modeli tarafından oluşturulan boyut sayısıdır. Text-embedding-ada-002 için 1536 olarak düzeltildi. Metin ekleme-3 model serisi için bir değer aralığı vardır. Vektör oluşturmak için tümleşik vektörleştirme ve ekleme becerisi kullanıyorsanız, bu özelliğin ekleme becerisi tarafından kullanılan boyut değerine ayarlandığından emin olun.
    • vectorSearchProfile , dizinin başka bir yerinde tanımlanan bir profilin adıdır.
    • searchable doğru olmalıdır.
    • retrievable true veya false olabilir. True, ham vektörleri (bunların 1536'sı) düz metin olarak döndürür ve depolama alanı kullanır. Aşağı akış uygulamasına vektör sonucu geçiriyorsanız true olarak ayarlayın.
    • stored true veya false olabilir. Vektörlerin ek bir kopyasının alma için depolanıp depolanmadığını belirler. Daha fazla bilgi için bkz . Vektör boyutunu küçültme.
    • filterable, facetableyanlış sortable olmalıdır.
  3. Vektör sorgusunda ön filtrelemeyi veya postfiltering'içağırmak istiyorsanız, koleksiyona true olarak ayarlanmış "başlık" filterable gibi filtrelenebilir nonvector alanları ekleyin.

  4. Dizine eklediğiniz metin içeriğinin maddesini ve yapısını tanımlayan diğer alanları ekleyin. En azından bir belge anahtarına ihtiyacınız vardır.

    Sorguda veya yanıtında yararlı olan alanlar da eklemeniz gerekir. Aşağıdaki örnekte, başlık ve içerik için vektör alanları ("titleVector", "contentVector") vektörlerle eşdeğerdir. Ayrıca, bir arama sonucunda sıralama, filtreleme ve okuma için yararlı olan eşdeğer metin içeriği ("başlık", "içerik") için alanlar sağlar.

    Aşağıdaki örnekte alanlar koleksiyonu gösterilmektedir:

    PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2024-07-01&allowIndexDowntime=true
    Content-Type: application/json
    api-key: {{admin-api-key}}
    {
        "name": "{{index-name}}",
        "fields": [
            {
                "name": "id",
                "type": "Edm.String",
                "key": true,
                "filterable": true
            },
            {
                "name": "title",
                "type": "Edm.String",
                "searchable": true,
                "filterable": true,
                "sortable": true,
                "retrievable": true
            },
            {
                "name": "titleVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "stored": true,
                "dimensions": 1536,
                "vectorSearchProfile": "vector-profile-1"
            },
            {
                "name": "content",
                "type": "Edm.String",
                "searchable": true,
                "retrievable": true
            },
            {
                "name": "contentVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": false,
                "stored": false,
                "dimensions": 1536,
                "vectorSearchProfile": "vector-profile-1"
            }
        ],
        "vectorSearch": {
            "algorithms": [
                {
                    "name": "hnsw-1",
                    "kind": "hnsw",
                    "hnswParameters": {
                        "m": 4,
                        "efConstruction": 400,
                        "efSearch": 500,
                        "metric": "cosine"
                    }
                }
            ],
            "profiles": [
                {
                    "name": "vector-profile-1",
                    "algorithm": "hnsw-1"
                }
            ]
        }
    }
    

Dizin oluşturma için vektör verilerini yükleme

Dizin oluşturma için sağladığınız içerik dizin şemasına uygun olmalı ve belge anahtarı için benzersiz bir dize değeri içermelidir. Prevektörleştirilmiş veriler, bir veya daha fazla vektör alanına yüklenir ve bu alan, seçici olmayan içerik içeren diğer alanlarla birlikte bulunabilir.

Veri alımı için gönderme veya çekme yöntemleri kullanabilirsiniz.

Vektör ve nonvector verilerini bir dizine yüklemek için Belgeler - Dizin'i kullanın. Dizin oluşturma için anında iletme API'leri tüm kararlı ve önizleme sürümlerinde aynıdır. Belgeleri yüklemek için aşağıdaki API'lerden birini kullanın:

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/index?api-version=2024-07-01

{
    "value": [
        {
            "id": "1",
            "title": "Azure App Service",
            "content": "Azure App Service is a fully managed platform for building, deploying, and scaling web apps. You can host web apps, mobile app backends, and RESTful APIs. It supports a variety of programming languages and frameworks, such as .NET, Java, Node.js, Python, and PHP. The service offers built-in auto-scaling and load balancing capabilities. It also provides integration with other Azure services, such as Azure DevOps, GitHub, and Bitbucket.",
            "category": "Web",
            "titleVector": [
                -0.02250031754374504,
                 . . . 
                        ],
            "contentVector": [
                -0.024740582332015038,
                 . . .
            ],
            "@search.action": "upload"
        },
        {
            "id": "2",
            "title": "Azure Functions",
            "content": "Azure Functions is a serverless compute service that enables you to run code on-demand without having to manage infrastructure. It allows you to build and deploy event-driven applications that automatically scale with your workload. Functions support various languages, including C#, F#, Node.js, Python, and Java. It offers a variety of triggers and bindings to integrate with other Azure services and external services. You only pay for the compute time you consume.",
            "category": "Compute",
            "titleVector": [
                -0.020159931853413582,
                . . .
            ],
            "contentVector": [
                -0.02780858241021633,
                 . . .
            ],
            "@search.action": "upload"
        }
        . . .
    ]
}

Dizininizde vektör içeriği olup olmadığını denetleyin

Doğrulama amacıyla, Azure portalında Arama Gezgini'ni veya REST API çağrısını kullanarak dizini sorgulayabilirsiniz. Azure AI Search vektörleri insan tarafından okunabilen metne dönüştüremediğinden, aynı belgedeki eşleşmenin kanıtını sağlayan alanları döndürmeyi deneyin. Örneğin, vektör sorgusu "titleVector" alanını hedefliyorsa, arama sonuçları için "title" öğesini seçebilirsiniz.

Alanların sonuçlara eklenmesi için "alınabilir" olarak ilişkilendirilmesi gerekir.

  • Dizin boyutunun tamamını ve vektör dizini boyutunu görüntülemek için Arama yönetimi>Dizinleri'ndeki dizinleri gözden geçirin. Pozitif vektör dizin boyutu vektörlerin mevcut olduğunu gösterir.

  • Bir dizini sorgulamak için Arama Gezgini'ni kullanın. Arama Gezgini'nin iki görünümü vardır: Sorgu görünümü (varsayılan) ve JSON görünümü.

    • Sorgu seçeneklerini>ayarlayın Daha okunabilir sonuçlar için arama sonuçlarında vektör değerlerini gizleyin.

    • Vektör sorguları için JSON görünümünü kullanın. Yürütmek istediğiniz vektör sorgusunun JSON tanımını yapıştırabilir veya dizininizde vektörleştirici ataması varsa yerleşik metinden vektöre veya görüntüden vektöre dönüştürmeyi kullanabilirsiniz. Resim arama hakkında daha fazla bilgi için bkz . Hızlı Başlangıç: Arama Gezgini'nde resim arama.

    • Dizinin vektörler içerdiğine ilişkin hızlı bir onay için varsayılan Sorgu görünümünü kullanın. Sorgu görünümü tam metin araması içindir. Vektör sorguları için kullanamazsınız ancak içeriği denetlemek için boş bir arama (search=*) gönderebilirsiniz. Vektör alanları da dahil olmak üzere tüm alanların içeriği düz metin olarak döndürülür.

    • Daha fazla ayrıntı için bkz . Vektör sorgusu oluşturma.

Vektör depolarını güncelleştirme

Vektör depolarını güncelleştirmek için şemayı değiştirin ve gerekirse belgeleri yeni alanları dolduracak şekilde yeniden yükleyin. Şema güncelleştirmeleri için API'ler arasında Oluşturma veya Güncelleştirme Dizini (REST), .NET için Azure SDK'da CreateOrUpdateIndex , Python için Azure SDK'da create_or_update_index ve diğer Azure SDK'larında benzer yöntemler bulunur.

Bir dizini güncelleştirmeye yönelik standart kılavuz, Dizini güncelleştirme veya yeniden derleme bölümünde ele alınmıştır.

Önemli noktalar şunlardır:

  • Mevcut alanların güncelleştirilip silinmesi için genellikle bırakma ve yeniden oluşturma gerekir.

  • Ancak, var olan bir şemayı aşağıdaki değişikliklerle güncelleştirebilir ve yeniden derlemeye gerek kalmaz:

    • Alan koleksiyonuna yeni alanlar ekleyin.
    • Yeni alanlara atanan ancak vektörleştirilmemiş olan mevcut alanlara atanmamış yeni vektör yapılandırmaları ekleyin.
    • Var olan bir alanda "alınabilir" değerini (değerler true veya false) değiştirin. Vektör alanları aranabilir ve alınabilir olmalıdır, ancak bırakma ve yeniden oluşturmanın mümkün olmadığı durumlarda vektör alanına erişimi devre dışı bırakmak istiyorsanız, alınabilir değerini false olarak ayarlayabilirsiniz.

Sonraki adımlar

Sonraki adım olarak, arama dizinindeki Sorgu vektör verilerini öneririz.

azure-search-vector deposundaki kod örnekleri şema tanımı, vektörleştirme, dizin oluşturma ve sorgular içeren uçtan uca iş akışlarını gösterir.

Python, C# ve JavaScript için tanıtım kodu vardır.