Condividi tramite


Data shaping per la proiezione in un archivio conoscenze

In Ricerca di intelligenza artificiale di Azure, "shaping dei dati" descrive un passaggio del flusso di lavoro dell'archivio conoscenze che crea una rappresentazione dei dati del contenuto che si vuole proiettare in tabelle, oggetti e file in Archiviazione di Azure.

Durante l'esecuzione delle competenze, gli output vengono scritti in un albero di arricchimento in una gerarchia di nodi e, sebbene si voglia visualizzare e utilizzare l'albero di arricchimento nell'intera struttura, è più probabile che si voglia un granularità più fine, creando subset di nodi per diversi scenari, ad esempio inserendo i nodi correlati a testo tradotto o entità estratte in tabelle specifiche.

Da solo, l'albero di arricchimento non include la logica che informerebbe il modo in cui il contenuto è rappresentato in un archivio conoscenze. Le forme di dati riempiono questa distanza fornendo lo schema di ciò che entra in ogni tabella, oggetto e proiezione di file. È possibile considerare una forma di dati come una definizione personalizzata o una vista dei dati arricchiti. È possibile creare tutte le forme necessarie e quindi assegnarle alle proiezioni in una definizione dell'archivio conoscenze.

Approcci per la creazione di forme

Esistono due modi per modellare il contenuto arricchito in modo che possa essere proiettato in un archivio conoscenze:

  • Usare la competenza Shaper per creare nodi in un albero di arricchimento usato espressamente per la proiezione. La maggior parte delle competenze crea nuovo contenuto. Al contrario, una competenza Shaper funziona con nodi esistenti, in genere per consolidare più nodi in un singolo oggetto complesso. Ciò è utile per le tabelle, in cui si vuole che l'output di più nodi venga espresso fisicamente come colonne nella tabella.

  • Utilizzare una forma inline all'interno della definizione di proiezione stessa.

L'uso della competenza Shaper esternalizza la forma in modo che possa essere usata da più proiezioni o anche da altre competenze. Garantisce inoltre che tutte le mutazioni dell'albero di arricchimento siano contenute all'interno della competenza e che l'output sia un oggetto che può essere riutilizzato. Al contrario, la forma inline consente di creare la forma necessaria, ma è un oggetto anonimo ed è disponibile solo per la proiezione per cui è definita.

Gli approcci possono essere usati insieme o separatamente. Questo articolo illustra entrambi: una competenza Shaper per le proiezioni di tabella e il data shaping inline con la proiezione della tabella delle frasi chiave.

Usare una competenza shaper

Le competenze del shaper vengono in genere posizionate alla fine di un set di competenze, creando una visualizzazione dei dati da passare a una proiezione. In questo esempio viene creata una forma denominata "tableprojection" contenente i nodi seguenti: "reviews_text", "reviews_title", "AzureSearch_DocumentKey" e punteggi del sentiment e frasi chiave dalle recensioni con paging.

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

SourceContext - proprietà

All'interno di una competenza Shaper, un input può avere un sourceContext elemento . Questa stessa proprietà può essere utilizzata anche in forme inline nelle proiezioni.

sourceContext viene usato per costruire oggetti annidati a più livelli in una pipeline di arricchimento. Se l'input si trova in un contesto diverso rispetto al contesto della competenza, usare sourceContext. SourceContext richiede di definire un input annidato con l'elemento specifico da indirizzare come origine.

Nell'esempio precedente, l'analisi del sentiment e l'estrazione delle frasi chiave sono state eseguite sul testo suddiviso in pagine per un'analisi più efficiente. Supponendo di voler proiettare i punteggi e le frasi in una tabella, è ora necessario impostare il contesto sull'input annidato che fornisce il punteggio e la frase.

Proiettare una forma in più tabelle

Con il tableprojection nodo definito nella outputs sezione precedente, è possibile suddividere parti del tableprojection nodo in singole tabelle correlate:

"projections": [
    {
        "tables": [
            {
                "tableName": "hotelReviewsDocument",
                "generatedKeyName": "Documentid",
                "source": "/document/tableprojection"
            },
            {
                "tableName": "hotelReviewsPages",
                "generatedKeyName": "Pagesid",
                "source": "/document/tableprojection/pages/*"
            },
            {
                "tableName": "hotelReviewsKeyPhrases",
                "generatedKeyName": "KeyPhrasesid",
                "source": "/document/tableprojection/pages/*/keyphrase/*"
            }
        ]
    }
]

Forma in linea per le proiezioni di tabella

La forma inline è la possibilità di formare nuove forme all'interno della definizione di proiezione stessa. La forma inline presenta queste caratteristiche:

  • La forma può essere utilizzata solo dalla proiezione che lo contiene.
  • La forma può essere identica a quella che produrrebbe una competenza Shaper.

Viene creata una forma in linea con sourceContext e inputs.

Proprietà Descrizione
sourceContext Imposta la radice della proiezione.
input Ogni input è una colonna della tabella. Name è il nome della colonna. L'origine è il nodo di arricchimento che fornisce il valore .

Per proiettare gli stessi dati dell'esempio precedente, l'opzione di proiezione inline avrà un aspetto simile al seguente:

"projections": [
    {
        "tables": [
            {
                "tableName": "hotelReviewsInlineDocument",
                "generatedKeyName": "Documentid",
                "sourceContext": "/document",     
                "inputs": [
                    {
                        "name": "reviews_text",
                        "source": "/document/reviews_text"
                    },
                    {
                        "name": "reviews_title",
                        "source": "/document/reviews_title"
                    },
                    {
                        "name": "AzureSearch_DocumentKey",
                        "source": "/document/AzureSearch_DocumentKey"
                    }                             
                ]
            },
            {
                "tableName": "hotelReviewsInlinePages",
                "generatedKeyName": "Pagesid",
                "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/*"
                    }
                ]
            },
            {
                "tableName": "hotelReviewsInlineKeyPhrases",
                "generatedKeyName": "KeyPhraseId",
                "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
                "inputs": [
                    {
                        "name": "Keyphrases",
                        "source": "/document/reviews_text/pages/*/Keyphrases/*"
                    }
                ]
            }
        ]
    }
]

Un'osservazione di entrambi gli approcci è il modo in cui i valori delle "Keyphrase" vengono proiettati usando "sourceContext". Il nodo "Keyphrases", che contiene una raccolta di stringhe, è un elemento figlio del testo della pagina. Tuttavia, poiché le proiezioni richiedono un oggetto JSON e la pagina è una primitiva (stringa), viene usato "sourceContext" per eseguire il wrapping della frase chiave in un oggetto con una proprietà denominata. Questa tecnica consente di proiettare anche le primitive in modo indipendente.

Forma in linea per le proiezioni di oggetti

È possibile generare una nuova forma usando la competenza Shaper o utilizzare la forma inline della proiezione dell'oggetto. Mentre l'esempio di tabelle ha illustrato l'approccio alla creazione di una forma e di un sezionamento, in questo esempio viene illustrato l'uso della forma inline.

La forma inline è la possibilità di creare una nuova forma nella definizione degli input in una proiezione. Il data shaping inline crea un oggetto anonimo identico a quello che una competenza Shaper produrrebbe (in questo caso, projectionShape). La forma inline è utile se si definisce una forma che non si prevede di riutilizzare.

La proprietà projections è una matrice. In questo esempio viene aggiunta una nuova istanza di proiezione alla matrice, in cui la definizione knowledgeStore contiene proiezioni inline. Quando si usano proiezioni inline, è possibile omettere la competenza Shaper.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
            {
            "tables": [ ],
            "objects": [
                {
                    "storageContainer": "sampleobject",
                    "source": null,
                    "generatedKeyName": "myobject",
                    "sourceContext": "/document",
                    "inputs": [
                        {
                            "name": "metadata_storage_name",
                            "source": "/document/metadata_storage_name"
                        },
                        {
                            "name": "metadata_storage_path",
                            "source": "/document/metadata_storage_path"
                        },
                        {
                            "name": "content",
                            "source": "/document/content"
                        },
                        {
                            "name": "keyPhrases",
                            "source": "/document/merged_content/keyphrases/*"
                        },
                        {
                            "name": "entities",
                            "source": "/document/merged_content/entities/*/name"
                        },
                        {
                            "name": "ocrText",
                            "source": "/document/normalized_images/*/text"
                        },
                        {
                            "name": "ocrLayoutText",
                            "source": "/document/normalized_images/*/layoutText"
                        }
                    ]

                }
            ],
            "files": []
        }
    ]
}

Passaggi successivi

Questo articolo descrive i concetti e i principi delle forme di proiezione. Come passaggio successivo, vedere come vengono applicati nei modelli per le proiezioni di tabelle, oggetti e file.