Skaler veya ikili niceleme kullanarak vektörleri sıkıştırma

Not

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Azure Yapay Zeka Arama, arama dizinindeki vektörlerin boyutunu küçültmek için skaler ve ikili nicelemesini destekler. Float16 ve float32 eklemeleri için hem belleği hem de disk depolama alanını azalttığı için niceleme önerilir. Kayıplı sıkıştırmanın etkilerini dengelemek için, fazla örnekleme ve yeniden puanlama ekleyebilirsiniz.

Yerleşik niceleme kullanmak için şu adımları izleyin:

  • Vektör alanları ve vectorSearch dizin yapılandırmasıyla başlayın
  • vectorSearch.compressions ekle
  • scalarQuantization Veya binaryQuantization yapılandırması ekleme ve buna bir ad verme
  • Kayıplı dizin oluşturmanın etkilerini azaltmak için isteğe bağlı özellikleri ayarlama
  • Adlandırılmış yapılandırmayı kullanan yeni bir vektör profili oluşturma
  • Yeni vektör profiline sahip yeni bir vektör alanı oluşturma
  • Dizini, tanımladığınız yapılandırmayla dizin oluşturma sırasında ölçülen float32 veya float16 verileriyle yükleyin
  • İsteğe bağlı olarak, oversampling parametresini kullanarak nicelenmiş verileri sorgular . Vektör alanı tanımında fazla örnekleme belirtmiyorsa, sorgu zamanında ekleyebilirsiniz.

Tavsiye

Azure AI Arama: Yeni Sıkıştırma Teknikleri ile Vektör Maliyetlerini 92,5% Kadar Azaltın , sıkıştırma stratejilerini karşılaştırır ve depolama ve maliyetlerden tasarrufları açıklar. Ayrıca normalleştirilmiş indirimli kümülatif kazanç (NDCG) temelinde ilgiyi ölçmeye yönelik ölçümler de içerir ve arama kalitesinden ödün vermeden verilerinizi sıkıştırabileceğinizi gösterir.

Önkoşullar

  • Hiyerarşik Gezinilebilir Küçük Dünyalar (HNSW) veya kapsamlı K-En Yakın Komşu (KNN) algoritmasını ve yeni bir vektör profilini belirten bir yapılandırmayla arama vectorSearch.

Desteklenen niceleme teknikleri

Niceleme, kayan tür vektörleri alan vektör alanlarına uygulanır. Bu makaledeki örneklerde, alanın veri türü gelen float32 eklemelerine yöneliktir Collection(Edm.Single) , ancak float16 da desteklenir. Vektörler sıkıştırma yapılandırılmış bir alana alındığında, altyapı bellekteki ve diskteki vektör verilerinin ayak izini azaltmak için niceleme gerçekleştirir.

İki tür niceleme desteklenir:

  • Skaler niceleme, kayan değerleri daha dar veri türlerine sıkıştırır. AI Search şu anda 8 bit olan int8'i destekleyerek vektör dizini boyutunu dört kat azaltıyor.

  • İkili niceleme, float değerleri 1 bitlik yer kaplayan ikili bitlere dönüştürür. Bu, vektör dizini boyutunun 28 kata kadar azalmasına neden olur.

Not

Ücretsiz hizmetler miktar belirlemeyi desteklese de, sınırlı depolama kotası nedeniyle tam depolama tasarrufunu göstermez.

Skaler niceleme, her vektör ekleme içindeki her sayının çözünürlüğünü azaltır. Her sayıyı 16 bit veya 32 bit kayan noktalı sayı olarak tanımlamak yerine 8 bit tamsayı kullanır. Bir sayı aralığını (genellikle 99. yüzdebirlik dilim minimum ve maksimum) tanımlar ve bunları sonlu düzey veya bölme sayısına bölerek her bir bölmeye bir tanımlayıcı atar. 8 bit sayısal kuantizasyonda 2^8 veya 256 olası kutucuk bulunmaktadır.

Vektörün her bileşeni, gerçek bir sayıyı en yakın tamsayıya yuvarlamaya benzer bir işlemdeki bu niceleme düzeyleri kümesindeki en yakın temsili değere eşlenir. Nicelenmiş 8 bit vektörde, tanımlayıcı numarası özgün değerin yerine durur. Nicelemeden sonra her vektör, bileşenlerinin ait olduğu bölmeler için bir tanımlayıcı dizisiyle temsil edilir. Bu nicelenmiş vektörler, depolamak için özgün vektöre kıyasla çok daha az bit gerektirir, böylece depolama gereksinimlerini ve bellek ayak izini azaltır.

İkili niceleme, her bileşeni 0 veya 1 olarak tek bir bit olarak temsil ederek yüksek boyutlu vektörleri sıkıştırır. Bu yöntem, bellek ayak izini önemli ölçüde azaltır ve arama ve alma görevleri için çok önemli olan vektör karşılaştırma işlemlerini hızlandırır. Karşılaştırma testleri vektör dizin boyutunda %96'ya kadar azalma gösteriyor.

Özellikle 1024'ten büyük boyutlara sahip eklemeler için etkilidir. Daha küçük boyutlar için ikili nicelemenin kalitesini test etmenizi veya bunun yerine skaler değerleri denemenizi öneririz. Buna ek olarak, sıfır etrafında ortalanmış gömülerle ikili niceleme çok iyi performans göstermektedir. OpenAI, Cohere ve Mistral tarafından sunulan en popüler ekleme modelleri sıfır etrafında ortalanır.

Desteklenen yeniden puanlama teknikleri

Yeniden puanlama, vektör niceleme nedeniyle bilgi kaybını dengelemek için kullanılan isteğe bağlı bir tekniktir. Sorgu yürütme sırasında, ek vektörleri almak için fazla örneklemeyi ve sorgu tarafından bulunan ilk sonuçları yeniden elde etmek için ek bilgileri kullanır. Ek bilgi ya sıkıştırılmamış özgün tam duyarlıklı vektörler ya da yalnızca ikili niceleme içindir – ikili nicelenmiş belge adaylarını sorgu vektörüne karşı kullanarak yeniden değerlendirme seçeneğiniz vardır.

Yalnızca HNSW grafikleri yeniden puanlama olanağı sağlar. Ayrıntılı KNN, yeniden puanlama desteği sunmaz çünkü tanım gereği tüm vektörler sorgu zamanında taranır ve bu da yeniden puanlama ve fazla örneklemenin ilgisiz olmasını sağlar.

Dizinde yeniden puanlama seçenekleri belirtilir, ancak fazla örnekleme sorgu parametresini ekleyerek sorgu zamanında yeniden puanlama çağırabilirsiniz.

Nesne Özellikler
Index Vektör sıkıştırmaları bölümüne ekleyin RescoringOptions . Bu makaledeki örneklerde kullanılır RescoringOptions.
Query oversampling veya RawVectorQuery tanımlarına VectorizableTextQuery ekleyin. Ekleme oversampling , sorgu zamanında yeniden puanlama çağırır.

Not

Son birkaç sürümde, yeniden puanlama parametre adları değişti. Eski bir önizleme API'sini kullanıyorsanız, hataya neden olan değişiklikleri ele almak için yükseltme yönergelerini gözden geçirin.

Yeniden puanlama için genelleştirilmiş işlem:

  1. Vektör sorgusu sıkıştırılmış vektör alanları üzerinde yürütülür.
  2. Vektör sorgusu üst k oversampled adaylarını döndürür.
  3. Fazla örneklenmiş k adayları, skaler niceleme için sıkıştırılmamış özgün vektörler veya ikili nicelemenin nokta ürünü kullanılarak yeniden puanlanır.
  4. Yeniden puanlamadan sonra sonuçlar, önce daha ilgili eşleşmelerin görünmesi için ayarlanır.

Skaler nicelenmiş vektörler için fazla örnekleme, özgün tam duyarlık vektörlerinin kullanılabilirliğini gerektirir. İkili nicelenmiş vektörler için fazla örnekleme, tam duyarlık vektörleri (preserveOriginals) veya ikili vektörünün nokta ürününü (discardOriginals) kullanabilir. Vektör depolamayı iyileştiriyorsanız, yeniden puanlama amacıyla ihtiyacınız varsa tam duyarlık vektörlerini dizinde tuttuğunuzdan emin olun. Daha fazla bilgi için bkz . İsteğe bağlı vektör örneklerini depolamadan kaldırma.

Arama dizinine "sıkıştırmalar" ekleme

Bu bölümde, dizinde bir vectorsSearch.compressions bölümün nasıl belirtileceğini açıklanmaktadır. Aşağıdaki örnekte, vektör alanı içeren bir alan koleksiyonuna sahip kısmi dizin tanımı gösterilmektedir.

Sıkıştırma örneği hem veya scalarQuantizationbinaryQuantizationiçerir. İstediğiniz kadar sıkıştırma yapılandırması belirtebilir ve sonra istediğiniz yapılandırmaları bir vektör profiline atayabilirsiniz.

için vectorSearch.Compressions söz dizimi kararlı ve önizleme REST API'leri arasında değişiklik gösterir; önizleme depolama iyileştirmesi için daha fazla seçenek ve mevcut söz diziminde değişiklikler ekler. İç API eşlemeleri aracılığıyla geriye dönük uyumluluk korunur, ancak kodda 2024-11-01-preview ve sonraki sürümleri hedefleyen daha yeni özellikleri benimsemenizi öneririz.

Sıkıştırma ayarlarını yapılandırmak için Dizin Oluştur veya Dizin Oluştur veya Güncelleştir REST API'sini kullanın.

POST https://[servicename].search.windows.net/indexes?api-version=2026-04-01

{
  "name": "my-index",
  "description": "This is a description of this index",
  "fields": [
    { "name": "Id", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
    { "name": "content", "type": "Edm.String", "retrievable": true, "searchable": true },
    { "name": "vectorContent", "type": "Collection(Edm.Single)", "retrievable": false, "searchable": true, "dimensions": 1536,"vectorSearchProfile": "vector-profile-1"},
  ],
  "vectorSearch": {
    "profiles": [ 
      {
          "name": "vector-profile-1",
          "algorithm": "use-hnsw",
          "compression": "use-scalar"
      }
    ],
    "algorithms": [ 
      {
        "name": "use-hnsw",
        "kind": "hnsw",
        "hnswParameters": { },
        "exhaustiveKnnParameters": null
      }
    ],
    "compressions": [
      {
        "scalarQuantizationParameters": {
          "quantizedDataType": "int8"
        },
        "name": "mySQ8",
        "kind": "scalarQuantization",
        "rescoringOptions": {
            "enableRescoring": true,
            "defaultOversampling": 10,
            "rescoreStorageMethod": "preserveOriginals"
        },
        "truncationDimension": 2
      },
      {
        "name": "myBQC",
        "kind": "binaryQuantization",
        "rescoringOptions": {
            "enableRescoring": true,
            "defaultOversampling": 10,
            "rescoreStorageMethod": "discardOriginals"
        },
        "truncationDimension": 2
      }
    ]
  },
}

Önemli noktalar:

  • kindveya scalarQuantizationolarak ayarlanmalıdırbinaryQuantization.

  • rescoringOptions , nicelemeden önce var olan özgün tam duyarlık vektörlerini kullanarak sorgu sonuçlarını yeniden puanlayarak kayıplı sıkıştırmayı dengelemek için kullanılan bir özellik koleksiyonu. Yeniden puanlamanın çalışması için bu içeriği sağlayan vektör örneğine sahip olmanız gerekir. veya rescoreStorageMethod kullanmanızı discardOriginalsenableRescoringengelleyen ayardefaultOversampling. Vektör depolama hakkında daha fazla bilgi için bkz. İsteğe bağlı vektör örneklerini depolamadan kaldırma.

  • "rescoreStorageMethod": "preserveOriginals" vektör arama sonuçlarını, özgün tam duyarlıklı vektörlerle yeniden puanlamak, arama puanları ve sıralamalarında ayarlamalara yol açarak, yeniden puanlama adımı tarafından belirlenen daha ilgili eşleşmeleri öne çıkarabilir. İkili niceleme için, kaliteyi düşürmeden depolamayı daha da azaltmak için rescoreStorageMethod olarak ayarlayabilirsinizdiscardOriginals. İkili niceleme için özgün vektörler gerekli değildir.

  • 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 sıralanan sonuçlar döndürülür. Bu özellik isteğe bağlıdır. Varsayılan değer 4'dür.

  • quantizedDataType isteğe bağlıdır ve yalnızca skaler niceleme için geçerlidir. Eklediğinizde, olarak ayarlanmış olmalıdır int8. Bu, şu anda skaler niceleme için desteklenen tek ilkel veri türüdür. Varsayılan int8 değeridir.

  • truncationDimension metin ekleme-3 modellerinin doğal özelliklerine dokunarak "bilgileri farklı taneciklerde kodlar ve aşağı akış görevlerinin hesaplama kısıtlamalarına uyum sağlamak için tek bir eklemeye izin verir" (bkz. Matryoshka Temsili Öğrenme). Kısaltılmış boyutları, yeniden değerlendirme seçenekleriyle veya seçenekler olmaksızın kullanabilirsiniz. Bu özelliğin Azure Yapay Zeka Arama'te nasıl uygulandığı hakkında daha fazla bilgi için bkz. MRL sıkıştırmasını kullanarak boyutları kesme.

Vektör arama algoritmasını ekleme

2024-11-01-preview REST API veya sonraki sürümlerinde HNSW veya eKNN algoritmasını kullanabilirsiniz. Kararlı sürüm için yalnızca HNSW kullanın. Yeniden puanlama istiyorsanız HNSW'yi seçmeniz gerekir.

"vectorSearch": {
    "profiles": [ ],
    "algorithms": [
      {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
              "m": 4,
              "efConstruction": 400,
              "efSearch": 500,
              "metric": "cosine"
          }
      }
    ],
     "compressions": [ <see previous section>] 
}

Yeni vektör profili oluşturma ve atama

Yeni bir niceleme yapılandırması kullanmak için yeni bir vektör profili oluşturmanız gerekir. Bellekte sıkıştırılmış dizinler oluşturmak için yeni bir vektör profili oluşturulması gerekir. Yeni profiliniz HNSW kullanıyor.

  1. Aynı dizin tanımında yeni bir vektör profili oluşturun ve bir sıkıştırma özelliği ile bir algoritma ekleyin. Burada, her bir niceleme yaklaşımı için birer profil bulunur.

    "vectorSearch": {
        "profiles": [
           {
              "name": "vector-profile-hnsw-scalar",
              "compression": "use-scalar", 
              "algorithm": "use-hnsw",
              "vectorizer": null
           },
           {
              "name": "vector-profile-hnsw-binary",
              "compression": "use-binary", 
              "algorithm": "use-hnsw",
              "vectorizer": null
           }
         ],
         "algorithms": [  <see previous section> ],
         "compressions": [ <see previous section> ] 
    }
    
  2. Yeni bir vektör alanına vektör profili atayın. Alanın veri türü float32 veya float16'dır.

    Azure Yapay Zeka Arama'te float32 ve float16 türlerinin Varlık Veri Modeli (EDM) eşdeğerleri sırasıyla ve Collection(Edm.Single)şeklindedirCollection(Edm.Half).

    {
       "name": "vectorContent",
       "type": "Collection(Edm.Single)",
       "searchable": true,
       "retrievable": true,
       "dimensions": 1536,
       "vectorSearchProfile": "vector-profile-hnsw-scalar",
    }
    
  3. Çekme modeli dizin oluşturma için dizin oluşturucuları veya gönderme modeli dizin oluşturma API'lerini kullanarak dizini yükleyin.

Fazla örnekleme kullanarak nicelenmiş vektör alanını sorgulama

Aşırı örnekleme ve yeniden puanlama ile ilişkili parametreleri geçersiz kılmak istemiyorsanız, sıkıştırılmış veya nicelenmiş vektör alanı için sorgu söz dizimi sıkıştırılmamış vektör alanlarıyla aynıdır. Sorgu zamanında fazla örnekleme ve yeniden puanlama çağırmak için bir oversampling parametre ekleyebilirsiniz.

İstek için Belge Ara'yı kullanın.

Dizindeki vektör sıkıştırma tanımlaması, kayıplı sıkıştırmanın etkilerini azaltmak için , enableRescoring, ve rescoreStorageMethod ayarlarına sahip olduğunu hatırlayın. Sorgu zamanındaki davranışı değiştirmek için varsayılan değerleri geçersiz kılabilirsiniz. Örneğin, 10.0 ise defaultOversampling sorgu isteğinde başka bir şeyle değiştirebilirsiniz.

Dizinde açıkça yeniden puanlama seçenekleri veya defaultOversampling tanımı olmasa bile oversampling parametresini ayarlayabilirsiniz. Sorgu sırasında oversampling sağlamak, bu sorgunun dizin ayarlarını geçersiz kılar ve sorguyu etkili bir şekilde enableRescoring true olarak yürütür.

POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2026-04-01

{    
    "vectorQueries": [
        {    
            "kind": "vector",    
            "vector": [8, 2, 3, 4, 3, 5, 2, 1],    
            "fields": "myvector",
            "oversampling": 12.0,
            "k": 5   
        }
  ]    
}

Önemli noktalar:

  • Fazla örnekleme, vektör profiline göre vektör sıkıştırması yapılan vektör alanları için geçerlidir.

  • Sorgudaki fazla örnekleme, dizindeki defaultOversampling değerini geçersiz kılar veya dizinin sıkıştırma yapılandırması aşırı örnekleme veya yeniden sıralama seçeneklerini belirtmese bile sorgu sırasında fazla örnekleme ve yeniden sıralama işlemini çağırır.