Kunskapsuppsättningsbegrepp i Azure Cognitive Search
Den här artikeln är för utvecklare som behöver en djupare förståelse av begrepp och sammansättning för kompetensuppsättning och förutsätter kunskaper om avancerade begrepp och arbetsflöden för AI-berikning.
En kunskapsuppsättning är en återanvändbar resurs i Azure Cognitive Search som är kopplad till en indexerare. Den innehåller en eller flera kunskaper, som är atomiska åtgärder som anropar inbyggd AI eller extern anpassad bearbetning över dokument som hämtats från en extern datakälla.
Från bearbetningen av kunskapsuppsättningen till dess slutsats kan du läsa och skriva till ett berikat dokument. Ett berikat dokument är inledningsvis bara det råa innehållet som extraheras från en datakälla, men vid varje färdighetskörning får det struktur och kraft. Slutligen mappas noder från ett berikat dokument till fält i ett sökindex eller mappas till projektioner i ett kunskapslager, så att innehållet kan dirigeras på rätt sätt, där det kommer att efterfrågas eller användas av andra appar.
Definition av kunskaper
En kunskapsuppsättning är en matris med en eller flera färdigheter som representerar en atomisk berikningsåtgärd, till exempel översättning av text, extrahering av nyckelfraser eller utförande av optisk teckenläsning från en bildfil. Färdigheter kan vara inbyggda kunskaper från Microsoft eller anpassade färdigheter som innehåller modeller eller bearbetningslogik som du tillhandahåller. Den skapar berikade dokument som antingen används vid indexering eller projiceras till ett kunskapslager.
Kunskaper har en typ, en kontext och indata och utdata som ofta är sammankedjade. I följande exempel visas två inbyggda färdigheter som fungerar tillsammans och introducerar en del av terminologin för definitionen av kunskapsuppsättningen.
Kunskap nr 1 är en textdelningsfärdighet som accepterar innehållet i källfältet "reviews_text" som indata och delar upp innehållet i "sidor" på 5 000 tecken som utdata. Att dela upp stor text i mindre segment kan ge bättre resultat under bearbetning av naturligt språk.
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 attitydanalysen.
{
"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": "score",
"targetName": "Sentiment"
}
]
}
. . .
}
Viktiga punkter att observera i exemplet ovan är att indata och utdata är namn/värde-par, du kan matcha utdata för en färdighet med indata för underordnade färdigheter och att alla färdigheter har kontext som avgör var i berikande träd bearbetningen sker.
Mer information om hur indata och utdata formuleras finns i Så här refererar du till anteckningar.
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 via kunskaper och representerar dem i en hierarki med adresserbara noder. Noder innehåller även icke-berikade fält som skickas ordagrann från den externa datakällan. Ett berikat dokument finns under hela körningen av kunskapsuppsättningen, men kan cachelagras eller bevaras i ett kunskapslager.
Inledningsvis är ett berikat dokument helt enkelt det innehåll som extraheras från en datakälla under dokumentknckning, där text och bilder extraheras från källan och görs tillgängliga för språk- eller bildanalys.
Det ursprungliga innehållet är rotnoden ( ) och är vanligtvis ett helt dokument eller en normaliserad bild som extraheras från en document\content datakälla under dokumentknckning. Hur den formuleras i ett berikningsträd varierar för varje typ av datakälla. I följande tabell visas tillståndet för ett dokument som matas in i berikningspipelinen för flera datakällor som stöds:
| Datakälla\parsningsläge | Standardvärde | JSON, JSON Lines & CSV |
|---|---|---|
| Blob Storage | /document/content /document/normalized_images/* … |
/document/{key1} /document/{key2} … |
| Azure SQL | /document/{column1} /document/{column2} … |
Ej tillämpligt |
| Cosmos DB | /document/{key1} /document/{key2} … |
Ej tillämpligt |
När kunskaper körs läggs utdata till i berikande träd som nya noder. Dessa noder kan sedan användas som indata för underordnade färdigheter och kommer så småningom att projiceras till ett kunskapslager eller mappas till indexfält. Kunskaper som skapar innehåll, till exempel översatta strängar, skriver sina utdata till det berikade dokumentet. På samma sätt läser kunskaper som förbrukar utdata från överordnade färdigheter från det berikade dokumentet för att få nödvändiga indata.
Ett berikningsträd består av extraherat innehåll och metadata som hämtas från källan, plus eventuella nya noder som skapas av en färdighet, till exempel från textöversättningskunskapen , från entitetsigenkänningsfärdighet translated_text eller från locations keyPhrases Extrahering av diskussionsämne-färdigheten. Även om du kan visualisera och arbeta med ett berikningsträd via en visuell redigerare är det främst en intern struktur.
Berikande är inte föränderliga: noder kan inte redigeras när de har skapats. Eftersom dina kompetensuppsättningar blir mer komplexa, så kommer ditt berikningsträd, men inte alla noder i berikande träd att behöva göra det till indexet eller kunskapslagret. Du kan selektivt spara bara en delmängd av berikningsutdata så att du bara behåller det du tänker använda.
Eftersom en färdighets indata och utdata läser från och skriver till berikningsträd, är en av uppgifterna som du slutför som en del av kompetensuppsättningsdesignen att skapa utdatafältmappningar som flyttar innehåll från berikande träd till ett fält i ett sökindex. Om du skapar ett kunskapslager kan du på samma sätt mappa utdata till figurer som är tilldelade till projektioner.
Anteckning
Berikningsträdsformatet gör att berikningspipelinen kan koppla 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 Formarfärdighet.
Kontext
Varje kunskap 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 som färdigheten körs, över ett enda värde (en gång per fält, per dokument) eller för kontextvärden av typsamling, där ett resultat läggs till i kunskapsanrop en gång för varje instans i
/*samlingen.Utdatadeklaration, eller där kunskapsutdata läggs till i berikande träd. Utdata läggs alltid till i trädet som underordnade till kontextnoden.
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, vart och ett berikat med en lista över delstater som innehåller en lista med postnummer, avgör hur du anger kontexten hur indata tolkas.
| Kontext | Indata | Form av indata | Kunskapsanrop |
|---|---|---|---|
/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 delstat |
Exempel på berikning
I det här exemplet förklaras hur ett berikande träd utvecklas genom körning av färdigheter med hjälp av konceptuella diagram, med hjälp av kompetensuppsättningen för hotellrecensioner.
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 har baserats på kontexten
I det här exemplet innehåller källfält från en CSV-fil kundrecensioner om hotell ("reviews_text") och betyg ("reviews_rating"). Indexeraren lägger till metadatafält från Blob Storage och kunskaperna lägger till översatt text, attitydpoäng och identifiering av nyckelfraser.
I exemplet med hotellrecensioner representerar ett "dokument" i berikningsprocessen en enda hotellrecension.
Tips
Du kan skapa ett sökindex och kunskapslager för dessa data i Azure Portal eller via Postman och REST-API:erna. Du kan också använda felsökningssessioner för att få insikter om kunskapsuppsättningens sammansättning, beroenden och effekter på ett berikande träd. Avbildningar i den här artikeln hämtas från felsökningssessioner.
Konceptuellt ser det första berikningsträdet ut så här:

Rotnoden för alla berikande är "/document" . När du arbetar med blobindexerare "/document" har noden underordnade noder till "/document/content" och "/document/normalized_images" . När du arbetar med CSV-data, som vi är i det här exemplet, mappar kolumnnamnen till noder under "/document" .
Färdighet nr 1: Delad färdighet
När källinnehållet består av stora textdelar är det bra att dela upp det i mindre komponenter för bättre noggrannhet för språk, sentiment och identifiering av nyckelfraser. Det finns två tillgängliga kornighet: sidor och meningar. En sida består av cirka 5 000 tecken.
En textdelningsfärdighet är vanligtvis först i en kunskapsuppsä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 split-färdigheten en gång för reviews_text . Kunskapsutdata är en lista där reviews_text är indelade i 5 000 teckensegment. Utdata från split-färdigheten pages namnges och läggs till i berikande träd. Med targetName funktionen kan du byta namn på kunskapsutdata innan de läggs till i berikande träd.
Berikande träd har nu en ny nod placerad i kontexten för färdigheten. Den här noden är tillgänglig för alla kunskaper, projektioner eller utdatafältmappningar.

För att få åtkomst till något av berikandena som lagts till i en nod av en kunskap krävs den fullständiga sökvägen för berikande. Om du till exempel vill använda texten från noden som indata till en annan kunskap pages måste du ange den som "/document/reviews_text/pages/*" . Mer information om sökvägar finns i Referensanteckningar.
Språkidentifiering för färdighet nr 2
Hotellgranskningsdokument innehåller kundfeedback som uttrycks på flera språk. Språkidentifieringskunskapen avgör vilket språk som används. Resultatet skickas sedan till extrahering av nyckelfraser och sentimentidentifiering (visas inte), med språket i beaktande vid identifiering av sentiment och fraser.
Även om språkidentifieringsfärdighet är den tredje (kunskap nr 3) som definierats i kompetensuppsättningen är det nästa färdighet att köra. Eftersom den inte blockeras genom att kräva indata körs den parallellt med den tidigare färdigheten. Precis som den delade färdigheten som föregick den anropas även språkidentifieringsfärdighet en gång för varje dokument. Berikande träd har nu en ny nod för språk.

Färdigheter nr 3 och #4 (attitydanalys och nyckelfrasidentifiering)
Kundfeedback visar en mängd positiva och negativa upplevelser. Attitydanalyskunskapen analyserar feedbacken och tilldelar en poäng längs en continuum av negativa till positiva tal, eller neutralt om sentimentet är obestämt. Parallellt med attitydanalys identifierar och extraherar nyckelfrasidentifiering ord och korta fraser som förekommer som följd.
I kontexten för anropas både sentimentanalys och nyckelfraskunskaper en /document/reviews_text/pages/* gång för vart och ett av objekten i pages samlingen. Utdata från färdigheten blir en nod under det associerade sidelementet.
Nu bör du kunna titta på resten av kompetenserna i kompetensuppsättningen och visualisera hur berikande träd fortsätter att växa med körningen av varje färdighet. Vissa färdigheter, till exempel sammanfogningsfärdigheter och formarfärdigheter, skapar också nya noder, men använder endast data från befintliga noder och skapar inte net nya berikan.

Färgerna på anslutningsapparna i trädet ovan visar att berikarna 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 markeras.
Formarfärdighet för kunskap nr 5
Om utdata innehåller ett kunskapslagerlägger du till en Formarfärdighet som ett sista steg. Formarkunskapen skapar dataformer från noder i ett berikningsträd. Du kanske till exempel vill konsolidera flera noder i en enda form. Du kan sedan projicera den här formen som en tabell (noderna blir kolumnerna i en tabell) och skicka figuren efter namn till en tabellprojektion.
Shaper-färdigheten är enkel att arbeta med eftersom den fokuserar på att forma under en färdighet. Du kan också välja linjeformning i enskilda projektioner. Shaper-färdigheten lägger inte till eller försämrar ett berikande träd, så den visualiseras inte. I stället kan du tänka på en Formarfärdighet som ett sätt att formulera om berikningsträdet som du redan har. Konceptuellt liknar detta skapandet av vyer av 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 kunskaper.