Kunskapsuppsättningsbegrepp i Azure AI Search

Den här artikeln är avsedd för utvecklare som behöver en djupare förståelse för begrepp och sammansättning i kompetensuppsättningar och som förutsätter att de är bekanta med de övergripande begreppen ai-berikande.

En kompetensuppsättning är en återanvändbar resurs i Azure AI Search som är kopplad till en indexerare. Den innehåller en eller flera kunskaper som anropar inbyggd AI eller extern anpassad bearbetning över dokument som hämtats från en extern datakälla.

Följande diagram illustrerar det grundläggande dataflödet för körning av kompetensuppsättningar.

Diagram showing skillset data flows, with focus on inputs, outputs, and mappings.

Från början av kompetensuppsättning bearbetning till dess slutsats, färdigheter läsa från och skriva till ett berikat dokument. Inledningsvis är ett berikat dokument bara det råa innehållet som extraheras från en datakälla (artikulerat som rotnoden "/document" ). Med varje färdighetskörning får det berikade dokumentet struktur och substans när kunskap skriver ut sina utdata som noder i diagrammet.

När körningen av kunskapsuppsättningen är klar hittar utdata från ett berikat dokument sin väg in i ett index via utdatafältmappningar. Allt råinnehåll som du vill överföra intakt, från källa till index, definieras via fältmappningar.

För att konfigurera berikning anger du inställningar i en kompetensuppsättning och indexerare.

Definition av kunskaper

En kompetensuppsättning är en matris med en eller flera färdigheter som utför en berikning, till exempel översättning av text eller OCR i en bildfil. Kunskaper kan vara inbyggda kunskaper från Microsoft eller anpassade kunskaper för bearbetning av logik som du är värd för externt. En kunskapsuppsättning skapar berikade dokument som antingen används under indexering eller projiceras till ett kunskapslager.

Färdigheter har en kontext, indata och utdata:

Diagram showing which properties of skillsets establish the data path.

  • Kontext refererar till åtgärdens omfattning, som kan vara en gång per dokument eller en gång för varje objekt i en samling.

  • Indata kommer från noder i ett berikat dokument, där en "källa" och "namn" identifierar en viss nod.

  • Utdata skickas tillbaka till det berikade dokumentet som en ny nod. Värden är nodens "namn" och nodinnehåll. Om ett nodnamn dupliceras kan du ange ett målnamn för disambiguation.

Kompetenskontext

Varje färdighet har en kontext, som kan vara hela dokumentet (/document) eller en nod längre ned i trädet (/document/countries/*). En kontext avgör:

  • Antalet gånger färdigheten körs, över ett enda värde (en gång per fält, per dokument) eller för kontextvärden av typen samling, där lägga till ett /* resultat i kompetensanrop, en gång för varje instans i samlingen.

  • Utdatadeklaration eller var i berikningsträdet som kunskapsutdata läggs till. Utdata läggs alltid till i trädet som underordnade kontextnoder.

  • Form på indata. För samlingar på flera nivåer påverkar inställningen av kontexten till den överordnade samlingen formen på indata för färdigheten. Om du till exempel har ett berikningsträd med en lista över länder/regioner, var och en berikad med en lista över tillstånd som innehåller en lista med postnummer, avgör hur kontexten ska avgöra hur indata tolkas.

    Kontext Indata Form på indata Kompetensanrop
    /document/countries/* /document/countries/*/states/*/zipcodes/* En lista över alla postnummer i landet/regionen En gång per land/region
    /document/countries/*/states/* /document/countries/*/states/*/zipcodes/* En lista över postnummer i tillståndet En gång per kombination av land/region och stat

Kunskapsberoenden

Färdigheter kan köras oberoende och parallellt eller sekventiellt om du matar ut utdata från en färdighet till en annan färdighet. I följande exempel visas två inbyggda färdigheter som körs i följd:

  • Kunskap nr 1 är en färdighet för textdelning som accepterar innehållet i källfältet "reviews_text" som indata och delar upp innehållet i "sidor" med 5 000 tecken som utdata. Att dela upp stor text i mindre segment kan ge bättre resultat för färdigheter som sentimentidentifiering.

  • Kunskap nr 2 är en attitydidentifieringsfärdighet som accepterar "sidor" som indata och skapar ett nytt fält med namnet "Sentiment" som utdata som innehåller resultatet av attitydanalys.

Observera hur utdata från den första färdigheten ("sidor") används i attitydanalys, där "/document/reviews_text/pages/*" är både kontext och indata. Mer information om sökvägsformulering finns i Så här refererar du till berikningar.

{
    "skills": [
        {
            "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
            "name": "#1",
            "description": null,
            "context": "/document/reviews_text",
            "defaultLanguageCode": "en",
            "textSplitMode": "pages",
            "maximumPageLength": 5000,
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/reviews_text"
                }
            ],
            "outputs": [
                {
                    "name": "textItems",
                    "targetName": "pages"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
            "name": "#2",
            "description": null,
            "context": "/document/reviews_text/pages/*",
            "defaultLanguageCode": "en",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/reviews_text/pages/*",
                }
            ],
            "outputs": [
                {
                    "name": "sentiment",
                    "targetName": "sentiment"
                },
                {
                    "name": "confidenceScores",
                    "targetName": "confidenceScores"
                },
                {
                    "name": "sentences",
                    "targetName": "sentences"
                }
            ]
        }
      . . .
  ]
}

Berikande träd

Ett berikat dokument är en tillfällig, trädliknande datastruktur som skapas under körningen av kompetensuppsättningen och som samlar in alla ändringar som introduceras genom färdigheter. Tillsammans representeras berikningar som en hierarki med adresserbara noder. Noder innehåller även alla oenrichade fält som skickas ordagrant från den externa datakällan.

Det finns ett utökat dokument under hela körningen av kunskapsuppsättningen, men kan cachelagras eller skickas till ett kunskapslager.

Inledningsvis är ett berikat dokument helt enkelt det innehåll som extraheras från en datakälla under dokumentsprickor, där text och bilder extraheras från källan och görs tillgängliga för språk- eller bildanalys.

Det första innehållet är metadata och rotnoden (document/content). Rotnoden är vanligtvis ett helt dokument eller en normaliserad bild som extraheras från en datakälla när dokumentet spricker. Hur det artikuleras i ett berikande träd varierar för varje typ av datakälla. I följande tabell visas tillståndet för ett dokument som kommer in i berikande pipelinen för flera datakällor som stöds:

Datakälla\Parsningsläge Standardvärde JSON, JSON-rader och CSV
Blob Storage /document/content
/document/normalized_images/*
...
/document/{key1}
/document/{key2}
...
Azure SQL /document/{column1}
/document/{column2}
...
Ej tillämpligt
Azure Cosmos DB /document/{key1}
/document/{key2}
...
Ej tillämpligt

När färdigheter körs läggs utdata till i berikningsträdet som nya noder. Om kunskapskörningen är över hela dokumentet läggs noder till på den första nivån under roten.

Noder kan användas som indata för underordnade kunskaper. Kunskaper som skapar innehåll, till exempel översatta strängar, kan till exempel bli indata för färdigheter som känner igen entiteter eller extraherar nyckelfraser.

Skills read and write from enrichment tree

Även om du kan visualisera och arbeta med ett berikande träd via redigeraren för visuella felsökningssessioner är det främst en intern struktur.

Berikningar är oföränderliga: när de har skapats kan noder inte redigeras. När dina kunskapsuppsättningar blir mer komplexa kommer även ditt berikande träd, men inte alla noder i berikningsträdet att behöva göra det till indexet eller kunskapsarkivet.

Du kan selektivt bevara bara en delmängd av berikningsutdata så att du bara behåller det du tänker använda. Mappningar av utdatafält i indexerarens definition avgör vilket innehåll som faktiskt matas in i sökindexet. På samma sätt kan du mappa utdata till former som har tilldelats projektioner om du skapar ett kunskapslager.

Kommentar

Berikande trädformat gör det möjligt för berikningspipelinen att bifoga metadata till även primitiva datatyper. Metadata är inte ett giltigt JSON-objekt, men kan projiceras till ett giltigt JSON-format i projektionsdefinitioner i ett kunskapslager. Mer information finns i Formningsfärdighet.

Definition av indexerare

En indexerare har egenskaper och parametrar som används för att konfigurera indexerarens körning. Bland dessa egenskaper finns mappningar som anger datasökvägen till fält i ett sökindex.

Diagram showing which properties of indexers establish the data path to fields in an index.

Det finns två uppsättningar mappningar:

Egenskapen "sourceFieldName" anger antingen ett fält i datakällan eller en nod i ett berikande träd. Egenskapen "targetFieldName" anger sökfältet i ett index som tar emot innehållet.

Berikningsexempel

Med hjälp av kompetensuppsättningenför hotellrecensioner som referenspunkt förklarar det här exemplet hur ett berikande träd utvecklas genom färdighetskörning med hjälp av konceptuella diagram.

Det här exemplet visar också:

  • Hur en färdighets kontext och indata fungerar för att avgöra hur många gånger en färdighet körs
  • Vilken form indata är baserad på kontexten

I det här exemplet innehåller källfält från en CSV-fil kundrecensioner om hotell ("reviews_text") och klassificeringar ("reviews_rating"). Indexeraren lägger till metadatafält från Blob Storage och färdigheter lägger till översatt text, attitydpoäng och identifiering av nyckelfraser.

I exemplet med hotellgranskningar representerar ett "dokument" i berikningsprocessen en enda hotellgranskning.

Dricks

Du kan skapa ett sökindex och kunskapslager för dessa data i Azure-portalen eller REST-API:er. Du kan också använda Felsökningssessioner för insikter om sammansättning, beroenden och effekter på ett berikande träd. Bilder i den här artikeln hämtas från felsökningssessioner.

Konceptuellt ser det första berikningsträdet ut så här:

enrichment tree after document cracking

Rotnoden för alla berikanden är "/document". När du arbetar med blobindexerare "/document" har noden underordnade noder till "/document/content" och "/document/normalized_images". När data är CSV, som i det här exemplet, mappas kolumnnamnen till noder under "/document".

Skicklighet nr 1: Dela kompetens

När källinnehållet består av stora textsegment är det bra att dela upp det i mindre komponenter för att få bättre precision i språk, sentiment och identifiering av nyckelfraser. Det finns två tillgängliga korn: sidor och meningar. En sida består av cirka 5 000 tecken.

En kunskap om textdelning är vanligtvis först i en kompetensuppsättning.

"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
{
    "name": "text",
    "source": "/document/reviews_text"
}
],
"outputs": [
{
    "name": "textItems",
    "targetName": "pages"
}

Med kunskapskontexten "/document/reviews_text"körs den delade färdigheten en gång för reviews_text. Kunskapsutdata är en lista där segmenten reviews_text är segmenterade i 5 000 tecken. Utdata från den delade färdigheten namnges pages och läggs till i berikningsträdet. Med targetName funktionen kan du byta namn på en kunskapsutdata innan du läggs till i berikningsträdet.

Berikningsträdet har nu en ny nod som placeras under kompetensens kontext. Den här noden är tillgänglig för alla kunskaps-, projektions- eller utdatafältmappningar.

enrichment tree after skill #1

För att få åtkomst till någon av de berikanden som läggs till i en nod av en färdighet krävs den fullständiga sökvägen för berikningen. Om du till exempel vill använda texten från pages noden som indata till en annan färdighet måste du ange den som "/document/reviews_text/pages/*". Mer information om sökvägar finns i Referensberikningar.

Kunskap nr 2 Språkidentifiering

Dokument för hotellgranskning innehåller feedback från kunder som uttrycks på flera språk. Språkidentifieringsfärdigheten avgör vilket språk som används. Resultatet skickas sedan till extrahering av nyckelfraser och sentimentidentifiering (visas inte), med språket i åtanke när du identifierar sentiment och fraser.

Även om språkidentifieringsfärdigheten är den tredje (färdighet nr 3) som definierats i kompetensuppsättningen är det nästa färdighet att utföra. Det kräver inga indata så det körs parallellt med den tidigare kunskapen. Precis som den delade färdighet som föregick den anropas även språkidentifieringsfärdigheten en gång för varje dokument. Berikningsträdet har nu en ny nod för språk.

enrichment tree after skill #2

Kunskaper nr 3 och 4 (attitydanalys och identifiering av nyckelfraser)

Kundfeedback återspeglar en rad positiva och negativa upplevelser. Kunskapen för attitydanalys analyserar feedbacken och tilldelar en poäng längs ett kontinuum av negativa till positiva tal eller neutral om sentimentet är obestämt. Parallellt med attitydanalys identifierar och extraherar nyckelfrasidentifiering ord och korta fraser som visas som följdfraser.

Med tanke på kontexten /document/reviews_text/pages/*för anropas både attitydanalys och nyckelfrasfärdigheter en gång för vart och ett av objekten pages i samlingen. Utdata från färdigheten blir en nod under det associerade sidelementet.

Nu bör du kunna titta på resten av färdigheterna i kunskapsuppsättningen och visualisera hur berikande träd fortsätter att växa med utförandet av varje färdighet. Vissa kunskaper, till exempel sammanslagningsfärdigheten och formningsfärdigheten, skapar också nya noder men använder bara data från befintliga noder och skapar inte nya net-berikanden.

enrichment tree after all skills

Färgerna i anslutningsapparna i trädet ovan anger att berikningarna har skapats med olika kunskaper och att noderna måste åtgärdas individuellt och inte ingår i objektet som returneras när den överordnade noden väljs.

Skicklighet nr 5 Formningsfärdighet

Om utdata innehåller ett kunskapslager lägger du till en Shaper-färdighet som ett sista steg. Shaper-färdigheten skapar dataformer från noder i ett berikande träd. Du kanske till exempel vill konsolidera flera noder till en enda form. Du kan sedan projicera den här formen som en tabell (noder blir kolumnerna i en tabell) och skicka formen efter namn till en tabellprojektion.

Shaper-färdigheten är lätt att arbeta med eftersom den fokuserar på att forma under en färdighet. Du kan också välja infogad formning i enskilda projektioner. Shaper Skill lägger inte till eller förringar inte ett berikande träd, så det visualiseras inte. I stället kan du tänka dig en Shaper-färdighet som det sätt på vilket du omformulerar berikandeträdet som du redan har. Konceptuellt liknar detta att skapa vyer ur tabeller i en databas.

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "name": "#5",
  "description": null,
  "context": "/document",
  "inputs": [
    {
      "name": "name",
      "source": "/document/name"
    },
    {
      "name": "reviews_date",
      "source": "/document/reviews_date"
    },
    {
      "name": "reviews_rating",
      "source": "/document/reviews_rating"
    },
    {
      "name": "reviews_text",
      "source": "/document/reviews_text"
    },
    {
      "name": "reviews_title",
      "source": "/document/reviews_title"
    },
    {
      "name": "AzureSearch_DocumentKey",
      "source": "/document/AzureSearch_DocumentKey"
    },
    {
      "name": "pages",
      "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/*"
        },
        {
          "name": "keyphrase",
          "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
          "inputs": [
            {
              "name": "Keyphrases",
              "source": "/document/reviews_text/pages/*/Keyphrases/*"
            }
          ]
        }
      ]
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "tableprojection"
    }
  ]
}

Nästa steg

Med en introduktion och ett exempel bakom dig kan du prova att skapa din första kompetensuppsättning med hjälp av inbyggda färdigheter.