Concetti relativi al set di competenze in Ricerca di intelligenza artificiale di Azure

Questo articolo è destinato agli sviluppatori che necessitano di una comprensione più approfondita dei concetti e della composizione del set di competenze e presuppone la familiarità con i concetti generali dell'arricchimento tramite intelligenza artificiale.

Un set di competenze è una risorsa riutilizzabile in Ricerca di intelligenza artificiale di Azure collegata a un indicizzatore. Contiene una o più competenze che chiamano l'intelligenza artificiale predefinita o l'elaborazione personalizzata esterna sui documenti recuperati da un'origine dati esterna.

Il diagramma seguente illustra il flusso di dati di base dell'esecuzione del set di competenze.

Diagram showing skillset data flows, with focus on inputs, outputs, and mappings.

Dall'inizio dell'elaborazione del set di competenze alla sua conclusione, le competenze leggono e scrivono in un documento arricchito. Inizialmente, un documento arricchito è solo il contenuto non elaborato estratto da un'origine dati (articolato come "/document" nodo radice). Con ogni esecuzione delle competenze, il documento arricchito ottiene struttura e sostanza man mano che la competenza scrive l'output come nodi nel grafico.

Al termine dell'esecuzione del set di competenze, l'output di un documento arricchito trova il suo modo in un indice tramite mapping dei campi di output. Qualsiasi contenuto non elaborato che si desidera trasferire intatto, dall'origine a un indice, viene definito tramite mapping dei campi.

Per configurare l'arricchimento, è necessario specificare le impostazioni in un set di competenze e in un indicizzatore.

Definizione del set di competenze

Un set di competenze è una matrice di una o più competenze che eseguono un arricchimento, ad esempio la traduzione di testo o OCR in un file di immagine. Le competenze possono essere le competenze predefinite di Microsoft o le competenze personalizzate per la logica di elaborazione ospitata esternamente. Un set di competenze produce documenti arricchiti utilizzati durante l'indicizzazione o proiettati in un archivio conoscenze.

Le competenze hanno un contesto, input e output:

Diagram showing which properties of skillsets establish the data path.

  • Il contesto fa riferimento all'ambito dell'operazione, che può essere una volta per ogni documento o una volta per ogni elemento in una raccolta.

  • Gli input provengono dai nodi in un documento arricchito, in cui una "origine" e un "nome" identificano un determinato nodo.

  • L'output viene restituito al documento arricchito come nuovo nodo. I valori sono il contenuto del nodo "name" e del nodo. Se un nome di nodo è duplicato, è possibile impostare un nome di destinazione per la disambiguazione.

Contesto delle competenze

Ogni competenza ha un contesto, che può essere l'intero documento (/document) o un nodo inferiore nell'albero (/document/countries/*). Un contesto determina:

  • Numero di esecuzioni della competenza, su un singolo valore (una volta per campo, per documento) o per i valori di contesto della raccolta di tipi, in cui l'aggiunta di un /* risultato nella chiamata di competenza, una volta per ogni istanza della raccolta.

  • Dichiarazione di output o dove nell'albero di arricchimento vengono aggiunti gli output della competenza. Gli output vengono sempre aggiunti all'albero come elementi figlio del nodo di contesto.

  • Forma degli input. Per le raccolte a più livelli, l'impostazione del contesto sulla raccolta padre influirà sulla forma dell'input per la competenza. Ad esempio, se si dispone di un albero di arricchimento con un elenco di paesi/aree geografiche, ognuno arricchito con un elenco di stati contenenti un elenco di codici POSTALI, come si imposta il contesto determinerà la modalità di interpretazione dell'input.

    Contesto Input Forma dell'input Chiamata della competenza
    /document/countries/* /document/countries/*/states/*/zipcodes/* Elenco di tutti i codici POSTALI nel paese/area geografica Una volta per paese/area
    /document/countries/*/states/* /document/countries/*/states/*/zipcodes/* Elenco di codici POSTALI nello stato Una volta per ogni combinazione di paese/area e stato

Dipendenze delle competenze

Le competenze possono essere eseguite in modo indipendente e in parallelo o in sequenza se si inserisce l'output di una competenza in un'altra competenza. L'esempio seguente illustra due competenze predefinite eseguite in sequenza:

  • La competenza 1 è una competenza Divisione testo che accetta il contenuto del campo di origine "reviews_text" come input e suddivide il contenuto in "pagine" di 5000 caratteri come output. La suddivisione di testo di grandi dimensioni in blocchi più piccoli può produrre risultati migliori per competenze come il rilevamento del sentiment.

  • La competenza n. 2 è una competenza Rilevamento sentiment accetta "pagine" come input e produce un nuovo campo denominato "Sentiment" come output che contiene i risultati dell'analisi del sentiment.

Si noti che l'output della prima competenza ("pagine") viene usato nell'analisi del sentiment, dove "/document/reviews_text/pages/*" è sia il contesto che l'input. Per altre informazioni sulla formulazione del percorso, vedere Come fare riferimento agli arricchimenti.

{
    "skills": [
        {
            "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
            "name": "#1",
            "description": null,
            "context": "/document/reviews_text",
            "defaultLanguageCode": "en",
            "textSplitMode": "pages",
            "maximumPageLength": 5000,
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/reviews_text"
                }
            ],
            "outputs": [
                {
                    "name": "textItems",
                    "targetName": "pages"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
            "name": "#2",
            "description": null,
            "context": "/document/reviews_text/pages/*",
            "defaultLanguageCode": "en",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/reviews_text/pages/*",
                }
            ],
            "outputs": [
                {
                    "name": "sentiment",
                    "targetName": "sentiment"
                },
                {
                    "name": "confidenceScores",
                    "targetName": "confidenceScores"
                },
                {
                    "name": "sentences",
                    "targetName": "sentences"
                }
            ]
        }
      . . .
  ]
}

Albero di arricchimento

Un documento arricchito è una struttura di dati temporanea e simile ad albero creata durante l'esecuzione del set di competenze che raccoglie tutte le modifiche introdotte tramite le competenze. Collettivamente, gli arricchimenti sono rappresentati come una gerarchia di nodi indirizzabili. I nodi includono anche tutti i campi non elaborati passati in verbatim dall'origine dati esterna.

Esiste un documento arricchito per la durata dell'esecuzione del set di competenze, ma può essere memorizzato nella cache o inviato a un archivio conoscenze.

Inizialmente, un documento arricchito è semplicemente il contenuto estratto da un'origine dati durante il cracking del documento, in cui il testo e le immagini vengono estratti dall'origine e resi disponibili per l'analisi della lingua o dell'immagine.

Il contenuto iniziale è costituito dai metadati e dal nodo radice (document/content). Il nodo radice è in genere un intero documento o un'immagine normalizzata estratta da un'origine dati durante il cracking del documento. Il modo in cui viene articolato in un albero di arricchimento varia per ogni tipo di origine dati. La tabella seguente illustra lo stato di un documento che entra nella pipeline di arricchimento per diverse origini dati supportate:

Origine dati/modalità di analisi Default JSON, righe JSON e CSV
Archiviazione BLOB /document/content
/document/normalized_images/*
...
/document/{key1}
/document/{key2}
...
Azure SQL /document/{column1}
/document/{column2}
...
N/D
Azure Cosmos DB /document/{key1}
/document/{key2}
...
N/D

Durante l'esecuzione delle competenze, l'output viene aggiunto all'albero di arricchimento come nuovi nodi. Se l'esecuzione delle competenze si trova sull'intero documento, i nodi vengono aggiunti al primo livello sotto la radice.

I nodi possono essere usati come input per le competenze downstream. Ad esempio, le competenze che creano contenuto, ad esempio stringhe tradotte, possono diventare input per competenze che riconoscono le entità o estraggono frasi chiave.

Skills read and write from enrichment tree

Sebbene sia possibile visualizzare e usare un albero di arricchimento tramite l'editor visivo Sessioni di debug, si tratta principalmente di una struttura interna.

Gli arricchimenti non sono modificabili: una volta creati, i nodi non possono essere modificati. Un albero di arricchimento diventa complesso contestualmente ai set di competenze, ma non tutti i nodi dell'albero di arricchimento devono necessariamente raggiungere l'indice o l'archivio conoscenze.

È possibile rendere persistente in modo selettivo solo un subset degli output di arricchimento in modo da mantenere solo ciò che si intende usare. I mapping dei campi di output nella definizione dell'indicizzatore determineranno il contenuto effettivamente inserito nell'indice di ricerca. Analogamente, se si sta creando un archivio conoscenze, è possibile eseguire il mapping degli output in forme assegnate alle proiezioni.

Nota

Il formato dell'albero di arricchimento consente alla pipeline di arricchimento di collegare metadati anche ai tipi di dati primitivi. I metadati non saranno un oggetto JSON valido, ma possono essere proiettati in un formato JSON valido nelle definizioni di proiezione in un archivio conoscenze. Per altre informazioni, vedere Competenza shaper.

Definizione di indicizzatore

Un indicizzatore dispone di proprietà e parametri usati per configurare l'esecuzione dell'indicizzatore. Tra queste proprietà sono presenti mapping che impostano il percorso dei dati sui campi in un indice di ricerca.

Diagram showing which properties of indexers establish the data path to fields in an index.

Esistono due set di mapping:

  • "fieldMappings" esegue il mapping di un campo di origine a un campo di ricerca.

  • "outputFieldMappings" esegue il mapping di un nodo in un documento arricchito a un campo di ricerca.

La proprietà "sourceFieldName" specifica un campo nell'origine dati o un nodo in un albero di arricchimento. La proprietà "targetFieldName" specifica il campo di ricerca in un indice che riceve il contenuto.

Esempio di arricchimento

Usando il set di competenze recensioni hotel come punto di riferimento, questo esempio spiega come un albero di arricchimento si evolve attraverso l'esecuzione delle competenze usando diagrammi concettuali.

Questo esempio mostra anche:

  • Funzionamento del contesto e degli input di una competenza per determinare il numero di esecuzioni di una competenza
  • Quale forma dell'input si basa sul contesto

In questo esempio, i campi di origine di un file CSV includono recensioni dei clienti sugli hotel ("reviews_text") e valutazioni ("reviews_rating"). L'indicizzatore aggiunge campi di metadati dall'archivio BLOB e le competenze aggiungono testo tradotto, punteggi del sentiment e rilevamento frasi chiave.

Nell'esempio di recensioni dell'hotel, un "documento" all'interno del processo di arricchimento rappresenta una singola revisione dell'hotel.

Suggerimento

È possibile creare un indice di ricerca e un archivio conoscenze per questi dati nelle API REST o portale di Azure. È anche possibile usare sessioni di debug per informazioni dettagliate sulla composizione, le dipendenze e gli effetti del set di competenze su un albero di arricchimento. Le immagini in questo articolo vengono estratte dalle sessioni di debug.

Concettualmente, l'albero di arricchimento iniziale è simile al seguente:

enrichment tree after document cracking

Il nodo radice per tutti gli arricchimenti è "/document". Quando si lavora con gli indicizzatori BLOB, il "/document" nodo avrà nodi figlio di "/document/content" e "/document/normalized_images". Quando i dati sono CSV, come in questo esempio, i nomi delle colonne verranno mappati ai nodi sotto "/document".

Competenza n. 1: Suddivisione della competenza

Quando il contenuto di origine è costituito da blocchi di testo di grandi dimensioni, è utile suddividerlo in componenti più piccoli per una maggiore accuratezza della lingua, del sentiment e del rilevamento delle frasi chiave. Sono disponibili due grani: pagine e frasi. Una pagina è costituita da circa 5000 caratteri.

Una competenza di suddivisione del testo è in genere la prima in un set di competenze.

"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
{
    "name": "text",
    "source": "/document/reviews_text"
}
],
"outputs": [
{
    "name": "textItems",
    "targetName": "pages"
}

Con il contesto della competenza di "/document/reviews_text", la competenza divisa viene eseguita una volta per .reviews_text L'output della competenza è un elenco in cui reviews_text è suddiviso in segmenti di 5000 caratteri. L'output della competenza di divisione viene denominato pages e viene aggiunto all'albero di arricchimento. La funzionalità targetName consente di rinominare l'output di una competenza prima che venga aggiunto all'albero di arricchimento.

L'albero di arricchimento dispone ora di un nuovo nodo inserito nel contesto della competenza. Questo nodo è disponibile per il mapping dei campi di qualsiasi competenza, proiezione o output.

enrichment tree after skill #1

Per accedere a uno qualsiasi degli arricchimenti aggiunti a un nodo da una competenza, è necessario il percorso completo per l'arricchimento. Ad esempio, se si vuole usare il testo dal pages nodo come input a un'altra competenza, sarà necessario specificarlo come "/document/reviews_text/pages/*". Per altre informazioni sui percorsi, vedere Arricchimenti di riferimento.

Competenza n. 2: rilevamento della lingua

I documenti di revisione degli hotel includono il feedback dei clienti espresso in più lingue. La competenza di rilevamento della lingua determina quale lingua viene usata. Il risultato verrà quindi passato all'estrazione di frasi chiave e al rilevamento del sentiment (non visualizzato), prendendo in considerazione la lingua durante il rilevamento di sentiment e frasi.

Mentre la competenza di rilevamento della lingua è la terza competenza (competenza n. 3) definita nel set di competenze, è la competenza successiva da eseguire. Non richiede alcun input in modo che venga eseguito in parallelo con la competenza precedente. Analogamente alla competenza di divisione che la precede, anche la competenza di rilevamento della lingua viene richiamata una volta per ogni documento. L'albero di arricchimento dispone ora di un nuovo nodo per la lingua.

enrichment tree after skill #2

Competenze n. 3 e 4 (analisi del sentiment e rilevamento frasi chiave)

Il feedback dei clienti riflette una gamma di esperienze positive e negative. La competenza di analisi del sentiment analizza il feedback e assegna un punteggio lungo un continuum di numeri negativi a numeri positivi o neutro se il sentiment non è deterministico. Parallela all'analisi del sentiment, il rilevamento delle frasi chiave identifica ed estrae parole e frasi brevi che appaiono consequenziali.

Dato il contesto di /document/reviews_text/pages/*, sia l'analisi del sentiment che le competenze chiave di frase verranno richiamate una volta per ognuno degli elementi nella pages raccolta. L'output della competenza sarà un nodo nell'elemento di pagina associato.

A questo punto dovrebbe essere possibile esaminare le altre competenze del set e visualizzare il modo in cui l'albero degli arricchimenti continuerà a crescere con l'esecuzione di ogni competenza. Alcune competenze, come quella di unione e dello shaper, creano nuovi nodi, ma usano solo i dati provenienti da nodi esistenti e non creano nuovi arricchimenti.

enrichment tree after all skills

I colori dei connettori nell'albero precedente indicano che gli arricchimenti sono stati creati da competenze diverse e i nodi dovranno essere indirizzati singolarmente e non faranno parte dell'oggetto restituito quando si seleziona il nodo padre.

Competenza n. 5 Competenza shaper

Se l'output include un archivio conoscenze, aggiungere una competenza Shaper come ultimo passaggio. La competenza Shaper crea forme di dati fuori dai nodi in un albero di arricchimento. Ad esempio, è possibile consolidare più nodi in una singola forma. È quindi possibile proiettare questa forma come tabella (i nodi diventano le colonne di una tabella), passando la forma in base al nome a una proiezione di tabella.

La competenza Shaper è facile da usare perché è incentrata sulla forma in un'unica competenza. In alternativa, è possibile optare per il data shaping in linea all'interno di singole proiezioni. La competenza shaper non aggiunge o detrae da un albero di arricchimento, quindi non viene visualizzata. È invece possibile pensare a una competenza Shaper come ai mezzi mediante cui si riprogetta l'albero di arricchimento già presente. Concettualmente, si tratta di una procedura simile alla creazione di viste da tabelle in un database.

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "name": "#5",
  "description": null,
  "context": "/document",
  "inputs": [
    {
      "name": "name",
      "source": "/document/name"
    },
    {
      "name": "reviews_date",
      "source": "/document/reviews_date"
    },
    {
      "name": "reviews_rating",
      "source": "/document/reviews_rating"
    },
    {
      "name": "reviews_text",
      "source": "/document/reviews_text"
    },
    {
      "name": "reviews_title",
      "source": "/document/reviews_title"
    },
    {
      "name": "AzureSearch_DocumentKey",
      "source": "/document/AzureSearch_DocumentKey"
    },
    {
      "name": "pages",
      "sourceContext": "/document/reviews_text/pages/*",
      "inputs": [
        {
          "name": "Sentiment",
          "source": "/document/reviews_text/pages/*/Sentiment"
        },
        {
          "name": "LanguageCode",
          "source": "/document/Language"
        },
        {
          "name": "Page",
          "source": "/document/reviews_text/pages/*"
        },
        {
          "name": "keyphrase",
          "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
          "inputs": [
            {
              "name": "Keyphrases",
              "source": "/document/reviews_text/pages/*/Keyphrases/*"
            }
          ]
        }
      ]
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "tableprojection"
    }
  ]
}

Passaggi successivi

Con un'introduzione e un esempio dietro di te, prova a creare il primo set di competenze usando competenze predefinite.