Delen via


Verwijzen naar een pad naar verrijkte knooppunten met behulp van context- en broneigenschappen voor een Azure AI Search-vaardighedenset

Tijdens de uitvoering van de vaardighedenset bouwt de engine een in-memory verrijkingsstructuur die elke verrijking vastlegt, zoals herkende entiteiten of vertaalde tekst. In dit artikel leert u hoe u naar een verrijkingsknooppunt in de verrijkingsstructuur verwijst, zodat u uitvoer kunt doorgeven aan downstreamvaardigheden of een uitvoerveldtoewijzing voor een zoekindexveld kunt opgeven.

In dit artikel worden voorbeelden gebruikt om verschillende scenario's te illustreren. Zie De context van vaardigheden en de taal van de invoeraantekening voor de volledige syntaxis.

Achtergrondconcepten

Voordat u de syntaxis bekijkt, gaan we een paar belangrijke concepten na om de voorbeelden verderop in dit artikel beter te begrijpen.

Termijn Omschrijving
"verrijkt document" Een verrijkt document is een structuur in het geheugen die vaardigheidsuitvoer verzamelt terwijl het wordt gemaakt en alle verrijkingen met betrekking tot een document bevat. U kunt een verrijkt document beschouwen als een boom. Over het algemeen begint de structuur op het niveau van het hoofddocument en wordt elke nieuwe verrijking gemaakt op basis van een vorige als het onderliggende element.
"knooppunt" In een verrijkt document wordt een knooppunt (ook wel een 'annotatie' genoemd) gemaakt en ingevuld door een vaardigheid, zoals 'tekst' en 'layoutText' in de OCR-vaardigheid. Een verrijkt document wordt gevuld met zowel verrijkingen als oorspronkelijke bronveldwaarden of metagegevens die uit de bron zijn gekopieerd.
"context" Het bereik van verrijking, ofwel het hele document, een deel van een document of als u met afbeeldingen werkt, zijn de geëxtraheerde afbeeldingen uit een document. Standaard is de verrijkingscontext op het "/document" niveau, gericht op afzonderlijke documenten in de gegevensbron. Wanneer een vaardigheid wordt uitgevoerd, worden de uitvoer van die vaardigheid eigenschappen van de gedefinieerde context.

Paden voor verschillende scenario's

Paden worden opgegeven in de eigenschappen 'context' en 'bron' van een vaardighedenset en in de toewijzingen van uitvoervelden in een indexeerfunctie.

Schermopname van een definitie van een vaardighedenset met context- en bronelementen gemarkeerd.

In het voorbeeld in de schermopname ziet u het pad voor een item in een Azure Cosmos DB-verzameling.

  • context het pad is /document/HotelId omdat de verzameling is gepartitioneerd in documenten door het /HotelId veld.

  • source het pad is /document/Description omdat de vaardigheid een vertaalvaardigheid is en het veld dat u wilt vertalen het Description veld in elk document is.

Alle paden beginnen met /document. Er wordt een verrijkt document gemaakt in de fase 'document kraken' van de uitvoering van de indexeerfunctie wanneer de indexeerfunctie een document opent of in een rij van de gegevensbron leest. In eerste instantie is het enige knooppunt in een verrijkt document het hoofdknooppunt (/document)en het is het knooppunt waaruit alle andere verrijkingen plaatsvinden.

De volgende lijst bevat enkele veelvoorkomende voorbeelden:

  • /document is het hoofdknooppunt en geeft een volledige blob in Azure Storage of een rij in een SQL-tabel aan.
  • /document/{key} is de syntaxis voor een document of item in een Azure Cosmos DB-verzameling, waarbij {key} de werkelijke sleutel is, zoals /document/HotelId in het vorige voorbeeld.
  • /document/content hiermee geeft u de eigenschap 'inhoud' van een JSON-blob op.
  • /document/{field} is de syntaxis voor een bewerking die wordt uitgevoerd op een specifiek veld, zoals het vertalen van het /document/Description veld, zoals in het vorige voorbeeld.
  • /document/pages/* of /document/sentences/* de context worden als u een groot document in kleinere segmenten verbreekt voor verwerking. Als 'context' is /document/pages/*, wordt de vaardigheid eenmaal uitgevoerd op elke pagina in het document. Omdat er mogelijk meer dan één pagina of zin is, voegt u ze allemaal toe /* .
  • /document/normalized_images/* wordt gemaakt tijdens het kraken van het document als het document afbeeldingen bevat. Alle paden naar afbeeldingen beginnen met normalized_images. Omdat er vaak meerdere afbeeldingen zijn ingesloten in een document, voegt u deze toe /*.

Voorbeelden in de rest van dit artikel zijn gebaseerd op het veld 'inhoud' dat automatisch wordt gegenereerd door Azure Blob-indexeerfuncties als onderdeel van de fase van het kraken van documenten. Wanneer u naar documenten uit een Blob-container verwijst, gebruikt u een indeling zoals "/document/content", waarbij het veld 'inhoud' deel uitmaakt van het 'document'.

Voorbeeld 1: Eenvoudige aantekeningsreferentie

Stel dat u in Azure Blob Storage verschillende bestanden hebt die verwijzingen bevatten naar de namen van personen die u wilt extraheren met behulp van entiteitsherkenning. In de volgende vaardigheidsdefinitie "/document/content" is de tekstuele weergave van het hele document en 'personen' is een extractie van volledige namen voor entiteiten die zijn geïdentificeerd als personen.

Omdat de standaardcontext is "/document", kan nu naar de lijst met personen worden verwezen als "/document/people". In dit specifieke geval "/document/people" is een aantekening, die nu kan worden toegewezen aan een veld in een index of wordt gebruikt in een andere vaardigheid in dezelfde vaardighedenset.

  {
    "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
    "categories": [ "Person"],
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "text",
        "source": "/document/content"
      }
    ],
    "outputs": [
      {
        "name": "persons",
        "targetName": "people"
      }
    ]
  }

Voorbeeld 2: Verwijzen naar een matrix in een document

In dit voorbeeld wordt voortgebouwd op de vorige stap, waarin wordt getoond hoe u meerdere keren een verrijkingsstap kunt aanroepen in hetzelfde document. Stel dat in het vorige voorbeeld een matrix met tekenreeksen is gegenereerd met 10 personennamen uit één document. Een redelijke volgende stap kan een tweede verrijking zijn waarmee de achternaam uit een volledige naam wordt geëxtraheerd. Omdat er 10 namen zijn, wilt u dat deze stap 10 keer in dit document wordt aangeroepen, één keer voor elke persoon.

Als u het juiste aantal iteraties wilt aanroepen, stelt u de context in als "/document/people/*", waarbij het sterretje ("*") alle knooppunten in het verrijkte document vertegenwoordigt als afstammelingen van "/document/people". Hoewel deze vaardigheid slechts eenmaal is gedefinieerd in de vaardighedenmatrix, wordt deze aangeroepen voor elk lid in het document totdat alle leden worden verwerkt.

  {
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "description": "Fictitious skill that gets the last name from a full name",
    "uri": "http://names.azurewebsites.net/api/GetLastName",
    "context" : "/document/people/*",
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "fullname",
        "source": "/document/people/*"
      }
    ],
    "outputs": [
      {
        "name": "lastname",
        "targetName": "last"
      }
    ]
  }

Wanneer aantekeningen matrices of verzamelingen tekenreeksen zijn, wilt u mogelijk specifieke leden richten in plaats van op de matrix als geheel. In het bovenstaande voorbeeld wordt een aantekening gegenereerd die wordt aangeroepen "last" onder elk knooppunt dat wordt vertegenwoordigd door de context. Als u naar deze reeks aantekeningen wilt verwijzen, kunt u de syntaxis "/document/people/*/last"gebruiken. Als u naar een bepaalde aantekening wilt verwijzen, kunt u een expliciete index gebruiken: "/document/people/1/last" om te verwijzen naar de achternaam van de eerste persoon die in het document is geïdentificeerd. U ziet dat in deze syntaxismatrices '0 geïndexeerd' is.

Voorbeeld 3: Verwijzingsleden binnen een matrix

Soms moet u alle aantekeningen van een bepaald type groeperen om deze aan een bepaalde vaardigheid door te geven. Overweeg een hypothetische aangepaste vaardigheid die de meest voorkomende achternaam identificeert van alle achternamen die zijn geëxtraheerd in voorbeeld 2. Als u alleen de achternamen wilt opgeven voor de aangepaste vaardigheid, geeft u de context op als "/document" en de invoer als "/document/people/*/lastname".

U ziet dat de kardinaliteit groter "/document/people/*/lastname" is dan die van het document. Er kunnen 10 achternaamknooppunten zijn, terwijl er slechts één documentknooppunt voor dit document is. In dat geval maakt het systeem automatisch een matrix van "/document/people/*/lastname" alle elementen in het document.

  {
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "description": "Fictitious skill that gets the most common string from an array of strings",
    "uri": "http://names.azurewebsites.net/api/MostCommonString",
    "context" : "/document",
    "inputs": [
      {
        "name": "strings",
        "source": "/document/people/*/lastname"
      }
    ],
    "outputs": [
      {
        "name": "mostcommon",
        "targetName": "common-lastname"
      }
    ]
  }

Tips voor probleemoplossing voor aantekeningspad

Als u problemen ondervindt met het opgeven van vaardigheidsinvoer, kunnen deze tips u helpen vooruit te gaan:

  • Voer de wizard Gegevens importeren uit over uw gegevens om de vaardighedensetdefinities en veldtoewijzingen te controleren die door de wizard worden gegenereerd.

  • Start een foutopsporingssessie voor een vaardighedenset om de structuur van een verrijkt document weer te geven. U kunt de paden en andere onderdelen van de vaardigheidsdefinitie bewerken en vervolgens de vaardigheid uitvoeren om uw wijzigingen te valideren.

Zie ook