Assegnazione di punteggi per pertinenza nella ricerca ibrida tramite RFF (Reciprocal Rank Fusion)
Reciprocal Rank Fusion (RRF) è un algoritmo che valuta i punteggi di ricerca di più risultati classificati in precedenza per produrre un set di risultati unificato. In Azure AI Search, RRF viene usato ogni volta che vengono eseguite due o più query 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, che viene restituito nella risposta alla 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 della classificazione reciproca, 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.
Nota
Novità della versione 2024-09-01-preview è la possibilità di decostruire un punteggio di ricerca RRF classificato nei relativi caratteri secondari del componente. In questo modo è possibile ottenere trasparenza nella composizione dei punteggi all-up. Per altre informazioni, vedere decomprimere i punteggi di ricerca (anteprima) in questo articolo.
Funzionamento della classificazione RRF
RRF acquisisce 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 prime posizioni in più metodi di ricerca sono probabilmente più rilevanti e devono essere classificati più in alto nel risultato combinato.
Una spiegazione semplice del processo RRFè la seguente:
Ottenere risultati di ricerca classificati da più query in esecuzione in parallelo.
Assegnare punteggi di classificazione reciproci a un risultato in ciascuno degli elenchi classificati. RRF genera un nuovo
@search.score
per ogni corrispondenza in ogni set di risultati. Per ogni documento presente nei risultati della ricerca, il motore assegna un punteggio di classificazione reciproco in base alla sua posizione nell'elenco. Il punteggio viene calcolato come1/(rank + k)
, doverank
è la posizione del documento nell'elenco ek
è una costante, che, osservata sperimentalmente, ha dimostrato di fornire prestazioni ottimali se è impostata su un valore ridotto come 60. Si noti che questo valorek
è una costante nell'algoritmo RRF ed è completamente separato dak
che controlla il numero dei vicini più prossimi.Combinare i punteggi Per ogni documento, il motore somma i punteggi di classificazione reciproci ottenuti da ogni sistema di ricerca, producendo un punteggio combinato per ogni documento.
Il motore classifica i documenti in base ai punteggi combinati e li ordina. L'elenco risultante è la classificazione fusa.
Per la ricerca e l’assegnazione dei punteggi vengono usati solo i campi contrassegnati come searchable
nell'indice o come searchFields
nella query. Nei risultati della ricerca vengono restituiti solo i campi contrassegnati come retrievable
o specificati in select
nella query insieme al punteggio di ricerca.
Esecuzione di query in parallelo
RRF viene usato tutte le volte che ci sono più query in esecuzione. 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) equivale a due esecuzioni di query.
- Una query full-text più una query vettoriale eseguite su due campi vettoriali di destinazione equivale a tre esecuzioni di query.
- Una query full-text più una query vettoriale eseguite su cinque campi vettoriali di destinazione equivale a undici esecuzioni di query
Punteggi nei risultati della ricerca ibrida
In ogni classificazione dei risultati la proprietà @search.score
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 ordine di 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, che usa 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 RFF | Il limite massimo è limitato dal numero di query fuse, dove ogni query contribuisce al punteggio RFF con un massimo di circa 1. Ad esempio, l'unione di tre query produce punteggi RRF più elevati rispetto a quelli risultanti dall’unione di due risultati della ricerca. |
classificazione semantica | @search.rerankerScore |
Classificazione semantica | 0,00 - 4,00 |
La classificazione semantica si verifica dopo l'unione di risultati RRF. Il punteggio (@search.rerankerScore
) viene sempre indicato separatamente nella risposta alla query. La classificazione semantica può riclassificare i risultati della ricerca full-text e della ricerca ibrida, presupponendo che tali risultati includano campi con contenuto arricchito semanticamente. Può eseguire nuovamente query vettoriali pure se i documenti di ricerca includono campi di testo che contengono contenuto semanticamente rilevante.
Decomprimere un punteggio di ricerca in caratteri di sottolineatura (anteprima)
Usando 2024-09-01-preview, è possibile decostruire un punteggio di ricerca per visualizzarne i caratteri di sottolineatura.
Per le query vettoriali, queste informazioni consentono di determinare un valore appropriato per la ponderazione vettoriale o l'impostazione di soglie minime.
Per ottenere i caratteri di sottolineatura:
Usare l'api REST documenti di ricerca più recente in anteprima o un pacchetto beta di Azure SDK che fornisce la funzionalità.
Modificare una richiesta di query, aggiungendo un nuovo
debug
parametro impostato suvector
,semantic
se si usa il ranker semantico oall
.
Di seguito è riportato un esempio di query ibrida che restituisce caratteri di sottolineatura secondari in modalità di debug:
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-09-01=preview
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
},
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City",
"debug": "vector",
"top": 10
}
Punteggi ponderati
Usando le versioni api di anteprima 2024-07-01 e successive, è possibile ponderare le query vettoriali per aumentare o ridurre la loro importanza in una query ibrida.
Tenere presente che nel calcolare il punteggio RRF per un determinato documento, il motore di ricerca esamina la classificazione di tale documento per ogni set di risultati in cui viene visualizzato. Si supponga che un documento venga visualizzato in tre risultati della ricerca separati, in cui i risultati provengono da due query vettoriali e una query con classificazione BM25. La posizione del documento è diversa in ogni risultato.
Trovata corrispondenza | Posizione nei risultati | @search.score | moltiplicatore peso | @search.score (ponderato) |
---|---|---|---|---|
risultato vettoriale uno | posizione: 1 | 0,8383955 | 0.5 | 0,41919775 |
risultato vettoriale due | posizione: 5 | 0,81514114 | 2.0 | 1,63028228 |
Risultati BM25 | posizione: 10 | 0,8577363 | ND | 0,8577363 |
La posizione del documento in ogni set di risultati corrisponde a un punteggio iniziale, che viene aggiunto fino a creare il punteggio RRF finale per tale documento.
Se si aggiunge il peso vettoriale, i punteggi iniziali sono soggetti a un moltiplicatore di ponderazione che aumenta o diminuisce il punteggio. Il valore predefinito è 1,0, il che significa che non viene usata alcuna ponderazione e il punteggio iniziale viene usato così come è nell'assegnazione dei punteggi RRF. Tuttavia, se si aggiunge un peso pari a 0,5, il punteggio viene ridotto e tale risultato diventa meno importante nella classificazione combinata. Viceversa, se si aggiunge un peso pari a 2,0, il punteggio diventa un fattore più grande nel punteggio RRF complessivo.
In questo esempio, i valori @search.score (ponderati) vengono passati al modello di classificazione RRF.
Numero di risultati classificati in una risposta a una query vettoriale
Per impostazione predefinita, se non si usa la paginazione, il motore di ricerca restituisce le prime 50 corrispondenze con classificazione più alta per la ricerca full-text e le corrispondenze più simili a k
per la ricerca vettoriale. In una query ibrida top
determina il numero di risultati nella risposta. In base alle impostazioni predefinite, vengono restituite le prime 50 corrispondenze classificate più in alto nel set di risultati unificato.
Spesso, il motore di ricerca trova più risultati di top
e.k
. Per restituire più risultati, usare i parametri di paging top
, skip
e next
. Il paging è il modo in cui si determina il numero di risultati in ogni pagina logica e si passa attraverso il payload completo. È possibile impostare maxTextRecallSize
su valori più grandi (il valore predefinito è 1.000) per restituire più risultati dal lato testo della query ibrida.
Per impostazione predefinita, la ricerca full-text è soggetta a un limite massimo di 1.000 corrispondenze (vedere Limiti di risposta API). Appena vengono trovate 1.000 corrispondenze, il motore di ricerca interrompe la ricerca.
Per altre informazioni, vedere Come usare i risultati della ricerca.
Diagramma di un flusso di lavoro di assegnazione dei punteggi della 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.
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=2024-07-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"
}