Scoreprofielen toevoegen om zoekscores te verhogen

In dit artikel leert u hoe u een scoreprofiel definieert. Een scoreprofiel iscritera voor het stimuleren van een zoekscore op basis van parameters die u opgeeft. U wilt bijvoorbeeld dat overeenkomsten in een 'tags'-veld relevanter zijn dan dezelfde overeenkomst die in 'beschrijvingen' wordt gevonden. Criteria kunnen een gewogen veld zijn (zoals het voorbeeld van tags) of een functie.

Scoreprofielen worden gedefinieerd in een zoekindex en worden aangeroepen op niet-vectorvelden in queryaanvragen. U kunt meerdere profielen maken en vervolgens querylogica wijzigen om te kiezen welke wordt gebruikt.

Notitie

Onbekend met relevantieconcepten? Het volgende videosegment op YouTube wordt snel doorgestuurd naar de werking van scoreprofielen in Azure AI Search. U kunt ook zoeken naar Relevantie en scoren in Azure AI Search voor meer achtergrondinformatie.

Scoreprofieldefinitie

Een scoreprofiel is een benoemd object dat is gedefinieerd in een indexschema. Een profiel kan bestaan uit gewogen velden, functies en parameters.

De volgende definitie toont een eenvoudig profiel met de naam 'geo'. In dit voorbeeld worden de resultaten verhoogd met de zoekterm in het veld HotelName. Ook wordt de distance functie gebruikt om resultaten te bevorderen die zich binnen 10 kilometer van de huidige locatie bevinden. Als iemand op de term 'inn' zoekt en 'inn' deel uitmaakt van de naam van het hotel, worden documenten met hotels met 'inn' binnen een straal van 10 KM van de huidige locatie hoger weergegeven in de zoekresultaten.

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

Als u dit scoreprofiel wilt gebruiken, wordt uw query geformuleerd om de scoreProfile-parameter in de aanvraag op te geven. Als u de REST API gebruikt, worden query's opgegeven via GET- en POST-aanvragen. In het volgende voorbeeld heeft 'currentLocation' een scheidingsteken van één streepje (-). Het wordt gevolgd door lengte- en breedtegraadcoördinaten, waarbij lengtegraad een negatieve waarde is.

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

Let op de syntaxisverschillen bij het gebruik van POST. In POST is 'scoringParameters' meervoud en het is een matrix.

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

Met deze query wordt gezocht naar de term 'inn' en wordt de huidige locatie doorgegeven. U ziet dat deze query andere parameters bevat, zoals scoringParameter. Queryparameters, waaronder scoringParameter, worden beschreven in Zoekdocumenten (REST API).

Zie het uitgebreide voorbeeld om een gedetailleerder voorbeeld van een scoreprofiel te bekijken.

Hoe scores worden berekend

Scores worden berekend voor zoekopdrachten in volledige tekst. Overeenkomsten worden beoordeeld op basis van hoe relevant de overeenkomst is en de hoogste scoreovereenkomsten worden geretourneerd in het queryantwoord. De algehele score voor elk document is een aggregatie van de afzonderlijke scores voor elk veld, waarbij de afzonderlijke score van elk veld wordt berekend op basis van de termfrequentie en documentfrequentie van de gezochte termen in dat veld (ook wel TF-IDF of term frequency-inverse documentfrequentie genoemd).

U kunt de parameter featuresMode (preview) gebruiken om extra scoregegevens aan te vragen met de zoekresultaten (inclusief de scores op veldniveau).

Wanneer moet ik scorelogica toevoegen

U moet een of meer scoreprofielen maken wanneer het standaardclassificatiegedrag niet ver genoeg gaat bij het voldoen aan uw bedrijfsdoelstellingen. U kunt bijvoorbeeld besluiten dat zoekrelevantie de voorkeur moet geven aan nieuw toegevoegde items. Op dezelfde manier hebt u mogelijk een veld met winstmarge of een ander veld dat de omzetpotentieel aangeeft. Het stimuleren van resultaten die relevanter zijn voor uw gebruikers of het bedrijf, is vaak de beslissingsfactor bij de acceptatie van scoreprofielen.

Volgorde op basis van relevantie op een zoekpagina wordt ook geïmplementeerd via scoreprofielen. Bekijk de pagina's met zoekresultaten die u in het verleden hebt gebruikt, zodat u kunt sorteren op prijs, datum, beoordeling of relevantie. In Azure AI Search kunnen scoreprofielen worden gebruikt om de optie 'relevantie' aan te sturen. De definitie van relevantie is door de gebruiker gedefinieerd, geprediceerd op bedrijfsdoelstellingen en het type zoekervaring dat u wilt leveren.

Stappen voor het toevoegen van een scoreprofiel

Als u aangepast scoregedrag wilt implementeren, voegt u een scoreprofiel toe aan het schema waarmee de index wordt gedefinieerd. U kunt maximaal 100 scoreprofielen binnen een index hebben (zie Servicelimieten), maar u kunt slechts één profiel tegelijk opgeven in een bepaalde query.

  1. Begin met een indexdefinitie. U kunt scoreprofielen toevoegen en bijwerken op een bestaande index zonder dat u deze opnieuw hoeft op te bouwen. Gebruik een update-indexaanvraag om de revisie te posten.

  2. Plak de sjabloon in dit artikel.

  3. Geef een naam op. Scoreprofielen zijn optioneel, maar als u er een toevoegt, is de naam vereist. Zorg ervoor dat u de naamconventies van Azure AI Search voor velden volgt (begint met een letter, vermijdt speciale tekens en gereserveerde woorden).

  4. Geef boostcriteria op. Eén profiel kan gewogen velden, functies of beide bevatten.

U moet iteratief werken met behulp van een gegevensset die u helpt de werkzaamheid van een bepaald profiel te bewijzen of te weer te geven.

Scoreprofielen kunnen worden gedefinieerd in Azure Portal, zoals wordt weergegeven in de volgende schermopname, of programmatisch via REST API's of in Azure SDK's , zoals de scoringProfile-klasse in de Azure SDK voor .NET.

Add scoring profiles page

Gewogen velden gebruiken

Gebruik gewogen velden wanneer veldcontext belangrijk is en query's zoeken in volledige tekst. Als een query bijvoorbeeld de term 'airport' bevat, wilt u in het veld Beschrijving mogelijk meer gewicht hebben dan in hotelnaam.

Gewogen velden bestaan uit een doorzoekbaar veld en een positief getal dat wordt gebruikt als vermenigvuldiger. Als de oorspronkelijke veldscore van HotelName 3 is, wordt de hogere score voor dat veld 6, wat bijdraagt aan een hogere algehele score voor het bovenliggende document zelf.

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

Functies gebruiken

Gebruik functies wanneer eenvoudige relatieve gewichten onvoldoende zijn of niet van toepassing zijn, zoals het geval is bij afstand en nieuwheid, wat berekeningen zijn voor numerieke gegevens. U kunt meerdere functies per scoreprofiel opgeven. Zie Ondersteunde gegevenstypen voor meer informatie over de EDM-gegevenstypen die worden gebruikt in Azure AI Search.

Functie Beschrijving
"versheid" Verhoogt door waarden in een datum/tijd-veld (Edm.DateTimeOffset). Deze functie heeft een kenmerk 'boostingDuration', zodat u een waarde kunt opgeven die een periode aangeeft waarvoor het stimuleren plaatsvindt.
"magnitude" Verhoogt op basis van hoe hoog of laag een numerieke waarde is. Scenario's die deze functie aanroepen, zijn onder andere het stimuleren van de winstmarge, de hoogste prijs, de laagste prijs of het aantal downloads. Deze functie kan alleen worden gebruikt met Edm.Double en Edm.Int velden. Voor de groottefunctie kunt u het bereik omkeren, hoog naar laag, als u het omgekeerde patroon wilt (bijvoorbeeld om lagere prijzen te verhogen dan items met een hogere prijs). Gezien een reeks prijzen van $ 100 tot $ 1, zou u "boostingRangeStart" instellen op 100 en "boostingRangeEnd" op 1 om de lager geprijsde items te verhogen.
"afstand" Verhoogt door nabijheid of geografische locatie. Deze functie kan alleen worden gebruikt met Edm.GeographyPoint velden.
"tag" Verhoogt door tags die gebruikelijk zijn voor zowel zoekdocumenten als querytekenreeksen. Tags worden geleverd in een "tagsParameter". Deze functie kan alleen worden gebruikt met zoekvelden van het type Edm.String en Collection(Edm.String).

Regels voor het gebruik van functies

  • Functies kunnen alleen worden toegepast op velden die zijn toegeschreven als filterbaar.
  • Het functietype ('freshness', 'magnitude', 'distance', 'tag') moet een kleine letter zijn.
  • Functies kunnen geen null- of lege waarden bevatten.

Sjabloon

In deze sectie ziet u de syntaxis en sjabloon voor scoreprofielen. Raadpleeg de eigenschapsverwijzing in de volgende sectie voor beschrijvingen van de scoreprofielkenmerken.

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

Naslaginformatie over eigenschappen

Kenmerk Beschrijving
name Vereist. Dit is de naam van het scoreprofiel. Het volgt dezelfde naamconventies van een veld. Deze moet beginnen met een letter, mag geen punten, dubbele punten of @-symbolen bevatten en mag niet beginnen met de woordgroep azureSearch (hoofdlettergevoelig).
sms verzenden Bevat de eigenschap gewichten.
Gewichten Optioneel. Naam-waardeparen die een doorzoekbaar veld en een positief geheel getal of een drijvendekommagetal opgeven waarmee de score van een veld wordt verhoogd. Het positieve gehele getal of getal wordt een vermenigvuldiger voor de oorspronkelijke veldscore die wordt gegenereerd door het classificatie-algoritme. Als een veldscore bijvoorbeeld 2 is en de gewichtswaarde 3 is, wordt de verhoogd score voor het veld 6. Afzonderlijke veldscores worden vervolgens samengevoegd om een documentveldscore te maken, die vervolgens wordt gebruikt om het document in de resultatenset te rangschikken.
functions Optioneel. Een scorefunctie kan alleen worden toegepast op velden die kunnen worden gefilterd.
type functies > Vereist voor scorefuncties. Geeft het type functie aan dat moet worden gebruikt. Geldige waarden zijn grootte, versheid, afstand en tag. U kunt meer dan één functie opnemen in elk scoreprofiel. De naam van de functie moet een kleine letter zijn.
functies > boost Vereist voor scorefuncties. Een positief getal dat wordt gebruikt als vermenigvuldiger voor onbewerkte score. Het kan niet gelijk zijn aan 1.
veldnaam van functies > Vereist voor scorefuncties. Een scorefunctie kan alleen worden toegepast op velden die deel uitmaken van de veldverzameling van de index en die kunnen worden gefilterd. Daarnaast introduceert elk functietype aanvullende beperkingen (versheid wordt gebruikt met datum/tijd-velden, grootte met gehele of dubbele velden en afstand met locatievelden). U kunt slechts één veld per functiedefinitie opgeven. Als u bijvoorbeeld twee keer een grootte in hetzelfde profiel wilt gebruiken, moet u twee definities van grootte opnemen, één voor elk veld.
interpolatie van functies > Vereist voor scorefuncties. Definieert de helling waarvoor de scoreverhoging toeneemt van het begin van het bereik tot het einde van het bereik. Geldige waarden zijn Lineair (standaard), Constant, Kwadratisch en Logaritmisch. Zie Interpolaties instellen voor meer informatie.
grootte van functies > De scorefunctie voor de grootte wordt gebruikt om classificaties te wijzigen op basis van het bereik van waarden voor een numeriek veld. Enkele van de meest voorkomende gebruiksvoorbeelden hiervan zijn:

'Sterclassificaties:' Wijzig de score op basis van de waarde in het veld Sterwaardering. Wanneer twee items relevant zijn, wordt het item met de hogere classificatie eerst weergegeven.
"Marge:" Wanneer twee documenten relevant zijn, kan een detailhandelaar documenten met hogere marges eerst verhogen.
"Aantal klikken:" Voor toepassingen die klikken via acties voor producten of pagina's bijhouden, kunt u de grootte gebruiken om items te stimuleren die het meeste verkeer krijgen.
"Aantal downloads:" Voor toepassingen die downloads bijhouden, kunt u met de functie grootte items verhogen die de meeste downloads hebben.
functions > magnitude > boostingRangeStart Hiermee stelt u de beginwaarde van het bereik in waarmee de grootte wordt beoordeeld. De waarde moet een geheel getal of een drijvendekommagetal zijn. Voor sterbeoordelingen van 1 tot en met 4 zou dit 1 zijn. Voor marges van meer dan 50%, zou dit 50 zijn.
functions > magnitude > boostingRangeEnd Hiermee stelt u de eindwaarde van het bereik in waarvan de grootte wordt beoordeeld. De waarde moet een geheel getal of een drijvendekommagetal zijn. Voor sterbeoordelingen van 1 tot en met 4 zou dit 4 zijn.
functie > magnitude > constantBoostBeyondRange Geldige waarden zijn waar of onwaar (standaard). Als deze waarde is ingesteld op true, blijft de volledige boost van toepassing op documenten met een waarde voor het doelveld dat hoger is dan het bovenste uiteinde van het bereik. Als deze functie onwaar is, wordt de boost van deze functie niet toegepast op documenten met een waarde voor het doelveld dat buiten het bereik valt.
nieuwheid van functies > De functie voor het scoren van nieuwheid wordt gebruikt om classificatiescores voor items te wijzigen op basis van waarden in de velden DateTimeOffset. Een item met een recentere datum kan bijvoorbeeld hoger worden gerangschikt dan oudere items.

Het is ook mogelijk om items zoals agendagebeurtenissen met toekomstige datums te rangschikken, zodat items dichter bij het heden kunnen worden gerangschikt dan items verder in de toekomst.

In de huidige servicerelease wordt één einde van het bereik vastgezet op de huidige tijd. Het andere einde is een tijd in het verleden op basis van de boostDuration. Gebruik een negatieve boostDuration om een reeks tijden in de toekomst te stimuleren.

Het tarief waarmee de verhoging van een maximum- en minimumbereik wordt bepaald door de interpolatie die wordt toegepast op het scoreprofiel (zie de onderstaande afbeelding). Als u de toegepaste boostfactor wilt omkeren, kiest u een boostfactor van minder dan 1.
functies > versheid > boostDuration Hiermee stelt u een verloopperiode in waarna het stimuleren stopt voor een bepaald document. Zie Set boostingDuration in de volgende sectie voor syntaxis en voorbeelden.
afstand van functies > De functie voor scoren op afstand wordt gebruikt om de score van documenten te beïnvloeden op basis van hoe dicht of ver ze relatief zijn ten opzichte van een geografische referentielocatie. De referentielocatie wordt gegeven als onderdeel van de query in een parameter (met behulp van de scoreParameter-queryparameterparameter) als argument lon,lat .
functieafstandverwijzingPointParameter >> Een parameter die moet worden doorgegeven in query's die moeten worden gebruikt als referentielocatie (met behulp van de scoreParameter-queryparameterparameter).
functie > afstandsverbeteringDistance > Een getal dat de afstand in kilometers van de referentielocatie aangeeft waar het stimulerende bereik eindigt.
functietag > De functie tagscore wordt gebruikt om de score van documenten te beïnvloeden op basis van tags in documenten en zoekquery's. Documenten met tags die gemeenschappelijk zijn met de zoekquery, worden verbeterd. De tags voor de zoekquery worden opgegeven als een scoreparameter in elke zoekaanvraag (met behulp van de parameter scoringParameter-query).
functie > tag > tagsParameter Een parameter die moet worden doorgegeven in query's om tags voor een bepaalde aanvraag op te geven (met behulp van de parameter scoringParameter-query). De parameter bestaat uit een door komma's gescheiden lijst met hele termen. Als een bepaalde tag in de lijst zelf een door komma's gescheiden lijst is, kunt u een tekstnormalisatiefunctie in het veld gebruiken om de komma's op het moment van de query te verwijderen (wijs het kommateken toe aan een spatie). Met deze benadering wordt de lijst afgevlakt, zodat alle termen één lange tekenreeks met door komma's gescheiden termen zijn.
functionAggregation Optioneel. Is alleen van toepassing wanneer functies zijn opgegeven. Geldige waarden zijn: som (standaard), gemiddelde, minimum, maximum en firstMatching. Een zoekscore is één waarde die wordt berekend op basis van meerdere variabelen, waaronder meerdere functies. Dit kenmerk geeft aan hoe de boosts van alle functies worden gecombineerd tot één statistische boost die vervolgens wordt toegepast op de basisdocumentscore. De basisscore is gebaseerd op de tf-idf-waarde die is berekend vanuit het document en de zoekquery.
defaultScoringProfile Als er geen scoreprofiel is opgegeven bij het uitvoeren van een zoekaanvraag, wordt standaardscore gebruikt (alleen tf-idf ).

U kunt de ingebouwde standaardinstelling overschrijven, waarbij u een aangepast profiel vervangt als het profiel dat moet worden gebruikt wanneer er geen specifiek profiel wordt gegeven in de zoekaanvraag.

Interpolaties instellen

Met interpolaties kunt u de vorm van de helling instellen die wordt gebruikt voor scoren. Omdat scoren hoog tot laag is, neemt de helling altijd af, maar de interpolatie bepaalt de curve van de neerwaartse helling. De volgende interpolaties kunnen worden gebruikt:

Interpolatie Beschrijving
linear Voor items die binnen het maximum- en minimumbereik vallen, wordt de boost die op het item wordt toegepast, uitgevoerd in een voortdurend afnemende hoeveelheid. Lineair is de standaardinterpolatie voor een scoreprofiel.
constant Voor items die zich binnen het begin- en eindbereik bevinden, wordt een constante boost toegepast op de rangschikkingsresultaten.
quadratic In vergelijking met een lineaire interpolatie die een voortdurend afnemende boost heeft, neemt quadratisch in eerste instantie in een kleiner tempo af en neemt het eindbereik af met een veel hoger interval. Deze interpolatieoptie is niet toegestaan in scorefuncties voor tags.
logarithmic In vergelijking met een lineaire interpolatie die een voortdurend afnemende boost heeft, zal Logaritmisch in eerste instantie in een hoger tempo afnemen en vervolgens naarmate het eindbereik nadert, neemt het met een veel kleiner interval af. Deze interpolatieoptie is niet toegestaan in scorefuncties voor tags.

Constant, linear, quadratic, log10 lines on graph

BoostDuration instellen

boostingDuration is een kenmerk van de freshness functie. U gebruikt deze om een verloopperiode in te stellen waarna het stimuleren stopt voor een bepaald document. Als u bijvoorbeeld een productlijn of merk wilt stimuleren voor een promotieperiode van 10 dagen, geeft u de periode van 10 dagen op als 'P10D' voor deze documenten.

boostingDuration moet worden opgemaakt als een XSD dayTimeDuration-waarde (een beperkte subset van een ISO 8601-duurwaarde). Het patroon hiervoor is: "P[nD][T[nH][nM][nS]]".

De volgende tabel bevat verschillende voorbeelden.

Duur boostDuration
1 dag "P1D"
2 dagen en 12 uur "P2DT12H"
15 minuten "PT15M"
30 dagen, 5 uur, 10 minuten en 6,334 seconden "P30DT5H10M6.334S"

Zie XML-schema: Gegevenstypen (W3.org website) voor meer voorbeelden.

Uitgebreid voorbeeld

In het volgende voorbeeld ziet u het schema van een index met twee scoreprofielen (boostGenre, newAndHighlyRated). Elke query voor deze index die een profiel als queryparameter bevat, gebruikt het profiel om de resultatenset te scoren.

Het boostGenre profiel maakt gebruik van gewogen tekstvelden, het stimuleren van overeenkomsten in de velden albumTitle, genre en artistName. De velden worden respectievelijk verhoogd met 1,5, 5 en 2. Waarom is genre zo veel hoger dan de anderen? Als zoeken wordt uitgevoerd op gegevens die enigszins homogeen zijn (zoals het geval is met 'genre' in de musicstoreindex), hebt u mogelijk een grotere variantie in de relatieve gewichten nodig. In de musicstoreindex wordt 'rock' bijvoorbeeld weergegeven als een genre en in identieke genrebeschrijvingen. Als u het genre wilt opwegen tegen genrebeschrijving, heeft het genreveld een veel hoger relatieve gewicht nodig.

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

Zie ook