文字分割認知技能
文字分割技能會將文字分割成文字區塊。 您可以指定您要將文字分成句子或特定長度的頁面。 如果其他技能下游有文字長度需求上限,例如內嵌技能,可將數據區塊傳遞至 Azure OpenAI 和其他模型提供者上的內嵌模型,則此技能很有用。 如需此案例的詳細資訊,請參閱 向量搜尋的區塊檔。
有數個參數是版本特定的。 skills 參數數據表會指出引進參數的 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 |
所有版本 | 只有在 設定為 pages 時才textSplitMode 適用。 若 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 |
2024-07-01 | 只有在 設定為 pages 時才textSplitMode 適用。 每個頁面的開頭都是上一頁結尾的這個字元數或令牌。 如果此參數設定為 0,則後續頁面上沒有重疊的文字。 此 範例 包含 參數。 |
maximumPagesToTake |
2024-07-01 | 只有在 設定為 pages 時才textSplitMode 適用。 要傳回的頁數。 默認值為 0,表示傳回所有頁面。 如果只需要分頁子集,您應該設定此值。 此 範例 包含 參數。 |
unit |
2024-09-01-preview | New。 只有在 設定為 pages 時才textSplitMode 適用。 指定是否要依 characters (預設) 或 azureOpenAITokens 區塊化。 設定單位會影響 maximumPageLength 和 pageOverlapLength 。 |
azureOpenAITokenizerParameters |
2024-09-01-preview | New。 物件,提供單位的額外參數 azureOpenAITokens 。 encoderModelName 是用來將文字轉換成標記的指定標記化工具,對於自然語言處理 (NLP) 工作而言至關重要。 不同的模型會使用不同的 Tokenizer。 有效值包括 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
為 到 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 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..."
]
}
}
]
}
錯誤案例
如果不支持語言,就會產生警告。