Aggiungere profili di punteggio per incrementare i punteggi di ricerca

In questo articolo si apprenderà come definire un profilo di punteggio. Un profilo di punteggio è critera per aumentare il punteggio di ricerca in base ai parametri specificati. Ad esempio, è possibile che le corrispondenze trovate in un campo "tags" siano più pertinenti rispetto alla stessa corrispondenza trovata in "descrizioni". I criteri possono essere un campo ponderato ,ad esempio l'esempio di "tag" o una funzione.

I profili di punteggio sono definiti in un indice di ricerca e richiamati su campi non vettoriali nelle richieste di query. È possibile creare più profili e quindi modificare la logica di query per scegliere quella usata.

Nota

Non si ha familiarità con i concetti di pertinenza? Il segmento video seguente su YouTube si inoltra rapidamente al funzionamento dei profili di assegnazione dei punteggi in Ricerca di intelligenza artificiale di Azure. Per altre informazioni, vedere Pertinenza e assegnazione dei punteggi in Ricerca di intelligenza artificiale di Azure.

Definizione del profilo di punteggio

Un profilo di punteggio è denominato oggetto definito in uno schema di indice. Un profilo può essere composto da campi, funzioni e parametri ponderati.

La definizione seguente mostra un profilo semplice denominato "geo". In questo esempio vengono incrementati i risultati con il termine di ricerca nel campo hotelName. Usa anche la distance funzione per favorire i risultati entro 10 chilometri dalla posizione corrente. Se si cerca il termine "inn" e "inn" fa parte del nome di un hotel, i documenti che includono gli hotel con "inn" in un raggio di 10 km dalla posizione corrente verranno visualizzati più in alto nei risultati della ricerca.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Per usare questo profilo di punteggio, la query viene formulata per specificare il parametro scoringProfile nella richiesta. Se si usa l'API REST, le query vengono specificate tramite richieste GET e POST. Nell'esempio seguente "currentLocation" ha un delimitatore di un singolo trattino (-). È seguito da coordinate di longitudine e latitudine, dove longitudine è un valore negativo.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2020-06-30

Si notino le differenze di sintassi quando si usa POST. In POST "scoringParameters" è plurale ed è una matrice.

POST /indexes/hotels/docs&api-version=2020-06-30
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": ["currentLocation--122.123,44.77233"]
}

Questa query cerca il termine "inn" e passa nella posizione corrente. Si noti che questa query include altri parametri, ad esempio scoringParameter. I parametri di query, incluso "scoringParameter", sono descritti in Cerca documenti (API REST).

Vedere l'esempio esteso per esaminare un esempio più dettagliato di un profilo di punteggio.

Come vengono calcolati i punteggi

I punteggi vengono calcolati per le query di ricerca full-text. Le corrispondenze vengono segnate in base al livello di pertinenza della corrispondenza e le corrispondenze di punteggio più alte vengono restituite nella risposta della query. Il punteggio complessivo per ogni documento è un'aggregazione dei singoli punteggi per ogni campo, in cui il punteggio individuale di ogni campo viene calcolato in base alla frequenza dei termini e alla frequenza del documento dei termini ricercati all'interno di tale campo (noto come frequenza del documento TF-IDF o frequenza inversa dei termini).

È possibile usare il parametro featuresMode (anteprima) per richiedere dettagli di punteggio aggiuntivi con i risultati della ricerca (inclusi i punteggi a livello di campo).

Quando aggiungere la logica di assegnazione dei punteggi

È consigliabile creare uno o più profili di punteggio quando il comportamento di classificazione predefinito non permette di raggiungere gli obiettivi aziendali stabiliti. È ad esempio possibile che si voglia assegnare una rilevanza di ricerca maggiore agli elementi aggiunti di recente. Analogamente, è possibile che sia presente un campo che include i margini di profitto o un altro campo che indica il potenziale di ricavi. Aumentare i risultati più significativi per gli utenti o l'azienda è spesso il fattore decisivo per l'adozione dei profili di punteggio.

L'ordinamento basato sulla pertinenza in una pagina di ricerca viene implementato anche tramite profili di punteggio. È consigliabile esaminare le pagine di risultati della ricerca usate in precedenza e che permettevano di ordinare i risultati in base a prezzo, data, classificazione o rilevanza. In Ricerca di intelligenza artificiale di Azure è possibile usare i profili di punteggio per guidare l'opzione "pertinenza". La definizione di pertinenza è definita dall'utente, basata sugli obiettivi aziendali e sul tipo di esperienza di ricerca che si vuole offrire.

Passaggi per l'aggiunta di un profilo di punteggio

Per implementare un comportamento predefinito per l'assegnazione di punteggio, aggiungere un profilo di punteggio allo schema che definisce l'indice. È possibile avere fino a 100 profili di punteggio all'interno di un indice (vedere Limiti dei servizi ), ma è possibile specificare solo un profilo alla volta in ogni query.

  1. Iniziare con una definizione di indice. È possibile aggiungere e aggiornare i profili di punteggio in un indice esistente senza doverlo ricompilare. Usare una richiesta di aggiornamento dell'indice per pubblicare la revisione.

  2. Incollare il modello fornito in questo articolo.

  3. Specificare un nome. I profili di punteggio sono facoltativi, ma quando se ne aggiunge uno è necessario specificare un nome. Assicurarsi di seguire le convenzioni di denominazione di Ricerca intelligenza artificiale di Azure per i campi (inizia con una lettera, evita caratteri speciali e parole riservate).

  4. Specificare i criteri di boosting. Un singolo profilo può contenere campi ponderati, funzioni o entrambi.

È consigliabile lavorare in modo iterativo, usando un set di dati che consente di dimostrare o disprovare l'efficacia di un determinato profilo.

I profili di punteggio possono essere definiti in portale di Azure come illustrato nello screenshot seguente o a livello di codice tramite LE API REST o negli SDK di Azure, ad esempio la classe ScoringProfile in Azure SDK per .NET.

Add scoring profiles page

Uso di campi ponderati

Usare campi ponderati quando il contesto del campo è importante e le query sono la ricerca full-text. Ad esempio, se una query include il termine "aeroporto", è possibile che nel campo Descrizione sia presente un peso maggiore rispetto a quello di HotelName.

I campi ponderati sono costituiti da un campo ricercabile e da un numero positivo utilizzato come moltiplicatore. Se il punteggio del campo originale di HotelName è 3, il punteggio con boosting per tale campo diventa 6, contribuendo a un punteggio complessivo superiore per il documento padre stesso.

"scoringProfiles": [  
    {  
      "name": "boostKeywords",  
      "text": {  
        "weights": {  
          "HotelName": 2,  
          "Description": 5 
        }  
      }  
    }
]

Uso delle funzioni

Usare le funzioni quando i pesi relativi semplici sono insufficienti o non si applicano, come nel caso della distanza e della freschezza, che sono calcoli su dati numerici. È possibile specificare più funzioni per profilo di punteggio. Per altre informazioni sui tipi di dati EDM usati in Ricerca di intelligenza artificiale di Azure, vedere Tipi di dati supportati.

Funzione Descrizione
"freschezza" Aumenta i valori in base ai valori in un campo datetime (Edm.DateTimeOffset). Questa funzione ha un attributo "boostingDuration" in modo da poter specificare un valore che rappresenta un intervallo di tempo su cui si verifica l'aumento di boosting.
"grandezza" Aumenta in base all'altezza o al basso di un valore numerico. Gli scenari che richiedono questa funzione includono l'aumento della priorità in base a margine di profitto, prezzo massimo, prezzo minimo o conteggio di download. Questa funzione può essere usata solo con campi Edm.Double e Edm.Int. Per la funzione di grandezza, è possibile invertire l'intervallo, alto a basso, se si desidera il modello inverso (ad esempio, per aumentare gli articoli con prezzo inferiore rispetto agli articoli con prezzi più elevati). Dato un intervallo di prezzi da $100 a $1, impostare "boostingRangeStart" su 100 e "boostingRangeEnd" a 1 per aumentare gli articoli a prezzo inferiore.
"distance" Aumenta in base alla prossimità o alla posizione geografica. Questa funzione può essere usata solo con campi Edm.GeographyPoint .
"tag" Aumenta in base ai tag comuni sia ai documenti di ricerca che alle stringhe di query. I tag vengono forniti in un "tagsParameter". Questa funzione può essere usata solo con i campi di ricerca di tipo Edm.String e Collection(Edm.String).

Regole per l'uso delle funzioni

  • Le funzioni possono essere applicate solo ai campi attribuiti come filtrabili.
  • Il tipo di funzione ("freshness", "magnitude", "distance", "tag") deve essere minuscolo.
  • Le funzioni non possono includere valori Null o vuoti.

Modello

Questa sezione illustra la sintassi e il modello per i profili di punteggio. Fare riferimento a Informazioni di riferimento sulle proprietà nella sezione successiva per le descrizioni degli attributi del profilo di punteggio.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

Informazioni di riferimento sulle proprietà

Attributo Descrizione
name Obbligatorio. Nome del profilo di punteggio. Segue le stesse convenzioni di denominazione di un campo. Deve iniziare con una lettera, non può contenere punti, due punti o simboli @ e non può iniziare con la frase azureSearch (con distinzione tra maiuscole e minuscole).
testo Contiene la proprietà weights.
Pesi (Facoltativo). Coppie nome-valore che specificano un campo ricercabile e un numero intero positivo o a virgola mobile in base al quale incrementare il punteggio di un campo. L'intero positivo o il numero diventa un moltiplicatore per il punteggio del campo originale generato dall'algoritmo di classificazione. Ad esempio, se un punteggio di campo è 2 e il valore del peso è 3, il punteggio con boosting per il campo diventa 6. I punteggi dei singoli campi vengono quindi aggregati per creare un punteggio di campo del documento, che viene quindi usato per classificare il documento nel set di risultati.
functions (Facoltativo). La funzione di assegnazione del punteggio può essere applicata solo ai campi filtrabili.
tipo di funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Indica il tipo di funzione da usare. I valori validi includono magnitude, freshness, distance e tag. È possibile includere più funzioni in ogni profilo di punteggio. Il nome della funzione deve essere scritto in lettere minuscole.
boost delle funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Numero positivo usato come moltiplicatore per un punteggio non elaborato. Non può essere uguale a 1.
nomecampo funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Una funzione di assegnazione di punteggio può essere applicata solo a campi che fanno parte della raccolta di campi dell'indice e che sono filtrabili. Ogni tipo di funzione introduce inoltre restrizioni aggiuntive (il valore freshness viene usato con campi datetime, il valore magnitude con campi di tipo Integer o Double e il valore distance con campi location). È possibile specificare solo un campo per ogni definizione di funzione. Ad esempio, per usare il valore magnitude due volte nello stesso profilo, sarà necessario includere due definizioni di magnitude, una per ogni campo.
interpolazione di funzioni > Obbligatorio per le funzioni di assegnazione di punteggio. Definisce il coefficiente angolare in base al quale viene incrementato l'aumento di priorità del punteggio dall'inizio alla fine dell'intervallo. I valori validi includono Linear (predefinito), Constant, Quadratic e Logarithmic. Per informazioni dettagliate, vedere Impostare le interpolazioni .
grandezza delle funzioni > La funzione di assegnazione di punteggio in base al valore magnitude viene usata per modificare le classificazioni in base all'intervallo di valori per un campo numerico. Di seguito sono riportati alcuni degli esempi di utilizzo più comuni: "Classificazioni a stella:

" Modificare l'assegnazione dei punteggi in base al valore all'interno del campo "Classificazione stella". Quando due elementi sono rilevanti, viene visualizzato per primo l'elemento con la classificazione superiore.
"Margin:" Quando due documenti sono rilevanti, un rivenditore potrebbe voler aumentare i documenti con margini più elevati.
"Click counts:" Per le applicazioni che tengono traccia delle azioni per prodotti o pagine, è possibile usare la grandezza per aumentare gli elementi che tendono a ottenere il maggior traffico.
"Download counts:" Per le applicazioni che tengono traccia dei download, la funzione di grandezza consente di aumentare gli elementi con il maggior numero di download.
funzioni > boostingRangeStart > Imposta il valore iniziale dell'intervallo su cui è basato il calcolo della funzione magnitude. Il valore deve essere un numero intero o a virgola mobile. Per le classificazioni a stelle da 1 a 4, corrisponde a 1. Per i margini superiori al 50%, corrisponde a 50.
funzioni boostingRangeEnd per le > funzioni > Imposta il valore finale dell'intervallo su cui è basato il calcolo della funzione magnitude. Il valore deve essere un numero intero o a virgola mobile. Per le classificazioni a stelle da 1 a 4, corrisponde a 4.
functions > magnitude > constantBoostBeyondRange I valori validi sono true o false (predefinito). Se impostato su true, l'aumento completo della priorità continuerà a essere applicato a documenti che includono un valore per il campo di destinazione maggiore rispetto al limite superiore dell'intervallo. Se false, l'aumento di priorità di questa funzione non verrà applicato ai documenti che includono un valore per il campo di destinazione che non rientra nell'intervallo.
> funzioni di freschezza La funzione freshness per l'assegnazione di punteggio viene usata per modificare i punteggi di classificazione per gli elementi in base ai valori dei campi DateTimeOffset fields. Ad esempio, un elemento con una data più recente può essere classificato con una priorità maggiore rispetto agli elementi meno recenti.

È anche possibile classificare elementi come eventi del calendario con date future in modo che gli elementi più vicini al presente possano essere classificati più in alto rispetto agli elementi in futuro.

Nella versione corrente del servizio, una fine dell'intervallo verrà fissa all'ora corrente. L'altra è un'ora nel passato basata su boostingDuration. Per aumentare un intervallo di volte in futuro, usare un boostingDuration negativo.

La frequenza con cui l'incremento cambia da un intervallo massimo e minimo è determinato dall'interpolazione applicata al profilo di punteggio (vedere la figura seguente). Per invertire il fattore di aumento di priorità applicato, scegliere un fattore di aumento di priorità inferiore a 1.
funzioni > freshness > boostingDuration Imposta un periodo di scadenza, dopo il quale l'aumento di priorità non verrà più applicato a un determinato documento. Per informazioni sulla sintassi ed esempi, vedere Impostare boostingDuration nella sezione seguente.
distanza delle funzioni > La funzione di assegnazione dei punteggi della distanza viene usata per influire sul punteggio dei documenti in base alla distanza o alla vicinanza rispetto a una posizione geografica di riferimento. Il percorso di riferimento viene assegnato come parte della query in un parametro (usando il parametro di query scoringParameter) come lon,lat argomento.
riferimenti per le > funzioniPointParameter > Parametro da passare nelle query da usare come percorso di riferimento (usando il parametro di query scoringParameter).
funzioni > boostingDistance > Numero che indica la distanza, in chilometri, dalla posizione di riferimento in cui termina l'intervallo di aumento della priorità.
tag delle funzioni > La funzione per l'assegnazione di punteggio viene usata per influire sul punteggio di documenti in base ai tag nei documenti e nelle query di ricerca. La priorità di documenti con tag in comune con la query di ricerca verrà aumentata. I tag per la query di ricerca vengono forniti come parametro di assegnazione dei punteggi in ogni richiesta di ricerca (usando il parametro di query scoringParameter).
> tag di funzioniParameter > Parametro da passare nelle query per specificare i tag per una determinata richiesta (usando il parametro di query scoringParameter). Il parametro è costituito da un elenco delimitato da virgole di termini interi. Se un tag specificato all'interno dell'elenco è un elenco delimitato da virgole, è possibile usare un normalizzatore di testo nel campo per rimuovere le virgole in fase di query (eseguire il mapping del carattere virgola a uno spazio). Questo approccio "appiattirà" l'elenco in modo che tutti i termini siano una singola stringa lunga di termini delimitati da virgole.
functionAggregation (Facoltativo). Applicabile solo se vengono specificate funzioni. I valori validi includono: sum (default), average, minimum, maximum e firstMatching. Un punteggio di ricerca è un singolo valore calcolato da più variabili, incluse le funzioni multiple. Questo attributo indica il modo in cui gli aumenti di priorità di tutte le funzioni vengono combinati in un singolo aumento aggregato della priorità, che viene quindi applicato al punteggio di base del documento. Il punteggio di base dipende dal valore tf-idf calcolato dal documento e dalla query di ricerca.
defaultScoringProfile Quando si esegue una richiesta di ricerca, se non viene specificato alcun profilo di punteggio, verrà usato il punteggio predefinito (solo tf-idf).

È possibile eseguire l'override del valore predefinito predefinito sostituendo un profilo personalizzato come quello da usare quando non viene specificato alcun profilo specifico nella richiesta di ricerca.

Impostare le interpolazioni

Le interpolazioni consentono di impostare la forma dell'inclinazione usata per il punteggio. Poiché il punteggio è indicato dal valore più alto al valore più basso, l'inclinazione diminuisce sempre, ma l'interpolazione determina la curva dell'inclinazione verso il basso. È possibile usare le interpolazioni seguenti:

Interpolazione Descrizione
linear Per gli elementi inclusi nell'intervallo max e min, l'aumento di priorità applicato all'elemento corrisponderà a un importo costantemente decrescente. L'interpolazione predefinita per un profilo di punteggio è lineare.
constant Per gli elementi inclusi nell'intervallo di inizio e di fine, ai risultati della classificazione verrà applicato un aumento di priorità costante.
quadratic Rispetto all'interpolazione lineare che prevede un aumento di priorità costantemente decrescente, l'interpolazione quadratica presenterà una riduzione iniziale a ritmo più ridotto e una riduzione di intervallo molto più elevato in prossimità della fine. Questa opzione di interpolazione non è consentita nelle funzioni di assegnazione dei punteggi dei tag.
logarithmic Rispetto all'interpolazione lineare che prevede un aumento di priorità costantemente decrescente, l'interpolazione logaritmica presenterà una riduzione iniziale a ritmo più elevato e una riduzione di intervallo molto più ridotto in prossimità della fine. Questa opzione di interpolazione non è consentita nelle funzioni di assegnazione dei punteggi dei tag.

Constant, linear, quadratic, log10 lines on graph

Impostare boostingDuration

boostingDuration è un attributo della funzione freshness. Consente di impostare un periodo di scadenza, dopo il quale l'aumento di priorità non verrà più applicato a un determinato documento. Ad esempio, per aumentare la priorità di una linea di prodotti o una marca per un periodo promozionale di 10 giorni, è necessario specificare tale periodo come "P10D" per questi documenti.

boostingDuration deve essere formattato come valore XSD "dayTimeDuration" (un subset limitato di un valore di durata ISO 8601). Il modello è: "P[nD][T[nH][nM][nS]]".

La tabella seguente fornisce alcuni esempi.

Durata boostingDuration
1 giorno "P1D"
2 giorni e 12 ore "P2DT12H"
15 minuti "PT15M"
30 giorni, 5 ore, 10 minuti e 6334 secondi "P30DT5H10M6.334S"

Per altri esempi, vedere il sito Web relativo ai tipi di dati dello schema XML (W3.org).

Esempio esteso

Nell'esempio seguente viene illustrato lo schema di un indice con due profili di punteggio (boostGenre, newAndHighlyRated). Qualsiasi query eseguita in questo indice e che include uno dei profili come parametro di query userà il profilo per assegnare un punteggio al set di risultati.

Il boostGenre profilo usa campi di testo ponderati, corrispondenze di boosting trovate nei campi albumTitle, genre e artistName. I campi vengono incrementati rispettivamente di 1,5, 5 e 2. Al campo genre viene assegnata una priorità molto più alta rispetto agli altri, Se la ricerca viene eseguita sui dati che sono un po 'omogenei (come nel caso di "genere" in musicstoreindex), potrebbe essere necessaria una varianza maggiore nei pesi relativi. Ad esempio, nel musicstoreindex , 'rock' appare sia come genere che in descrizioni di genere con frasi identiche. Se si vuole assegnare una priorità maggiore al genere rispetto alla descrizione del genere, il campo genre dovrà avere un peso relativo decisamente maggiore.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

Vedi anche