Dovednost rozdělení textu

Poznámka:

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Důležité

Funkce, možnosti nebo vlastnosti označené (Preview) se nevztahují na smlouvu o úrovni služeb, nedoporučuje se pro produkční úlohy a můžou se změnit nebo omezit dříve, než budou obecně dostupné. Podmínky Azure AI Vyhledávač Preview platí pro všechny funkce ve verzi Preview, ať už jsou samostatné nebo součástí obecně dostupné funkce.

Dovednost Text Split rozděluje text na části textu. Můžete si určit, zda chcete text rozdělit na věty nebo na stránky určité délky. Jako výstupy jsou také dostupné polohové metadata jako offset a ordinální pozice. Tato dovednost je užitečná, pokud jsou požadavky na maximální délku textu i u jiných dovedností v budoucnu, například v dovednostech vkládání, které předávají datové bloky do embedding modelů v Azure, OpenAI a dalších poskytovatelích modelů. Pro více informací o tomto scénáři viz Chunk dokumenty pro vektorové vyhledávání.

Poznámka:

Tato dovednost není vázána jen na Foundry Tools. Není fakturovatelný a nemá požadavek na klíč Foundry Tools.

@odata.type

Microsoft.Skills.Text.SplitSkill

Parametry dovedností

Parametry rozlišují malá a velká písmena.

Název parametru Description
textSplitMode Buď pages nebo sentences. Stránky mají nastavitelnou maximální délku, ale dovednost se snaží vyhnout zkrácení věty, takže skutečná délka může být menší. Věty jsou řetězec, který končí interpunkcí končící větu, například tečkou, otazníkem nebo vykřičníkem, za předpokladu, že jazyk má interpunkci končící větu.
maximumPageLength Platí pouze tehdy, pokud textSplitMode je nastaveno na .pages Pro unit nastavené na , characterstento parametr označuje maximální délku stránky ve znacích měřenou pomocí String.Length. Minimální hodnota je 300, maximum 50000 a výchozí hodnota je 5000. Algoritmus se snaží prolomit hranice textu vět, takže velikost každého bloku může být o něco menší než maximumPageLength.

Pro unit nastavené na azureOpenAITokens, maximální délka stránky je limitem délky tokenu modelu. Pro modely textového vkládání je obecné doporučení délky stránky 512 tokenů.
defaultLanguageCode (volitelné) Jeden z následujících jazykových kódů: am, bs, cs, da, de, en, es, et, fr, he, hi, hr, hu, fi, id, is, it, ja, ko, lv, no, nl, pl, pt-PT, pt-BR, ru, sk, sl, sr, sv, tr, ur, zh-Hans. Výchozí je angličtina (en). Několik věcí k zamyšlení:
  • Poskytnutí jazykového kódu je užitečné, aby se předešlo rozdělení slova na polovinu u jazyků bez bílého prostoru, jako je čínština, japonština a korejština.
  • Pokud jazyk neznáte předem (například pokud používáte LanguageDetectionSkill k detekci jazyka), doporučujeme výchozí nastavení en .
pageOverlapLength Platí pouze tehdy, pokud textSplitMode je nastaveno na .pages Každá stránka začíná tímto počtem znaků nebo žetonů z konce předchozí stránky. Pokud je tento parametr nastaven na 0, text se na následujících stránkách nepřekrývá. Tento příklad zahrnuje parametr.
maximumPagesToTake Platí pouze tehdy, pokud textSplitMode je nastaveno na .pages Počet stránek k vrácení. Výchozí nastavení je 0, což znamená, že se vrátí všechny stránky. Tuto hodnotu byste měli nastavit, pokud potřebujete pouze podmnožinu stránek. Tento příklad zahrnuje parametr.
unit (náhled) Platí pouze tehdy, pokud textSplitMode je nastaveno na .pages Specifikuje, zda má být chunk ( characters výchozí) nebo azureOpenAITokens. Nastavení jednotky ovlivňuje maximumPageLength a pageOverlapLength.
azureOpenAITokenizerParameters (náhled) Objekt poskytující další parametry pro jednotku azureOpenAITokens .

encoderModelName je určený tokenizér používaný k převodu textu na tokeny, nezbytný pro úlohy zpracování přirozeného jazyka (NLP). Různé modely používají různé tokenizéry. Platné hodnoty zahrnují cl100k_base (výchozí) používané GPT-4. Další platné hodnoty jsou r50k_base, p50k_base a p50k_edit. Tato dovednost implementuje knihovnu tiktoken pomocí SharpToken a Microsoft.ML.Tokenizers, ale nepodporuje všechny enkodéry. Například momentálně neexistuje podpora o200k_base kódování používané GPT-4o.

allowedSpecialTokens definuje sbírku speciálních tokenů, které jsou povoleny v rámci procesu tokenizace. Speciální tokeny jsou řetězce, které chcete zpracovat jedinečně, abyste zajistili, že se během tokenizace nerozdělí. Například ["[START"], "[END]"]. Pokud knihovna tiktoken neprovádí tokenizaci podle očekávání, ať už kvůli omezením specifickým jazykovým jazykům nebo jiným neočekávaným chováním, doporučuje se použít místo toho rozdělení textu.

Vstupy dovedností

Název parametru Description
text Text rozdělit na podřetězec.
languageCode (Volitelné) Jazykový kód pro dokument. Pokud neznáte jazyk textových vstupů (například pokud používáte LanguageDetectionSkill k detekci jazyka), můžete tento parametr vynechat. Pokud nastavíte languageCode jazyk, který není v seznamu podporovaných pro , defaultLanguageCodezobrazí se varování a text není rozdělen.

Výstupy schopností

Název parametru Description
textItems Výstup je pole podřetězců, které byly extrahovány. textItems je výchozí název výstupu.

targetName je volitelné, ale pokud máte více dovedností Text Split, ujistěte se, že je nastavíte targetName tak, abyste nepřepsali data z první dovednosti druhou. Pokud targetName je nastaveno, použijte ho v mapování výstupních polí nebo v následných dovednostech, které spotřebovávají výstup dovednosti, například dovednost embedding.
offsets Výstup je pole offsetů, které byly extrahovány. Hodnota v každém indexu je objekt obsahující offset textové položky na tomto indexu ve třech kódováních: UTF-8, UTF-16 a CodePoint. offsets je výchozí název výstupu.

targetName je volitelné, ale pokud máte více dovedností Text Split, ujistěte se, že je nastavíte targetName tak, abyste nepřepsali data z první dovednosti druhou. Pokud targetName je nastaveno, použijte ho v mapování výstupních polí nebo v následných dovednostech, které spotřebovávají výstup dovednosti, například dovednost embedding.
lengths Výstup je pole částek, které byly extrahovány. Hodnota v každém indexu je objekt obsahující offset textové položky na tomto indexu ve třech kódováních: UTF-8, UTF-16 a CodePoint. lengths je výchozí název výstupu.

targetName je volitelné, ale pokud máte více dovedností Text Split, ujistěte se, že je nastavíte targetName tak, abyste nepřepsali data z první dovednosti druhou. Pokud targetName je nastaveno, použijte ho v mapování výstupních polí nebo v následných dovednostech, které spotřebovávají výstup dovednosti, například dovednost embedding.
ordinalPositions Výstup je pole ordinálních pozic odpovídajících pozici textové položky ve zdrojovém textu. ordinalPositions je výchozí název výstupu.

targetName je volitelné, ale pokud máte více dovedností Text Split, ujistěte se, že je nastavíte targetName tak, abyste nepřepsali data z první dovednosti druhou. Pokud targetName je nastaveno, použijte ho v mapování výstupních polí nebo v následných dovednostech, které spotřebovávají výstup dovednosti, například dovednost embedding.

Ukázková definice

{
    "name": "SplitSkill", 
    "@odata.type": "#Microsoft.Skills.Text.SplitSkill", 
    "description": "A skill that splits text into chunks", 
    "context": "/document", 
    "defaultLanguageCode": "en", 
    "textSplitMode": "pages", 
    "unit": "azureOpenAITokens", 
    "azureOpenAITokenizerParameters":{ 
        "encoderModelName":"cl100k_base", 
        "allowedSpecialTokens": [ 
            "[START]", 
            "[END]" 
        ] 
    },
    "maximumPageLength": 512,
    "inputs": [
        {
            "name": "text",
            "source": "/document/text"
        },
        {
            "name": "languageCode",
            "source": "/document/language"
        }
    ],
    "outputs": [
        {
            "name": "textItems",
            "targetName": "pages"
        }
    ]
}

Ukázkový vstup

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "This is the loan application for Joe Romero, a Microsoft employee who was born in Chile and who then moved to Australia...",
                "languageCode": "en"
            }
        },
        {
            "recordId": "2",
            "data": {
                "text": "This is the second document, which will be broken into several pages...",
                "languageCode": "en"
            }
        }
    ]
}

Ukázkový výstup

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "pages": [
                    "This is the loan...",
                    "In the next section, we continue..."
                ],
                "offsets": [
                    {
                        "utf8": 0,
                        "utf16": 0,
                        "codePoint": 0
                    },
                    {
                        "utf8": 146,
                        "utf16": 146,
                        "codePoint": 146
                    }
                ],
                "lengths": [
                    {
                        "utf8": 146,
                        "utf16": 146,
                        "codePoint": 146
                    },
                    {
                        "utf8": 211,
                        "utf16": 211,
                        "codePoint": 211
                    }
                ],
                "ordinalPositions" : [
                    1,
                    2
                ]
            }
        },
        {
            "recordId": "2",
            "data": {
                "pages": [
                    "This is the second document...",
                    "In the next section of the second doc..."
                ],
                "offsets": [
                    {
                        "utf8": 0,
                        "utf16": 0,
                        "codePoint": 0
                    },
                    {
                        "utf8": 115,
                        "utf16": 115,
                        "codePoint": 115
                    }
                ],
                "lengths": [
                    {
                        "utf8": 115,
                        "utf16": 115,
                        "codePoint": 115
                    },
                    {
                        "utf8": 209,
                        "utf16": 209,
                        "codePoint": 209
                    }
                ],
                 "ordinalPositions" : [
                    1,
                    2
                ]
            }
        }
    ]
}

Poznámka:

Tento příklad nastavuje textItems přes pages .targetName Protože targetName je nastaveno, je to hodnota, pages kterou byste měli použít k výběru výstupu ze schopnosti Text Split. Použití /document/pages/* v downstream dovednostech, mapování indexerových výstupních polí, projekce znalostního úložiště a indexové projekce. Tento příklad nenastavuje offsets, lengths, ani ordinalPosition žádné jiné jméno, takže hodnota, kterou byste měli použít v downstream dovednostech, zůstane beze změny. offsets a lengths jsou komplexní typy, nikoli primitiva, protože obsahují hodnoty pro více typů kódování. Hodnota, kterou byste měli použít k získání konkrétního kódování, například UTF-8, by vypadala takto: /document/offsets/*/utf8.

Příklad pro chunking a vektorizaci

Tento příklad je pro integrovanou vektorizaci.

  • pageOverlapLength: Překrývající se text je užitečný v scénářích datového rozdělení , protože zachovává kontinuitu mezi bloky generovanými ze stejného dokumentu.

  • maximumPagesToTake: Limity při vstupu stránek jsou užitečné ve scénářích vektorizace , protože pomáhají zůstat pod maximálními vstupními limity embedding modelů, které vektorizaci poskytují.

Ukázková definice

Tato definice přidává pageOverlapLength o 100 znaků a maximumPagesToTake o jedno.

Za předpokladu, že je maximumPageLength 5 000 znaků (výchozí), pak "maximumPagesToTake": 1 zpracují prvních 5 000 znaků každého zdrojového dokumentu.

Tento příklad nastavuje textItems přes myPages .targetName Protože targetName je nastaveno, je to hodnota, myPages kterou byste měli použít k výběru výstupu ze schopnosti Text Split. Použití /document/myPages/* v downstream dovednostech, mapování indexerových výstupních polí, projekce znalostního úložiště a indexové projekce.

{
    "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
    "textSplitMode" : "pages", 
    "maximumPageLength": 1000,
    "pageOverlapLength": 100,
    "maximumPagesToTake": 1,
    "defaultLanguageCode": "en",
    "inputs": [
        {
            "name": "text",
            "source": "/document/content"
        },
        {
            "name": "languageCode",
            "source": "/document/language"
        }
    ],
    "outputs": [
        {
            "name": "textItems",
            "targetName": "myPages"
        }
    ]
}

Ukázkový vstup (stejný jako předchozí příklad)

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "This is the loan application for Joe Romero, a Microsoft employee who was born in Chile and who then moved to Australia...",
                "languageCode": "en"
            }
        },
        {
            "recordId": "2",
            "data": {
                "text": "This is the second document, which will be broken into several sections...",
                "languageCode": "en"
            }
        }
    ]
}

Výstup vzorků (všimněte si překryvu)

V rámci každého pole "textItems" je text z první položky zkopírován na začátek druhé položky.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "myPages": [
                    "This is the loan...Here is the overlap part",
                    "Here is the overlap part...In the next section, we continue..."
                ]
            }
        },
        {
            "recordId": "2",
            "data": {
                "myPages": [
                    "This is the second document...Here is the overlap part...",
                    "Here is the overlap part...In the next section of the second doc..."
                ]
            }
        }
    ]
}

Chybové případy

Pokud jazyk není podporován, vygeneruje se varování.

Viz také