Forma data för projektion till ett kunskapslager

I Azure AI Search beskriver "forma data" ett steg i arbetsflödet för kunskapslager som skapar en datarepresentation av det innehåll som du vill projicera i tabeller, objekt och filer i Azure Storage.

När färdigheter körs skrivs utdata till ett berikande träd i en hierarki med noder, och även om du kanske vill visa och använda berikande träd i sin helhet, är det mer troligt att du vill ha ett finare korn, vilket skapar delmängder av noder för olika scenarier, till exempel att placera noderna relaterade till översatt text eller extraherade entiteter i specifika tabeller.

Berikningsträdet innehåller inte logik som informerar om hur innehållet representeras i ett kunskapslager. Dataformer fyller det här gapet genom att ange schemat för vad som finns i varje tabell, objekt och filprojektion. Du kan se en dataform som en anpassad definition eller vy över berikade data. Du kan skapa så många former som du behöver och sedan tilldela dem till projektioner i en kunskapslagerdefinition .

Metoder för att skapa former

Det finns två sätt att forma berikat innehåll så att det kan projiceras i ett kunskapslager:

  • Använd Shaper-färdigheten för att skapa noder i ett berikande träd som används uttryckligen för projektion. De flesta färdigheter skapar nytt innehåll. Däremot fungerar en Shaper-färdighet med befintliga noder, vanligtvis för att konsolidera flera noder till ett enda komplext objekt. Detta är användbart för tabeller, där du vill att utdata från flera noder ska uttryckas fysiskt som kolumner i tabellen.

  • Använd en infogad form i själva projektionsdefinitionen.

Om du använder Shaper-färdigheten externaliseras formen så att den kan användas av flera projektioner eller till och med andra färdigheter. Det säkerställer också att alla mutationer i berikningsträdet finns inom färdigheten och att utdata är ett objekt som kan återanvändas. Med infogad formning kan du däremot skapa den form du behöver, men är ett anonymt objekt och är endast tillgängligt för projektionen som den har definierats för.

Metoderna kan användas tillsammans eller separat. Den här artikeln visar både: en Shaper-färdighet för tabellprojektionerna och infogad formning med nyckelfrasernas tabellprojektion.

Använda en Formningsfärdighet

Formningsfärdigheter placeras vanligtvis i slutet av en kompetensuppsättning, vilket skapar en vy över de data som du vill skicka till en projektion. I det här exemplet skapas en form med namnet "tableprojection" som innehåller följande noder: "reviews_text", "reviews_title", "AzureSearch_DocumentKey" och sentimentpoäng och nyckelfraser från sidvända recensioner.

{
    "@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-egenskap

Inom en Shaper-färdighet kan en indata ha ett sourceContext element. Samma egenskap kan också användas i infogade former i projektioner.

sourceContext används för att konstruera kapslade objekt på flera nivåer i en berikningspipeline. Om indata har en annan kontext än kunskapskontexten använder du sourceContext. SourceContext kräver att du definierar en kapslad indata med det specifika element som hanteras som källa.

I exemplet ovan utfördes sentimentanalys och extrahering av nyckelfraser på text som delades upp på sidor för effektivare analys. Förutsatt att du vill att poängen och fraserna ska projiceras i en tabell måste du nu ange kontexten till kapslade indata som ger poäng och fras.

Projicera en form i flera tabeller

Med noden tableprojection definierad i outputs avsnittet ovan kan du dela upp delar av tableprojection noden i enskilda relaterade tabeller:

"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/*"
            }
        ]
    }
]

Infogad form för tabellprojektioner

Infogad formning är möjligheten att bilda nya former i själva projektionsdefinitionen. Infogad formning har följande egenskaper:

  • Formen kan endast användas av projektionen som innehåller den.
  • Formen kan vara identisk med vad en Shaper-färdighet skulle producera.

En infogad form skapas med hjälp av sourceContext och inputs.

Property beskrivning
sourceContext Anger projektionens rot.
Ingångar Varje indata är en kolumn i tabellen. Namnet är kolumnnamnet. Källan är anrikningsnoden som tillhandahåller värdet.

Om du vill projicera samma data som i föregående exempel skulle alternativet infogad projektion se ut så här:

"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/*"
                    }
                ]
            }
        ]
    }
]

En observation från båda metoderna är hur värden för "Keyphrases" projiceras med hjälp av "sourceContext". Noden "Keyphrases", som innehåller en samling strängar, är i sig underordnad sidtexten. Men eftersom projektioner kräver ett JSON-objekt och sidan är en primitiv (sträng) används "sourceContext" för att omsluta nyckelfrasen till ett objekt med en namngiven egenskap. Med den här tekniken kan även primitiver projiceras oberoende av varandra.

Infogad form för objektprojektioner

Du kan generera en ny form med hjälp av formningsfärdigheten eller använda infogad formning av objektprojektionen. Tabellexemplet visade metoden för att skapa en form och segmentering, men det här exemplet visar användningen av infogad formning.

Infogad formning är möjligheten att skapa en ny form i definitionen av indata till en projektion. Infogad formning skapar ett anonymt objekt som är identiskt med vad en Shaper-färdighet skulle producera (i det här fallet projectionShape). Infogad formning är användbar om du definierar en form som du inte planerar att återanvända.

Projektionsegenskapen är en matris. Det här exemplet lägger till en ny projektionsinstans i matrisen, där knowledgeStore-definitionen innehåller infogade projektioner. När du använder infogade projektioner kan du utelämna Shaper-färdigheten.

"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": []
        }
    ]
}

Nästa steg

Den här artikeln beskriver begreppen och principerna för projektionsformer. Som ett nästa steg kan du se hur dessa tillämpas i mönster för tabell-, objekt- och filprojektioner.