重要
根据补充使用条款,部分参数以公共预览版提供。 预览版 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 | 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)。 注意事项:
 | 
| pageOverlapLength | 仅当将 textSplitMode设置为pages时才适用。 每一页都以此数量的字符或标记开始(从上页结尾倒数算起)。 如果此参数设置为 0,则连续页面上没有重叠文本。 此示例中包括了此参数。 | 
| maximumPagesToTake | 仅当将 textSplitMode设置为pages时才适用。 要返回的页数。 默认值为 0,这意味着将返回所有页面。 如果只需要页的某个子集,则应设置此值。 此示例中包括了此参数。 | 
| unit | 仅当将 textSplitMode设置为pages时才适用。 指定按characters(默认)或azureOpenAITokens进行分块。 设置单元会影响maximumPageLength和pageOverlapLength。 | 
| azureOpenAITokenizerParameters为单元提供额外参数azureOpenAITokens的对象。encoderModelName是一个指定的 tokenizer,用于将文本转换为自然语言处理 (NLP) 任务所必需的标记符号。 不同的模型使用不同的 tokenizer。 有效值包括 GPT-35-Turbo 和 GPT-4 使用的 cl100k_base(默认值)。 其他有效值包括 r50k_base、p50k_base 和 p50k_edit。 该技能通过 SharpToken 和Microsoft.ML.Tokenizers的方式实现了 tiktoken 库,但并不支持所有编码器。 例如,目前不支持 GPT-4o 使用的 o200k_base 编码。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 Azure 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
                ]
            }
        }
    ]
}
注意
此示例将 textItems 设置为 pages 至 targetName。 由于已设置 targetName,因此应使用 pages 值来从文本拆分技能中选择输出。 
              /document/pages/* 用于下游技能、索引器输出字段映射、知识存储投影和索引投影。
此示例未设置offsets或lengthsordinalPosition设置为任何其他名称,因此应在下游技能中使用的值保持不变。
              offsets 并且 lengths 是复杂类型而不是基元,因为它们包含多个编码类型的值。 应用于获取特定编码的值(例如 UTF-8)如下所示: /document/offsets/*/utf8
分块和矢量化示例
此示例适用于集成矢量化。
- pageOverlapLength:重叠文本在数据分块方案中非常有用,因为它可以保留从同一文档生成的块之间的连续性。
- maximumPagesToTake:对页面输入的限制在矢量化场景中非常有用,因为它有助于确保不会超过提供矢量化的嵌入模型的最大输入限制。
示例定义
此定义将 pageOverlapLength 增加了 100 个字符,并且将 maximumPagesToTake 加 1。
假设 maximumPageLength 为 5,000 个字符(默认值),则 "maximumPagesToTake": 1 会处理每个源文档的前 5,000 个字符。
此示例将 textItems 设置为 myPages 至 targetName。 由于已设置 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 Azure 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..."
                ]
            }
        }
    ]
}
错误案例
如果某语言不受支持,则会生成警告。