Rilevanza nella ricerca con parole chiave (punteggio BM25)

Questo articolo illustra l'algoritmo di assegnazione dei punteggi per pertinenza BM25 usato per calcolare i punteggi di ricerca per la ricerca full-text. La pertinenza di BM25 è esclusiva per la ricerca full-text. Le query di filtro, il completamento automatico e le query suggerite, la ricerca con caratteri jolly o le query di ricerca fuzzy non vengono segnate o classificate per pertinenza.

Ricerca di intelligenza artificiale di Azure offre gli algoritmi di assegnazione dei punteggi seguenti per la ricerca full-text:

Algoritmo Utilizzo Intervallo
BM25Similarity Correzione dell'algoritmo in tutti i servizi di ricerca creati dopo luglio 2020. È possibile configurare questo algoritmo, ma non è possibile passare a una versione precedente (classica). Unbounded.
ClassicSimilarity Presente nei servizi di ricerca meno recenti. È possibile acconsentire esplicitamente a BM25 e scegliere un algoritmo per indice. 0 < 1,00

Sia BM25 che Classic sono funzioni di recupero simili a TF-IDF che usano la frequenza dei termini (TF) e la frequenza dei documenti inversa (IDF) come variabili per calcolare i punteggi di pertinenza per ogni coppia di query di documenti, che viene quindi usata per i risultati di classificazione. Sebbene concettualmente simile al classico, il BM25 è radicato nel recupero di informazioni probabilistiche che produce corrispondenze più intuitive, come misurato dalla ricerca degli utenti.

BM25 offre opzioni di personalizzazione avanzate, ad esempio consentendo all'utente di decidere in che modo il punteggio di pertinenza viene ridimensionato con la frequenza del termine dei termini corrispondenti. Per altre informazioni, vedere Configurare l'algoritmo di assegnazione dei punteggi.

Nota

Se si usa un servizio di ricerca creato prima di luglio 2020, l'algoritmo di assegnazione dei punteggi è probabilmente l'impostazione predefinita precedente, ClassicSimilarity, che è possibile aggiornare in base all'indice. Per informazioni dettagliate, vedere Abilitare il punteggio BM25 nei servizi meno recenti.

Il segmento video seguente inoltra rapidamente a una spiegazione degli algoritmi di classificazione disponibili a livello generale usati in Ricerca di intelligenza artificiale di Azure. È possibile guardare il video completo per informazioni più dettagliate.

Funzionamento della classificazione BM25

Il punteggio di pertinenza si riferisce al calcolo di un punteggio di ricerca (@search.score) che funge da indicatore della pertinenza di un elemento nel contesto della query corrente. L'intervallo non è associato. Tuttavia, più alto è il punteggio, più rilevante è l'elemento.

Il punteggio di ricerca viene calcolato in base alle proprietà statistiche dell'input della stringa e alla query stessa. Ricerca di intelligenza artificiale di Azure trova documenti che corrispondono ai termini di ricerca (alcuni o tutti, a seconda di searchMode), privilegiando i documenti che contengono molte istanze del termine di ricerca. Il punteggio di ricerca aumenta ancora di più se il termine risulta raro nell'indice di dati, ma comune all'interno del documento. La base di questo approccio al calcolo della rilevanza è nota come TF-IDF (Term Frequency-Inverse Document Frequency).

I punteggi di ricerca possono essere ripetuti in un set di risultati. Quando più riscontri hanno lo stesso punteggio di ricerca, l'ordinamento degli stessi elementi con punteggio non è definito e non stabile. Eseguire di nuovo la query e visualizzare la posizione di spostamento degli elementi, soprattutto se si usa il servizio gratuito o un servizio fatturabile con più repliche. Dato due elementi con un punteggio identico, non c'è alcuna garanzia che uno venga visualizzato per primo.

Per interrompere la parità tra i punteggi ripetuti, è possibile aggiungere una clausola $orderby al primo ordine in base al punteggio, quindi ordinare in base a un altro campo ordinabile , ad esempio $orderby=search.score() desc,Rating desc. Per altre informazioni, vedere $orderby.

Per l'assegnazione dei punteggi vengono usati solo i campi contrassegnati come searchable nell'indice o searchFields nella query. Nei risultati della ricerca vengono restituiti solo i campi contrassegnati come retrievable, o specificati nella select query.

Nota

Un elemento @search.score = 1 indica un set di risultati senza punteggio o non classificato. Il punteggio è uniforme in tutti i risultati. I risultati senza punteggio si verificano quando il modulo di query è una ricerca fuzzy, query con caratteri jolly o regex o una ricerca vuota (search=*talvolta abbinata ai filtri, dove il filtro è il mezzo principale per la restituzione di una corrispondenza).

Punteggi in un risultato di testo

Ogni volta che i risultati vengono classificati, @search.score la proprietà contiene il valore utilizzato per ordinare i risultati.

La tabella seguente identifica la proprietà di assegnazione dei punteggi restituita per ogni corrispondenza, algoritmo e intervallo.

Metodo di ricerca Parametro Algoritmo di assegnazione dei punteggi Intervallo
ricerca full-text @search.score Algoritmo BM25, utilizzando i parametri specificati nell'indice. Unbounded.

Variazione punteggio

I punteggi di ricerca trasmettono il senso generale della pertinenza, riflettendo la forza della corrispondenza rispetto ad altri documenti nello stesso set di risultati. Tuttavia, i punteggi non sono sempre coerenti da una query alla successiva, quindi quando si lavora con le query, è possibile notare piccole discrepanze nella modalità di ordinamento dei documenti di ricerca. Esistono diverse spiegazioni per il motivo per cui questo problema può verificarsi.

Causa Descrizione
Volatilità dei dati Il contenuto dell'indice varia in base all'aggiunta, alla modifica o all'eliminazione di documenti. Le frequenze dei termini cambieranno man mano che gli aggiornamenti degli indici vengono elaborati nel tempo, con effetti sui punteggi di ricerca dei documenti corrispondenti.
Più repliche Per i servizi che usano più repliche, le query vengono eseguite su ogni replica in parallelo. Le statistiche di indice usate per calcolare un punteggio di ricerca vengono calcolate in base alla replica, con risultati uniti e ordinati nella risposta della query. Le repliche sono principalmente mirror l'una dell'altra, ma le statistiche possono differire a causa di piccole differenze nello stato. Ad esempio, una replica potrebbe aver eliminato documenti che contribuiscono alle statistiche, che sono stati uniti da altre repliche. In genere, le differenze nelle statistiche per replica sono più evidenti negli indici più piccoli. Per altre informazioni su questa condizione, vedere Concetti: unità di ricerca, repliche, partizioni, partizioni nella documentazione sulla pianificazione della capacità.
Punteggi identici Se più documenti hanno lo stesso punteggio, è possibile che uno di essi venga visualizzato per primo.

Statistiche di assegnazione dei punteggi e sessioni permanenti

Per la scalabilità, Ricerca di intelligenza artificiale di Azure distribuisce ogni indice orizzontalmente tramite un processo di partizionamento orizzontale, il che significa che parti di un indice sono fisicamente separate.

Per impostazione predefinita, il punteggio di un documento viene calcolato in base alle proprietà statistiche dei dati all'interno di una partizione. Questo approccio in genere non rappresenta un problema per un set di dati di grandi dimensioni e offre prestazioni migliori rispetto ai casi in cui è necessario calcolare il punteggio in base alle informazioni su tutte le partizioni. Ciò premesso, usando questa ottimizzazione delle prestazioni è possibile che due documenti molto simili (o addirittura identici) abbiano punteggi della rilevanza diversi qualora si trovino in partizioni diverse.

Se si preferisce calcolare il punteggio in base alle proprietà statistiche in tutte le partizioni, è possibile farlo aggiungendo scoringStatistics=global come parametro di query (o aggiungendo "scoringStatistics": "global" come parametro corpo della richiesta di query).

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

L'uso scoringStatistics garantisce che tutte le partizioni nella stessa replica forniscano gli stessi risultati. Detto questo, le repliche diverse possono essere leggermente diverse l'una dall'altra perché vengono sempre aggiornate con le modifiche più recenti all'indice. In alcuni scenari potrebbe essere necessario che gli utenti ottengano risultati più coerenti durante una "sessione di query". In tal caso, è possibile fornire un elemento sessionId come parte delle query. Tale elemento sessionId è una stringa univoca creata per fare riferimento a una sessione utente univoca.

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

Purché venga usato lo stesso sessionId , viene effettuato un tentativo di usare al meglio la stessa replica, aumentando la coerenza dei risultati visualizzati dagli utenti.

Nota

Il riutilizzo ripetuto degli stessi valori sessionId può interferire con il bilanciamento del carico delle richieste tra le repliche e influire negativamente sulle prestazioni del servizio di ricerca. Il valore usato come sessionId non può iniziare con un carattere '_'.

Ottimizzazione della pertinenza

In Ricerca di intelligenza artificiale di Azure è possibile configurare i parametri dell'algoritmo BM25 e ottimizzare la pertinenza della ricerca e migliorare i punteggi di ricerca tramite questi meccanismi:

Approccio Implementazione Descrizione
Configurazione dell'algoritmo di assegnazione dei punteggi Indice di ricerca
Profili di punteggio Indice di ricerca Specificare i criteri per aumentare il punteggio di ricerca di una corrispondenza in base alle caratteristiche del contenuto. Ad esempio, è possibile aumentare le corrispondenze in base al potenziale di ricavi, alzare di livello gli elementi più recenti o ad esempio aumentare gli elementi presenti nell'inventario troppo a lungo. Un profilo di punteggio fa parte della definizione dell'indice, costituita da campi ponderati, funzioni e parametri. È possibile aggiornare un indice esistente con modifiche al profilo di punteggio, senza incorrere in una ricompilazione dell'indice.
Classificazione semantica Richiesta di query Applica la comprensione della lettura automatica ai risultati della ricerca, promuovendo risultati più pertinenti semanticamente all'inizio.
featuresMode - parametro Richiesta di query Questo parametro viene usato principalmente per decomprimere un punteggio, ma può essere usato per nel codice che fornisce una soluzione di assegnazione dei punteggi personalizzata.

parametro featuresMode (anteprima)

Le richieste di documenti di ricerca hanno un nuovo parametro featuresMode che può fornire maggiori dettagli sulla pertinenza a livello di campo. @searchScore Mentre viene calcolato per il documento all-up (quanto pertinente è questo documento nel contesto di questa query), tramite featuresMode è possibile ottenere informazioni sui singoli campi, come espresso in una @search.features struttura. La struttura contiene tutti i campi utilizzati nella query (campi specifici tramite searchFields in una query o tutti i campi attribuiti come ricercabili in un indice). Per ogni campo si ottengono i valori seguenti:

  • Numero di token univoci trovati nel campo
  • Punteggio di somiglianza o misura della somiglianza del contenuto del campo, rispetto al termine della query
  • Frequenza termini o numero di volte in cui il termine di query è stato trovato nel campo

Per una query destinata ai campi "description" e "title", una risposta che include @search.features potrebbe essere simile alla seguente:

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

È possibile utilizzare questi punti dati nelle soluzioni di assegnazione dei punteggi personalizzate o usare le informazioni per eseguire il debug dei problemi di pertinenza della ricerca.

Numero di risultati classificati in una risposta di query full-text

Per impostazione predefinita, se non si usa la paginazione, il motore di ricerca restituisce le prime 50 corrispondenze di classificazione più alte per la ricerca full-text. È possibile usare il top parametro per restituire un numero minore o maggiore di elementi (fino a 1000 in una singola risposta). La ricerca full-text è soggetta a un limite massimo di 1.000 corrispondenze (vedere Limiti di risposta API). Una volta trovate 1.000 corrispondenze, il motore di ricerca non cerca più.

Per restituire più o meno risultati, usare i parametri topdi paging , skipe next. Il paging è il modo in cui si determina il numero di risultati in ogni pagina logica e si passa attraverso il payload completo. Per altre informazioni, vedere Come usare i risultati della ricerca.

Vedi anche