Konfigurace vyhodnocování relevance BM25

V tomto článku se dozvíte, jak nakonfigurovat algoritmus vyhodnocování relevance BM25 používaný službou Azure AI Search pro dotazy fulltextového vyhledávání. Vysvětluje také, jak povolit BM25 ve starších vyhledávacích službách.

BM25 se vztahuje na:

  • Dotazy, které používají search parametr pro fulltextové vyhledávání, u textových polí s přisouzením searchable
  • Bodování je vymezeno na searchFieldspole nebo na všechna searchable pole, pokud searchFields má hodnotu null.

Vyhledávací modul používá BM25 k výpočtu @searchScore pro každou shodu v daném dotazu. Odpovídající dokumenty jsou seřazené podle skóre hledání, přičemž nejlepší výsledky se vrátí v odpovědi dotazu. Je možné získat určité variace skóre ve výsledcích, a to i ze stejného dotazu, který se spouští ve stejném indexu vyhledávání, ale obvykle jsou tyto varianty malé a nemění celkové pořadí výsledků.

BM25 má výchozí hodnoty pro váhu četnosti termínů a délku dokumentu. Tyto vlastnosti můžete přizpůsobit, pokud nejsou pro váš obsah vhodné výchozí hodnoty. Změny konfigurace jsou vymezeny na jednotlivé indexy, což znamená, že můžete upravit vyhodnocování relevance na základě charakteristik jednotlivých indexů.

Výchozí algoritmus bodování

V závislosti na věku vyhledávací služby podporuje Azure AI Search dva algoritmy bodování pro fulltextový vyhledávací dotaz:

  • Algoritmus Okapi BM25 (po 15. červenci 2020)
  • Klasický algoritmus podobnosti (před 15. červencem 2020)

Řazení BM25 je výchozí, protože má tendenci vytvářet hodnocení vyhledávání, která odpovídají očekáváním uživatelů. Obsahuje parametry pro ladění výsledků na základě faktorů, jako je velikost dokumentu. Pro vyhledávací služby vytvořené po červenci 2020 je BM25 jediným algoritmus bodování. Pokud se pokusíte nastavit "podobnost" na ClassicSimilarity v nové službě, vrátí se chyba HTTP 400, protože služba tento algoritmus nepodporuje.

U starších služeb zůstává klasické podobnosti výchozím algoritmem. Starší služby můžou upgradovat na BM25 na základě indexu. Při přechodu z modelu Classic na BM25 můžete očekávat určité rozdíly ve způsobu řazení výsledků hledání.

Nastavení parametrů BM25

Řazení BM25 poskytuje dva parametry pro ladění výpočtu skóre relevance.

  1. K nastavení parametrů BM25 použijte požadavek vytvořit nebo aktualizovat index:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2020-06-30&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Pokud je index aktivní, připojte allowIndexDowntime=true k požadavku parametr URI zobrazený v předchozím příkladu.

    Protože Azure AI Search neumožňuje aktualizace živého indexu, musíte index převést do offline režimu, aby se parametry mohly přidat. Indexování a požadavky na dotazy selžou, když je index offline. Doba trvání výpadku je doba, kterou trvá aktualizace indexu, obvykle ne více než několik sekund. Po dokončení aktualizace se index vrátí automaticky.

  3. Nastavte "b" a "k1" nastavte vlastní hodnoty a pak požadavek odešlete.

    Vlastnost Typ Popis
    k1 Číslo Řídí funkci škálování mezi frekvencí termínů jednotlivých odpovídajících termínů a konečným skórem relevance páru dotazu na dokument. Hodnoty jsou obvykle 0,0 až 3.0, přičemž výchozí hodnota je 1,2.

    Hodnota 0,0 představuje "binární model", kde příspěvek jednoho shodného termínu je stejný pro všechny odpovídající dokumenty bez ohledu na to, kolikrát se daný termín v textu zobrazuje. Větší hodnoty k1 umožňují, aby skóre pokračovalo ve zvýšení, protože v dokumentu se nachází více instancí stejného termínu.

    Použití větší hodnoty k1 je důležité v případech, kdy je do vyhledávacího dotazu zahrnuto více termínů. V takových případech můžete chtít upřednostnit dokumenty odpovídající více termínům dotazu oproti dokumentům, které se shodují jenom s jedním termínem, vícekrát. Například při dotazování na termíny "Apollo Spaceflight", můžete chtít snížit skóre článku o řeckém řečtině, který obsahuje termín "Apollo" několikrát, bez zmínky o "spaceflight", vzhledem k jinému článku, který explicitně zmíní "Apollo" i "Spaceflight" jen párkrát.
    b Číslo Určuje, jak délka dokumentu ovlivňuje skóre relevance. Hodnoty jsou mezi 0 a 1, přičemž výchozí hodnota je 0,75.

    Hodnota 0,0 znamená, že délka dokumentu nemá vliv na skóre. Hodnota 1,0 znamená, že účinek četnosti termínů na skóre relevance je normalizován délkou dokumentu.

    Normalizace četnosti termínů délkou dokumentu je užitečná v případech, kdy chcete trestat delší dokumenty. V některých případech delší dokumenty (například kompletní román) budou pravděpodobně obsahovat mnoho irelevantních termínů v porovnání s kratšími dokumenty.

Povolení bodování BM25 u starších služeb

Pokud používáte vyhledávací službu vytvořenou od března 2014 do 15. července 2020, můžete BM25 povolit nastavením vlastnosti podobnosti u nových indexů. Tato vlastnost je zpřístupněna pouze u nových indexů, takže pokud chcete BM25 u existujícího indexu, musíte odstranit a znovu sestavit index s vlastností "podobnosti" nastavenou na Microsoft.Azure.Search.BM25Similarity.

Jakmile index existuje s vlastností "podobnosti", můžete přepínat mezi BM25Similarity nebo ClassicSimilarity.

Následující odkazy popisují vlastnost Podobnost v sadách Azure SDK.

Klientská knihovna Podobnost – vlastnost
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python similarity – vlastnost SearchIndex

Příklad REST

Můžete také použít rozhraní REST API. Následující příklad vytvoří nový index s vlastností "podobnost" nastavenou na BM25:

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2020-06-30
{
    "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"
    }
}

Viz také