Relevanz in Schlüsselwort (keyword) Suche (BM25-Bewertung)

In diesem Artikel wird der BM25-Relevanzbewertungsalgorithmus erläutert, der zum Berechnen von Suchergebnissen für die Volltextsuche verwendet wird. BM25-Relevanz ist exklusiv für die Volltextsuche. Filterabfragen, AutoVervollständigung und vorgeschlagene Abfragen, Platzhaltersuche oder Fuzzysuchabfragen werden nicht bewertet oder nach Relevanz sortiert.

Azure AI Search bietet die folgenden Bewertungsalgorithmen für die Volltextsuche:

Algorithmus Verwendung Bereich
BM25Similarity Festgelegter Algorithmus für alle Suchdienste, die nach Juli 2020 erstellt wurden. Sie können diesen Algorithmus konfigurieren, aber Sie können nicht zu einem älteren (klassischen) wechseln. Unbegrenzt.
ClassicSimilarity In älteren Suchdiensten vorhanden. Sie können sich für BM25 entscheiden und einen Algorithmus pro Index auswählen. 0 < 1,00

BM25 und Classic sind beide TF-IDF-ähnliche Abruffunktionen, bei denen die Begriffshäufigkeit (Term Frequency, TF) und die inverse Dokumenthäufigkeit (Inverse Document Frequency, IDF) als Variablen verwendet werden, um die Relevanzbewertungen für jedes Dokument/Abfrage-Paar zu berechnen, die dann zur Priorisierung der Ergebnisse verwendet werden. BM25 ist konzeptionell dem älteren klassischen Ähnlichkeitsalgorithmus ähnlich, basiert aber auf dem Abruf probabilistischer Informationen, der intuitivere Übereinstimmungen erzeugt, wie von der Benutzerforschung gemessen.

BM25 bietet erweiterte Anpassungsoptionen; z. B. kann der Benutzer entscheiden, wie weit die Relevanzbewertung von der Häufigkeit übereinstimmender Begriffe abhängt. Weitere Informationen finden Sie unter Konfigurieren des Bewertungsalgorithmus.

Hinweis

Wenn Sie einen Suchdienst verwenden, der vor Juli 2020 erstellt wurde, ist der Bewertungsalgorithmus wahrscheinlich die vorherige Standardeinstellung ClassicSimilarity, die Sie pro Index aktualisieren. Ausführliche Informationen finden Sie unter Aktivieren der BM25-Bewertung für ältere Dienste.

Das folgende Videosegment bietet eine schnelle Übersicht über die in Azure AI Search verwendeten allgemein verfügbaren Ähnlichkeitsalgorithmen. Sie können sich das vollständige Video ansehen, um weitere Hintergrundinformationen zu erhalten.

Funktionsweise der BM25-Bewertung

Die Relevanzbewertung bezieht sich auf die Berechnung einer Suchbewertung (@search.score), die als Indikator für die Relevanz eines Elements im Kontext der aktuellen Abfrage dient. Der Bereich ist ungebunden. Je höher die Bewertung, desto relevanter das Element.

Eine Suchbewertung wird auf Basis der statistischen Eigenschaften der Zeichenfolgeeingabe und der Abfrage selbst berechnet. Azure AI Search findet Dokumente, die Suchbegriffe enthalten (einige oder alle, in Abhängigkeit von searchMode), wobei Dokumente bevorzugt werden, in denen der Suchbegriff häufig vorkommt. Die Suchbewertung fällt sogar noch höher aus, wenn der Begriff nur selten im Datenindex, jedoch innerhalb des Dokuments häufig vorkommt. Die Grundlage für diesen Ansatz zur Berechnung der Relevanz wird als TF-IDF (Term Frequency – Inverse Document Frequency, Vorkommenshäufigkeit – Inverse Dokumenthäufigkeit) bezeichnet.

Suchbewertungen können in einem Resultset wiederholt vorkommen. Wenn mehrere Treffer die gleiche Suchbewertung aufweisen, ist die Sortierung von Elementen mit gleicher Bewertung nicht definiert und somit auch nicht stabil. Wenn Sie die Abfrage noch mal ausführen, sehen Sie möglicherweise, dass sich die Position von Elementen ändert. Dies ist insbesondere dann der Fall, wenn Sie den kostenlosen Dienst oder einen abrechenbaren Dienst mit vielen Replikaten verwenden. Wenn zwei Elemente mit identischer Bewertung vorliegen, kann nicht garantiert werden, welches Element zuerst angezeigt wird.

Um eine Reihenfolge für Elemente mit der gleichen Bewertung festzulegen, können Sie eine $orderby-Klausel hinzufügen, um erst nach Bewertung und dann nach einem anderen sortierbaren Feld zu sortieren (z. B. $orderby=search.score() desc,Rating desc). Weitere Informationen finden Sie unter $orderby.

Für die Bewertung werden nur Felder verwendet, die als searchable-Index oder searchFields in der Abfrage markiert sind. Es werden nur Felder zurückgegeben, die in der Abfrage als retrievable markiert oder als select angegeben sind, zusammen mit ihrer Suchbewertung.

Hinweis

@search.score = 1 bedeutet, dass es sich um ein nicht bewertetes oder unsortiertes Resultset handelt. Die Bewertung wird für alle Ergebnisse gleich durchgeführt. Nicht bewertete Ergebnisse treten auf, wenn das Abfrageformular eine Fuzzysuche, Platzhalter- oder RegEx-Abfragen oder eine leere Suche ist (search=*, manchmal gekoppelt mit Filtern, wobei der Filter das primäre Mittel zum Zurückgeben einer Übereinstimmung ist).

Ergebnisse in Textergebnissen

Wenn Ergebnisse bewertet werden, enthält die @search.score-Eigenschaft den Wert, der zum Sortieren der Ergebnisse verwendet wird.

In der folgenden Tabelle wird die Bewertungseigenschaft identifiziert, die für jede Übereinstimmung, jeden Algorithmus und jeden Bereich zurückgegeben wird.

Suche Parameter Bewertungsalgorithmus Bereich
Volltextsuche @search.score BM25-Algorithmus unter Verwendung der im Index angegebenen Parameter. Unbegrenzt.

Bewertungsvariation

Suchergebnisse vermitteln einen allgemeinen Eindruck von Relevanz, der die Stärke der Übereinstimmung im Vergleich zu anderen Dokumenten im selben Resultset widerspiegelt. Bewertungen sind jedoch von einer Abfrage zur nächsten nicht immer konsistent, sodass Sie möglicherweise geringfügige Abweichungen in der Reihenfolge der Suchdokumente feststellen werden. Hierfür kann es verschiedene Ursachen geben.

Ursache Beschreibung
Datenvolatilität Der Indexinhalt variiert, wenn Sie Dokumente hinzufügen, ändern oder löschen. Begriffshäufigkeiten ändern sich, wenn im Laufe der Zeit Indexaktualisierungen verarbeitet werden, die sich auf die Suchbewertungen für übereinstimmende Dokumente auswirken.
Mehrere Replikate Bei Diensten, die mehrere Replikate verwenden, werden Abfragen parallel für jedes Replikat ausgegeben. Die zum Berechnen einer Suchbewertung verwendete Indexstatistik wird pro Replikat berechnet, wobei die Ergebnisse zusammengeführt und in der Abfrageantwort sortiert werden. Replikate sind größtenteils Spiegelungen. Statistiken können sich jedoch aufgrund geringfügiger Zustandsabweichungen voneinander unterscheiden. So könnten beispielsweise in einem Replikat Dokumente gelöscht worden sein, die aus anderen Replikaten zusammengeführt wurden, was zur jeweiligen Statistik beiträgt. Unterschiede in Statistiken, die pro Replikat berechnet werden, fallen in kleineren Indizes deutlicher auf. Weitere Informationen zu diesem Fall finden Sie in der Dokumentation zur Kapazitätsplanung unter Konzepte: Sucheinheiten, Replikate, Partitionen, Shards.
Identische Bewertungen Wenn mehrere Dokumente dieselbe Bewertung aufweisen, wird eine davon zuerst angezeigt.

Bewertungsstatistiken und persistente Sitzungen

Aus Gründen der Skalierbarkeit verteilt Azure AI Search jeden Index horizontal mithilfe eines Shardingprozesses. Dies bedeutet, dass Teile eines Index physisch voneinander getrennt sind.

Standardmäßig wird die Bewertung eines Dokuments basierend auf statistischen Eigenschaften der Daten innerhalb eines Shards berechnet. Diese Vorgehensweise stellt in der Regel bei einem großen Datenkorpus kein Problem dar und bietet eine bessere Leistung als die Berechnung der Bewertung auf Grundlage von Informationen in allen Shards. Allerdings kann die Verwendung dieser Leistungsoptimierung dazu führen, dass zwei sehr ähnliche (oder sogar identische) Dokumente unterschiedliche Relevanzbewertungen erhalten, wenn sie sich in verschiedenen Shards befinden.

Wenn Sie es vorziehen, die Bewertung basierend auf den statistischen Eigenschaften für alle Shards zu berechnen, können Sie dies tun, indem Sie scoringStatistics=global als Abfrageparameter hinzufügen (oder "scoringStatistics": "global" als Textparameter der Abfrageanforderung hinzufügen).

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

Durch die Verwendung von scoringStatistics wird sichergestellt, dass alle Shards in demselben Replikat die gleichen Ergebnisse liefern. Dennoch können sich unterschiedliche Replikate geringfügig voneinander unterscheiden, da sie immer mit den neuesten Änderungen am Index aktualisiert werden. In einigen Szenarien möchten Sie möglicherweise, dass die Benutzer während einer Abfragesitzung konsistentere Ergebnisse erhalten. In solchen Szenarien können Sie eine sessionId in den Abfragen bereitstellen. Die sessionId ist eine eindeutige Zeichenfolge, die Sie erstellen, um auf eine eindeutige Benutzersitzung zu verweisen.

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

Solange dieselbe sessionId verwendet wird, wird ein bestmöglicher Versuch unternommen, das gleiche Replikat als Ziel zu verwenden und die Konsistenz der Ergebnisse zu erhöhen, die den Benutzern angezeigt werden.

Hinweis

Wenn Sie wiederholt die gleichen sessionId-Werte verwenden, können der Lastenausgleich der Anforderungen über Replikate hinweg und die Leistung des Suchdiensts beeinträchtigt werden. Der als „sessionId“ verwendete Wert darf nicht mit dem Zeichen „_“ beginnen.

Relevanzoptimierung

In Azure AI Search können Sie BM25-Algorithmusparameter konfigurieren und die Suchrelevanz optimieren und Suchergebnisse mithilfe dieser Mechanismen steigern:

Vorgehensweise Implementierung Beschreibung
Konfiguration der Bewertungsalgorithmen Suchindex
Bewertungsprofile Suchindex Stellen Kriterien für eine höhere Gewichtung der Suchbewertung einer Übereinstimmung basierend auf Inhaltseigenschaften bereit. Mit dieser Logik können Sie Übereinstimmungen z. B. auf Grundlage des Umsatzpotentials, der Aktualität von Artikeln oder der Lagerzeit von Waren höher gewichten. Ein Bewertungsprofil ist Teil der Indexdefinition und besteht aus gewichteten Feldern, Funktionen und Parametern. Sie können einen vorhandenen Index mit Bewertungsprofiländerungen aktualisieren, ohne dass ein Index neu erstellt wird.
Semantische Rangfolge Abfrageanforderung Wendet maschinelles Leseverstehen auf Suchergebnisse an, um die semantischen relevanten Ergebnisse am Anfang zu fördern.
featuresMode-Parameter Abfrageanforderung Dieser Parameter wird hauptsächlich zum Entpacken einer Bewertung verwendet, kann aber für Code verwendet werden, der eine benutzerdefinierte Bewertungslösung bereitstellt.

featuresMode-Parameter (Vorschau)

Anforderungen zur Dokumentsuche weisen einen neuen featuresMode-Parameter auf, der weitere Details über die Relevanz auf Feldebene bereitstellen kann. Während @searchScore für das gesamte Dokument berechnet wird (wie relevant ist dieses Dokument im Kontext dieser Abfrage) können Sie mithilfe von featuresMode Informationen zu einzelnen Feldern erhalten, wie in einer @search.features-Struktur ausgedrückt. Die Struktur enthält alle in der Abfrage verwendeten Felder (entweder spezifische Felder mithilfe von searchFields in einer Abfrage oder alle in einem Index als searchable gekennzeichneten Felder). Für jedes Feld erhalten Sie die folgenden Werte:

  • Anzahl der im Feld gefundenen eindeutigen Token
  • Ähnlichkeitsbewertung oder eine Kennzahl für die Ähnlichkeit des Feldinhalts im Verhältnis zum Abfrageausdruck
  • Ausdruckshäufigkeit oder Anzahl der Vorkommen des Ausdrucks im Feld

Für eine Abfrage, die auf die Felder „Beschreibung“ und „Titel“ abzielt, könnte eine Antwort, die @search.features beinhaltet, etwa so aussehen:

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

Sie können diese Datenpunkte in benutzerdefinierten Bewertungslösungen verbrauchen oder die Informationen zum Debuggen von Problemen bei der Suchrelevanz verwenden.

Anzahl der bewerteten Ergebnisse in einer Antwort auf Volltextabfragen

Wenn Sie die Paginierung nicht verwenden, gibt die Suchmaschine standardmäßig die höchsten 50 Übereinstimmungen für die Volltextsuche zurück. Sie können den top-Parameter verwenden, um eine kleinere oder größere Anzahl von Elementen (bis zu 1000 in einer einzelnen Antwort) zurückzugeben. Die Volltextsuche unterliegt einem maximalen Grenzwert von 1.000 Übereinstimmungen (siehe API-Antwortgrenzwerte). Sobald 1.000 Übereinstimmungen gefunden wurden, sucht die Suchmaschine nicht mehr weiter.

Um mehr oder weniger Ergebnisse zurückzugeben, verwenden Sie die Paginierungsparameter top, skip und next. Das Paginieren bestimmt die Anzahl der Ergebnisse auf jeder logischen Seite und navigiert durch die vollständige Nutzlast. Weitere Informationen finden Sie unter Arbeiten mit Suchergebnissen.

Siehe auch