你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

文本拆分认知技能

重要

根据补充使用条款,部分参数以公共预览版提供。 预览版 REST API 支持这些参数。

文本拆分技能将文本分解为文本区块。 你可以指定是要将文件分解为句子还是特定长度的页面。 如果下游的其他技能(例如将数据区块传递给 Azure OpenAI 和其他模型提供程序的嵌入模型的嵌入技能)有最大文本长度要求,则此技能将非常有用。 有关这种情况的更多信息,请参阅为矢量搜索将大型文档分块

有几个参数是特定于版本的。 技能参数表注明了引入参数的 API 版本,以便了解是否需要版本升级。 要使用特定版本的功能,如 2024-09-01-preview 中的“标记分块”,可以使用 Azure 门户,或以 REST API 版本为目标,或者查看 Azure SDK 更改日志,以确定它是否支持该功能。

Azure 门户支持大多数预览功能,并可用于创建或更新技能组。 要更新文本拆分技能,请编辑技能组 JSON 定义以添加新的预览参数。

备注

此技能不会绑定到 Azure AI 服务。 它是免费的,并且没有 Azure AI 服务密钥要求。

@odata.type

Microsoft.Skills.Text.SplitSkill

技能参数

参数区分大小写。

参数名称 版本 说明
textSplitMode 所有版本 pagessentences。 页面的最大长度是可配置的,但技能会尽量避免截断句子,因此实际长度可能会更小。 句子是一个字符串,在句子结束标点处终止,例如句点、问号或感叹号,系统假设语言具有句子结束标点。
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 2024-07-01 仅当将 textSplitMode 设置为 pages 时才适用。 每一页都以此数量的字符或标记开始(从上页结尾倒数算起)。 如果此参数设置为 0,则连续页面上没有重叠文本。 此示例中包括了此参数。
maximumPagesToTake 2024-07-01 仅当将 textSplitMode 设置为 pages 时才适用。 要返回的页数。 默认值为 0,这意味着将返回所有页面。 如果只需要页的某个子集,则应设置此值。 此示例中包括了此参数。
unit 2024-09-01-preview New。 仅当将 textSplitMode 设置为 pages 时才适用。 指定按 characters(默认)或 azureOpenAITokens 进行分块。 设置单元会影响 maximumPageLengthpageOverlapLength
azureOpenAITokenizerParameters 2024-09-01-preview New。 为 azureOpenAITokens 单元提供额外参数的对象。

encoderModelName 是一个指定的 tokenizer,用于将文本转换为自然语言处理 (NLP) 任务所必需的标记符号。 不同的模型使用不同的 tokenizer。 有效值包括 GPT-35-Turbo 和 GPT-4 使用的 cl100k_base(默认值)。 其他有效值包括 r50k_base、p50k_base 和 p50k_edit。 该技能通过 SharpTokenMicrosoft.ML.Tokenizers 的方式实现了 tiktoken 库,但并不支持所有编码器。 例如,目前不支持 GPT-4o 使用的 o200k_base 编码。

allowedSpecialTokens 定义了一组允许在标记化过程中使用的特殊标记。 特殊标记是要唯一处理的字符串,从而确保它们在标记化过程中不会被拆分。 例如 ["[START"]、"[END]"]。 对于 tiktoken 库未按预期执行标记化的语言,建议改用文本拆分。

技能输入

参数名称 说明
text 要拆分为子字符串的文本。
languageCode (可选)文档的语言代码。 如果不知道文本输入的语言(例如,如果使用 LanguageDetectionSkill 来检测语言),则可以省略此参数。 如果将 languageCode 设置为的语言不在 defaultLanguageCode 的支持列表中,则系统会发出警告,并且不会拆分文本。

技能输出

参数名称 说明
textItems 输出是提取的子字符串数组。 textItems 是输出的默认名称。

targetName 为可选项,但是如果你有多个文本拆分技能,请确保设置 targetName,这样就不会用第二个技能覆盖第一个技能中的数据。 如果设置了 targetName,请将其用于输出字段映射或消耗技能输出的下游技能(如嵌入技能)中。

示例定义

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

示例输入

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

示例输出

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

分块和矢量化示例

此示例适用于集成矢量化。

  • pageOverlapLength:重叠文本在数据分块方案中非常有用,因为它可以保留从同一文档生成的块之间的连续性。

  • maximumPagesToTake:对页面输入的限制在矢量化场景中非常有用,因为它有助于确保不会超过提供矢量化的嵌入模型的最大输入限制。

示例定义

此定义将 pageOverlapLength 增加了 100 个字符,并且将 maximumPagesToTake 加 1。

假设 maximumPageLength 为 5,000 个字符(默认值),则 "maximumPagesToTake": 1 会处理每个源文档的前 5,000 个字符。

此示例将 textItems 设置为 myPagestargetName。 由于已设置 targetName,因此应使用 myPages 值来从文本拆分技能中选择输出。 /document/mypages/* 用于下游技能、索引器输出字段映射知识存储投影索引投影

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

示例输入(与前面的示例相同)

JSON
{
    "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”数组中,第一项的尾随文本将被复制到第二项的开头。

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

错误案例

如果某语言不受支持,则会生成警告。

另请参阅