Konfigurowanie oceniania istotności BM25
W tym artykule dowiesz się, jak skonfigurować algorytm oceniania zgodności BM25 używany przez usługę Azure AI Search dla zapytań wyszukiwania pełnotekstowego. Wyjaśniono również, jak włączyć usługę BM25 w starszych usługach wyszukiwania.
BM25 ma zastosowanie do:
- Zapytania korzystające z parametru do wyszukiwania pełnotekstowego w polach tekstowych o
searchable
atrybuciesearch
. - Ocenianie jest ograniczone do
searchFields
wartości , lub do wszystkichsearchable
pól, jeślisearchFields
ma wartość null.
Aparat wyszukiwania używa BM25 do obliczania @searchScore dla każdego dopasowania w danym zapytaniu. Pasujące dokumenty są klasyfikowane według ich wyników wyszukiwania, a najlepsze wyniki są zwracane w odpowiedzi zapytania. Istnieje możliwość uzyskania pewnych zmian wyników w wynikach, nawet z tego samego zapytania wykonywanego w tym samym indeksie wyszukiwania, ale zazwyczaj te odmiany są małe i nie zmieniają ogólnej klasyfikacji wyników.
BM25 ma wartości domyślne dla częstotliwości ważonej terminów i długości dokumentu. Te właściwości można dostosować, jeśli wartości domyślne nie są odpowiednie dla zawartości. Zmiany konfiguracji są ograniczone do poszczególnych indeksów, co oznacza, że można dostosować ocenianie istotności na podstawie cech każdego indeksu.
Domyślny algorytm oceniania
W zależności od wieku usługi wyszukiwania usługa Azure AI Search obsługuje dwa algorytmy oceniania dla zapytania wyszukiwania pełnotekstowego:
- Algorytm Okapi BM25 (po 15 lipca 2020 r.)
- Klasyczny algorytm podobieństwa (przed 15 lipca 2020 r.)
Klasyfikacja BM25 jest domyślna, ponieważ zwykle tworzy rankingi wyszukiwania, które lepiej odpowiadają oczekiwaniom użytkowników. Zawiera on parametry dostrajania wyników na podstawie czynników, takich jak rozmiar dokumentu. W przypadku usług wyszukiwania utworzonych po lipcu 2020 r. BM25 jest jedynym algorytmem oceniania. Jeśli spróbujesz ustawić "podobieństwo" do klasy ClassicSimilarity w nowej usłudze, zwracany jest błąd HTTP 400, ponieważ ten algorytm nie jest obsługiwany przez usługę.
W przypadku starszych usług podobieństwo klasyczne pozostaje algorytmem domyślnym. Starsze usługi mogą być uaktualniane do wersji BM25 na podstawie poszczególnych indeksów. Podczas przełączania z wersji klasycznej na BM25 można spodziewać się pewnych różnic w kolejności wyników wyszukiwania.
Ustawianie parametrów BM25
Klasyfikacja BM25 zawiera dwa parametry dostrajania obliczeń oceny istotności.
Użyj żądania tworzenia lub aktualizowania indeksu, aby ustawić parametry BM25:
PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2024-07-01&allowIndexDowntime=true { "similarity": { "@odata.type": "#Microsoft.Azure.Search.BM25Similarity", "b" : 0.75, "k1" : 1.2 } }
Jeśli indeks jest dynamiczny, dołącz
allowIndexDowntime=true
parametr URI żądania, pokazany w poprzednim przykładzie.Ponieważ usługa Azure AI Search nie zezwala na aktualizacje indeksu na żywo, należy przejąć indeks w tryb offline, aby można było dodać parametry. Indeksowanie i żądania zapytań kończą się niepowodzeniem, gdy indeks jest w trybie offline. Czas trwania awarii to czas potrzebny na zaktualizowanie indeksu, zwykle nie więcej niż kilka sekund. Po zakończeniu aktualizacji indeks wraca automatycznie.
Ustaw
"b"
wartości niestandardowe i"k1"
na , a następnie wyślij żądanie.Właściwość Type Opis k1 Liczba Steruje funkcją skalowania między częstotliwością terminów poszczególnych terminów pasujących do końcowego wyniku istotności pary dokument-zapytanie. Wartości są zwykle od 0,0 do 3,0, z wartością domyślną 1.2.
Wartość 0.0 reprezentuje "model binarny", w którym udział pojedynczego pasującego terminu jest taki sam dla wszystkich pasujących dokumentów, niezależnie od tego, ile razy termin pojawia się w tekście. Większe wartości k1 umożliwiają dalsze zwiększanie wyniku, ponieważ w dokumencie znajduje się więcej wystąpień tego samego terminu.
Użycie większej wartości k1 jest ważne w przypadkach, gdy w zapytaniu wyszukiwania znajduje się wiele terminów. W takich przypadkach możesz chcieć faworyzować dokumenty pasujące do większej liczby terminów zapytania, w dokumentach, które są zgodne tylko z pojedynczym terminem, wiele razy. Na przykład podczas wykonywania zapytań dotyczących terminów "Apollo Spaceflight" możesz chcieć obniżyć wynik artykułu o greckiej mitologii, który zawiera termin "Apollo" kilkadziesiąt razy, bez wzmianki o "Spaceflight", w stosunku do innego artykułu, który wyraźnie wspomina zarówno "Apollo" i "Spaceflight" kilka razy.b Liczba Określa, jak długość dokumentu wpływa na ocenę istotności. Wartości mają od 0 do 1, a wartość domyślna to 0,75.
Wartość 0,0 oznacza, że długość dokumentu nie ma wpływu na wynik. Wartość 1,0 oznacza, że wpływ częstotliwości terminów na ocenę istotności jest znormalizowany przez długość dokumentu.
Normalizacja częstotliwości terminów według długości dokumentu jest przydatna w przypadkach, w których chcesz karać dłuższe dokumenty. W niektórych przypadkach dłuższe dokumenty (takie jak kompletna powieść) mogą zawierać wiele nieistotnych terminów w porównaniu z krótszymi dokumentami.
Włączanie oceniania BM25 dla starszych usług
Jeśli korzystasz z usługi wyszukiwania utworzonej od marca 2014 r. do 15 lipca 2020 r., możesz włączyć usługę BM25, ustawiając właściwość "podobieństwa" dla nowych indeksów. Właściwość jest uwidoczniona tylko na nowych indeksach, więc jeśli chcesz, aby usługa BM25 w istniejącym indeksie została usunięta i ponownie skompilowana z właściwością "podobieństwa" ustawioną na Microsoft.Azure.Search.BM25Similarity
wartość .
Gdy indeks istnieje z właściwością "podobieństwa", możesz przełączać się między BM25Similarity
lub ClassicSimilarity
.
Poniższe linki opisują właściwość Podobieństwo w zestawach SDK platformy Azure.
Biblioteka kliencka | Właściwość podobieństwa |
---|---|
.NET | SearchIndex.Podobieństwo |
Java | SearchIndex.setSimilarity |
JavaScript | SearchIndex.Podobieństwo |
Python | właściwość podobieństwa w obiekcie SearchIndex |
Przykład REST
Możesz również użyć interfejsu API REST. Poniższy przykład tworzy nowy indeks z właściwością "podobieństwa" ustawioną na BM25:
PUT [service-name].search.windows.net/indexes/[index name]?api-version=2024-07-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"
}
}