你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Important
部分参数预览见补充 使用条款。 预览版 REST API 支持这些参数。
文本分割技能将文本拆分成块文字。 你可以指定是想将文本拆分成句子,还是按特定长度的页面。 位置元数据如偏移和序数位置也可作为输出提供。 如果下游技能有最大文本长度要求,比如将数据块传递到Azure OpenAI及其他模型提供者嵌入模型的嵌入技能,这项技能非常有用。 有关该情景的更多信息,请参见 向量搜索的块文件。
若干参数是版本特定的。 技能参数表会注明引入参数的API版本,方便你判断是否需要 升级版本 。 要使用
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)。 有几点需要考虑:
|
pageOverlapLength |
仅当 textSplitMode 被设置为 pages时才适用。 每页以前一页末尾的字符数或标记开头。 如果参数设置为0,连续页面上不会有重叠文本。 这个 例子 包含了参数。 |
maximumPagesToTake |
仅当 textSplitMode 被设置为 pages时才适用。 还原页数。 默认值是0,意味着返回所有页面。 如果只需要部分页面,你应该设置这个值。 这个 例子 包含了参数。 |
unit |
仅当 textSplitMode 被设置为 pages时才适用。 指定是 characters (默认)还是 azureOpenAITokens。 设置单位会影响 maximumPageLength 和 pageOverlapLength。 |
azureOpenAITokenizerParameters 一个为该单元提供额外参数 azureOpenAITokens 的对象。 encoderModelName 是一种指定的分词器,用于将文本转换为令牌,是自然语言处理(NLP)任务中至关重要的。 不同模型使用不同的分词器。 有效的数值包括GPT-4默认使用的cl100k_base。 其他有效的数值包括r50k_base、p50k_base和p50k_edit。 该技能通过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 其他名称,所以你在下游技能中应该用的值不会改变。
offsets 和 lengths 是复类型而非原语,因为它们包含多个编码类型的值。 你应该用来获得特定编码的值,比如 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
如果某语言不被支持,会生成警告。