Udostępnij przez


Umiejętność poznawcza podziału tekstu

Ważne

Niektóre parametry są dostępne w publicznej wersji zapoznawczej w obszarze Dodatkowe warunki użytkowania. Interfejs API REST w wersji zapoznawczej obsługuje te parametry.

Umiejętność Dzielenie tekstu dzieli tekst na fragmenty tekstu. Możesz określić, czy chcesz podzielić tekst na zdania, czy na strony o określonej długości. Metadane pozycyjne, takie jak przesunięcie i położenie porządkowe, są również dostępne jako dane wyjściowe. Ta umiejętność jest przydatna, jeśli istnieją maksymalne wymagania dotyczące długości tekstu w innych umiejętnościach podrzędnych, takich jak osadzanie umiejętności, które przekazują fragmenty danych do osadzania modeli w usłudze Azure OpenAI i innych dostawców modeli. Aby uzyskać więcej informacji na temat tego scenariusza, zobacz Dokumenty fragmentów dotyczące wyszukiwania wektorów.

Kilka parametrów jest specyficznych dla wersji. Tabela parametrów umiejętności zawiera informacje o wersji interfejsu API, w której wprowadzono parametr, aby wiedzieć, czy wymagane jest uaktualnienie wersji. Aby użyć funkcji specyficznych dla wersji, takich jak fragmentowanie tokenów w wersji 2024-09-01-preview, możesz użyć witryny Azure Portal lub użyć wersji interfejsu API REST lub sprawdzić dziennik zmian zestawu Azure SDK, aby sprawdzić, czy obsługuje tę funkcję.

Witryna Azure Portal obsługuje większość funkcji w wersji zapoznawczej i może służyć do tworzenia lub aktualizowania zestawu umiejętności. Aby uzyskać aktualizacje umiejętności dzielenia tekstu, edytuj definicję zestawu umiejętności JSON, aby dodać nowe parametry wersji zapoznawczej.

Uwaga

Ta umiejętność nie jest powiązana z narzędziami Foundry Tools. Nie jest rozliczana i nie ma kluczowego wymagania narzędzi Foundry Tools.

@odata.type

Microsoft.Skills.Text.SplitSkill

Parametry umiejętności

W parametrach jest rozróżniana wielkość liter.

Nazwa parametru opis
textSplitMode pages lub sentences. Strony mają konfigurowalną maksymalną długość, ale umiejętności próbują uniknąć obcinania zdania, dzięki czemu rzeczywista długość może być mniejsza. Zdania to ciąg, który kończy się znakiem interpunkcyjnym kończącym zdanie, takim jak kropka, znak zapytania lub wykrzyknik, przy założeniu, że język ma znak interpunkcyjny kończący zdanie.
maximumPageLength Ma zastosowanie tylko wtedy, gdy textSplitMode ustawiono wartość pages. W przypadku unit ustawienia na characterswartość ten parametr odnosi się do maksymalnej długości strony w znakach mierzonych przez String.Lengthwartość . Wartość minimalna to 300, wartość maksymalna to 50000, a wartość domyślna to 5000. Algorytm robi wszystko, co w jego mocy, aby przerwać tekst w granicach zdań, więc rozmiar każdego fragmentu może być nieco mniejszy niż maximumPageLength.

Dla unit ustawienia parametru azureOpenAITokensmaksymalna długość strony to limit długości tokenu modelu. W przypadku modeli osadzania tekstu ogólne zalecenie dotyczące długości strony to 512 tokenów.
defaultLanguageCode (opcjonalnie) Jeden z następujących kodów języków: 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. Wartość domyślna to angielski (en). Kilka kwestii, które należy wziąć pod uwagę:
  • Zapewnienie kodu językowego jest przydatne, aby uniknąć wycinania wyrazu na pół w przypadku języków innych niżwhitespace, takich jak chiński, japoński i koreański.
  • Jeśli nie znasz wcześniej języka (na przykład jeśli używasz języka LanguageDetectionSkill do wykrywania języka), zalecamy en ustawienie domyślne.
pageOverlapLength Ma zastosowanie tylko wtedy, gdy textSplitMode ustawiono wartość pages. Każda strona rozpoczyna się od tej liczby znaków lub tokenów od końca poprzedniej strony. Jeśli ten parametr ma wartość 0, nie ma nakładających się tekstu na kolejnych stronach. Ten przykład zawiera parametr .
maximumPagesToTake Ma zastosowanie tylko wtedy, gdy textSplitMode ustawiono wartość pages. Liczba stron do zwrócenia. Wartość domyślna to 0, co oznacza zwrócenie wszystkich stron. Tę wartość należy ustawić, jeśli potrzebny jest tylko podzbiór stron. Ten przykład zawiera parametr .
unit Ma zastosowanie tylko wtedy, gdy textSplitMode ustawiono wartość pages. Określa, czy domyślnie mają być fragmentowane characters , czy azureOpenAITokens. Ustawienie jednostki ma wpływ na maximumPageLength element i pageOverlapLength.
azureOpenAITokenizerParameters Obiekt dostarczający dodatkowe parametry dla azureOpenAITokens jednostki.

encoderModelName jest wyznaczonym tokenizatorem używanym do konwertowania tekstu na tokeny, niezbędne dla zadań przetwarzania języka naturalnego (NLP). Różne modele używają różnych tokenizatorów. Prawidłowe wartości obejmują cl100k_base (domyślnie) używane przez GPT-4. Inne prawidłowe wartości to r50k_base, p50k_base i p50k_edit. Umiejętność implementuje bibliotekę tiktoken za pomocą narzędzia SharpToken i Microsoft.ML.Tokenizers nie obsługuje każdego kodera. Na przykład obecnie nie ma obsługi kodowania o200k_base używanego przez GPT-4o.

allowedSpecialTokens definiuje kolekcję specjalnych tokenów, które są dozwolone w procesie tokenizacji. Tokeny specjalne to ciągi, które chcesz traktować unikatowo, co gwarantuje, że nie są one dzielone podczas tokenizacji. Na przykład ["[START"], "[END]"]. tiktoken Jeśli biblioteka nie wykonuje tokenizacji zgodnie z oczekiwaniami, ze względu na ograniczenia specyficzne dla języka lub inne nieoczekiwane zachowania, zaleca się użycie dzielenia tekstu.

Dane wejściowe umiejętności

Nazwa parametru opis
text Tekst, który ma być podzielony na podciąg.
languageCode (Opcjonalnie) Kod języka dokumentu. Jeśli nie znasz języka wprowadzania tekstu (na przykład jeśli używasz języka LanguageDetectionSkill do wykrywania języka), możesz pominąć ten parametr. Jeśli ustawiono languageCode język nie znajduje się na liście obsługiwanych dla defaultLanguageCodeelementu , zostanie wyemitowane ostrzeżenie i tekst nie zostanie podzielony.

Dane wyjściowe umiejętności

Nazwa parametru opis
textItems Dane wyjściowe to tablica wyodrębnionych podciągów. textItems to domyślna nazwa danych wyjściowych.

targetName Jest opcjonalne, ale jeśli masz wiele umiejętności dzielenia tekstu, upewnij się, że nie targetName zastąpisz danych z pierwszej umiejętności z drugiej. Jeśli targetName jest ustawiona, użyj jej w mapowaniach pól wyjściowych lub w umiejętności podrzędnych, które używają danych wyjściowych umiejętności, takich jak umiejętność osadzania.
offsets Dane wyjściowe to tablica przesunięć, które zostały wyodrębnione. Wartość w każdym indeksie jest obiektem zawierającym przesunięcie elementu tekstowego w tym indeksie w trzech kodowaniach: UTF-8, UTF-16 i CodePoint. offsets to domyślna nazwa danych wyjściowych.

targetName Jest opcjonalne, ale jeśli masz wiele umiejętności dzielenia tekstu, upewnij się, że nie targetName zastąpisz danych z pierwszej umiejętności z drugiej. Jeśli targetName jest ustawiona, użyj jej w mapowaniach pól wyjściowych lub w umiejętności podrzędnych, które używają danych wyjściowych umiejętności, takich jak umiejętność osadzania.
lengths Dane wyjściowe to tablica długości, które zostały wyodrębnione. Wartość w każdym indeksie jest obiektem zawierającym przesunięcie elementu tekstowego w tym indeksie w trzech kodowaniach: UTF-8, UTF-16 i CodePoint. lengths to domyślna nazwa danych wyjściowych.

targetName Jest opcjonalne, ale jeśli masz wiele umiejętności dzielenia tekstu, upewnij się, że nie targetName zastąpisz danych z pierwszej umiejętności z drugiej. Jeśli targetName jest ustawiona, użyj jej w mapowaniach pól wyjściowych lub w umiejętności podrzędnych, które używają danych wyjściowych umiejętności, takich jak umiejętność osadzania.
ordinalPositions Dane wyjściowe to tablica pozycji porządkowych odpowiadających pozycji elementu tekstowego w tekście źródłowym. ordinalPositions to domyślna nazwa danych wyjściowych.

targetName Jest opcjonalne, ale jeśli masz wiele umiejętności dzielenia tekstu, upewnij się, że nie targetName zastąpisz danych z pierwszej umiejętności z drugiej. Jeśli targetName jest ustawiona, użyj jej w mapowaniach pól wyjściowych lub w umiejętności podrzędnych, które używają danych wyjściowych umiejętności, takich jak umiejętność osadzania.

Przykładowa definicja

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

Przykładowe dane wejściowe

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

Przykładowe dane wyjściowe

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

Uwaga

W tym przykładzie parametr jest ustawiany textItems na pages wartość za pośrednictwem targetName. Ponieważ targetName jest ustawiona, jest wartością, pages której należy użyć do wybrania danych wyjściowych z umiejętności Dzielenie tekstu. Korzystaj z /document/pages/* umiejętności podrzędnych, mapowań pól wyjściowych indeksatora, projekcji magazynu wiedzy i projekcji indeksów. W tym przykładzie nie ustawiono offsetswartości , lengthsani ordinalPosition żadnej innej nazwy, więc wartość, której należy użyć w umiejętnościach podrzędnych, będzie niezmieniona. offsets są typami lengths złożonymi, a nie typami pierwotnymi, ponieważ zawierają one wartości dla wielu typów kodowania. Wartość, której należy użyć do uzyskania określonego kodowania, na przykład UTF-8, będzie wyglądać następująco: /document/offsets/*/utf8.

Przykład fragmentowania i wektoryzacji

Ten przykład dotyczy wektoryzacji zintegrowanej.

  • pageOverlapLength: Nakładający się tekst jest przydatny w scenariuszach fragmentowania danych, ponieważ zachowuje ciągłość między fragmentami wygenerowanymi z tego samego dokumentu.

  • maximumPagesToTake: Limity wprowadzania stron są przydatne w scenariuszach wektoryzacji , ponieważ pomaga utrzymać się poniżej maksymalnych limitów wejściowych modeli osadzania zapewniających wektoryzację.

Przykładowa definicja

Ta definicja dodaje pageOverlapLength 100 znaków i maximumPagesToTake jeden.

Zakładając, że wartość to maximumPageLength 5000 znaków (wartość domyślna), a następnie "maximumPagesToTake": 1 przetwarza pierwsze 5000 znaków każdego dokumentu źródłowego.

W tym przykładzie parametr jest ustawiany textItems na myPages wartość za pośrednictwem targetName. Ponieważ targetName jest ustawiona, jest wartością, myPages której należy użyć do wybrania danych wyjściowych z umiejętności Dzielenie tekstu. Korzystaj z /document/myPages/* umiejętności podrzędnych, mapowań pól wyjściowych indeksatora, projekcji magazynu wiedzy i projekcji indeksów.

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

Przykładowe dane wejściowe (takie same jak w poprzednim przykładzie)

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

Przykładowe dane wyjściowe (zwróć uwagę na nakładanie się)

W każdej tablicy "textItems" tekst końcowy z pierwszego elementu jest kopiowany na początek drugiego elementu.

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

Przypadki błędów

Jeśli język nie jest obsługiwany, zostanie wygenerowane ostrzeżenie.

Zobacz też