Dela via


Skapa en kompetensuppsättning i Azure AI Search

indexerarsteg

En kompetensuppsättning definierar åtgärder som genererar textinnehåll och struktur från dokument som innehåller bilder eller ostrukturerad text. Exempel är OCR för bilder, entitetsigenkänning för oberörd text och textöversättning. En kompetensuppsättning körs när text och bilder har extraherats från en extern datakälla och efter att fältmappningar har bearbetats .

Den här artikeln beskriver hur du skapar en kompetensuppsättning med hjälp av REST-API:er, men samma begrepp och steg gäller för andra programmeringsspråk.

Regler för kompetensuppsättningsdefinition är:

  • Ett unikt namn i kunskapsuppsättningssamlingen. En kompetensuppsättning är en resurs på den översta nivån som kan användas av alla indexerare.
  • Minst en färdighet. Tre till fem färdigheter är typiska. Maxvärdet är 30.
  • En kompetensuppsättning kan upprepa färdigheter av samma typ (till exempel flera Formverktygsfärdigheter).
  • En kompetensuppsättning stöder länkade åtgärder, loopning och förgrening.

Indexerare driver kompetensuppsättningskörning. Du behöver en indexerare, datakälla och index innan du kan testa din kompetensuppsättning.

Dricks

Aktivera cachelagring av berikning för att återanvända det innehåll som du redan har bearbetat och sänka utvecklingskostnaden.

Lägga till en definition för kompetensuppsättning

Börja med den grundläggande strukturen. I REST-API:et Create Skillset (Skapa kunskapsuppsättning) skapas brödtexten för begäran i JSON och innehåller följande avsnitt:

{
   "name":"skillset-template",
   "description":"A description makes the skillset self-documenting (comments aren't allowed in JSON itself)",
   "skills":[
       
   ],
   "cognitiveServices":{
      "@odata.type":"#Microsoft.Azure.Search.CognitiveServicesByKey",
      "description":"An Azure AI services resource in the same region as Azure AI Search",
      "key":"<Your-Cognitive-Services-Multiservice-Key>"
   },
   "knowledgeStore":{
      "storageConnectionString":"<Your-Azure-Storage-Connection-String>",
      "projections":[
         {
            "tables":[ ],
            "objects":[ ],
            "files":[ ]
         }
      ]
    },
    "encryptionKey":{ }
}

Efter namnet och beskrivningen har en kompetensuppsättning fyra huvudegenskaper:

  • skills matris, en osorterad samling med kunskaper. Färdigheter kan vara utilitaristiska (som att dela upp text), transformering (baserat på AI från Azure AI-tjänster) eller anpassade färdigheter som du tillhandahåller. Ett exempel på en kompetensmatris finns i nästa avsnitt.

  • cognitiveServicesanvänds för fakturerbara färdigheter som anropar API:er för Azure AI-tjänster. Ta bort det här avsnittet om du inte använder fakturerbara kunskaper eller anpassad entitetssökning. Bifoga en resurs om du är det.

  • knowledgeStore (valfritt) anger ett Azure Storage-konto och inställningar för att projicera kunskapsuppsättningens utdata till tabeller, blobbar och filer i Azure Storage. Ta bort det här avsnittet om du inte behöver det, annars anger du ett kunskapslager.

  • encryptionKey(valfritt) anger ett Azure Key Vault och kundhanterade nycklar som används för att kryptera känsligt innehåll (beskrivningar, niska veze, nycklar) i en kompetensuppsättningsdefinition. Ta bort den här egenskapen om du inte använder kundhanterad kryptering.

Lägga till kunskaper

I kompetensuppsättningsdefinitionen anger kompetensmatrisen vilka färdigheter som ska köras. Tre till fem färdigheter är vanliga, men du kan lägga till så många färdigheter som behövs, med förbehåll för tjänstbegränsningar.

Slutresultatet av en berikningspipeline är textinnehåll i antingen ett sökindex eller ett kunskapslager. Därför kan de flesta kunskaper antingen skapa text från bilder (OCR-text, undertexter, taggar) eller analysera befintlig text för att skapa ny information (entiteter, nyckelfraser, sentiment). Kunskaper som fungerar självständigt bearbetas parallellt. Färdigheter som är beroende av varandra anger utdata från en färdighet (till exempel nyckelfraser) som indata från den andra färdigheten (till exempel textöversättning). Söktjänsten avgör ordningen på färdighetskörningen och körningsmiljön.

Alla kunskaper har en typ, kontext, indata och utdata. En färdighet kan ha ett namn och en beskrivning. I följande exempel visas två orelaterade inbyggda kunskaper så att du kan jämföra den grundläggande strukturen.

"skills": [
    {
        "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
        "name": "#1",
        "description": "This skill detects organizations in the source content",
        "context": "/document",
        "categories": [
            "Organization"
        ],
        "inputs": [
            {
                "name": "text",
                "source": "/document/content"
            }
        ],
        "outputs": [
            {
                "name": "organizations",
                "targetName": "orgs"
            }
        ]
    },
    {
        "name": "#2",
        "description": "This skill detects corporate logos in the source files",
        "@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
        "context": "/document/normalized_images/*",
        "visualFeatures": [
            "brands"
        ],
        "inputs": [
            {
                "name": "image",
                "source": "/document/normalized_images/*"
            }
        ],
        "outputs": [
            {
                "name": "brands"
            }
        ]
    }
]

Varje färdighet är unik när det gäller dess indatavärden och de parametrar som krävs. Dokumentation om kunskapsreferens beskriver alla parametrar och egenskaper för en viss färdighet. Även om det finns skillnader delar de flesta färdigheter en gemensam uppsättning och är lika mönstrade.

Kommentar

Du kan skapa komplexa kompetensuppsättningar med loopning och förgrening med hjälp av den villkorsstyrda färdigheten för att skapa uttrycken. Syntaxen baseras på notationen för JSON-pekarsökväg , med några ändringar för att identifiera noder i berikningsträdet. En "/" passerar en nivå lägre i trädet och "*" fungerar som en for-each-operator i kontexten. Många exempel i den här artikeln illustrerar syntaxen.

Ange kompetenskontext

Varje färdighet har en kontextegenskap som avgör på vilken nivå åtgärderna ska utföras. Om egenskapen "kontext" inte uttryckligen anges är "/document"standardvärdet , där kontexten är hela dokumentet (färdigheten anropas en gång per dokument).

"skills":[
  {
    "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
    "context": "/document",
    "inputs": [],
    "outputs": []
  },
  {
      "@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
      "context": "/document/normalized_images/*",
      "visualFeatures": [],
      "inputs": [],
      "outputs": []
  }
]

Kontexten är vanligtvis inställd på något av följande exempel:

Kontextexempel beskrivning
"context": "/document" (Standard) Indata och utdata finns på dokumentnivå.
"context": "/document/pages/*" Vissa färdigheter som attitydanalys presterar bättre jämfört med mindre textsegment. Om du delar upp ett stort innehållsfält i sidor eller meningar bör kontexten vara över varje komponentdel.
"context": "/document/normalized_images/*" För bildinnehåll är indata och utdata en per bild i det överordnade dokumentet.

Kontexten avgör också var utdata produceras i berikningsträdet. Entitetsigenkänningsfärdigheten returnerar till exempel en egenskap med namnet "organizations", insamlad som orgs. Om kontexten är "/document"läggs en "organisationsnod" till som underordnad "/document". Om du sedan vill referera till den här noden i underordnade kunskaper skulle sökvägen vara "/document/orgs".

Definiera indata

Kunskaper som läse från och skriver till ett berikat dokument. Kunskapsindata anger ursprunget för inkommande data. Det är ofta rotnoden i det berikade dokumentet. För blobar är en typisk kunskapsinmatning dokumentets innehållsegenskap.

Kunskapsreferensdokumentation för varje färdighet beskriver de indata som den kan använda. Varje indata har ett "namn" som identifierar en specifik indata och en "källa" som anger platsen för data i det berikade dokumentet. Följande exempel är från entitetsigenkänningsfärdigheten:

"inputs": [
    {
        "name": "text", 
        "source": "/document/content"
    },
    {
        "name": "languageCode", 
        "source": "/document/language"
    }
]
  • Kunskaper kan ha flera indata. Namnet är de specifika indata. För Entitetsigenkänning är de specifika indata "text" och "languageCode".

  • Egenskapen "källa" anger vilket fält eller vilken rad som innehåller det innehåll som ska bearbetas. För textbaserade kunskaper är källan ett fält i dokumentet eller raden som innehåller text. För bildbaserade kunskaper normaliseras den nod som tillhandahåller indata.

    Källexempel beskrivning
    "source": "/document" För en tabelldatauppsättning motsvarar ett dokument en rad.
    "source": "/document/content" För blobar är källan vanligtvis blobens innehållsegenskap.
    "source": "/document/some-named-field" För textbaserade kunskaper, till exempel entitetsigenkänning eller extrahering av nyckelfraser, bör ursprunget vara ett fält som innehåller tillräckligt med text som ska analyseras, till exempel en "beskrivning" eller "sammanfattning".
    "source": "/document/normalized_images/*" För bildinnehåll är källan en bild som har normaliserats under dokumentsprickor.

Om kunskapen itererar över en matris bör både kontexten och indatakällan inkluderas /* i rätt positioner.

Definiera utmatningar

Varje färdighet är utformad för att generera specifika typer av utdata, som refereras till med namn i kompetensuppsättningen. Ett kunskapsutdata har ett "namn" och ett valfritt "targetName".

Kunskapsreferensdokumentation för varje färdighet beskriver de utdata som den kan generera. Följande exempel är från entitetsigenkänningsfärdigheten:

"outputs": [
    {
        "name": "persons", 
        "targetName": "people"
    },
    {
        "name": "organizations", 
        "targetName": "orgs"
    },
    {
        "name": "locations", 
        "targetName": "places"
    }
]
  • Kunskaper kan ha flera utdata. Namnet identifierar ett specifikt utdata. För Entitetsigenkänning kan utdata till exempel vara "personer", "platser", "organisationer".

  • "targetName" anger det namn som du vill att noden ska ha i det berikade dokumentet. Detta är användbart om kunskapsutdata har samma namn. Om du har flera kunskaper som returnerar samma utdata använder "targetName" du för namndisambiguation i anrikningsnodsökvägar. Om målnamnet är ospecificerat används namnegenskapen för båda.

Vissa situationer anropar för att referera till varje element i en matris separat. Anta till exempel att du vill skicka varje element"/document/orgs" separat till en annan färdighet. Det gör du genom att lägga till en asterisk i sökvägen: "/document/orgs/*".

Kunskapsutdata skrivs till det berikade dokumentet som en ny nod i berikningsträdet. Det kan vara ett enkelt värde, till exempel en attitydpoäng eller språkkod. Det kan också vara en samling, till exempel en lista över organisationer, personer eller platser. Kunskapsutdata kan också vara en komplex struktur, vilket är fallet med Shaper-färdigheten. Indata för färdigheten avgör formens sammansättning, men utdata är det namngivna objektet, som kan refereras till i ett sökindex, en kunskapslagerprojektion eller en annan färdighet med dess namn.

Lägga till en anpassad färdighet

Det här avsnittet innehåller ett exempel på en anpassad färdighet. URI:n pekar på en Azure-funktion som i sin tur anropar den modell eller transformering som du anger. Mer information finns i Definiera ett anpassat gränssnitt.

Även om den anpassade färdigheten kör kod som är extern för pipelinen är det bara en annan färdighet i en kompetensmatris. Precis som de inbyggda färdigheterna har den en typ, kontext, indata och utdata. Den läser och skriver också till ett berikande träd, precis som de inbyggda färdigheterna gör. Observera att fältet "context" är inställt på med en asterisk, vilket innebär att "/document/orgs/*" berikningssteget anropas för varje organisation under "/document/orgs".

Utdata, till exempel företagsbeskrivningen i det här exemplet, genereras för varje organisation som identifieras. När du refererar till noden i ett nedströmssteg (till exempel i extrahering av nyckelfraser) använder du sökvägen "/document/orgs/*/companyDescription" för att göra det.

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "description": "This skill calls an Azure function, which in turn calls custom code",
  "uri": "https://indexer-e2e-webskill.azurewebsites.net/api/InvokeCode?code=foo",
  "httpHeaders": {
      "Ocp-Apim-Subscription-Key": "foobar"
  },
  "context": "/document/orgs/*",
  "inputs": [
    {
      "name": "query",
      "source": "/document/orgs/*"
    }
  ],
  "outputs": [
    {
      "name": "description",
      "targetName": "companyDescription"
    }
  ]
}

Skicka utdata till ett mål

Även om kunskapsutdata kan cachelagras i återanvändningssyfte är det vanligtvis tillfälligt och finns bara medan färdighetskörning pågår.

Tips för en första kompetensuppsättning

  • Prova guiden Importera data.

    Guiden automatiserar flera steg som kan vara svåra första gången. Den definierar kompetensuppsättningen, indexet och indexeraren, inklusive fältmappningar och mappningar av utdatafält. Den definierar också projektioner i ett kunskapslager om du använder ett. För vissa kunskaper, till exempel OCR eller bildanalys, lägger guiden till verktygskunskaper som sammanfogar det bild- och textinnehåll som avgränsades under dokumentsprickor.

    När guiden har körts kan du öppna varje objekt i Azure-portalen för att visa dess JSON-definition.

  • Prova att felsöka sessioner för att anropa körning av kompetensuppsättningar över ett måldokument och inspektera det berikade dokument som kunskapsuppsättningen skapar. Du kan visa och ändra inställningar och värden för indata och utdata. Den här självstudien är ett bra ställe att börja på: Självstudie: Felsöka en kompetensuppsättning med hjälp av felsökningssessioner.

Nästa steg

Kontext- och indatakällafält är sökvägar till noder i ett berikande träd. Som ett nästa steg kan du lära dig mer om sökvägssyntaxen för noder i ett berikande träd.