Condividi tramite


Aggiungere sinonimi in Ricerca di intelligenza artificiale di Azure

In un servizio di ricerca, una mappa sinonimia associa termini equivalenti, espandendo l'ambito di una query senza che l'utente abbia effettivamente la necessità di specificare il termine. Si supponga, ad esempio, che cane, canina e cucciolo siano sinonimi mappati, una query sulle corrispondenze canine in un documento contenente cani. È possibile creare più mappe sinonimiche per lingue diverse, ad esempio versioni inglesi e francesi, o lessico se il contenuto include gergo tecnico, gergo o terminologia non comune.

Alcuni punti chiave sulle mappe sinonimie:

  • Una mappa sinonimia è una risorsa di primo livello che può essere creata una sola volta e usata da molti indici.
  • Una mappa sinonimica si applica ai campi stringa.
  • È possibile creare e assegnare una mappa sinonimia in qualsiasi momento senza interruzioni dell'indicizzazione o delle query.
  • Il livello di servizio imposta i limiti sul numero di mappe sinonimi che è possibile creare.
  • Il servizio di ricerca può avere più mappe sinonimi, ma all'interno di un indice una definizione di campo può avere solo un'assegnazione di mappa sinonimo.

Creare una mappa di sinonimi

Una mappa sinonimica è costituita da nome, formato e regole che funzionano come voci della mappa sinonimica. L'unico formato supportato è solre il formato determina la solr costruzione di regole.

Per creare una mappa sinonimica, eseguire questa operazione a livello di codice. il portale di Azure non supporta le definizioni di mappa dei sinonimi.

Usare Crea mappa di sinonimi (API REST) per creare una mappa di sinonimi.

POST /synonymmaps?api-version=2024-07-01
{
    "name": "geo-synonyms",
    "format": "solr",
    "synonyms": "
        USA, United States, United States of America\n
        Washington, Wash., WA => WA\n"
}

Definire le regole

Le regole di mapping rispettano la specifica del filtro dei sinonimi open source di Apache Solr, descritta in questo documento: SynonymGraphFilter. Il formato solr supporta due tipi di regole:

  • equivalenza (dove i termini sono sostituti equivalenti nella query)

  • mapping espliciti (in cui i termini vengono mappati a un singolo termine esplicito)

Ogni regola è delimitata dal carattere di nuova riga (\n). È possibile definire fino a 5.000 regole per ogni mappa sinonimica in un servizio gratuito e 20.000 regole per ogni mappa in altri livelli. Ogni regola può avere fino a 20 espansioni o elementi in una regola. Per altre informazioni, vedere Limiti dei sinonimi.

I parser di query applicano automaticamente lettere minuscole o maiuscole o minuscole. Per mantenere caratteri speciali nella stringa, ad esempio una virgola o un trattino, aggiungere i caratteri di escape appropriati durante la creazione della mappa sinonimia.

Regole di equivalenza

Le regole per i termini equivalenti sono delimitate da virgole all'interno della stessa regola. Nel primo esempio, una query negli Stati Uniti si espande in USA OR "Stati Uniti" OR "Stati Uniti of America". Si noti che se si desidera trovare una corrispondenza in una frase, la query stessa deve essere una query di frasi racchiuse tra virgolette.

Nel caso di equivalenza, una query per cane espande la query per includere anche cucciolo e canina.

{
"format": "solr",
"synonyms": "
    USA, United States, United States of America\n
    dog, puppy, canine\n
    coffee, latte, cup of joe, java\n"
}

Mapping esplicito

Le regole per un mapping esplicito sono indicate da una freccia =>. Quando specificato, una sequenza di termini di una query di ricerca che corrisponde al lato sinistro di => verrà sostituita con le alternative sul lato destro.

Nel caso esplicito, una query per Washington, Wash o WA viene riscritta come WA e il motore di query cerca solo corrispondenze nel termine WA. Il mapping esplicito si applica solo nella direzione specificata e non riscrive la query WA in Washington in questo caso.

{
"format": "solr",
"synonyms": "
    Washington, Wash., WA => WA\n
    California, Calif., CA => CA\n"
}

Escape dei caratteri speciali

I sinonimi vengono analizzati durante l'elaborazione di query esattamente come qualsiasi altro termine di query, il che significa che le regole relative ai caratteri riservati e speciali si applicano ai termini nella mappa sinonimica. L'elenco di caratteri che richiedono l'escape varia tra la sintassi semplice e la sintassi completa:

Per mantenere i caratteri eliminati dall'analizzatore predefinito, sostituire un analizzatore che li mantiene. Alcune scelte includono analizzatori dl linguaggio naturale Microsoft, che conservano parole con trattini, o un analizzatore personalizzato per modelli più complessi. Per altre informazioni, vedere Termini parziali, pattern e caratteri speciali.

Nell'esempio seguente viene illustrato un esempio di come eseguire l’escape di un carattere con una barra rovesciata:

{
    "format": "solr",
    "synonyms": "WA\, USA, WA, Washington\n"
}

Poiché la barra rovesciata è un carattere speciale in altri linguaggi come JSON e C#, è probabile che sia necessario eseguirne l'escape doppio. Ecco un esempio in JSON:

{
    "format":"solr",
    "synonyms": "WA\\, USA, WA, Washington"
}

Gestire le mappe dei sinonimi

È possibile aggiornare una mappa sinonimia senza interrompere i carichi di lavoro di query e indicizzazione. Tuttavia, dopo aver aggiunto una mappa sinonimia a un campo, se si elimina una mappa sinonimia, qualsiasi query che include i campi in questione ha esito negativo con un errore 404.

La creazione, l'aggiornamento e l'eliminazione di una mappa sinonimia è sempre un'operazione di tipo intero. Non è possibile aggiornare o eliminare parti della mappa sinonimia in modo incrementale. Se si aggiorna anche una singola regola, è necessario ripetere il caricamento.

Assegnare sinonimi a campi

Dopo aver creato la mappa dei sinonimi, assegnarla a un campo nell'indice. Per assegnare mappe sinonimi, eseguire questa operazione a livello di codice. il portale di Azure non supporta le associazioni dei campi della mappa sinonimi.

  • Un campo deve essere di tipo Edm.String o Collection(Edm.String)
  • Un campo deve avere "searchable":true
  • Un campo può avere una sola mappa sinonimo

Se la mappa dei sinonimi esiste nel servizio di ricerca, viene usata nella query successiva, senza reindicizzazione o ricompilazione necessarie.

Usare Crea o aggiorna indice (API REST) per modificare una definizione di campo.

PUT /indexes?api-version=2024-07-01
{
    "name":"hotels-sample-index",
    "fields":[
        {
            "name":"description",
            "type":"Edm.String",
            "searchable":true,
            "synonymMaps":[
            "en-synonyms"
            ]
        },
        {
            "name":"description_fr",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"fr.microsoft",
            "synonymMaps":[
            "fr-synonyms"
            ]
        }
    ]
}

Eseguire query su campi equivalenti o mappati

Un'assegnazione di campo sinonimo non cambia la modalità di scrittura delle query. Dopo l'assegnazione della mappa sinonimo, l'unica differenza è che se nella mappa dei sinonimi esiste un termine di query, il motore di ricerca si espande o riscrive il termine o la frase, a seconda della regola.

Modalità di utilizzo dei sinonimi durante l'esecuzione di query

I sinonimi sono una tecnica di espansione di query che integra il contenuto di un indice con termini equivalenti, ma solo per campi con un'assegnazione di sinonimo. Se una query con ambito di campo esclude un campo abilitato per sinonimi, non verranno visualizzate corrispondenze dalla mappa sinonimica.

Per campi abilitati per sinonimi, i sinonimi sono soggetti alla stessa analisi del testo del campo associato. Ad esempio, se un campo viene analizzato usando l'analizzatore Lucene standard, anche i termini sinonimi sono soggetti all'analizzatore Lucene standard in fase di query. Se si desidera mantenere la punteggiatura (ad esempio, punti o trattini) nel termine sinonimo, applicare un analizzatore con mantenimento del contenuto nel campo.

Internamente, la funzionalità dei sinonimi riscrive la query originale con sinonimi usando l'operatore OR. Per questo motivo, l'evidenziazione dei risultati e i profili di punteggio trattano il termine originale e i sinonimi come equivalenti.

I sinonimi si applicano solo a query di testo in formato libero e non sono supportati per filtri, facet, completamento automatico o suggerimenti. Il completamento automatico e i suggerimenti si basano solo sul termine originale; le corrispondenze sinonimiche non compaiono nella risposta.

Se si ha un indice esistente in un ambiente di sviluppo (non di produzione), provare con un piccolo dizionario per vedere come l'aggiunta di sinonimi cambia l'esperienza di ricerca, compreso l'impatto sui profili di punteggio, l'evidenziazione dei risultati e i suggerimenti.

Ricerche con caratteri jolly

Le espansioni di sinonimi non si applicano a termini di ricerca con caratteri jolly; i termini con prefisso, fuzzy e regex non sono espansi.

Se è necessario eseguire un'unica query che comprenda espansioni sinonimiche, caratteri jolly, espressioni regolari o ricerche fuzzy, è possibile combinare le relative istruzioni con la sintassi OR. Ad esempio, per combinare sinonimi e caratteri jolly in una sintassi di query semplice, il termine è <query> | <query>*.

Passaggio successivo