Koncepty sady dovedností v Azure Cognitive Search

Tento článek je pro vývojáře, kteří potřebují hlubší porozumění konceptům a složení sady dovedností a předpokládají znalost konceptů vysoké úrovně a pracovních postupů rozšiřování AI.

Sada dovedností je prostředek, který lze znovu Azure Cognitive Search, který je připojen k indexeru. Obsahuje jednu nebo více dovedností, což jsou atomické operace, které volají integrovanou AI nebo externí vlastní zpracování u dokumentů načtených z externího zdroje dat.

Od počátku zpracování sady dovedností až po závěr se dovednosti čtou a zapisují do obohaceného dokumentu. Obohacený dokument je zpočátku jenom nezpracovaný obsah extrahovaný ze zdroje dat, ale při každém spuštění dovednosti získá strukturu a dech. Uzly z obohaceného dokumentu se nakonec mapují na pole ve vyhledávacím indexu nebo na projekce v obchodě znalostí, aby obsah mohl být správně směrován, kde se bude dotazovat nebo využívat jinými aplikacemi.

Kanál se sadami dovedností

Definice sady dovedností

Sada dovedností je pole jedné nebo více dovedností, které představují atomickou operaci rozšiřování, jako je překlad textu, extrakce klíčových frází nebo optické rozpoznávání znaků z obrázového souboru. Dovednosti mohou být integrované dovednosti Od Microsoftu nebo vlastní dovednosti, které obsahují modely nebo logiku zpracování, kterou poskytnete. Vytváří obohacené dokumenty, které se spotřebovávají během indexování nebo projektují do úložiště znalostí.

Dovednosti mají typ, kontext a vstupy a výstupy, které jsou často zřetězovány dohromady. Následující příklad ukazuje dvě integrované dovednosti, které spolupracují a zavádí část terminologie definice sady dovedností.

  • Dovednost č. 1 je dovednost Dělení textu, která jako vstup přijímá obsah zdrojového pole "reviews_text" a jako výstup ho rozdělí na "stránky" po 5 000 znacích. Rozdělení velkého textu na menší bloky může při zpracování přirozeného jazyka zlepšit výsledky.

  • Dovednost č. 2 je dovednost rozpoznávání mínění, která přijímá "stránky" jako vstup a vytvoří nové pole s názvem Sentiment jako výstup, který obsahuje výsledky analýzy mínění.

{
    "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"
                }
            ]
        }
. . . 
}

Klíčové body, které je třeba si všimnout výše uvedeného příkladu, jsou to, že vstupy a výstupy jsou páry název-hodnota. Výstupy jedné dovednosti můžete spárovat se vstupy podřízené dovednosti a že všechny dovednosti mají kontext, který určuje, kde ve stromu pro rozšiřování dochází ke zpracování.

Další podrobnosti o formulovat vstupy a výstupy najdete v tématu Jak odkazovat na poznámky.

Strom rozšiřování

Obohacený dokument je dočasná stromová datová struktura vytvořená během provádění sady dovedností, která shromažďuje všechny změny provedené prostřednictvím dovedností a představuje je v hierarchii adresovatelných uzlů. Uzly obsahují také všechna pole bez rozšíření, která jsou doslovně předána z externího zdroje dat. Po dobu provádění sady dovedností existuje obohacený dokument, který se ale může uložit do mezipaměti nebo uložit do úložiště znalostí.

Na začátku je obohacený dokument jednoduše obsah extrahovaný ze zdroje dat během prolomení dokumentu ,kde se text a obrázky extrahují ze zdroje a zřizují se pro analýzu jazyka nebo obrázků.

Počáteční obsah je kořenový uzel ( ) a obvykle se jedná o celý dokument nebo normalizovaný obrázek, který se extrahuje ze zdroje dat během document\content prolomení dokumentu. Způsob vyjmenování ve stromu pro rozšiřování se liší pro každý typ zdroje dat. Následující tabulka ukazuje stav dokumentu, který do kanálu pro rozšiřování zadáváte pro několik podporovaných zdrojů dat:

Zdroj dat\Režim parsování Výchozí JSON, řádky JSON & CSV
Blob Storage /document/content
/document/normalized_images/*
/document/{key1}
/document/{key2}
Azure SQL /document/{column1}
/document/{column2}
Cosmos DB /document/{key1}
/document/{key2}

Při provádění dovedností se výstup přidá do stromu rozšiřování jako nové uzly. Tyto uzly je pak možné použít jako vstupy pro podřízené dovednosti a nakonec se promítnou do úložiště znalostí nebo se namapují na pole indexu. Dovednosti, které vytvářejí obsah, například přeložené řetězce, zapisují svůj výstup do obohaceného dokumentu. Dovednosti, které využívají výstup upstreamových dovedností, budou také číst z obohaceného dokumentu, aby se načetly potřebné vstupy.

Čtení a zápis dovedností ze stromu rozšiřování

Strom pro rozšiřování se skládá z extrahování obsahu a metadat stažených ze zdroje a z nových uzlů vytvořených dovedností, například z dovednosti překladu textu, z dovednosti rozpoznávání entit translated_text nebo z locations keyPhrases dovednosti Extrakce klíčových frází. I když můžete vizualizovat strom pro rozšiřování a pracovat s ním prostřednictvím editoru vizuálů, většinou se jedná o interní strukturu.

Rozšiřování není možné změnit: po vytvoření není možné uzly upravovat. S tím, jak jsou vaše dovednosti složitější, bude i strom rozšiřování, ale ne všechny uzly ve stromu pro rozšiřování ho musí přetáhovat do indexu nebo do úložiště znalostí. Můžete selektivně zachovat pouze podmnožinu výstupů rozšiřování, takže si zachováte jenom to, co chcete použít.

Vzhledem k tomu, že vstupy a výstupy dovednosti čtou a zapisují do stromů rozšiřování, jedním z úkolů, které dokončíte v rámci návrhu sady dovedností, je vytváření mapování výstupních polí, která přesunují obsah ze stromu pro rozšiřování a do pole v indexu vyhledávání. Podobně platí, že pokud vytváříte úložiště znalostí, můžete výstupy mapovat na obrazce, které jsou přiřazeny k projekcí.

Poznámka

Formát stromové struktury rozšiřování umožňuje kanálu pro rozšiřování připojit metadata k i primitivním datovým typům. Metadata nebudou platným objektem JSON, ale je možné je promítat do platného formátu JSON v definicích projekce v obchodě znalostí. Další informace najdete v tématu o dovednosti Shaper.

Kontext

Každá dovednost má kontext, což může být celý dokument ( ) nebo uzel ve stromu níže /document ( /document/countries/ ). Kontext určuje:

  • Počet, kolikrát se dovednost provede, přes jednu hodnotu (jednou pro každé pole, na dokument) nebo pro kontextové hodnoty kolekce typů, kde přidáním výsledku vyvolání dovednosti jednou pro každou instanci v /* kolekci.

  • Výstupní deklarace nebo kde ve stromu pro rozšiřování jsou přidány výstupy dovednosti. Výstupy se vždy přidávají do stromu jako podřízené položky kontextového uzlu.

  • Tvar vstupů. U kolekcí s více úrovněmi bude nastavení kontextu na nadřazenou kolekci mít vliv na tvar vstupu dovednosti. Pokud máte například strom pro rozšiřování se seznamem zemí/oblastí, každý z nich je obohacený seznamem států obsahujících seznam PSČ, způsob nastavení kontextu určuje, jak se vstup interpretuje.

Kontext Vstup Tvar vstupu Volání dovedností
/document/countries/* /document/countries/*/states/*/zipcodes/* Seznam všech PSČ v zemi nebo oblasti Jednou pro zemi nebo oblast
/document/countries/*/states/* /document/countries/*/states/*/zipcodes/* Seznam PSČ ve stavu Jednou za kombinaci země/oblasti a státu

Příklad rozšiřování

Tento příklad používá jako referenční bod sady dovedností hotelových recenzí a vysvětluje, jak se strom pro rozšiřování vyvíjí prostřednictvím realizace dovedností pomocí koncepčních diagramů.

Tento příklad také ukazuje:

  • Jak kontext dovednosti a vstupy fungují, aby bylo možné určit, kolikrát se dovednost provede
  • Jaký je tvar vstupu na základě kontextu?

V tomto příkladu zdrojová pole ze souboru CSV zahrnují recenze zákazníků o hotelech ("reviews_text") a hodnocení ("reviews_rating"). Indexer přidává pole metadat z úložiště objektů blob a dovednosti přidávají přeložený text, skóre mínění a detekci klíčových frází.

V příkladu hotelových recenzí představuje "dokument" v rámci procesu rozšiřování jedno hotelové hodnocení.

Tip

Index vyhledávání a úložiště znalostí pro tato data můžete vytvořit v Azure Portal nebo prostřednictvím postmana rozhraní REST API . Ladicí relace můžete použít také k přehledům o složení sady dovedností, závislostech a efektech na strom rozšiřování. Obrázky v tomto článku se natáhly z ladicích relací.

Počáteční strom rozšiřování vypadá koncepčně takto:

strom rozšiřování po prolomení dokumentů

Kořenový uzel pro všechna rozšíření je "/document" . Při práci s indexery objektů blob bude "/document" mít uzel podřízené uzly a "/document/content" "/document/normalized_images" . Při práci s daty CSV se názvy sloupců stejně jako v tomto příkladu mapuje na uzly pod "/document" .

Dovednost č. 1: Rozdělení dovednosti

Pokud se zdrojový obsah skládá z velkých bloků textu, je užitečné ho rozdělit na menší komponenty pro větší přesnost jazyka, mínění a rozpoznávání klíčových frází. K dispozici jsou dvě zrnka: stránky a věty. Stránka se skládá z přibližně 5 000 znaků.

Dovednost dělení textu je obvykle první dovedností sady dovedností.

"@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"
}

S kontextem dovednosti "/document/reviews_text" se dělená dovednost provede jednou pro reviews_text . Výstup dovedností je seznam, ve kterém je segmenty s reviews_text 5000 znaky v bloku. Výstup dovednosti rozdělení má název a pages přidá se do stromu pro rozšiřování. Tato targetName funkce umožňuje přejmenovat výstup dovednosti před přidáním do stromu pro rozšiřování.

Strom rozšiřování teď obsahuje nový uzel umístěný v kontextu dovednosti. Tento uzel je k dispozici pro všechny dovednosti, projekce nebo mapování výstupních polí.

strom rozšiřování po dovednosti č. 1

Pro přístup k libovolnému rozšíření přidanému do uzlu dovedností je potřeba úplná cesta k rozšíření. Pokud například chcete použít text z uzlu jako vstup do jiné dovednosti, budete ho muset pages zadat jako "/document/reviews_text/pages/*" . Další informace o cestách najdete v tématu Referenční poznámky.

Rozpoznávání jazyka dovedností č. 2

Dokumenty pro recenze hotelů zahrnují zpětnou vazbu od zákazníků vyjádřenou v několika jazycích. Dovednost rozpoznávání jazyka určuje, který jazyk se používá. Výsledek se pak předá extrakci klíčových frází a detekci mínění (nezobrazují) s ohledem na jazyk při zjišťování mínění a frází.

Dovednost rozpoznávání jazyka je sice třetí dovedností (dovedností č. 3) definovanou v jazyce, ale je to další dovednost, která se má provést. Vzhledem k tomu, že není blokovaný vyžadování žádných vstupů, provede se paralelně s předchozí dovedností. Stejně jako u dovednosti rozdělení, která mu předcházela, se dovednost rozpoznávání jazyka také vyvolá jednou pro každý dokument. Strom rozšiřování teď obsahuje nový uzel pro jazyk.

strom rozšiřování po dovednosti č. 2

Dovednosti č. 3 a 4 (analýza mínění a detekce klíčových frází)

Zpětná vazba od zákazníků odráží řadu pozitivních a negativních zkušeností. Dovednost analýzy mínění analyzuje zpětnou vazbu a přiřadí skóre podél kontinua negativních pozitivních čísel nebo neutrální, pokud není mínění neurčené. Detekce klíčových frází paralelně s analýzou mínění identifikuje a extrahuje slova a krátké fráze, které se jeví jako následné.

V kontextu se pro každou z položek v kolekci vyvolá jak analýza mínění, tak dovednosti klíčových /document/reviews_text/pages/* pages frází. Výstupem dovednosti bude uzel pod přidruženým prvkem stránky.

Teď byste měli být schopni se podívat na zbývající dovednosti v sady dovedností a vizualizovat, jak se strom rozšíření bude dál rozšiřovat s prováděním jednotlivých dovedností. Některé dovednosti, například dovednost sloučení a dovednost shaper, také vytvářejí nové uzly, ale používají pouze data z existujících uzlů a nevytvářely nová nová rozšíření.

Strom rozšiřování po všech dovednostech

Barvy konektorů ve stromu výše indikují, že rozšíření byla vytvořena různými dovednostmi a uzly bude potřeba řešit jednotlivě a nebudou součástí objektu vráceného při výběru nadřazeného uzlu.

Dovednost č. 5 – dovednost Shaper

Pokud výstup obsahuje úložiště znalostí,přidejte dovednost Shaper jako poslední krok. Dovednost Shaper vytváří datové tvary z uzlů ve stromu rozšiřování. Můžete například chtít konsolidovat více uzlů do jednoho tvaru. Tento tvar pak můžete projektovat jako tabulku (uzly se stanou sloupci v tabulce) a tvar podle názvu předáte projekci tabulky.

S dovedností Shaperu se snadno pracuje, protože se zaměřuje na tvarování v rámci jedné dovednosti. Alternativně se můžete rozhodnout pro tvarování v rámci jednotlivých projekcí. Dovednost Shaper nepřidá ani neubírá na zmenšování stromu rozšiřování, takže není vizualizována. Místo toho si můžete dovednost Shaper myslet jako na způsob, kterým překreslíte strom pro rozšiřování, který už máte. Koncepčně se to podobá vytváření zobrazení z tabulek v databázi.

{
  "@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"
    }
  ]
}

Další kroky

S úvodem a příkladem si zkuste vytvořit svou první dovednosti pomocí integrovaných dovedností.