Přidání hodnoticích profilů pro zvýšení skóre hledání

V tomto článku se dozvíte, jak definovat bodovací profil. Profil bodování je critera pro zvýšení skóre hledání na základě parametrů, které zadáte. Můžete například chtít, aby shody nalezené v poli Značky byly relevantnější než stejná shoda nalezená v popisu. Kritérium může být vážené pole (například příklad značky) nebo funkce.

Profily bodování jsou definovány v indexu vyhledávání a vyvolány u ne vektorových polí v požadavcích dotazu. Můžete vytvořit více profilů a pak upravit logiku dotazu, abyste zvolili, který z nich se používá.

Poznámka:

Neznáte koncepty relevance? Následující segment videa na YouTube se rychle přesměruje na to, jak fungují profily bodování ve službě Azure AI Search. Další informace najdete také na webu Relevance a bodování ve službě Azure AI Search .

Definice bodujícího profilu

Bodovací profil je pojmenovaný objekt definovaný ve schématu indexu. Profil se může skládat z vážených polí, funkcí a parametrů.

Následující definice ukazuje jednoduchý profil s názvem "geo". Tento příklad zvýší výsledky, které mají hledaný termín v poli hotelName. Používá také distance funkci k upřednostnění výsledků, které jsou v okruhu 10 kilometrů od aktuálního umístění. Pokud někdo hledá termín "inn" a "inn" je součástí názvu hotelu, dokumenty, které obsahují hotely s penzionem v okruhu 10 KM od aktuálního umístění, se ve výsledcích hledání zobrazí výš.

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

Pokud chcete použít tento profil bodování, je váš dotaz formulován tak, aby v požadavku určil parametr bodováníProfile. Pokud používáte rozhraní REST API, dotazy se zadají prostřednictvím požadavků GET a POST. V následujícím příkladu má "currentLocation" oddělovač jednoho pomlčky (-). Následuje souřadnice zeměpisné délky a zeměpisné šířky, kde zeměpisná délka je záporná hodnota.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2020-06-30

Všimněte si rozdílů v syntaxi při použití příkazu POST. V POST je bodovacíParameters množné číslo a jedná se o pole.

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

Tento dotaz vyhledá termín "inn" a předá aktuální umístění. Všimněte si, že tento dotaz obsahuje další parametry, například bodováníParameter. Parametry dotazu, včetně hodnoticího parametruParameter, jsou popsány v rozhraní REST API (Search Documents).

Podívejte se na rozšířený příklad a prohlédněte si podrobnější příklad bodujícího profilu.

Jak se počítá skóre

Skóre se počítají pro dotazy fulltextové vyhledávání. Shody jsou vyhodnoceny na základě toho, jak je shoda relevantní, a v odpovědi dotazu se vrátí nejvyšší shody bodování. Celkové skóre každého dokumentu je agregace jednotlivých skóre pro každé pole, kde se počítá individuální skóre každého pole na základě četnosti termínů a četnosti dokumentů hledaných termínů v rámci tohoto pole (označované jako TF-IDF nebo četnost inverzních termínů).

Parametr featuresMode (Preview) můžete použít k vyžádání podrobností o dodatečném bodování s výsledky hledání (včetně skóre na úrovni pole).

Kdy přidat logiku vyhodnocování

Měli byste vytvořit jeden nebo více hodnoticích profilů, pokud výchozí chování při řazení není dostatečně daleko při plnění vašich obchodních cílů. Můžete se například rozhodnout, že relevance hledání by měla upřednostnění nově přidaných položek. Podobně můžete mít pole, které obsahuje ziskovou marži nebo jiné pole označující potenciální výnosy. Zvýšení výsledků, které jsou pro uživatele nebo firmu smysluplnější, je často rozhodujícím faktorem přijetí hodnoticího profilu.

Levancy-based ordering in a search page is implement is also implemented through scoring profiles. Zvažte stránky výsledků hledání, které jste použili v minulosti, které vám umožňují řadit podle ceny, data, hodnocení nebo relevance. Ve službě Azure AI Search je možné použít profily bodování k řízení relevance. Definice relevance je uživatelsky definovaná, predikovaná na obchodní cíle a typ vyhledávacího prostředí, které chcete doručit.

Postup přidání profilu bodování

Pokud chcete implementovat vlastní chování vyhodnocování, přidejte profil bodování do schématu, který definuje index. V indexu můžete mít až 100 profilů bodování (viz Limity služeb), ale v jakémkoli dotazu můžete zadat pouze jeden profil.

  1. Začněte definicí indexu. Profily bodování můžete přidat a aktualizovat v existujícím indexu, aniž byste je museli znovu sestavit. K publikování revize použijte žádost o aktualizaci indexu.

  2. Vložte šablonu uvedenou v tomto článku.

  3. Zadejte název. Profily bodování jsou volitelné, ale pokud ho přidáte, název je povinný. Nezapomeňte dodržovat zásady vytváření názvů azure AI Search pro pole (začíná písmenem, vyhněte se speciálním znakům a vyhrazeným slovům).

  4. Zadejte kritéria zvýšení. Jeden profil může obsahovat vážená pole, funkce nebo obojí.

Měli byste pracovat iterativním způsobem pomocí datové sady, která vám pomůže prokázat nebo vyvrátit účinnost daného profilu.

Profily bodování je možné definovat na webu Azure Portal, jak je znázorněno na následujícím snímku obrazovky, nebo programově prostřednictvím rozhraní REST API nebo v sadách Azure SDK, jako je například třída ScoringProfile v sadě Azure SDK pro .NET.

Add scoring profiles page

Použití vážených polí

Použijte vážená pole, pokud je kontext pole důležitý a dotazy jsou fulltextové vyhledávání. Pokud například dotaz obsahuje termín "letiště", může být v poli Popis vhodnější "letiště", aby měl větší váhu než v hoteluName.

Vážená pole se skládají z prohledávatelného pole a kladného čísla, které se používá jako násobitel. Pokud je původní skóre pole HotelName 3, zvýší se skóre pro toto pole 6, což přispívá k vyššímu celkovému skóre pro samotný nadřazený dokument.

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

Použití funkcí

Funkce používejte, pokud jsou jednoduché relativní váhy nedostatečné nebo se nepoužívají, stejně jako v případě vzdálenosti a aktuálnosti, což jsou výpočty s číselnými daty. Pro každý bodovací profil můžete zadat více funkcí. Další informace o datových typech EDM používaných ve službě Azure AI Search najdete v tématu Podporované datové typy.

Function Popis
"aktuálnost" Zvyšuje hodnoty v poli datetime (Edm.DateTimeOffset). Tato funkce má atribut boostingDuration, abyste mohli zadat hodnotu představující časový rozsah, při kterém dojde ke zvýšení.
"velikost" Zvyšuje se na základě toho, jak vysoká nebo nízká je číselná hodnota. Mezi scénáře, které volají tuto funkci, patří zvýšení ziskové marže, nejvyšší cena, nejnižší cena nebo počet stažení. Tuto funkci lze použít pouze s Edm.Double poli a Edm.Int poli. U funkce rozsahu můžete obrátit rozsah, vysoký až nízký, pokud chcete inverzní vzor (například zvýšit nižší cenu položek více než položky s vyšší cenou). Vzhledem k rozsahu cen od $100 do $1 byste nastavili "boostingRangeStart" na 100 a "boostingRangeEnd" na 1 pro zvýšení nižší ceny položek.
"vzdálenost" Zvyšuje vzdálenost nebo zeměpisnou polohu. Tuto funkci lze použít pouze s Edm.GeographyPoint poli.
"tag" Zvyšuje se podle značek, které jsou společné pro hledání dokumentů i řetězců dotazů. Značky jsou k dispozici v parametru tagsParameter. Tuto funkci lze použít pouze s vyhledávacími poli typu Edm.String a Collection(Edm.String).

Pravidla pro používání funkcí

  • Funkce lze použít pouze u polí, která jsou přiřazena jako filtrovatelná.
  • Typ funkce ("aktuálnost", "velikost", "vzdálenost", "značka") musí být malé písmeno.
  • Funkce nemohou obsahovat hodnoty null ani prázdné hodnoty.

Template

Tato část ukazuje syntaxi a šablonu pro bodovací profily. Popis atributů hodnoticího profilu najdete v odkazu na vlastnost v další části.

"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) "...", 

Referenční dokumentace k vlastnostem

Atribut Popis
name Požadováno. Toto je název bodujícího profilu. Řídí se stejnými konvencemi pojmenování pole. Musí začínat písmenem, nesmí obsahovat tečky, dvojtečky nebo symboly @ a nesmí začínat frází azureSearch (rozlišují se malá a velká písmena).
text Obsahuje vlastnost váhy.
Hmotnosti Nepovinné. Páry název-hodnota, které určují prohledávatelné pole a kladné celé číslo nebo číslo s plovoucí desetinnou čárkou, o které chcete zvýšit skóre pole. Kladné celé číslo nebo číslo se stane násobitelem původního skóre pole vygenerovaného algoritmem řazení. Pokud je například skóre pole 2 a hodnota hmotnosti je 3, zvýší se skóre pole na hodnotu 6. Skóre jednotlivých polí se pak agreguje, aby se vytvořilo skóre pole dokumentu, které se pak použije k řazení dokumentu do sady výsledků.
– funkce Nepovinné. Funkci bodování lze použít pouze u polí, která lze filtrovat.
typ funkcí > Vyžadováno pro bodovací funkce. Určuje typ funkce, která se má použít. Platné hodnoty zahrnují velikost, aktuálnost, vzdálenost a značku. Do každého bodujícího profilu můžete zahrnout více než jednu funkci. Název funkce musí být malé písmeno.
zvýšení funkcí > Vyžadováno pro bodovací funkce. Kladné číslo použité jako násobitel pro nezpracované skóre. Nemůže být rovno 1.
název pole functions > Vyžadováno pro bodovací funkce. Funkci bodování je možné použít pouze u polí, která jsou součástí kolekce polí indexu a která jsou filtrovatelná. Každý typ funkce navíc zavádí další omezení (aktuálnost se používá s poli datetime, velikost s celočíselnou nebo dvojitou pole a vzdálenost s poli umístění). Pro každou definici funkce můžete zadat pouze jedno pole. Pokud chcete například použít velikost dvakrát ve stejném profilu, budete muset zahrnout dvě definice, jednu pro každé pole.
interpolace funkcí > Vyžadováno pro bodovací funkce. Definuje sklon, pro který se zvýšení skóre zvyšuje od začátku rozsahu až po konec rozsahu. Platné hodnoty zahrnují lineární (výchozí), konstantu, kvadratické a logaritmické hodnoty. Podrobnosti najdete v tématu Nastavení interpolací .
velikost funkcí > Funkce bodování velikosti se používá ke změně pořadí na základě rozsahu hodnot číselného pole. Mezi nejběžnější příklady použití patří:

"Hodnocení hvězdičky:" Alter bodování na základě hodnoty v poli Hodnocení hvězdičky. Pokud jsou relevantní dvě položky, zobrazí se nejprve položka s vyšším hodnocením.
"Margin:" Pokud jsou relevantní dva dokumenty, může prodejce nejdřív chtít zvýšit počet dokumentů s vyššími maržemi.
"Počet kliknutí:" U aplikací, které sledují akce klikáním na produkty nebo stránky, můžete použít velikost pro zvýšení počtu položek, které mají tendenci získat největší provoz.
"Počet stahování:" U aplikací, které sledují stahování, umožňuje funkce velikost zvýšit počet položek, které mají nejvíce stažení.
velikost funkce >> boostingRangeStart Nastaví počáteční hodnotu rozsahu, ve kterém je velikost vyhodnocena. Hodnota musí být celé číslo nebo číslo s plovoucí desetinou čárkou. U hodnocení hvězdičky 1 až 4 by to bylo 1. U okrajů nad 50 % by to bylo 50.
velikost funkce >> boostingRangeEnd Nastaví koncovou hodnotu rozsahu, ve kterém je velikost skóre. Hodnota musí být celé číslo nebo číslo s plovoucí desetinou čárkou. U hodnocení hvězdičky 1 až 4 by to bylo 4.
funkce > velikost > konstantyBoostBeyondRange Platné hodnoty jsou true nebo false (výchozí). Pokud nastavíte hodnotu true, úplné zvýšení bude i nadále platit pro dokumenty, které mají hodnotu pro cílové pole, které je vyšší než horní konec rozsahu. Pokud je tato funkce nepravda, u dokumentů s hodnotou cílového pole, které spadá mimo rozsah, nebude použito zvýšení této funkce.
aktuálnost funkcí > Funkce bodování aktuálnosti se používá ke změně skóre řazení pro položky na základě hodnot v polích DateTimeOffset. Například položka s novějším datem může být seřazená výš než starší položky.

Je také možné seřadit položky, jako jsou události kalendáře s budoucími daty, aby položky blíže k prezentaci mohly být seřazeny výš než položky dále v budoucnu.

V aktuální verzi služby bude jeden konec rozsahu opravený na aktuální čas. Druhý konec je čas v minulosti založený na boostingDuration. Pokud chcete zvýšit rozsah časů v budoucnu, použijte negativní boostingDuration.

Rychlost, s jakou se zvýšení mění z maximálního a minimálního rozsahu, je určena interpolací použitou na profil bodování (viz obrázek níže). Chcete-li obrátit použitý faktor zvýšení, zvolte faktor zvýšení menší než 1.
zvýšení aktuálnosti > funkcíDuration > Nastaví dobu vypršení platnosti, po které se u konkrétního dokumentu zastaví zvýšení. Informace o syntaxi a příkladech najdete v části Nastavení boostingDuration v následující části.
vzdálenost funkcí > Funkce bodování vzdálenosti se používá k ovlivnění skóre dokumentů na základě toho, jak blízko nebo daleko jsou relativní vzhledem k referenční geografické poloze. Umístění odkazu je dáno jako součást dotazu v parametru (pomocí parametru dotazu bodingParameter) jako lon,lat argument.
odkaz na vzdálenost > funkcíPointParameter > Parametr, který se má předat v dotazech, který se použije jako referenční umístění (pomocí parametru dotazu bodováníParameter).
funkce > pro zvýšení vzdálenostiDistance > Číslo, které označuje vzdálenost v kilometrech od referenčního umístění, kde končí oblast zvýšení.
značka funkcí > Funkce bodování značek se používá k ovlivnění skóre dokumentů na základě značek v dokumentech a vyhledávacích dotazech. U dokumentů, které mají společné značky s vyhledávacím dotazem, se zvýší. Značky vyhledávacího dotazu se v každém požadavku vyhledávání zadají jako parametr bodování (pomocí parametru dotazu bodováníParameter).
> značky funkcíParameter > Parametr, který se má předat v dotazech k určení značek pro konkrétní požadavek (pomocí parametru dotazu bodováníParameter). Parametr se skládá ze seznamu celých termínů oddělených čárkami. Pokud je daná značka v seznamu sama o sobě čárkami odděleným seznamem, můžete pomocí normalizátoru textu v poli odstranit čárky v době dotazu (namapovat znak čárky na mezeru). Tento přístup "zploštěl" seznam tak, aby všechny termíny byly jeden dlouhý řetězec termínů oddělených čárkami.
functionAggregation Nepovinné. Platí pouze v případech, kdy jsou zadány funkce. Mezi platné hodnoty patří: součet (výchozí), průměr, minimum, maximum a firstMatching. Skóre hledání je jedna hodnota vypočítaná z více proměnných, včetně více funkcí. Tento atribut označuje, jak se zvýšení všech funkcí zkombinuje do jediné agregační zvýšení, které se pak použije na základní skóre dokumentu. Základní skóre vychází z hodnoty tf-idf vypočítané z dokumentu a vyhledávacího dotazu.
defaultScoringProfile Pokud při provádění žádosti o vyhledávání není zadán žádný bodovací profil, použije se výchozí bodování (pouze tf-idf ).

Předdefinované výchozí nastavení můžete přepsat tak, že nahradíte vlastní profil jako ten, který se použije v případě, že v žádosti o vyhledávání není zadaný žádný konkrétní profil.

Nastavení interpolací

Interpolace umožňují nastavit tvar sklonu použitého pro bodování. Vzhledem k tomu, že bodování je vysoké až nízké, sklon se vždy snižuje, ale interpolace určuje křivku sklonu dolů. Můžete použít následující interpolace:

Interpolace Popis
linear U položek, které jsou v maximálním a minimálním rozsahu, se zvýšení použité na položku provede v neustále se snižujícím množství. Lineární je výchozí interpolace pro bodovací profil.
constant U položek, které jsou v počátečním a koncovém rozsahu, se na výsledky pořadí použije konstantní zvýšení.
quadratic Ve srovnání s lineární interpolací, která má neustále se snižující zvýšení, Quadratic zpočátku sníží menším tempem a pak, když se blíží koncovému rozsahu, sníží se v mnohem vyšším intervalu. Tato možnost interpolace není povolená ve funkcích bodování značek.
logarithmic Ve srovnání s lineární interpolací, která má neustále se snižující zvýšení, logaritmické se zpočátku sníží vyšším tempem a pak, když se blíží koncovému rozsahu, sníží se v mnohem menším intervalu. Tato možnost interpolace není povolená ve funkcích bodování značek.

Constant, linear, quadratic, log10 lines on graph

Nastavení boostingDuration

boostingDuration je atribut funkce freshness . Použijete ho k nastavení období vypršení platnosti, po kterém se u konkrétního dokumentu zastaví zvýšení. Pokud například chcete zvýšit produktovou řadu nebo značku na 10denní propagační období, zadáte pro tyto dokumenty 10denní období jako P10D.

boostingDuration musí být formátována jako hodnota XSD dayTimeDuration (omezená podmnožina hodnoty doby trvání ISO 8601). Vzor pro toto je: "P[nD][T[nH][nM][nS]]".

Následující tabulka obsahuje několik příkladů.

Doba trvání boostingDuration
1 den "P1D"
2 dny a 12 hodin "P2DT12H"
15 minut "PT15M"
30 dní, 5 hodin, 10 minut a 6,334 sekund "P30DT5H10M6.334S"

Další příklady najdete ve schématu XML: Datové typy (W3.org webu).

Rozšířený příklad

Následující příklad ukazuje schéma indexu se dvěma profily bodování (boostGenre, newAndHighlyRated). Jakýkoli dotaz na tento index, který obsahuje některý z profilů jako parametr dotazu, použije profil k určení skóre sady výsledků.

Profil boostGenre používá vážená textová pole, zvýšení shody nalezené v polích albumTitle, žánr a artistName. Pole se zvýší o 1,5, 5 a 2. Proč se žánr zvyšuje mnohem výš než ostatní? Pokud se vyhledávání provádí přes data, která jsou poněkud homogenní (stejně jako u žánru v musicstoreindex), možná budete potřebovat větší odchylku v relativní hmotnosti. Například v musicstoreindex se "rock" zobrazuje jako žánr i ve identicky frázovaných popisech žánrů. Pokud chcete, aby žánr převažoval nad popisem žánru, pole žánru bude potřebovat mnohem vyšší relativní váhu.

{  
  "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" ]  
    }  
  ]   
}  

Viz také