Delen via


BM25-relevantiescore configureren

In dit artikel leert u hoe u het BM25 relevantiescore-algoritme configureert dat wordt gebruikt door Azure AI Search voor zoekquery's voor volledige tekst. Ook wordt uitgelegd hoe u BM25 inschakelt voor oudere zoekservices.

BM25 is van toepassing op:

  • Query's die gebruikmaken van de search parameter voor zoeken in volledige tekst, op tekstvelden met een searchable toeschrijving.
  • Scoren is gericht op searchFields, of op alle searchable velden als searchFields deze null is.

De zoekmachine gebruikt BM25 om een @searchScore te berekenen voor elke overeenkomst in een bepaalde query. Overeenkomende documenten worden gerangschikt op hun zoekscore, waarbij de belangrijkste resultaten worden geretourneerd in het queryantwoord. Het is mogelijk om een aantal scorevariaties in resultaten op te halen, zelfs van dezelfde query die wordt uitgevoerd via dezelfde zoekindex, maar meestal zijn deze variaties klein en veranderen de algehele rangschikking van resultaten niet.

BM25 heeft standaardwaarden voor de gewichtsfrequentie en documentlengte. U kunt deze eigenschappen aanpassen als de standaardinstellingen niet geschikt zijn voor uw inhoud. Configuratiewijzigingen zijn afgestemd op afzonderlijke indexen, wat betekent dat u de relevantiescore kunt aanpassen op basis van de kenmerken van elke index.

Standaardscore-algoritme

Afhankelijk van de leeftijd van uw zoekservice ondersteunt Azure AI Search twee scorealgoritmen voor een zoekopdracht in volledige tekst:

  • Okapi BM25-algoritme (na 15 juli 2020)
  • Klassieke gelijkenis-algoritme (vóór 15 juli 2020)

BM25-classificatie is de standaardinstelling, omdat deze meestal zoekrangschikkingen produceert die beter aansluiten op de verwachtingen van gebruikers. Het bevat parameters voor het afstemmen van resultaten op basis van factoren zoals documentgrootte. Voor zoekservices die na juli 2020 zijn gemaakt, is BM25 het enige score-algoritme. Als u 'gelijkenis' probeert in te stellen op ClassicSimilarity op een nieuwe service, wordt een HTTP 400-fout geretourneerd omdat dat algoritme niet wordt ondersteund door de service.

Voor oudere services blijft klassieke overeenkomst het standaardalgoritmen. Oudere services kunnen per index upgraden naar BM25 . Wanneer u overstapt van klassiek naar BM25, ziet u enkele verschillen in de volgorde van zoekresultaten.

BM25-parameters instellen

BM25-classificatie biedt twee parameters voor het afstemmen van de berekening van de relevantiescore.

  1. Gebruik een aanvraag index maken of bijwerken om BM25-parameters in te stellen:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2023-11-01&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Als de index live is, voegt u de allowIndexDowntime=true URI-parameter toe aan de aanvraag, weergegeven in het vorige voorbeeld.

    Omdat Azure AI Search geen updates toestaat voor een live-index, moet u de index offline halen, zodat de parameters kunnen worden toegevoegd. Indexering en queryaanvragen mislukken terwijl de index offline is. De duur van de storing is de hoeveelheid tijd die nodig is om de index bij te werken, meestal niet meer dan enkele seconden. Wanneer de update is voltooid, wordt de index automatisch teruggezet.

  3. Stel "b" aangepaste waarden in en "k1" verzend de aanvraag.

    Eigenschap Type Description
    k1 Nummer Hiermee bepaalt u de schaalfunctie tussen de termfrequentie van elke overeenkomende termen tot de uiteindelijke relevantiescore van een documentquerypaar. Waarden zijn meestal 0,0 tot 3.0, met 1.2 als standaardwaarde.

    Een waarde van 0.0 vertegenwoordigt een binair model, waarbij de bijdrage van één overeenkomende term hetzelfde is voor alle overeenkomende documenten, ongeacht hoe vaak die term in de tekst wordt weergegeven. Met grotere k1-waarden kan de score blijven toenemen naarmate er meer exemplaren van dezelfde term in het document worden gevonden.

    Het gebruik van een grotere k1-waarde is belangrijk in gevallen waarin meerdere termen worden opgenomen in een zoekquery. In dergelijke gevallen wilt u misschien documenten die overeenkomen met meer querytermen, een voorkeur geven voor documenten die slechts één term meerdere keren overeenkomen. Als u bijvoorbeeld query's uitvoert op de termen 'Apollo Spaceflight', wilt u misschien de score verlagen van een artikel over Griekse Mythy dat de term 'Apollo' enkele tientallen keren bevat, zonder vermeldingen van 'Spaceflight', ten opzichte van een ander artikel dat expliciet 'Apollo' en 'Spaceflight' een paar keer vermeldt.
    b Nummer Bepaalt hoe de lengte van een document van invloed is op de relevantiescore. Waarden liggen tussen 0 en 1, met 0,75 als standaardwaarde.

    Een waarde van 0,0 betekent dat de lengte van het document geen invloed heeft op de score. Een waarde van 1,0 betekent dat het effect van de termfrequentie op relevantiescore wordt genormaliseerd op de lengte van het document.

    Het normaliseren van de termfrequentie op de lengte van het document is handig in gevallen waarin u langere documenten wilt straffen. In sommige gevallen bevatten langere documenten (zoals een volledige roman) waarschijnlijk veel irrelevante termen, vergeleken met kortere documenten.

BM25 scoren op oudere services inschakelen

Als u een zoekservice uitvoert die is gemaakt van maart 2014 tot en met 15 juli 2020, kunt u BM25 inschakelen door een eigenschap 'gelijkenis' in te stellen voor nieuwe indexen. De eigenschap wordt alleen weergegeven voor nieuwe indexen, dus als u BM25 op een bestaande index wilt gebruiken, moet u de index verwijderen en opnieuw opbouwen met een eigenschap 'gelijkenis' ingesteld op Microsoft.Azure.Search.BM25Similarity.

Zodra een index bestaat met een eigenschap 'gelijkenis', kunt u schakelen tussen BM25Similarity of ClassicSimilarity.

In de volgende koppelingen wordt de eigenschap Similarity in de Azure SDK's beschreven.

Clientbibliotheek Eigenschap Gelijkenis
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python eigenschap gelijkenis in SearchIndex

REST-voorbeeld

U kunt ook de REST API gebruiken. In het volgende voorbeeld wordt een nieuwe index gemaakt met de eigenschap 'gelijkenis' ingesteld op BM25:

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2023-11-01
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Zie ook