Tekst Splitsing cognitieve vaardigheid

Important

Sommige parameters zijn in preview onder aanvullende gebruiksvoorwaarden. De preview REST API ondersteunt deze parameters.

De Text Split-vaardigheid splitst tekst op in stukjes tekst. Je kunt aangeven of je de tekst wilt opdelen in zinnen of in pagina's van een bepaalde lengte. Positionele metadata zoals offset en ordinaal positie zijn ook beschikbaar als output. Deze vaardigheid is nuttig als er maximale tekstlengte-eisen zijn in andere vaardigheden die later worden ingevoerd, zoals het embedden van vaardigheden die datablokken doorgeven aan embeddingmodellen op Azure OpenAI en andere modelaanbieders. Voor meer informatie over dit scenario, zie Chunk-documenten voor vectorzoekopdracht.

Verschillende parameters zijn versie-specifiek. De vaardigheidsparametertabel geeft de API-versie aan waarin een parameter is geïntroduceerd, zodat je weet of een versie-upgrade nodig is. Om versiespecifieke functies te gebruiken zoals token chunking in 2024-09-01-preview, kun je het Azure portaal gebruiken, of een REST API-versie targeten, of een Azure SDK wijzigingslog controleren om te zien of deze de functie ondersteunt.

Het Azure-portaal ondersteunt de meeste previewfuncties en kan worden gebruikt om een skillset aan te maken of bij te werken. Voor updates van de Text Split-vaardigheid bewerk je de skillset JSON-definitie om nieuwe previewparameters toe te voegen.

Note

Deze vaardigheid is niet gebonden aan Foundry Tools. Het is niet factureerbaar en heeft geen Foundry Tools sleutelvereiste.

@odata.type

Microsoft.Skills.Text.SplitSkill

Skill Parameters

Parameters zijn hoofdlettergevoelig.

Parameter name Description
textSplitMode Ofof pagessentences. Pagina's hebben een instelbare maximale lengte, maar de vaardigheid probeert te voorkomen dat een zin wordt ingekort zodat de werkelijke lengte kleiner kan zijn. Zinnen zijn een reeks die eindigt bij de eindpunten, zoals een punt, vraagteken of uitroepteken, ervan uitgaande dat de taal een interpunctie heeft.
maximumPageLength Alleen geldt als textSplitMode is gezet op pages. Voor unit als je op stelt characters, verwijst deze parameter naar de maximale paginalengte in tekens gemeten door String.Length. De minimumwaarde is 300, de maximale is 50.000 en de standaardwaarde is 5.000. Het algoritme doet zijn best om de tekst op zinsgrenzen te breken, dus de grootte van elk stuk kan iets kleiner zijn dan maximumPageLength.

Voor unit als je op zet azureOpenAITokens, is de maximale paginalengte de tokenlengtelimiet van het model. Voor tekst-embeddingmodellen is een algemene aanbeveling voor paginalengte 512 tokens.
defaultLanguageCode (optioneel) Een van de volgende taalcodes: 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. Standaard is Engels (en). Een paar dingen om te overwegen:
  • Het geven van een taalcode is handig om te voorkomen dat een woord doormidden wordt gesneden voor niet-witspatietalen zoals Chinees, Japans en Koreaans.
  • Als je de taal niet van tevoren kent (bijvoorbeeld als je de LanguageDetectionSkill gebruikt om een taal te detecteren), raden we de en standaard aan.
pageOverlapLength Alleen geldt als textSplitMode is gezet op pages. Elke pagina begint met dit aantal tekens of tokens vanaf het einde van de vorige pagina. Als deze parameter op 0 staat, is er geen overlappende tekst op opeenvolgende pagina's. Dit voorbeeld bevat de parameter.
maximumPagesToTake Alleen geldt als textSplitMode is gezet op pages. Aantal pagina's om terug te komen. De standaard is 0, wat betekent dat alle pagina's teruggestuurd moeten worden. Je moet deze waarde instellen als slechts een subset van pagina's nodig is. Dit voorbeeld bevat de parameter.
unit Alleen geldt als textSplitMode is gezet op pages. Specificeert of er met (standaard) of azureOpenAITokensmet chunk moet worden gemaakt characters . Het instellen van de eenheid beïnvloedt maximumPageLength en pageOverlapLength.
azureOpenAITokenizerParameters Een object dat extra parameters voor de azureOpenAITokens eenheid biedt.

encoderModelName is een aangewezen tokenizer die wordt gebruikt voor het omzetten van tekst naar tokens, essentieel voor taken in natuurlijke taalverwerking (NLP). Verschillende modellen gebruiken verschillende tokenizers. Geldige waarden zijn onder andere cl100k_base (standaard) die door GPT-4 worden gebruikt. Andere geldige waarden zijn r50k_base, p50k_base en p50k_edit. De vaardigheid implementeert de TikToken-bibliotheek via SharpToken en Microsoft.ML.Tokenizers, maar ondersteunt niet elke encoder. Er is bijvoorbeeld momenteel geen ondersteuning voor o200k_base codering die door GPT-4o wordt gebruikt.

allowedSpecialTokens definieert een verzameling speciale tokens die zijn toegestaan binnen het tokenisatieproces. Speciale tokens zijn strings die je uniek wilt behandelen, zodat ze niet worden gesplitst tijdens de tokenisatie. Bijvoorbeeld ["[START"], "[EINDE]"]. Als de tiktoken bibliotheek tokenisatie niet zoals verwacht uitvoert, hetzij door taalspecifieke beperkingen of andere onverwachte gedragingen, wordt aanbevolen om in plaats daarvan tekstsplitsing te gebruiken.

Skill Inputs

Parameter name Description
text De tekst om op te splitsen in substring.
languageCode (Optioneel) Taalcode voor het document. Als je de taal van de tekstinvoer niet kent (bijvoorbeeld als je LanguageDetectionSkill gebruikt om de taal te detecteren), kun je deze parameter weglaten. Als je een taal instelt languageCode die niet in de ondersteunde lijst staat voor de defaultLanguageCode, wordt er een waarschuwing uitgegeven en wordt de tekst niet gesplitst.

Skill Outputs

Parameter name Description
textItems Output is een array van substrings die zijn extraht. textItems is de standaardnaam van de uitvoer.

targetName is optioneel, maar als je meerdere Text Split-vaardigheden hebt, zorg er dan voor dat je zo instelt targetName dat je de data van de eerste vaardigheid niet overschrijft met de tweede. Als targetName is ingesteld, gebruik het dan in uitvoerveldkaarten of in downstream skills die de vaardigheidsoutput verbruiken, zoals een embedding-vaardigheid.
offsets Output is een array van offsets die zijn geëxtraheerd. De waarde bij elke index is een object dat de offset bevat van het tekstitem op die index in drie coderingen: UTF-8, UTF-16 en CodePoint. offsets is de standaardnaam van de uitvoer.

targetName is optioneel, maar als je meerdere Text Split-vaardigheden hebt, zorg er dan voor dat je zo instelt targetName dat je de data van de eerste vaardigheid niet overschrijft met de tweede. Als targetName is ingesteld, gebruik het dan in uitvoerveldkaarten of in downstream skills die de vaardigheidsoutput verbruiken, zoals een embedding-vaardigheid.
lengths Output is een array van lengtes die zijn geëxtraheerd. De waarde bij elke index is een object dat de offset bevat van het tekstitem op die index in drie coderingen: UTF-8, UTF-16 en CodePoint. lengths is de standaardnaam van de uitvoer.

targetName is optioneel, maar als je meerdere Text Split-vaardigheden hebt, zorg er dan voor dat je zo instelt targetName dat je de data van de eerste vaardigheid niet overschrijft met de tweede. Als targetName is ingesteld, gebruik het dan in uitvoerveldkaarten of in downstream skills die de vaardigheidsoutput verbruiken, zoals een embedding-vaardigheid.
ordinalPositions Output is een array van ordinale posities die overeenkomen met de positie van het tekstitem binnen de brontekst. ordinalPositions is de standaardnaam van de uitvoer.

targetName is optioneel, maar als je meerdere Text Split-vaardigheden hebt, zorg er dan voor dat je zo instelt targetName dat je de data van de eerste vaardigheid niet overschrijft met de tweede. Als targetName is ingesteld, gebruik het dan in uitvoerveldkaarten of in downstream skills die de vaardigheidsoutput verbruiken, zoals een embedding-vaardigheid.

Sample definition

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

Sample input

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

Sample output

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

Note

Dit voorbeeld zet textItems op pages door .targetName Omdat targetName is vastgesteld, pages is de waarde die je moet gebruiken om de output van de Text Split-vaardigheid te selecteren. Gebruik /document/pages/* downstreamvaardigheden, indexer-uitvoerveldmapping, kennisopslagprojecties en indexprojecties. Dit voorbeeld zet offsetsgeen , lengths, of ordinalPosition een andere naam, dus de waarde die je in downstream skills zou moeten gebruiken, blijft ongewijzigd. offsets en lengths zijn complexe types in plaats van primitieven, omdat ze de waarden voor meerdere coderingstypen bevatten. De waarde die je moet gebruiken om een specifieke codering te verkrijgen, bijvoorbeeld UTF-8, ziet er als volgt uit: /document/offsets/*/utf8.

Voorbeeld voor chunking en vectorisatie

Dit voorbeeld is voor geïntegreerde vectorisatie.

  • pageOverlapLength: Overlappende tekst is nuttig in data-chunking-scenario's omdat het continuïteit behoudt tussen chunks die uit hetzelfde document worden gegenereerd.

  • maximumPagesToTake: Limieten op pagina-inname zijn nuttig in vectorisatiescenario's omdat het helpt binnen de maximale inputlimieten van de embeddingmodellen te blijven die de vectorisatie bieden.

Sample definition

Deze definitie voegt 100 tekens en maximumPagesToTake één toe.pageOverlapLength

Als we aannemen dat het maximumPageLength 5.000 tekens is (de standaard), verwerkt dan "maximumPagesToTake": 1 de eerste 5.000 tekens van elk brondocument.

Dit voorbeeld zet textItems op myPages door .targetName Omdat targetName is vastgesteld, myPages is de waarde die je moet gebruiken om de output van de Text Split-vaardigheid te selecteren. Gebruik /document/myPages/* downstreamvaardigheden, indexer-uitvoerveldmapping, kennisopslagprojecties en indexprojecties.

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

Sample-invoer (hetzelfde als in het vorige voorbeeld)

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

Sample-uitvoer (let op de overlap)

Binnen elke "textItems"-array wordt de tekst die volgt van het eerste item gekopieerd naar het begin van het tweede item.

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

Error cases

Als een taal niet wordt ondersteund, wordt er een waarschuwing gegenereerd.

See also