Gegevens vormgeven voor projectie in een kennisarchief

In Azure AI Search beschrijft 'het vormgeven van gegevens' een stap in de kennisarchiefwerkstroom waarmee een gegevensweergave wordt gemaakt van de inhoud die u wilt projecteren in tabellen, objecten en bestanden in Azure Storage.

Wanneer de vaardigheden worden uitgevoerd, worden de uitvoer geschreven naar een verrijkingsstructuur in een hiërarchie van knooppunten, en hoewel u de verrijkingsstructuur in zijn geheel wilt bekijken en gebruiken, is het waarschijnlijker dat u een nauwkeurigere korrel wilt, waarbij u subsets van knooppunten maakt voor verschillende scenario's, zoals het plaatsen van de knooppunten met betrekking tot vertaalde tekst of geëxtraheerde entiteiten in specifieke tabellen.

Op zichzelf bevat de verrijkingsstructuur geen logica die aangeeft hoe de inhoud wordt weergegeven in een kennisarchief. Gegevensshapes vullen deze kloof door het schema op te geven van wat er in elke tabel, elk object en elke bestandsprojectie wordt geplaatst. U kunt een gegevensvorm beschouwen als een aangepaste definitie of weergave van de verrijkte gegevens. U kunt zoveel shapes maken als u nodig hebt en deze vervolgens toewijzen aan projecties in een definitie van een kennisarchief.

Methoden voor het maken van shapes

Er zijn twee manieren om verrijkte inhoud vorm te geven zodat deze in een kennisarchief kan worden geprojecteerd:

  • Gebruik de shaper-vaardigheid om knooppunten te maken in een verrijkingsstructuur die expliciet worden gebruikt voor projectie. De meeste vaardigheden maken nieuwe inhoud. Een Shaper-vaardigheid werkt daarentegen met bestaande knooppunten, meestal om meerdere knooppunten samen te voegen in één complex object. Dit is handig voor tabellen, waarbij u wilt dat de uitvoer van meerdere knooppunten fysiek wordt uitgedrukt als kolommen in de tabel.

  • Gebruik een inlinevorm binnen de projectiedefinitie zelf.

Met de shaper-vaardigheid wordt de shape extern gemaakt, zodat deze kan worden gebruikt door meerdere projecties of zelfs andere vaardigheden. Het zorgt er ook voor dat alle mutaties van de verrijkingsboom zich in de vaardigheid bevinden en dat de uitvoer een object is dat opnieuw kan worden gebruikt. Met inline-vormgeving kunt u daarentegen de shape maken die u nodig hebt, maar is een anoniem object en is alleen beschikbaar voor de projectie waarvoor deze is gedefinieerd.

De benaderingen kunnen samen of afzonderlijk worden gebruikt. In dit artikel ziet u beide: een Shaper-vaardigheid voor de tabelprojecties en inline-vormgeving met de projectie van de sleuteltermentabel.

Een Shaper-vaardigheid gebruiken

Shaper-vaardigheden worden meestal aan het einde van een vaardighedenset geplaatst, waardoor een weergave wordt gemaakt van de gegevens die u aan een projectie wilt doorgeven. In dit voorbeeld wordt een shape met de naam tableprojection gemaakt met de volgende knooppunten: 'reviews_text', 'reviews_title', 'AzureSearch_DocumentKey', en gevoelsscores en sleuteltermen van paginabeoordelingen.

{
    "@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"
        }
    ]
}

Eigenschap SourceContext

Binnen een Shaper-vaardigheid kan een invoer een sourceContext element hebben. Dezelfde eigenschap kan ook worden gebruikt in inlineshapes in projecties.

sourceContext wordt gebruikt voor het bouwen van geneste objecten op meerdere niveaus in een verrijkingspijplijn. Als de invoer zich in een andere context bevindt dan de vaardigheidscontext, gebruikt u de sourceContext. De sourceContext vereist dat u een geneste invoer definieert met het specifieke element dat als bron wordt geadresseerd.

In het bovenstaande voorbeeld is sentimentanalyse en sleuteltermextractie uitgevoerd op tekst die is gesplitst in pagina's voor een efficiëntere analyse. Ervan uitgaande dat u de scores en woordgroepen in een tabel wilt projecteren, moet u nu de context instellen op geneste invoer die de score en woordgroep levert.

Een shape projecteren in meerdere tabellen

Met het tableprojection knooppunt dat in de outputs bovenstaande sectie is gedefinieerd, kunt u delen van het tableprojection knooppunt segmenteren in afzonderlijke, gerelateerde tabellen:

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

Inlinevorm voor tabelprojecties

Inline-vormgeving is de mogelijkheid om nieuwe vormen te vormen binnen de projectiedefinitie zelf. Inline-vormgeving heeft deze kenmerken:

  • De shape kan alleen worden gebruikt door de projectie die deze bevat.
  • De shape kan identiek zijn aan wat een Shaper-vaardigheid zou produceren.

Er wordt een inline-shape gemaakt met en sourceContextinputs.

Eigenschappen Beschrijving
sourceContext Hiermee stelt u de hoofdmap van de projectie in.
Ingangen Elke invoer is een kolom in de tabel. Naam is de kolomnaam. Bron is het verrijkingsknooppunt dat de waarde levert.

Als u dezelfde gegevens wilt projecteren als in het vorige voorbeeld, ziet de optie voor inlineprojectie er als volgt uit:

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

Een waarneming van beide benaderingen is hoe waarden van 'Keyphrases' worden geprojecteerd met behulp van de 'sourceContext'. Het knooppunt Keyphrases, dat een verzameling tekenreeksen bevat, is zelf een onderliggend element van de paginatekst. Omdat projecties echter een JSON-object vereisen en de pagina een primitieve (tekenreeks) is, wordt de 'sourceContext' gebruikt om de sleutelterm in een object te verpakken met een benoemde eigenschap. Met deze techniek kunnen zelfs primitieven onafhankelijk worden geprojecteerd.

Inlinevorm voor objectprojecties

U kunt een nieuwe shape genereren met behulp van de shaper-vaardigheid of inline-vormgeving van de objectprojectie gebruiken. In het tabelvoorbeeld is de benadering van het maken van een vorm en segmentering gedemonstreerd, maar in dit voorbeeld wordt het gebruik van inline-vormgeving gedemonstreerd.

Inline vormgeven is de mogelijkheid om een nieuwe vorm te maken in de definitie van de invoer voor een projectie. Inline-vormgeving maakt een anoniem object dat identiek is aan wat een Shaper-vaardigheid zou produceren (in dit geval projectionShape). Inline-vormgeving is handig als u een vorm definieert die u niet opnieuw wilt gebruiken.

De eigenschap projecties is een matrix. In dit voorbeeld wordt een nieuw projectie-exemplaar toegevoegd aan de matrix, waarbij de knowledgeStore-definitie inlineprojecties bevat. Wanneer u inlineprojecties gebruikt, kunt u de shaper-vaardigheid weglaten.

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

Volgende stappen

In dit artikel worden de concepten en principes van projectievormen beschreven. Als volgende stap ziet u hoe deze worden toegepast in patronen voor tabel-, object- en bestandsprojecties.