Skapa en kunskapsuppsättning i Azure Cognitive Search

indexeringsfaser

En kunskapsuppsättning definierar de åtgärder som extraherar och utökar data så att de blir sökbara. En kunskapsuppsättning körs efter dokumentknackning, när text- och bildinnehåll extraheras från källdokument och efter att fält från källdokumentet (valfritt) mappats till målfält i ett index eller kunskapslager.

I den här artikeln får du lära dig hur du skapar en kunskapsuppsättning. Som referens använder den här artikeln Skapa kompetensuppsättning (REST API).

Några användningsregler för kunskapsuppsättningar omfattar följande:

  • En kunskapsuppsättning är en resurs på den översta nivån, vilket innebär att den kan skapas en gång och refereras av många indexerare.
  • En kunskapsuppsättning måste innehålla minst en färdighet.
  • En kompetensuppsättning kan upprepa färdigheter av samma typ (till exempel flera Shaper-kunskaper).

Kom ihåg att indexerare kör färdigheter, vilket innebär att du också måste skapa en indexerare, datakällaoch sökindex innan du kan testa din kompetensuppsättning.

Tips

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

Definition av kunskaper

Börja med den grundläggande strukturen. I REST APIredigeras en kunskapsuppsättning 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":"A Cognitive Services resource in the same region as Azure Cognitive Search",
      "key":"<Your-Cognitive-Services-Multiservice-Key>"
   },
   "knowledgeStore":{
      "storageConnectionString":"<Your-Azure-Storage-Connection-String>",
      "projections":[
         {
            "tables":[ ],
            "objects":[ ],
            "files":[ ]
         }
      ]
    },
    "encryptionKey":{ }
}

Efter namn och beskrivning har en kunskapsuppsättning fyra huvudegenskaper:

  • skills matris, en osorterad samling färdighetersom söktjänsten bestämmer körningssekvensen för baserat på de indata som krävs för varje kunskap. Om kunskaperna är oberoende körs de parallellt. Kunskaper kan vara utilitska (t.ex. att dela upp text), transformering (baserat på AI från Cognitive Services) eller anpassade färdigheter som du tillhandahåller. Ett exempel på en kompetensmatris finns i följande avsnitt.

  • cognitiveServicesanvänds för fakturerbara färdigheter som anropar API:er för Cognitive Services. Ta bort det här avsnittet om du inte använder fakturerbara kunskaper eller anpassad entitetsuppslag. Bifoga en resurs om du är det.

  • knowledgeStore, (valfritt) anger ett Azure Storage-konto och inställningar för att projicera kunskapsuppsättningsutdata till tabeller, blobar 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 en Azure Key Vault och kund-hanterade nycklar som används för att kryptera känsligt innehåll i en kompetensuppsättningsdefinition. Ta bort den här egenskapen om du inte använder kundstyrd kryptering.

Lägga till en kompetensmatris

Inom en kompetensuppsättningsdefinition anger kompetensmatrisen vilka färdigheter som ska köras. I följande exempel introduceras dess sammansättning genom att visa två orelaterade, inbyggda kunskaper. Observera att varje kunskap har en typ, kontext, indata och utdata.

"skills":[
  {
    "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
    "context": "/document",
    "categories": [ "Organization" ],
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "text",
        "source": "/document/content"
      }
    ],
    "outputs": [
      {
        "name": "organizations",
        "targetName": "orgs"
      }
    ]
  },
  {
    "@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
    "context": "/document",
    "inputs": [
      {
        "name": "text",
        "source": "/document/content"
      }
    ],
    "outputs": [
      {
        "name": "score",
        "targetName": "mySentiment"
      }
    ]
  }
]

Anteckning

Du kan skapa komplexa kunskapsuppsättningar med loopning och förgrening, med hjälp av villkorsstyrd kunskap för att skapa uttrycken. Syntaxen baseras på JSON-pekarsökvägs notationen, med några ändringar för att identifiera noder i berikande träd. En "/" passerar en nivå lägre i trädet och fungerar som en "*" för-varje-operator i kontexten. Flera exempel i den här artikeln illustrerar syntaxen.

Hur inbyggda kunskaper struktureras

Varje kunskap är unik vad gäller indatavärdena och de parametrar som den tar. Dokumentationen för varje färdighet beskriver alla parametrar och egenskaper för en viss färdighet. Även om det finns skillnader delar de flesta kunskaper en gemensam uppsättning och har liknande mönster. För att illustrera flera punkter ger entitetsigenkänningen ett exempel:

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

Vanliga parametrar är "odata.type", "inputs" och "outputs". De andra parametrarna, nämligen "categories" och "defaultLanguageCode", är exempel på parametrar som är specifika för entitetsigenkänning.

  • "odata.type" identifierar unikt varje färdighet. Du hittar typen i kunskapsreferensdokumentationen.

  • "kontext" är en nod i ett berikande träd och representerar den nivå där åtgärder äger rum. Alla färdigheter har den här egenskapen. Om fältet "kontext" inte uttryckligen anges är standardkontexten "/document" . I exemplet är kontexten hela dokumentet, vilket innebär att entitetsigenkänningsfärdighet anropas en gång per dokument.

    Kontexten avgör också var utdata också produceras i berikande träd. I det här exemplet returnerar färdigheten en egenskap med namnet , avbildad som "organizations" , som läggs till som en underordnad orgs nod i "/document" . I underordnade färdigheter är sökvägen till den nyligen skapade berikande noden "/document/orgs" . För ett visst dokument är värdet för "/document/orgs" en matris med organisationer som extraherats från texten (till exempel: ["Microsoft", "LinkedIn"] ). Mer information om sökvägssyntax finns i Referera till anteckningar i en kunskapsuppsättning.

  • "indata" anger ursprunget för inkommande data och hur de ska användas. När det gäller entitetsigenkänning är en av indatan "text" , vilket är det innehåll som ska analyseras för entiteter. Innehållet kommer från noden "/document/content" i ett berikande träd. I ett berikande träd är "/document" rotnoden. För dokument som hämtas med hjälp av en Azure Blob-indexerare är fältet för varje content dokument ett standardfält som skapas av indexeraren.

  • "outputs" representerar utdata för färdigheten. Varje kunskap är utformad för att generera specifika typer av utdata, som refereras till med namn i kunskapsuppsättningen. När det gäller entitetsigenkänning "organizations" är en av de utdata som stöds. Dokumentationen för varje kunskap beskriver de utdata som den kan generera.

Utdata finns bara under bearbetningen. Om du vill länka dessa utdata till indata för en underordnad färdighet refererar du till utdata som "/document/orgs" . Om du vill skicka utdata till ett fält i ett sökindex skapar du en utdatafältmappning i en indexerare. Om du vill skicka utdata till ett kunskapslager skapar du en projektion.

Utdata från en färdighet kan vara i konflikt med utdata från en annan färdighet. Om du har flera färdigheter som returnerar samma utdata använder du för "targetName" namn-disamamuering i berikningsnodsökvägar.

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

Den andra färdigheten för attitydanalys följer samma mönster som den första berikaren. Den tar "/document/content" som indata och returnerar en attitydpoäng för varje innehållsinstans. Eftersom du inte uttryckligen har angett kontextfältet är utdata (mySentiment) nu underordnade "/document" .

{
  "@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "score",
      "targetName": "mySentiment"
    }
  ]
}

Lägga till en anpassad färdighet

Nedan visas ett exempel på en anpassad färdighet. URI:en 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 utanför pipelinen är det bara en färdighet i en kompetensmatris. Precis som de inbyggda kunskaperna har den en typ, kontext, indata och utdata. Den läser och skriver också till ett berikande träd, precis som de inbyggda kunskaperna gör. Observera att fältet "kontext" är inställt på med en asterisk, vilket innebär att berikningssteget "/document/orgs/*" anropas för varje organisation under "/document/orgs" .

Utdata, i det här fallet en företagsbeskrivning, genereras för varje organisation som identifieras. När du refererar till beskrivningen i ett nedströmssteg (till exempel vid 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 index

När varje kunskap körs läggs dess utdata till som noder i ett dokuments berikande träd. Berikade dokument finns i pipelinen som tillfälliga datastrukturer. För att skapa en permanent datastruktur och få full insyn i vad en kunskap faktiskt producerar, måste du skicka utdata till ett sökindex eller ett kunskapslager.

I de tidiga faserna av kunskapsuppsättningsutvärderingen bör du kontrollera preliminära resultat med minimal ansträngning. Vi rekommenderar sökindexet eftersom det är enklare att konfigurera. För varje kunskapsutdata definierar du en mappning av utdatafält i indexeraren och ett fält i indexet.

Objektdiagram som visar hur en entitet för personer definieras i kunskapsutdata, mappning av indexerarfält och indexfält.

När du har kört indexeraren kan du använda Sökutforskaren för att returnera dokument från indexet och kontrollera innehållet i varje fält för att avgöra vad kompetensuppsättningen har identifierat eller skapat.

I följande exempel visas resultatet av en entitetsigenkänningskunskap som identifierade personer, platser, organisationer och andra entiteter i ett text segment. Om du visar resultaten i Sökutforskaren kan du avgöra om en kunskap tillför värde i din lösning.

Skärmbild av ett dokument i Sökutforskaren.

Tips för en första kunskapsuppsättning

  • Sätt ihop ett representativt exempel på ditt innehåll i Blob Storage eller någon annan indexerardatakälla som stöds och kör guiden Importera data för att skapa kunskapsuppsättningen, indexet, indexeraren och datakällobjektet.

    Guiden automatiserar flera steg som kan vara utmanande första gången, inklusive att definiera fälten i ett index, definiera mappningar av arkiverade utdata i en indexerare och projektioner i ett kunskapslager om du använder ett sådant. För vissa kunskaper, till exempel OCR eller bildanalys, lägger guiden till verktygskunskaper som sammanfogar bild- och textinnehåll som separerades under dokumentknckning.

  • Du kan också importera Postman-samlingar med kunskaper som innehåller fullständiga exempel på alla objektdefinitioner som krävs för att utvärdera en färdighet, från kunskapsuppsättning till ett index som du kan köra frågor mot för att visa resultatet av en transformering.

Nästa steg

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