Assegnazione di punteggi per pertinenza nella ricerca ibrida con La fusione di rango reciproco (RRF)

Rank Fusion (RRF) reciproco è un algoritmo che valuta i punteggi di ricerca da più risultati classificati in precedenza per produrre un set di risultati unificato. In Ricerca di intelligenza artificiale di Azure, RRF viene usato ogni volta che sono presenti due o più query eseguite in parallelo. Ogni query produce un set di risultati classificato e RRF viene usato per unire e omogeneizzare le classificazioni in un singolo set di risultati, restituito nella risposta della query. Esempi di scenari in cui RRF viene sempre usato includono la ricerca ibrida e più query vettoriali eseguite contemporaneamente.

RRF si basa sul concetto di rango reciproco, che è l'inverso della classificazione del primo documento pertinente in un elenco di risultati della ricerca. L'obiettivo della tecnica è prendere in considerazione la posizione degli elementi nelle classifiche originali e dare maggiore importanza agli elementi classificati più in alto in più elenchi. Ciò può contribuire a migliorare la qualità e l'affidabilità complessive della classificazione finale, rendendola più utile per l'attività di fusione di più risultati di ricerca ordinati.

Funzionamento della classificazione RRF

RRF funziona prendendo i risultati della ricerca da più metodi, assegnando un punteggio di classificazione reciproco a ogni documento nei risultati e quindi combinando i punteggi per creare una nuova classificazione. Il concetto è che i documenti che appaiono nelle posizioni principali in più metodi di ricerca sono probabilmente più rilevanti e devono essere classificati in alto nel risultato combinato.

Ecco una semplice spiegazione del processo RRF:

  1. Ottenere risultati di ricerca classificati da più query in esecuzione in parallelo.

  2. Assegnare punteggi di classificazione reciproca per il risultato in ognuno degli elenchi classificati. RRF genera un nuovo @search.score per ogni corrispondenza in ogni set di risultati. Per ogni documento nei risultati della ricerca, il motore assegna un punteggio di rango reciproco in base alla posizione nell'elenco. Il punteggio viene calcolato come 1/(rank + k), dove rank è la posizione del documento nell'elenco ed k è una costante, che è stata osservata sperimentalmente per ottenere prestazioni ottimali se è impostata su un valore ridotto come 60. Si noti che questo k valore è una costante nell'algoritmo RRF e completamente separato da k quello che controlla il numero di vicini più vicini.

  3. Combinare i punteggi. Per ogni documento, il motore somma i punteggi di rango reciproco ottenuti da ogni sistema di ricerca, producendo un punteggio combinato per ogni documento. 

  4. Il motore classifica i documenti in base ai punteggi combinati e li ordina. L'elenco risultante è la classificazione fuso.

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.

Esecuzione di query in parallelo

RRF viene usato in qualsiasi momento in cui sono presenti più esecuzioni di query. Gli esempi seguenti illustrano i modelli di query in cui si verifica l'esecuzione di query parallele:

  • Una query full-text, più una query vettoriale (scenario ibrido semplice), è uguale a due esecuzioni di query.
  • Una query full-text, più una query vettoriale destinata a due campi vettoriali, è uguale a tre esecuzioni di query.
  • Una query full-text, più due query vettoriali destinate a cinque campi vettoriali, uguali a 11 esecuzioni di query

Punteggi nei risultati di una ricerca ibrida

Ogni volta che i risultati vengono classificati, @search.score la proprietà contiene il valore utilizzato per ordinare i risultati. I punteggi vengono generati da algoritmi di classificazione che variano per ogni metodo. Ogni algoritmo ha un proprio intervallo e grandezza.

Il grafico seguente identifica la proprietà di assegnazione dei punteggi restituita per ogni corrispondenza, algoritmo e intervallo di punteggi per ogni algoritmo di classificazione della pertinenza.

Metodo di ricerca Parametro Algoritmo di assegnazione dei punteggi Intervallo
ricerca full-text @search.score Algoritmo BM25 Nessun limite massimo.
ricerca vettoriale @search.score Algoritmo HNSW, usando la metrica di somiglianza specificata nella configurazione HNSW. 0.333 - 1.00 (Coseno), da 0 a 1 per euclideo e DotProduct.
ricerca ibrida @search.score Algoritmo RRF Il limite massimo è limitato dal numero di query fuse, con ogni query che contribuisce al massimo 1 al punteggio RRF. Ad esempio, l'unione di tre query produce punteggi RRF più elevati rispetto a se vengano uniti solo due risultati della ricerca.
classificazione semantica @search.rerankerScore Classificazione semantica 0.00 - 4.00

La classificazione semantica non partecipa a RRF. Il punteggio (@search.rerankerScore) viene sempre segnalato separatamente nella risposta della query. La classificazione semantica può essere rerank full-text e risultati della ricerca ibrida, presupponendo che tali risultati includano campi con contenuto semanticamente avanzato.

Numero di risultati classificati in una risposta di query ibrida

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 e le corrispondenze più simili k per la ricerca vettoriale. In una query ibrida determina top il numero di risultati nella risposta. In base alle impostazioni predefinite, vengono restituite le prime 50 corrispondenze classificate più alte del set di risultati unificato.

Spesso, il motore di ricerca trova più risultati di top e k. Per restituire altri 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.

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 altre informazioni, vedere Come usare i risultati della ricerca.

Diagramma di un flusso di lavoro di assegnazione dei punteggi di ricerca

Il diagramma seguente illustra una query ibrida che richiama la ricerca di parole chiave e vettore, con boosting tramite profili di punteggio e classificazione semantica.

Diagram of prefilters.

Una query che genera il flusso di lavoro precedente potrebbe essere simile alla seguente:

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
   "queryType":"semantic",
   "search":"hello world",
   "searchFields":"field_a, field_b",
   "vectorQueries": [
       {
           "kind":"vector",
           "vector": [1.0, 2.0, 3.0],
           "fields": "field_c, field_d"
       },
       {
           "kind":"vector",
           "vector": [4.0, 5.0, 6.0],
           "fields": "field_d, field_e"
       }
   ],
   "scoringProfile":"my_scoring_profile"
}

Vedi anche