Configurare l'assegnazione dei punteggi per pertinenza BM25

Questo articolo illustra come configurare l'algoritmo di assegnazione dei punteggi per pertinenza BM25 usato da Ricerca di intelligenza artificiale di Azure per le query di ricerca full-text. Spiega anche come abilitare BM25 nei servizi di ricerca meno recenti.

BM25 si applica a:

  • Query che usano il parametro per la search ricerca full-text nei campi di testo con attribuzione searchable .
  • L'ambito dell'assegnazione searchFieldsdei punteggi è o a tutti i searchable campi se searchFields è Null.

Il motore di ricerca usa BM25 per calcolare un @searchScore per ogni corrispondenza in una determinata query. I documenti corrispondenti vengono classificati in base al punteggio di ricerca, con i risultati principali restituiti nella risposta della query. È possibile ottenere una variazione del punteggio nei risultati, anche dalla stessa query eseguita sullo stesso indice di ricerca, ma in genere queste variazioni sono piccole e non modificano la classificazione complessiva dei risultati.

BM25 ha valori predefiniti per la ponderazione della frequenza dei termini e la lunghezza del documento. È possibile personalizzare queste proprietà se le impostazioni predefinite non sono adatte al contenuto. Le modifiche alla configurazione sono con ambito per singoli indici, il che significa che è possibile modificare l'assegnazione dei punteggi di pertinenza in base alle caratteristiche di ogni indice.

Algoritmo di assegnazione dei punteggi predefinito

A seconda dell'età del servizio di ricerca, Ricerca di intelligenza artificiale di Azure supporta due algoritmi di assegnazione dei punteggi per una query di ricerca full-text:

  • Algoritmo Okapi BM25 (dopo il 15 luglio 2020)
  • Algoritmo di somiglianza classico (prima del 15 luglio 2020)

La classificazione BM25 è l'impostazione predefinita perché tende a produrre classificazioni di ricerca che si allineano meglio alle aspettative degli utenti. Include parametri per l'ottimizzazione dei risultati in base a fattori quali le dimensioni del documento. Per i servizi di ricerca creati dopo luglio 2020, BM25 è l'unico algoritmo di assegnazione dei punteggi. Se si tenta di impostare "somiglianza" su ClassicSimilarity in un nuovo servizio, viene restituito un errore HTTP 400 perché tale algoritmo non è supportato dal servizio.

Per i servizi meno recenti, la somiglianza classica rimane l'algoritmo predefinito. I servizi meno recenti possono eseguire l'aggiornamento a BM25 in base all'indice. Quando si passa dal modello classico al sistema BM25, è possibile prevedere alcune differenze nell'ordinamento dei risultati della ricerca.

Impostare i parametri BM25

La classificazione BM25 fornisce due parametri per ottimizzare il calcolo del punteggio di pertinenza.

  1. Usare una richiesta Crea o Aggiorna indice per impostare i parametri BM25:

    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. Se l'indice è attivo, aggiungere il allowIndexDowntime=true parametro URI nella richiesta, illustrato nell'esempio precedente.

    Poiché Ricerca di intelligenza artificiale di Azure non consente gli aggiornamenti a un indice live, è necessario portare offline l'indice in modo che i parametri possano essere aggiunti. L'indicizzazione e le richieste di query hanno esito negativo mentre l'indice è offline. La durata dell'interruzione è la quantità di tempo necessaria per aggiornare l'indice, in genere non più di diversi secondi. Al termine dell'aggiornamento, l'indice torna automaticamente.

  3. Impostare "b" e "k1" su valori personalizzati e quindi inviare la richiesta.

    Proprietà Digita Descrizione
    k1 Numero Controlla la funzione di ridimensionamento tra la frequenza dei termini di ogni termine corrispondente al punteggio di pertinenza finale di una coppia di query di documenti. I valori sono in genere da 0,0 a 3,0, con 1,2 come valore predefinito.

    Il valore 0,0 rappresenta un "modello binario", in cui il contributo di un singolo termine corrispondente è lo stesso per tutti i documenti corrispondenti, indipendentemente dal numero di volte in cui il termine viene visualizzato nel testo. I valori k1 maggiori consentono al punteggio di continuare ad aumentare man mano che nel documento vengono trovate più istanze dello stesso termine.

    L'uso di un valore k1 maggiore è importante nei casi in cui più termini sono inclusi in una query di ricerca. In questi casi, è possibile preferire i documenti che corrispondono a più termini di query, su documenti che corrispondono solo a un singolo termine, più volte. Ad esempio, quando si esegue una query per i termini "Apollo Spaceflight", si potrebbe voler ridurre il punteggio di un articolo sulla mitologia greca che contiene il termine "Apollo" poche decine di volte, senza menzionare "Spaceflight", rispetto a un altro articolo che menziona esplicitamente sia "Apollo" che "Spaceflight" una manciata di volte solo.
    b Numero Controlla il modo in cui la lunghezza di un documento influisce sul punteggio di pertinenza. I valori sono compresi tra 0 e 1, con 0,75 come valore predefinito.

    Il valore 0,0 indica che la lunghezza del documento non influisce sul punteggio. Il valore 1,0 indica che l'effetto della frequenza termini sul punteggio di pertinenza viene normalizzato in base alla lunghezza del documento.

    La normalizzazione della frequenza dei termini in base alla lunghezza del documento è utile nei casi in cui si desidera penalizzare documenti più lunghi. In alcuni casi, documenti più lunghi (ad esempio un romanzo completo), hanno maggiori probabilità di contenere molti termini irrilevanti, rispetto ai documenti più brevi.

Abilitare il punteggio BM25 nei servizi meno recenti

Se si esegue un servizio di ricerca creato da marzo 2014 a 15 luglio 2020, è possibile abilitare BM25 impostando una proprietà "somiglianza" sui nuovi indici. La proprietà viene esposta solo sui nuovi indici, quindi se si desidera che BM25 in un indice esistente, è necessario eliminare e ricompilare l'indice con una proprietà "somiglianza" impostata su Microsoft.Azure.Search.BM25Similarity.

Dopo l'esistenza di un indice con una proprietà di "somiglianza", è possibile passare da BM25Similarity o ClassicSimilaritya .

I collegamenti seguenti descrivono la proprietà Similarity negli SDK di Azure.

Libreria client Proprietà Similarity
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python proprietà di somiglianza in SearchIndex

Esempio REST

È anche possibile usare l'API REST. Nell'esempio seguente viene creato un nuovo indice con la proprietà "somiglianza" impostata su 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"
    }
}

Vedi anche