Relevantie en score in Azure Cognitive Search

In dit artikel worden de relevantie en de scorealgoritmen uitgelegd die worden gebruikt voor het berekenen van zoekscores in Azure Cognitive Search. Er wordt een relevantiescore berekend voor elke overeenkomst die wordt gevonden in een zoekopdracht in volledige tekst, waarbij aan de sterkste overeenkomsten hogere zoekscores worden toegewezen.

Relevantie is alleen van toepassing op zoeken in volledige tekst. Filterquery's, automatisch aanvullen en voorgestelde query's, zoekopdrachten met jokertekens of fuzzy zoekopdrachten worden niet beoordeeld of geclassificeerd op relevantie.

In Azure Cognitive Search kunt u de relevantie van de zoekopdracht afstemmen en de zoekscores verbeteren via de volgende mechanismen:

  • Configuratie van score-algoritme
  • Semantische rangschikking (in preview, beschreven in dit artikel)
  • Scoreprofielen
  • Aangepaste scorelogica ingeschakeld via de parameter featuresMode

Notitie

Overeenkomsten worden gescoord en gerangschikt van hoog naar laag. De score wordt geretourneerd als '@search.score'. Standaard worden de bovenste 50 geretourneerd in het antwoord, maar u kunt de parameter $top gebruiken om een kleiner of groter aantal items (maximaal 1000 in één antwoord) te retourneren en $skip om de volgende set resultaten op te halen.

Relevantiescore

Relevantiescore verwijst naar de berekening van een zoekscore die fungeert als een indicator van de relevantie van een item in de context van de huidige query. Hoe hoger de score, hoe relevanter het item.

De zoekscore wordt berekend op basis van statistische eigenschappen van de tekenreeksinvoer en de query zelf. Azure Cognitive Search documenten vindt die overeenkomen op zoektermen (sommige of alle, afhankelijk van searchMode), waarbij documenten met veel exemplaren van de zoekterm worden gebruikt. De zoekscore stijgt nog hoger als de term zeldzaam is in de gegevensindex, maar vaak voorkomt in het document. De basis voor deze benadering voor het berekenen van relevantie staat bekend als TF-IDF of term frequency-inverse documentfrequentie.

Zoekscores kunnen in een resultatenset worden herhaald. Wanneer meerdere treffers dezelfde zoekscore hebben, is de volgorde van dezelfde gescoorde items niet gedefinieerd en niet stabiel. Voer de query opnieuw uit en mogelijk ziet u dat de positie van items wordt verplaatst, met name als u de gratis service of een factureerbare service met meerdere replica's gebruikt. Gezien twee items met een identieke score, is er geen garantie welke als eerste wordt weergegeven.

Als u de gelijke stand tussen herhalende scores wilt verbreken, kunt u een $orderby-component toevoegen aan de eerste volgorde op score en vervolgens sorteren op een ander sorteerbaar veld (bijvoorbeeld $orderby=search.score() desc,Rating desc). Zie $orderby voor meer informatie.

Notitie

A @search.score = 1 geeft een niet-gescoorde of niet-gerangschikte resultatenset aan. De score is uniform voor alle resultaten. Resultaten zonder score worden weergegeven wanneer het queryformulier fuzzy zoekopdrachten, jokertekens of regexquery's of een lege zoekopdracht is (search=*soms gecombineerd met filters, waarbij het filter de primaire methode is voor het retourneren van een overeenkomst).

Azure Cognitive Search biedt het BM25Similarity classificatie-algoritme. In oudere zoekservices gebruikt ClassicSimilarityu mogelijk .

Zowel BM25 als Klassiek zijn TF-IDF-achtige ophaalfuncties die de term frequentie (TF) en de inverse documentfrequentie (IDF) als variabelen gebruiken om relevantiescores te berekenen voor elk document-querypaar, die vervolgens wordt gebruikt voor het rangschikken van resultaten. Hoewel BM25 conceptueel vergelijkbaar is met klassiek, is bm25 gebaseerd op probabilistische informatie die meer intuïtieve overeenkomsten produceert, zoals gemeten door gebruikersonderzoek.

BM25 biedt geavanceerde aanpassingsopties, zodat de gebruiker kan bepalen hoe de relevantiescore wordt geschaald met de termfrequentie van overeenkomende termen. Zie Het score-algoritme configureren voor meer informatie.

Notitie

Als u een zoekservice gebruikt die vóór juli 2020 is gemaakt, is het score-algoritme waarschijnlijk de vorige standaard, ClassicSimilarity, die u per index kunt upgraden. Zie Bm25-scores inschakelen voor oudere services voor meer informatie.

In het volgende videosegment vindt u snel een uitleg van de algemeen beschikbare classificatiealgoritmen die in Azure Cognitive Search worden gebruikt. U kunt de volledige video bekijken voor meer achtergrondinformatie.

Scorestatistieken en plaksessies

Voor schaalbaarheid distribueert Azure Cognitive Search elke index horizontaal via een shardingproces, wat betekent dat delen van een index fysiek gescheiden zijn.

De score van een document wordt standaard berekend op basis van statistische eigenschappen van de gegevens in een shard. Deze benadering is over het algemeen geen probleem voor een groot geheel aan gegevens en biedt betere prestaties dan het berekenen van de score op basis van informatie over alle shards. Dat gezegd hebbende, kan het gebruik van deze optimalisatie van prestaties ertoe leiden dat twee zeer vergelijkbare documenten (of zelfs identieke documenten) verschillende relevantiescores krijgen als ze in verschillende shards terechtkomen.

Als u de score liever wilt berekenen op basis van de statistische eigenschappen voor alle shards, kunt u dit doen door scoringStatistics=global toe te voegen als queryparameter (of voeg 'scoringStatistics': 'global' toe als hoofdparameter van de queryaanvraag).

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
    "search": "<query string>",
    "scoringStatistics": "global"
}

Het gebruik van scoringStatistics zorgt ervoor dat alle shards in dezelfde replica dezelfde resultaten opleveren. Dat gezegd hebbende, kunnen verschillende replica's enigszins van elkaar verschillen, omdat ze altijd worden bijgewerkt met de meest recente wijzigingen in uw index. In sommige scenario's wilt u mogelijk dat uw gebruikers consistentere resultaten krijgen tijdens een 'querysessie'. In dergelijke scenario's kunt u een sessionId opgeven als onderdeel van uw query's. De sessionId is een unieke tekenreeks die u maakt om te verwijzen naar een unieke gebruikerssessie.

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
    "search": "<query string>",
    "sessionId": "<string>"
}

Zolang hetzelfde sessionId wordt gebruikt, wordt er een poging gedaan om dezelfde replica te richten, waardoor de consistentie van de resultaten die uw gebruikers te zien krijgen, toeneemt.

Notitie

Het herhaaldelijk opnieuw gebruiken van dezelfde sessionId waarden kan de taakverdeling van de aanvragen over replica's verstoren en de prestaties van de zoekservice nadelig beïnvloeden. De waarde die als sessionId wordt gebruikt, mag niet beginnen met een _-teken.

Scoreprofielen

U kunt de classificatie van verschillende velden aanpassen door een scoreprofiel te definiëren. Scoreprofielen bieden criteria voor het verhogen van de zoekscore van een overeenkomst op basis van inhoudskenmerken. U kunt bijvoorbeeld overeenkomsten verbeteren op basis van hun omzetpotentieel, nieuwere items promoten of items die te lang in voorraad zijn geweest, verbeteren.

Een scoreprofiel maakt deel uit van de indexdefinitie, bestaande uit gewogen velden, functies en parameters. Zie Scoreprofielen voor meer informatie over het definiëren van een profiel.

parameter featuresMode (preview)

Zoekdocumentenaanvragen hebben een nieuwe parameter featuresMode die aanvullende informatie kan bieden over relevantie op veldniveau. Terwijl de @searchScore wordt berekend voor het document all-up (hoe relevant is dit document in de context van deze query), kunt u via featuresMode informatie krijgen over afzonderlijke velden, zoals uitgedrukt in een @search.features structuur. De structuur bevat alle velden die in de query worden gebruikt (ofwel specifieke velden via searchFields in een query, of alle velden die zijn toegewezen als doorzoekbaar in een index). Voor elk veld krijgt u de volgende waarden:

  • Aantal unieke tokens gevonden in het veld
  • Vergelijkbaarheidsscore, of een meting van hoe vergelijkbaar de inhoud van het veld is, ten opzichte van de queryterm
  • Termfrequentie of het aantal keren dat de queryterm in het veld is gevonden

Voor een query die is gericht op de velden 'beschrijving' en 'titel', kan een antwoord dat er @search.features als volgt uitziet:

"value": [
 {
    "@search.score": 5.1958685,
    "@search.features": {
        "description": {
            "uniqueTokenMatches": 1.0,
            "similarityScore": 0.29541412,
            "termFrequency" : 2
        },
        "title": {
            "uniqueTokenMatches": 3.0,
            "similarityScore": 1.75451557,
            "termFrequency" : 6
        }

U kunt deze gegevenspunten gebruiken in aangepaste scoreoplossingen of de informatie gebruiken om problemen met de relevantie van zoekopdrachten op te sporen.

Zie ook