Riscrivere le query con il ranker semantico in Ricerca di intelligenza artificiale di Azure (anteprima)
Nota
Questa funzionalità è attualmente in anteprima pubblica. Questa anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
La riscrittura delle query è il processo di trasformazione della query di un utente in uno più efficace, aggiungendo altri termini e affinando i risultati della ricerca. Il servizio di ricerca invia la query di ricerca (o una variante di essa) a un modello generativo che genera query alternative.
La riscrittura delle query migliora i risultati dalla classificazione semantica correggendo errori di digitazione o ortografia nelle query utente ed espandendo le query con sinonimi.
La ricerca con riscrittura delle query funziona come segue:
- La query dell'utente viene inviata tramite la
search
proprietà nella richiesta. - Il servizio di ricerca invia la query di ricerca (o una variante di essa) a un modello generativo che genera query alternative.
- Il servizio di ricerca usa la query originale e le query riscritte per recuperare i risultati della ricerca.
La riscrittura delle query è una funzionalità facoltativa. Senza riscrittura delle query, il servizio di ricerca usa solo la query originale per recuperare i risultati della ricerca.
Nota
Le query riscritte potrebbero non contenere tutti i termini esatti della query originale. Ciò potrebbe influire sui risultati della ricerca se la query era altamente specifica e richiede corrispondenze esatte per identificatori univoci o codici di prodotto.
Prerequisiti
- Un servizio di ricerca, un livello Basic o superiore.
Nota
La riscrittura delle query è attualmente disponibile nelle aree Europa settentrionale e Asia sud-orientale.
- Il servizio di ricerca deve avere il ranker semantico abilitato. Esaminare la classificazione semantica se è necessaria un'introduzione alla funzionalità.
Importante
Il ranker semantico è attualmente necessario per la riscrittura delle query.
Indice di ricerca esistente con una configurazione semantica e contenuto RTF. Gli esempi in questa guida usano i dati di esempio hotels-sample-index per illustrare la riscrittura delle query. È possibile usare dati e indici personalizzati per testare la riscrittura delle query.
È necessario un client Web che supporta le richieste api REST. Gli esempi in questa guida sono stati testati con Visual Studio Code con l'estensione client REST.
Suggerimento
Il contenuto che include spiegazioni o definizioni funziona meglio per la classificazione semantica.
Effettuare una richiesta di ricerca con riscrittura della query
In questo esempio di API REST viene usato Cerca documenti per formulare la richiesta. Per altre informazioni sulle proprietà di richiesta e risposta, vedere la documentazione di riferimento sulle API.
Incollare la richiesta seguente in un client Web come modello.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview { "search": "newer hotel near the water with a great restaurant", "semanticConfiguration":"en-semantic-config", "queryType":"semantic", "queryRewrites":"generative|count-5", "queryLanguage":"en-US", "debug":"queryRewrites", "top": 1 }
search-service-name
Sostituire con il nome del servizio di ricerca.Se è diverso, sostituire
hotels-sample-index
con il nome dell'indice.La "ricerca" viene impostata su una query di ricerca full-text. La proprietà di ricerca è necessaria per la riscrittura delle query, a meno che non si specifichino query vettoriali. Se si specificano query vettoriali, il testo "search" deve corrispondere alla
"text"
proprietà dell'oggetto"vectorQueries"
. La stringa di ricerca può supportare la sintassi semplice o la sintassi Lucene completa.L'opzione "semanticConfiguration" viene impostata su una configurazione semantica predefinita incorporata nell'indice.
Si imposta "queryType" su "semantico". È necessario impostare "queryType" su "semantico" o includere una proprietà "semanticQuery" non vuota nella richiesta. La classificazione semantica è necessaria per la riscrittura delle query.
Si imposta "queryRewrites" su "generative|count-5" per ottenere fino a cinque riscritture di query. È possibile impostare il conteggio su qualsiasi valore compreso tra 1 e 10.
Poiché è stata richiesta la riscrittura della query impostando la proprietà "queryRewrites", è necessario impostare "queryLanguage" sulla lingua del testo di ricerca. Il servizio di ricerca usa lo stesso linguaggio per la riscrittura della query. In questo esempio viene usato "en-US". Le impostazioni locali supportate sono:
en-AU
,en-CA
en-IN
en-GB
, ,sr-ME
en-US
ar-EG
ar-JO
ar-KW
ar-MA
ar-SA
bg-BG
bn-IN
ca-ES
cs-CZ
da-DK
de-DE
el-GR
es-ES
es-MX
et-EE
eu-ES
fa-AE
fi-FI
fr-CA
fr-FR
ga-IE
gl-ES
gu-IN
he-IL
hi-IN
hr-BA
hr-HR
hu-HU
hy-AM
id-ID
is-IS
it-IT
ja-JP
kn-IN
ko-KR
lt-LT
lv-LV
ml-IN
mr-IN
ms-BN
ms-MY
nb-NO
nl-BE
nl-NL
no-NO
pa-IN
pl-PL
pt-BR
pt-PT
ro-RO
ru-RU
sk-SK
sl-SL
sr-BA
sr-RS
ta-IN
,sv-SE
, ,te-IN
,th-TH
tr-TR
,uk-UA
,ur-PK
vi-VN
, ,zh-CN
.zh-TW
È stato impostato "debug" su "queryRewrites" per ottenere le riscritture della query nella risposta.
Suggerimento
Impostato
"debug": "queryRewrites"
solo a scopo di test. Per prestazioni migliori, non usare il debug nell'ambiente di produzione.Si imposta "top" su 1 per restituire solo il risultato della ricerca principale.
Inviare la richiesta per eseguire la query e restituire i risultati.
Successivamente, si valutano i risultati della ricerca con le riscritture della query.
Valutare la risposta
Di seguito è riportato un esempio di risposta che include riscrittura delle query:
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "newer hotel near the water with a great restaurant",
"rewrites": [
"new waterfront hotels with top-rated eateries",
"new waterfront hotels with top-rated restaurants",
"new waterfront hotels with excellent dining",
"new waterfront hotels with top-rated dining",
"new water-side hotels with top-rated restaurants"
]
},
"vectors": []
}
},
"value": [
{
"@search.score": 58.992092,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
Ecco alcuni punti chiave da notare:
- Poiché la proprietà "debug" viene impostata su "queryRewrites" per il test, la risposta include un
@search.debug
oggetto con la query di input di testo e la riscrittura della query. - Poiché la proprietà "queryRewrites" viene impostata su "generative|count-5", la risposta include fino a cinque riscritture della query.
- Il
"inputQuery"
valore è la query inviata al modello generativo per la riscrittura delle query. La query di input non è sempre la stessa della query dell'utente"search"
.
Di seguito è riportato un esempio di risposta senza riscrittura della query.
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"inputQuery": "",
"rewrites": []
},
"vectors": []
}
},
"value": [
{
"@search.score": 7.774868,
"@search.rerankerScore": 2.815633535385132,
"HotelId": "18",
"HotelName": "Ocean Water Resort & Spa",
"Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
"Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
"Category": "Luxury",
"Tags": [
"view",
"pool",
"restaurant"
],
"ParkingIncluded": true,
"LastRenovationDate": "2020-11-14T00:00:00Z",
"Rating": 4.2,
"Location": {
"type": "Point",
"coordinates": [
-82.537735,
27.943701
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
},
//... more properties redacted for brevity
}
]
Query vettoriali con riscrittura query
È possibile includere query vettoriali nella richiesta di ricerca per combinare la ricerca di parole chiave e la ricerca vettoriale in una singola richiesta e una risposta unificata.
Di seguito è riportato un esempio di query che include una query vettoriale con riscrittura della query. Si modifica un esempio precedente per includere una query vettoriale.
- Alla richiesta viene aggiunto un oggetto "vectorQueries". Questo oggetto include una query vettoriale con "kind" impostato su "text".
- Il valore "text" corrisponde al valore "search". Questi valori devono essere identici per il funzionamento della riscrittura delle query.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
{
"search": "newer hotel near the water with a great restaurant",
"vectorQueries": [
{
"kind": "text",
"text": "newer hotel near the water with a great restaurant",
"k": 50,
"fields": "Description",
"queryRewrites": "generative|count-3"
}
],
"semanticConfiguration":"en-semantic-config",
"queryType":"semantic",
"queryRewrites":"generative|count-5",
"queryLanguage":"en-US",
"top": 1
}
La risposta include riscritture di query sia per la query di testo che per la query vettoriale.
Eseguire il test delle riscritture della query con il debug
È consigliabile testare le riscritture della query per assicurarsi che funzionino come previsto. Impostare la "debug": "queryRewrites"
proprietà nella richiesta di query per ottenere le riscritture della query nella risposta. L'impostazione "debug"
è facoltativa a scopo di test. Per prestazioni migliori, non impostare questa proprietà nell'ambiente di produzione.
Motivi di risposta parziali
È possibile osservare che la risposta di debug (test) include una matrice vuota per le text.rewrites
proprietà e vectors
.
{
"@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@search.debug": {
"semantic": null,
"queryRewrites": {
"text": {
"rewrites": []
},
"vectors": []
}
},
"@search.semanticPartialResponseReason": "Transient",
"@search.semanticQueryRewriteResultType": "OriginalQueryOnly",
//... more properties redacted for brevity
}
Nell'esempio precedente:
- La risposta include una
@search.semanticPartialResponseReason
proprietà con valore "Transient". Questo messaggio indica che almeno una delle query non è riuscita a completare. - La risposta include anche una
@search.semanticQueryRewriteResultType
proprietà con valore "OriginalQueryOnly". Questo messaggio indica che le riscritture della query non sono disponibili. Solo la query originale viene usata per recuperare i risultati della ricerca.
Passaggi successivi
La classificazione semantica può essere usata nelle query ibride che combinano la ricerca di parole chiave e la ricerca vettoriale in una singola richiesta e in una risposta unificata.