Configurare l'assegnazione dei punteggi per pertinenza BM25
Questo articolo illustra come configurare l'algoritmo di assegnazione dei punteggi BM25 utilizzato da Azure AI Search per le query di ricerca full-text. Spiega inoltre come abilitare BM25 nei servizi di ricerca meno recenti.
BM25 si applica a:
- Query che usano il parametro
search
per la ricerca full-text, nei campi di testo con attribuzionesearchable
. - L'ambito dell'assegnazione dei punteggi è
searchFields
o a tutti i campisearchable
sesearchFields
è 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 alla query. È possibile ottenere alcune variazione del punteggio nei risultati, anche dalla stessa query eseguita sullo stesso indice di ricerca, ma in genere tali 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 applicate ai singoli indici, il che significa che è possibile regolare il punteggio di rilevanza in base alle caratteristiche di ciascun indice.
Algoritmo di assegnazione dei punteggi con impostazione predefinita
A seconda dell'età del servizio di ricerca, Azure AI Search supporta due algoritmi di assegnazione dei punteggi per una query di ricerca full-text:
- Algoritmo Okapi BM25 (dopo il 15 luglio 2020)
- Algoritmo di similarità 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 ottimizzare i risultati in base a fattori come 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 "similarità" 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 similarità 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 attendersi 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.
Usare una richiesta Crea o Aggiorna indice per impostare i parametri 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 } }
Se l'indice è attivo, accodare il parametro URI
allowIndexDowntime=true
alla richiesta, come illustrato nell'esempio precedente.Poiché Azure AI Search non consente gli aggiornamenti a un indice live è necessario mettere l'indice offline, 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 alcuni secondi. Al termine dell'aggiornamento, l'indice viene ripristinato automaticamente.
Impostare
"b"
e"k1"
su valori personalizzati, quindi inviare la richiesta.Proprietà Type Descrizione k1 number 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.
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 maggiori di 1k consentono al punteggio di continuare ad aumentare man mano che nel documento vengono trovate più istanze dello stesso termine.
L'uso di un valore maggiore di 1k è importante nei casi in cui più termini sono inclusi in una query di ricerca. In questi casi, si potrebbero privilegiare i documenti che corrispondono a più termini della query, rispetto a quelli che corrispondono a un solo termine, più volte. Ad esempio, quando si effettua una query per i termini "Volo spaziale Apollo", si potrebbe voler abbassare il punteggio di un articolo sulla mitologia greca che contiene il termine "Apollo" alcune decine di volte, senza citazioni di "volo spaziale", rispetto a un altro articolo che cita esplicitamente sia "Apollo" che "volo spaziale" solo poche volte.b number Controlla il modo in cui la lunghezza di un documento influisce sul punteggio di pertinenza. I valori sono in genere da 0 a 1, con 0,75 come valore predefinito.
Un valore 0,0 indica che la lunghezza del documento non influisce sul punteggio. Il valore 1,0 indica che l'effetto della frequenza dei termini sul punteggio di pertinenza viene normalizzato in base alla lunghezza del documento.
Normalizzare la 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 a 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à "similarità" sui nuovi indici. La proprietà è esposta solo sui nuovi indici, quindi se si desidera BM25 su un indice esistente, è necessario abbandonare e ricostruire l'indice con la proprietà "similarità" impostata su Microsoft.Azure.Search.BM25Similarity
.
Dopo che un indice esiste con una proprietà di "similarità", è possibile passare da BM25Similarity
a ClassicSimilarity
.
I collegamenti seguenti descrivono la proprietà Similarità negli SDK di Azure.
Libreria client | Proprietà Similarità |
---|---|
.NET | SearchIndex.Similarity |
Java | SearchIndex.setSimilarity |
JavaScript | SearchIndex.Similarity |
Python | proprietà di similarità in SearchIndex |
Esempio REST
Inoltre, è possibile utilizzare l'API REST per: Nell'esempio seguente viene creato un nuovo indice con la proprietà "similarità" impostata su 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"
}
}