你当前正在访问 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/a0>,此参数引用以字符为单位的最大页长度(以字符为单位)。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)任务至关重要。 不同的模型使用不同的标记器。 有效值包括 GPT-35-Turbo 和 GPT-4 使用的cl100k_base(默认值)。 其他有效值是r50k_base、p50k_base和p50k_edit。 该技能通过 SharpToken 实现 tiktoken 库, Microsoft.ML.Tokenizers 但不支持每个编码器。 例如,目前不支持 GPT-4o 使用的o200k_base编码。

allowedSpecialTokens 定义令牌化过程中允许的特殊令牌的集合。 特殊令牌是你想要唯一对待的字符串,确保它们不会在令牌化期间拆分。 例如 [“[START”], “[END]”]。

技能输入

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

技能输出

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

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": {
                "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/* 用于下游技能、索引器输出字段映射知识存储投影索引投影

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

错误案例

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

另请参阅