Когнитивный навык разделения текста

Important

Некоторые параметры доступны в общедоступной предварительной версии в разделе "Дополнительные условия использования". REST API предварительной версии поддерживает эти параметры.

Навык Разделение текста разделяет текст на блоки текста. Можете указать, хотите ли вы разбить текст на предложения или на страницы определенной длины. Позиционные метаданные, такие как смещение и порядковое положение, также доступны в качестве выходных данных. Этот навык полезен, если существуют требования к максимальной длине текста в других навыков нижестоящего уровня, например внедрение навыков, которые передают блоки данных для внедрения моделей в Azure OpenAI и других поставщиков моделей. Дополнительные сведения об этом сценарии см. в документах Chunk для поиска векторов.

Несколько параметров зависят от версии. Таблица параметров навыков отмечает версию API, в которой был введен параметр, чтобы узнать, требуется ли обновление версии. Чтобы использовать определенные версии функции, такие как фрагментирование маркеров в версии 2024-09-01-preview, можно использовать портал Azure или использовать версию REST API или проверить журнал изменений пакета SDK Azure, чтобы узнать, поддерживает ли она эту функцию.

Портал Azure поддерживает большинство функций предварительной версии и может использоваться для создания или обновления набора навыков. Чтобы обновить навык разделения текста, измените определение набора навыков JSON, чтобы добавить новые параметры предварительной версии.

Note

Этот навык не привязан к средствам Foundry. Это не является выставлением счетов и не имеет ключевого требования к средствам Foundry.

@odata.type

Microsoft.Skills.Text.SplitSkill

Skill Parameters

Параметры чувствительны к регистру.

Parameter name Description
textSplitMode pages или sentences. Страницы имеют настраиваемую максимальную длину, но навык пытается избежать усечения предложения, поэтому фактическая длина может быть меньше. Предложения — это строка, завершающаяся при препинаниях, таких как период, вопросительный знак или восклицательный знак, если язык имеет знак препинания.
maximumPageLength Применяется, только если для параметра textSplitMode задано значение pages. Для unit параметра задано charactersзначение , этот параметр ссылается на максимальную длину страницы в символах, измеряемых по String.Length. Минимальное значение равно 300, максимальное — 50000, а значение по умолчанию — 5000. Алгоритм делает все возможное, чтобы разорвать текст по границам предложения, поэтому размер каждого блока может быть немного меньше maximumPageLength.

Для unit заданного значения azureOpenAITokensмаксимальная длина страницы — это ограничение длины маркера модели. Для моделей внедрения текста общая рекомендация для длины страницы составляет 512 токенов.
defaultLanguageCode (Дополнительно.) Один из следующих кодов языка: 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. По умолчанию — английский (en). Несколько вещей, которые следует рассмотреть:
  • Предоставление языкового кода полезно, чтобы избежать сокращения слова наполовину для языков, нехитовых пространств, таких как китайский, японский и корейский.
  • Если вы заранее не знаете язык (например, если вы используете LanguageDetectionSkill для обнаружения языка), рекомендуется en использовать значение по умолчанию.
pageOverlapLength Применяется, только если для параметра textSplitMode задано значение pages. Каждая страница начинается с этого числа символов или маркеров с конца предыдущей страницы. Если для этого параметра задано значение 0, на последующих страницах нет перекрывающегося текста. Этот пример включает параметр.
maximumPagesToTake Применяется, только если для параметра textSplitMode задано значение pages. Количество возвращаемых страниц. Значение по умолчанию — 0, то есть возвращает все страницы. Это значение следует задать, если требуется только подмножество страниц. Этот пример включает параметр.
unit Применяется, только если для параметра textSplitMode задано значение pages. Указывает, следует ли фрагментировать по characters умолчанию или azureOpenAITokens. Настройка единицы влияет и maximumPageLengthpageOverlapLength.
azureOpenAITokenizerParameters Объект, предоставляющий дополнительные параметры для azureOpenAITokens единицы.

encoderModelName — это назначенный токенизатор, используемый для преобразования текста в маркеры, необходимый для задач обработки естественного языка (NLP). Разные модели используют разные токенизаторы. Допустимые значения включают cl100k_base (по умолчанию), используемые GPT-4. Другие допустимые значения: r50k_base, p50k_base и p50k_edit. Навык реализует библиотеку tiktoken с помощью SharpToken и Microsoft.ML.Tokenizers не поддерживает каждый кодировщик. Например, в настоящее время нет поддержки кодировки o200k_base, используемой GPT-4o.

allowedSpecialTokens определяет коллекцию специальных маркеров, разрешенных в процессе токенизации. Специальные маркеры — это строка, которая требуется обработать уникально, гарантируя, что они не разделяются во время токенизации. Например, ["[START"], "[END]". tiktoken Если библиотека не выполняет маркеризацию должным образом, либо из-за ограничений для конкретного языка или других непредвиденных действий, рекомендуется использовать разделение текста.

Skill Inputs

Parameter name Description
text Текст, который будет разбит на подстроки.
languageCode (Необязательно.) Код языка документа. Если вы не знаете язык текстовых входных данных (например, если вы используете LanguageDetectionSkill для обнаружения языка), этот параметр можно опустить. languageCode Если для языка нет в поддерживаемом спискеdefaultLanguageCode, создается предупреждение, и текст не разбивается.

Skill Outputs

Parameter name Description
textItems Выходные данные — это массив подстроок, извлеченных. textItems — это имя выходных данных по умолчанию.

targetName является необязательным, но если у вас несколько навыков разделения текста, убедитесь targetName , что вы не перезаписываете данные из первого навыка вторым. Если targetName задано, используйте его в сопоставлениях полей вывода или в подчиненных навыках, которые используют выходные данные навыка, например навык внедрения.
offsets Выходные данные — это массив смещений, извлеченных. Значение каждого индекса — это объект, содержащий смещение текстового элемента по этому индексу в трех кодировках: UTF-8, UTF-16 и CodePoint. offsets — это имя выходных данных по умолчанию.

targetName является необязательным, но если у вас несколько навыков разделения текста, убедитесь targetName , что вы не перезаписываете данные из первого навыка вторым. Если targetName задано, используйте его в сопоставлениях полей вывода или в подчиненных навыках, которые используют выходные данные навыка, например навык внедрения.
lengths Выходные данные — это массив длин, извлеченных. Значение каждого индекса — это объект, содержащий смещение текстового элемента по этому индексу в трех кодировках: UTF-8, UTF-16 и CodePoint. lengths — это имя выходных данных по умолчанию.

targetName является необязательным, но если у вас несколько навыков разделения текста, убедитесь targetName , что вы не перезаписываете данные из первого навыка вторым. Если targetName задано, используйте его в сопоставлениях полей вывода или в подчиненных навыках, которые используют выходные данные навыка, например навык внедрения.
ordinalPositions Выходные данные — это массив порядковых позиций, соответствующих положению текстового элемента в исходном тексте. ordinalPositions — это имя выходных данных по умолчанию.

targetName является необязательным, но если у вас несколько навыков разделения текста, убедитесь targetName , что вы не перезаписываете данные из первого навыка вторым. Если targetName задано, используйте его в сопоставлениях полей вывода или в подчиненных навыках, которые используют выходные данные навыка, например навык внедрения.

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

В этом примере задано textItems значение .pagestargetName>. Так как targetName задано, это значение, pages которое следует использовать для выбора выходных данных из навыка разделения текста. Используйте /document/pages/* подчиненные навыки, сопоставления полей выходных данных индексатора, проекции хранилища знаний и проекции индексов. В этом примере не задано offsetslengthsили какое-либо ordinalPosition другое имя, поэтому значение, которое следует использовать в подчиненных навыках, будет неизменным. offsets и lengths являются сложными типами, а не примитивами, так как они содержат значения для нескольких типов кодирования. Значение, используемое для получения определенной кодировки, например UTF-8, будет выглядеть следующим образом: /document/offsets/*/utf8

Пример для фрагментирования и векторизации

Этот пример предназначен для интегрированной векторизации.

  • pageOverlapLength: перекрывающийся текст полезен в сценариях блокирования данных, так как он сохраняет непрерывность между блоками, созданными из одного документа.

  • maximumPagesToTake: ограничения на потребление страниц полезны в сценариях векторизации , так как это помогает оставаться под максимальными ограничениями входных данных моделей внедрения, которые обеспечивают векторизацию.

Sample definition

Это определение добавляет pageOverlapLength 100 символов и maximumPagesToTake одного.

Предположим, maximumPageLength что значение равно 5000 символов (по умолчанию), а затем "maximumPagesToTake": 1 обрабатывает первые 5000 символов каждого исходного документа.

В этом примере задано textItems значение .myPagestargetName>. Так как targetName задано, это значение, myPages которое следует использовать для выбора выходных данных из навыка разделения текста. Используйте /document/myPages/* подчиненные навыки, сопоставления полей выходных данных индексатора, проекции хранилища знаний и проекции индексов.

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

Пример входных данных (аналогичный предыдущему примеру)

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

Пример выходных данных (обратите внимание на перекрытие)

В каждом массиве textItems текст из первого элемента копируется в начало второго элемента.

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

Если язык не поддерживается, создается предупреждение.

See also