Creare un indice per più lingue in Ricerca di intelligenza artificiale di Azure

Se si dispone di stringhe in più linguaggi, è possibile associare analizzatori del linguaggio che analizzano le stringhe usando regole linguistiche di un linguaggio specifico durante l'indicizzazione e l'esecuzione di query. Con un analizzatore del linguaggio è possibile gestire meglio le varianti dei caratteri, la punteggiatura e le forme radice delle parole.

Ricerca di intelligenza artificiale di Azure supporta gli analizzatori Microsoft e Lucene. Per impostazione predefinita, il motore di ricerca usa Lucene Standard, che è indipendente dal linguaggio. Se il test indica che l'analizzatore predefinito non è sufficiente, sostituirlo con un analizzatore del linguaggio.

In Ricerca di intelligenza artificiale di Azure i due modelli per supportare più lingue includono:

  • Creare indici specifici della lingua in cui tutto il contenuto alfanumerico si trova nella stessa lingua e tutti i campi stringa ricercabili vengono attribuiti per usare lo stesso analizzatore del linguaggio.

  • Creare un indice combinato con versioni specifiche della lingua di ogni campo , ad esempio description_en, description_fr, description_ko, e quindi vincolare la ricerca full-text solo a tali campi in fase di query. Questo approccio è utile per gli scenari in cui le varianti del linguaggio sono necessarie solo in alcuni campi, ad esempio una descrizione.

Questo articolo è incentrato sui passaggi e sulle procedure consigliate per la configurazione e l'esecuzione di query su campi specifici del linguaggio in un indice misto:

  • Definire un campo stringa per ogni variante del linguaggio.
  • Impostare un analizzatore del linguaggio in ogni campo.
  • Nella richiesta di query impostare il searchFields parametro su campi specifici e quindi usare select per restituire solo i campi con contenuto compatibile.

Nota

Se si usano modelli linguistici di grandi dimensioni in un modello RAG (Augmented Generated) di recupero, è possibile progettare la richiesta di restituire stringhe tradotte. Questo scenario non rientra nell'ambito di questo articolo.

Prerequisiti

L'analisi del linguaggio si applica ai campi di tipo Edm.Stringsearchablee che contengono testo localizzato. Se è necessaria anche la traduzione testuale, esaminare la sezione successiva per verificare se l'arricchimento tramite intelligenza artificiale soddisfa le proprie esigenze.

I campi non stringa e i campi stringa non ricercabili non vengono sottoposti a analisi lessicale e non vengono tokenizzati. Vengono invece archiviati e restituiti verbatim.

Aggiungere una traduzione testuale

Questo articolo presuppone che le stringhe tradotte esistano già. In caso contrario, è possibile collegare i servizi di intelligenza artificiale di Azure a una pipeline di arricchimento, richiamando la traduzione testuale durante l'indicizzazione. La traduzione testuale dipende dalla funzionalità dell'indicizzatore e dai servizi di intelligenza artificiale di Azure, ma tutta la configurazione viene eseguita all'interno di Ricerca di intelligenza artificiale di Azure.

Per aggiungere la traduzione testuale, seguire questa procedura:

  1. Verificare che il contenuto sia in un'origine dati supportata.

  2. Creare un'origine dati che punti al contenuto.

  3. Creare un set di competenze che includa la competenza Traduzione testuale.

    La competenza Traduzione testuale accetta una singola stringa come input. Se sono presenti più campi, è possibile creare un set di competenze che chiama traduzione testuale più volte, una volta per ogni campo. In alternativa, è possibile usare la competenza Unione testo per consolidare il contenuto di più campi in una stringa lunga.

  4. Creare un indice che includa campi per le stringhe tradotte. La maggior parte di questo articolo illustra la progettazione degli indici e le definizioni dei campi per l'indicizzazione e l'esecuzione di query su contenuto multilingue.

  5. Collegare una risorsa dei servizi di intelligenza artificiale di Azure in più aree al set di competenze.

  6. Creare ed eseguire l'indicizzatore e quindi applicare le indicazioni contenute in questo articolo per eseguire una query solo sui campi di interesse.

Suggerimento

La traduzione testuale è incorporata nella procedura guidata Importa dati. Se si dispone di un'origine dati supportata con testo che si vuole tradurre, è possibile eseguire la procedura guidata per provare la funzionalità di rilevamento e traduzione della lingua prima di scrivere codice.

Definire i campi per il contenuto in lingue diverse

In Ricerca di intelligenza artificiale di Azure le query hanno come destinazione un singolo indice. Gli sviluppatori che vogliono fornire stringhe specifiche della lingua in un'unica esperienza di ricerca in genere definiscono campi dedicati per l'archiviazione dei valori: un campo per le stringhe in inglese, uno per il francese e così via.

La analyzer proprietà in una definizione di campo viene utilizzata per impostare l'analizzatore del linguaggio. Viene usato sia per l'indicizzazione che per l'esecuzione di query.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Creare e caricare un indice

Un passaggio intermedio consiste nel compilare e popolare l'indice prima di simulare una query. Questo passaggio viene citato qui per motivi di completezza. Un modo per determinare la disponibilità degli indici consiste nel controllare l'elenco degli indici nel portale.

Limitare la query e ridurre i risultati

I parametri nella query vengono usati per limitare la ricerca ai campi specifici e quindi ridurre i risultati di tutti i campi non utili per lo scenario.

Parametri Scopo
searchFields Limita la ricerca full-text all'elenco dei campi denominati.
select Riduce la risposta in modo da includere solo i campi specificati. Per impostazione predefinita, vengono restituiti tutti i campi recuperabili. Il select parametro consente di scegliere quali restituire.

Dato l'obiettivo di vincolare la ricerca ai campi contenenti stringhe francesi, è possibile usare searchFields per impostare come destinazione la query in campi contenenti stringhe in tale linguaggio.

Non è necessario specificare l'analizzatore in una richiesta di query. Un analizzatore del linguaggio nella definizione del campo determina l'analisi del testo durante l'esecuzione della query. Per le query che specificano più campi, ognuno dei quali richiama analizzatori del linguaggio diversi, i termini o le frasi vengono elaborati simultaneamente dagli analizzatori assegnati per ogni campo.

Per impostazione predefinita, una ricerca restituisce tutti i campi contrassegnati come recuperabili. Di conseguenza, si potrebbe voler escludere i campi che non sono conformi all'esperienza di ricerca specifica della lingua che si vuole fornire. In particolare, se si limita la ricerca a un campo con stringhe in francese, probabilmente si vorrà escludere i campi contenenti stringhe in inglese dai risultati. L'uso del parametro di query consente di select controllare quali campi vengono restituiti all'applicazione chiamante.

Esempio in REST

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

Esempio in C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Incrementare i campi specifici del linguaggio

A volte il linguaggio dell'agente che esegue una query non è noto, nel qual caso la query può essere eseguita su tutti i campi contemporaneamente. La preferenza IA per i risultati in una determinata lingua può essere definita usando i profili di punteggio. Nell'esempio seguente, le corrispondenze trovate nella descrizione in francese vengono con un punteggio superiore rispetto alle corrispondenze in altre lingue:

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Si includerà quindi il profilo di punteggio nella richiesta di ricerca:

POST /indexes/hotels/docs/search?api-version=2023-11-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

Passaggi successivi