Aracılığıyla paylaş


Arama puanlarını artırmak için puanlama profilleri ekleme

Puanlama profilleri, ölçütlere göre eşleşen belgelerin derecelendirmesini artırmanıza olanak sağlar. Bu makalede, sağladığınız parametrelere göre arama puanını artıran bir puanlama profili belirtmeyi ve atamayı öğrenin.

Anahtar sözcük araması, vektör araması ve karma arama için puanlama profillerini kullanabilirsiniz. Ancak, puanlama profilleri yalnızca seçmen olmayan alanlara uygulanır, bu nedenle dizininizde puanlama profilinde kullanılabilecek metin veya sayısal alanlar olduğundan emin olun. Vektör ve karma arama için puanlama profili desteği 2024-05-01-preview ve 2024-07-01 REST API'lerinde ve bu sürümleri hedefleyen Azure SDK paketlerinde kullanılabilir.

Puanlama profilleriyle ilgili önemli noktalar

Puanlama profili parametreleri şunlardan biri:

  • Belirli bir dize alanında eşleşme bulunan ağırlıklı alanlar. Örneğin, "özet" alanında bulunan eşleşmelerin bir "içerik" alanında bulunan eşleşmeden daha ilgili olmasını isteyebilirsiniz.

  • Tarihler, aralıklar ve coğrafi koordinatlar dahil olmak üzere sayısal veriler için işlevler. Ayrıca, rastgele bir dize koleksiyonu sağlayan bir alanda çalışan bir Tags işlevi de vardır. Bir eşleşmenin etiketler alanında bulunup bulunmadığına bağlı olarak bir puanı artırmak istiyorsanız, ağırlıklı alanlar yerine bu yaklaşımı seçebilirsiniz.

Birden çok profil oluşturabilir ve ardından sorgu mantığını değiştirerek hangisinin kullanılacağını seçebilirsiniz.

Bir dizinde en fazla 100 puanlama profiliniz olabilir (bkz . hizmet Sınırları), ancak belirli bir sorguda aynı anda yalnızca bir profil belirtebilirsiniz.

Not

İlgi kavramlarını bilmiyor musunuz? Arka plan için Azure AI Search'te İlgi ve puanlama'yı ziyaret edin. Bu video segmentini, BM25 dereceli sonuçlar üzerinden puanlama profilleri için YouTube'da da izleyebilirsiniz.

Puanlama profili tanımı

Puanlama profili, dizin şemasında tanımlanan nesne olarak adlandırılır. Puanlama profili ağırlıklı alanlardan, işlevlerden ve parametrelerden oluşur.

Aşağıdaki tanımda "geo" adlı basit bir profil gösterilmektedir. Bu örnek, hotelName alanında arama terimi olan sonuçları artırır. Ayrıca işlevi, distance geçerli konuma 10 kilometre mesafedeki sonuçları tercih etmek için kullanır. Birisi 'inn' terimini ararsa ve 'inn' otel adının bir parçasıysa, geçerli konumun 10 KM yarıçapı içinde 'inn' olan otelleri içeren belgeler arama sonuçlarında daha yüksek görünür.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Bu puanlama profilini kullanmak için sorgunuz istekte scoringProfile parametresini belirtmek üzere formüle edilir. REST API kullanıyorsanız sorgular GET ve POST istekleri aracılığıyla belirtilir. Aşağıdaki örnekte, "currentLocation" tek bir tire (- ) sınırlayıcıya sahiptir. Bunu boylam ve enlem koordinatları izler ve boylam negatif bir değerdir.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2024-07-01

POST kullanırken söz dizimi farklılıklarına dikkat edin. POST'ta "scoringParameters" çoğuldur ve bir dizidir.

POST /indexes/hotels/docs&api-version=2024-07-01
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": ["currentLocation--122.123,44.77233"]
}

Bu sorgu "inn" terimini arar ve geçerli konumu geçirir. Bu sorguda scoringParameter gibi başka parametreler bulunduğuna dikkat edin. "scoringParameter" dahil olmak üzere sorgu parametreleri, Arama Belgeleri (REST API) bölümünde açıklanmıştır.

Vektör ve karma arama için Genişletilmiş örneği ve daha fazla senaryo için anahtar sözcük araması için Genişletilmiş örneğine bakın.

Puanlama profilleri, profilin ölçütlerine uyan eşleşmelerin puanlarını artırarak varsayılan puanlama algoritmasını destekler. Puanlama işlevleri anahtar sözcük araması, saf vektör sorguları ve karma sorgular için geçerlidir.

Azure AI Search'te puanlama profillerini veya diğer öne çıkan özellikleri kullandığınızda, Karşılıklı Derecelendirme İşlevi (RRF) algoritması tek başına metin ve vektör sorguları dahil olmak üzere puanı atar. RRF sonrası, tüm puanlama/artırma, anlamsal derecelendirme ve vektör ağırlık ayarlamaları gerçekleşir.

Hangi alanların puanlama profiline sahip olduğunu ve sıralamanın ne zaman gerçekleştiğini gösteren diyagram.

İpucu

Arama sonuçlarıyla (alan düzeyi puanları dahil) ek puanlama ayrıntıları istemek için featuresMode (önizleme) parametresini kullanabilirsiniz.

Arama dizinine puanlama profili ekleme

  1. Dizin tanımıyla başlayın. Var olan bir dizine puanlama profillerini yeniden oluşturmak zorunda kalmadan ekleyebilir ve güncelleştirebilirsiniz. Düzeltmeyi göndermek için Dizin Oluşturma veya Güncelleştirme isteği kullanın.

  2. Bu makalede sağlanan şablonu yapıştırın.

  3. Adlandırma kurallarına uygun bir ad sağlayın.

  4. Artırma ölçütlerini belirtin. Tek bir profil metin ağırlıklı alanlar, işlevler veya her ikisini de içerebilir.

Belirli bir profilin etkinliğini kanıtlamanıza veya yok saymanıza yardımcı olacak bir veri kümesi kullanarak yinelemeli bir şekilde çalışmanız gerekir.

Puanlama profilleri, aşağıdaki ekran görüntüsünde gösterildiği gibi Azure portalında veya REST API'leri aracılığıyla veya .NET için Azure SDK'sında ScoringProfile sınıfı gibi Azure SDK'larında program aracılığıyla tanımlanabilir.

Puanlama profilleri sayfası ekleme

Metin ağırlıklı alanları kullanma

Alan bağlamı önemli olduğunda ve sorgular dize alanları içerdiğinde searchable metin ağırlıklı alanlar kullanın. Örneğin, bir sorgu "airport" terimini içeriyorsa, Açıklama alanındaki "havaalanı" ifadesinin HotelName değerinden daha fazla ağırlığa sahip olmasını isteyebilirsiniz.

Ağırlıklı alanlar, bir searchable alandan oluşan ad-değer çiftleri ve çarpan olarak kullanılan pozitif bir sayıdır. HotelName'in özgün alan puanı 3 ise, bu alanın artırılan puanı 6 olur ve üst belgenin kendisi için daha yüksek bir genel puana katkıda bulunur.

"scoringProfiles": [  
    {  
      "name": "boostSearchTerms",  
      "text": {  
        "weights": {  
          "HotelName": 2,  
          "Description": 5 
        }  
      }  
    }
]

İşlev kullanma

Basit göreli ağırlıklar yetersiz olduğunda veya uygulanmadığında, sayısal veriler üzerinde yapılan hesaplamalar olan uzaklık ve tazelik durumlarında olduğu gibi işlevleri kullanın. Puanlama profili başına birden çok işlev belirtebilirsiniz. Azure AI Search'te kullanılan EDM veri türleri hakkında daha fazla bilgi için bkz . Desteklenen veri türleri.

İşlev Açıklama Kullanım örnekleri
uzaklık Yakınlık veya coğrafi konum ile artırın. Bu işlev yalnızca alanlarla Edm.GeographyPoint kullanılabilir. "Yakınımda bul" senaryoları için kullanın.
tazelik Tarih saat alanındaki (Edm.DateTimeOffset) değerlere göre artırın. BoostingDuration değerini, üzerinde artırmanın gerçekleştiği zaman aralığını temsil eden bir değer belirtmek için ayarlayın. Daha yeni veya daha eski tarihlere göre artırmak istediğinizde kullanın. Takvim olayları gibi öğeleri gelecek tarihlerle derecelendirin; böylece günümüze daha yakın olan öğeler gelecekte daha fazla öğeden daha yüksek derecelenebilir. Aralığın bir ucu geçerli saate sabittir. Geçmişteki bir dizi zamanı artırmak için pozitif bir boostingDuration kullanın. Gelecekte bir dizi zamanı artırmak için negatif boostingDuration kullanın.
büyüklük Sayısal alanın değer aralığına göre sıralamaları değiştirin. Değer bir tamsayı veya kayan noktalı sayı olmalıdır. 1 ile 4 arasında yıldız derecelendirmeleri için bu değer 1 olacaktır. %50'nin üzerindeki kenar boşlukları için bu 50 olur. Bu işlev yalnızca ve Edm.Int alanlarıyla Edm.Double kullanılabilir. Büyük işlev için, ters deseni istiyorsanız (örneğin, düşük fiyatlı öğeleri daha yüksek fiyatlı öğelerden daha fazla artırmak için) aralığı tersine çevirebilirsiniz. 100 $ ile 1 $ arasında bir fiyat aralığı göz önüne alındığında, daha düşük fiyatlı öğeleri artırmak için 100 ve boostingRangeEnd 1 olarak ayarlanırboostingRangeStart. Kar marjı, derecelendirmeler, tıklama sayıları, indirme sayısı, en yüksek fiyat, en düşük fiyat veya indirme sayısına göre artırmak istediğinizde kullanın. İki öğe ilgili olduğunda, önce daha yüksek derecelendirmeye sahip öğe görüntülenir.
etiket Hem arama belgelerinde hem de sorgu dizelerinde ortak olan etiketlere göre artırın. Etiketler bir tagsParameteriçinde sağlanır. Bu işlev yalnızca ve Collection(Edm.String)türünde Edm.String arama alanlarıyla kullanılabilir. Etiket alanlarınız olduğunda kullanın. Listedeki belirli bir etiket kendisi virgülle ayrılmış bir listeyse, sorgu zamanında virgülleri çıkarmak (virgül karakterini boşlukla eşlemek) için alanda bir metin normalleştiricisi kullanabilirsiniz. Bu yaklaşım, tüm terimlerin virgülle ayrılmış tek ve uzun bir dize olması için listeyi "düzleştirme".

İşlevleri kullanma kuralları

  • İşlevler yalnızca olarak filterableözniteliklendirilen alanlara uygulanabilir.
  • İşlev türü ("freshness", "magnitude", "distance", "tag") küçük harf olmalıdır.
  • İşlevler null veya boş değerler içeremez.
  • İşlevler, işlev tanımı başına yalnızca tek bir alana sahip olabilir. Aynı profilde iki kez büyüklük kullanmak için, her alan için bir tane olmak üzere iki tanım büyüklük sağlayın.

Template

Bu bölümde, puanlama profilleri için söz dizimi ve şablon gösterilir. Özelliklerin açıklaması için bkz . REST API başvurusu.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

İlişkilendirmeleri ayarlama

İlişkilendirmeler, puanlama için kullanılan eğimin şeklini ayarlar. Puanlama yüksekten düşüke doğru olduğundan eğim her zaman azalır, ancak ilişkilendirme aşağı eğimin eğrisini belirler. Aşağıdaki ilişkilendirmeler kullanılabilir:

Enterpolasyon Açıklama
linear Maksimum ve en düşük aralıktaki öğeler için sürekli azalan miktarda artırma uygulanır. Doğrusal, puanlama profili için varsayılan ilişkilendirmedir.
constant Başlangıç ve bitiş aralığındaki öğeler için, sıralama sonuçlarına sabit bir yükseltme uygulanır.
quadratic Sürekli azalan bir artışa sahip doğrusal ilişkilendirmeye kıyasla, İkincil başlangıçta daha küçük hızda azalır ve ardından bitiş aralığına yaklaştıkça çok daha yüksek bir aralıkta azalır. Etiket puanlama işlevlerinde bu ilişkilendirme seçeneğine izin verilmez.
logarithmic Sürekli azalan bir artışa sahip doğrusal ilişkilendirmeye kıyasla logaritmik başlangıçta daha yüksek hızda azalır ve ardından bitiş aralığına yaklaştıkça çok daha küçük bir aralıkta azalır. Etiket puanlama işlevlerinde bu ilişkilendirme seçeneğine izin verilmez.

Grafikte sabit, doğrusal, ikinci dereceden, log10 çizgileri

Tazelik işlevi için boostingDuration'ı ayarlama

boostingDuration işlevin freshness özniteliğidir. Bunu, belirli bir belge için yükseltmenin durdurulacağı bir süre sonu dönemi ayarlamak için kullanırsınız. Örneğin, bir ürün serisini veya markayı 10 günlük promosyon dönemi boyunca artırmak için, bu belgeler için 10 günlük süreyi "P10D" olarak belirtmeniz gerekir.

boostingDuration XSD "dayTimeDuration" değeri (ISO 8601 süre değerinin kısıtlanmış bir alt kümesi) olarak biçimlendirilmelidir. Bunun deseni: "P[nD][T[nH][nM][nS]]".

Aşağıdaki tabloda birkaç örnek verilmiştir.

Süre boostingDuration
1 gün "P1D"
2 gün 12 saat "P2DT12H"
15 dakika "PT15M"
30 gün, 5 saat, 10 dakika ve 6,334 saniye "P30DT5H10M6.334S"

Daha fazla örnek için bkz . XML Şeması: Veri Türleri (W3.org web sitesi).

Vektör ve üretken yapay zeka senaryolarında puanlama profillerini ve belge artırmayı kullanma tanıtımı için bu blog gönderisine ve not defterine bakın.

Aşağıdaki örnek, iki puanlama profiline (boostGenre, newAndHighlyRated) sahip bir dizinin şemasını gösterir. Bu dizinde sorgu parametresi olarak her iki profili de içeren tüm sorgular, sonuç kümesini puanlama amacıyla profili kullanır.

Profilde boostGenre ağırlıklı metin alanları kullanılır ve albumTitle, genre ve artistName alanlarında bulunan eşleşmeler artırılır. Alanlar sırasıyla 1,5, 5 ve 2 artırılır. Neden tarz diğerlerinden çok daha yüksek bir şekilde artırılıyor? Biraz homojen olan veriler üzerinde arama yapılırsa (musicstoreindex'te 'tarz' gibi), göreli ağırlıklarda daha büyük bir varyansa ihtiyacınız olabilir. Örneğin, musicstoreindex'te 'rock' hem bir tür olarak hem de aynı tümcecikli tarz açıklamalarında görünür. Tarz açıklamasının daha ağır basmasını istiyorsanız, tarz alanının çok daha yüksek bir göreli ağırlığa ihtiyacı olacaktır.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

Ayrıca bkz.