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

文本分辨认知技能

Important

部分参数预览见补充 使用条款预览版 REST API 支持这些参数。

文本分割技能将文本拆分成块文字。 你可以指定是想将文本拆分成句子,还是按特定长度的页面。 位置元数据如偏移和序数位置也可作为输出提供。 如果下游技能有最大文本长度要求,比如将数据块传递到Azure OpenAI及其他模型提供者嵌入模型的嵌入技能,这项技能非常有用。 有关该情景的更多信息,请参见 向量搜索的块文件

若干参数是版本特定的。 技能参数表会注明引入参数的API版本,方便你判断是否需要 升级版本 。 要使用2024-09-01-preview中使用token分区等版本特定功能,您可以使用Azure门户,或针对REST API版本,或查看Azure SDK更改日志是否支持该功能。

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

Note

这项技能不绑定在铸造工具上。 它不计费,也没有Foundry Tools的密钥要求。

@odata.type

Microsoft.Skills.Text.SplitSkill

Skill Parameters

参数区分大小写。

Parameter name Description
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 仅当 textSplitMode 被设置为 pages时才适用。 每页以前一页末尾的字符数或标记开头。 如果参数设置为0,连续页面上不会有重叠文本。 这个 例子 包含了参数。
maximumPagesToTake 仅当 textSplitMode 被设置为 pages时才适用。 还原页数。 默认值是0,意味着返回所有页面。 如果只需要部分页面,你应该设置这个值。 这个 例子 包含了参数。
unit 仅当 textSplitMode 被设置为 pages时才适用。 指定是 characters (默认)还是 azureOpenAITokens。 设置单位会影响 maximumPageLengthpageOverlapLength
azureOpenAITokenizerParameters 一个为该单元提供额外参数 azureOpenAITokens 的对象。

encoderModelName 是一种指定的分词器,用于将文本转换为令牌,是自然语言处理(NLP)任务中至关重要的。 不同模型使用不同的分词器。 有效的数值包括GPT-4默认使用的cl100k_base。 其他有效的数值包括r50k_base、p50k_base和p50k_edit。 该技能通过SharpToken实现了tiktoken库,但并不支持所有编码器。 例如,目前GPT-4o所用的o200k_base编码尚未得到支持。

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/*字段映射知识库预测索引预测。 这个例子没有设置 offsets、 , lengths或者 ordinalPosition 其他名称,所以你在下游技能中应该用的值不会改变。 offsetslengths 是复类型而非原语,因为它们包含多个编码类型的值。 你应该用来获得特定编码的值,比如 UTF-8,应该是这样: /document/offsets/*/utf8

分块与矢量化示例

这个例子是针对积分向量化的。

  • pageOverlapLength:重叠文本在 数据分块 场景中非常有用,因为它保持了从同一文档生成的块之间的连续性。

  • maximumPagesToTake:页数限制在矢 量化 场景中非常有用,因为它帮助你控制在提供矢量化的嵌入模型的最大输入限制以下。

Sample definition

该定义加上 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": {
                "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