Навык разделения текста

Note

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе IQ Foundry, управляемого уровня знаний, который преобразует корпоративное содержимое в многократно используемые базы знаний с поддержкой разрешений для агентов на портале Foundry Microsoft.

Important

Функции, возможности или свойства, помеченные (предварительная версия), не охватываются соглашением об уровне обслуживания, не рекомендуются для рабочих нагрузок и могут изменяться или ограничиваться до того, как они становятся общедоступными. Условия предварительной версии Поиск с использованием ИИ Azure применяются ко всем функциям предварительной версии, независимо от того, является ли он автономным или частью общедоступной функции.

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

Note

Этот навык не привязан к Foundry Tools. Он не оплачивается и не требует ключа от Foundry Tools.

@odata.type

Microsoft.Skills.Text.SplitSkill

Параметры навыков

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

Имя параметра Описание
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по . Настройка единицы влияет maximumPageLength на и pageOverlapLength.
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 библиотека не выполняет токенизацию как ожидается, из-за ограничений языка или других неожиданных действий, рекомендуется использовать разделение текста.

Входные параметры навыков

Имя параметра Описание
text Текст нужно разделить на подстроки.
languageCode (По желанию) Языковой код для документа. Если вы не знаете язык текстовых ввода (например, если вы используете LanguageDetectionSkill для обнаружения языка), вы можете опустить этот параметр. Если вы установите languageCode язык, который не входит в поддерживаемый список для defaultLanguageCode, появляется предупреждение, и текст не разделяется.

Выходные данные навыка

Имя параметра Описание
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 установлено, используйте его в отображении поля выхода или в последующих навыках, которые потребляют выход навыка, например, в навыке встраивания.

Пример определения

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

Пример ввода

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

Пример полученных результатов

{
    "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/* навыки на последующих этапах, отображение полевых отображений индексаторов, прогнозы для хранилища знаний и индексные проекции. Этот пример не задаёт offsets, lengthsили ordinalPosition какое-либо другое имя, поэтому значение, которое стоит использовать в последующих навыках, останется неизменным. offsets и lengths являются комплексными типами, а не примитивами, поскольку содержат значения для нескольких типов кодирования. Значение, которое следует использовать для получения конкретной кодировки, например UTF-8, будет выглядеть так: /document/offsets/*/utf8.

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

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

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

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

Пример определения

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

Если предположить, maximumPageLength что это 5 000 символов (по умолчанию), то "maximumPagesToTake": 1 обрабатывается первые 5 000 символов каждого исходного документа.

В этом примере задаётся 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..."
                ]
            }
        }
    ]
}

Случаи ошибок

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

См. также