Condividi tramite


Modellazione di dati per la proiezione in un archivio conoscenze

In Azure AI Search, "modellazione dati" descrive un passaggio nel flusso di lavoro dell'archivio conoscenze che crea una rappresentazione dei dati del contenuto che si desidera proiettare in tabelle, oggetti e file in Archiviazione di Azure.

Durante l'esecuzione delle abilità, i risultati vengono scritti in un albero di arricchimento in una gerarchia di nodi. Pur volendo visualizzare e utilizzare l'albero di arricchimento nella sua interezza, è più probabile che si desideri una maggiore granularità, creando sottoinsiemi di nodi per scenari diversi, ad esempio collocando i nodi relativi al testo tradotto o alle 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 tale 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, che vengono usati 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 all'interno della tabella.

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

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

Gli approcci possono essere usati insieme o separatamente. Questo articolo illustra entrambi i casi: una competenza Shaper per le proiezioni di tabella e la modellazione di dati inline con le frasi chiave proiezione della tavola.

Utilizzare una competenza shaper

Le competenze 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"
        }
    ]
}

Proprietà di SourceContext

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

sourceContext consente di costruire oggetti annidati multilivello in una pipeline di arricchimento. Se l'input si trova in un contesto diverso rispetto al contesto della competenza, utilizzare il sourceContext. Il 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 per l'input annidato che fornisce il punteggio e la frase.

Proiettare una forma in più tabelle

Con il nodo tableprojection definito nella sezione outputs precedente, è possibile suddividere parti del nodo tableprojection 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 inline per le proiezioni di tabelle

La forma inline è la possibilità di formare nuove forme all'interno della definizione stessa di proiezione. Di seguito sono riportate le caratteristiche di una modellazione inline:

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

Viene creata una forma inline utilizzando 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 dal punto di vista di entrambi gli approcci è il modo in cui i valori di "Keyphrases" vengono proiettati mediante "sourceContext". Il nodo "Keyphrases", che contiene una raccolta di stringhe, è esso stesso un elemento figlio del testo della pagina. Tuttavia, poiché le proiezioni richiedono un oggetto JSON e la pagina è una primitiva (stringa), "sourceContext" viene usato 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 inline 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 modellazione inline.

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

La proprietà proiezioni è 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 questi elementi vengono applicati nei modelli per le proiezioni di tabelle, oggetti e file.