Condividi tramite


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

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

Un set di competenze è un oggetto riutilizzabile in Ricerca di intelligenza artificiale di Azure collegato 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.

Diagramma che mostra i flussi di dati del set di competenze, con particolare attenzione a input, output e mapping.

Dall'inizio dell'elaborazione del set di competenze alla sua conclusione, le competenze leggono e scrivono in un documento arricchito che esiste in memoria. 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 ogni competenza scrive l'output come nodi nel grafico.

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

Per configurare l'intelligenza artificiale applicata, specificare le impostazioni in un set di competenze e 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 il riconoscimento ottico dei caratteri (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:

Diagramma che mostra le proprietà dei set di competenze che stabiliscono il percorso dati.

  • 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 una raccolta, in cui l'aggiunta di un /* risultato nella chiamata di competenza 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 multi-livello, l'impostazione del contesto sulla raccolta padre influisce 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 determina 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 n. 1 è una competenza Dividi testo che accetta il contenuto del campo di origine "reviews_text" come input e suddivide il contenuto in "pagine" di 5.000 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.

Competenze lette e scritte dall'albero di arricchimento

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 determinano 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.

Diagramma che mostra le proprietà degli indicizzatori che stabiliscono il percorso dei dati per i campi in un indice.

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:

albero di arricchimento dopo il cracking di documenti

Il nodo radice per tutti gli arricchimenti è "/document". Quando si lavora con gli indicizzatori BLOB, il "/document" nodo ha nodi figlio di "/document/content" e "/document/normalized_images". Quando i dati sono CSV, come in questo esempio, i nomi delle colonne vengono 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 5.000 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 5.000 segmenti di 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.

albero di arricchimento dopo la competenza n. 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, 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.

albero di arricchimento dopo la competenza n. 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 , sia l'analisi del /document/reviews_text/pages/*sentiment che le competenze chiave di frase vengono 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 il resto delle competenze nel set di competenze e visualizzare come l'albero degli arricchimenti continua 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.

albero di arricchimento dopo tutte le competenze

I colori dei connettori nell'albero precedente indicano che gli arricchimenti sono stati creati da competenze diverse e che i nodi devono essere indirizzati singolarmente e non fanno 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.