テキスト分割スキル

Azure AI 検索は、Azure ポータルREST APIおよびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。

Important

一部のパラメータは 補足利用規約のプレビュー段階にあります。 プレビュー版 のREST API はこれらのパラメータをサポートしています。

テキストスプリットスキルはテキストをテキストの塊に分割します。 テキストを文に分割するか、特定の長さのページに分けたいかを指定できます。 オフセットや順序位置などの位置メタデータも出力として利用可能です。 このスキルは、Azure OpenAIや他のモデルプロバイダーでデータチャンクを埋め込みモデルに渡す埋め込みスキルなど、下流のスキルで最大テキスト長の要件がある場合に役立ちます。 このシナリオの詳細については、 ベクトルサーチに関するチャンク文書を参照してください。

いくつかのパラメータはバージョンごとに異なります。 スキルパラメータ表はパラメータが導入されたAPIバージョンを示しており、 バージョンアップグレード が必要かどうかを判断できます。 2024-09-01-previewトークンチャンキングなどのバージョン固有の機能を使用するには、Azureポータルを使うか、REST APIバージョンをターゲットにするか、Azure SDKの変更ログで対応しているかを確認できます。

Azureポータルはほとんどのプレビュー機能をサポートし、スキルセットの作成や更新に利用できます。 Text Splitスキルのアップデートについては、スキルセットのJSON定義を編集して新しいプレビューパラメータを追加してください。

このスキルはファウンドリーツールに縛られていません。 請求不要で、Foundry Toolsのキー要件もありません。

@odata.type

Microsoft.Skills.Text.SplitSkill

スキルのパラメーター

パラメータは大文字・小文字を区別します。

パラメーター名 説明
textSplitMode pagessentencesのどちらかです。 ページには最大長さを設定できますが、スキルは文を切り詰めないようにするため、実際の長さは短くなることもあります。 文は、文末句読点(ピリオド、疑問符、感嘆符など)で終わる文字列であり、言語に文末句読点がある場合に限ります。
maximumPageLength textSplitModepagesに設定されている場合のみ適用されます。 unitcharactersに設定されている場合、このパラメータはString.Lengthで測定される文字単位の最大ページ長を示します。 最低値は300、最大は50000、デフォルトは5000です。 アルゴリズムは文の境界でテキストを壊すよう最善を尽くすため、各チャンクのサイズは maximumPageLengthより少し小さくなることがあります。

unitazureOpenAITokensに設定されている場合、最大ページ長はモデルのトークン長制限です。 テキスト埋め込みモデルの場合、ページ長の一般的な推奨は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 textSplitModepagesに設定されている場合のみ適用されます。 各ページは、前のページの終わりからこの数の文字またはトークンから始まります。 このパラメータが0に設定されている場合、連続したページに重複するテキストはありません。 この にはパラメータが含まれています。
maximumPagesToTake textSplitModepagesに設定されている場合のみ適用されます。 返却ページ数。 デフォルトは0で、すべてのページを返すことを意味します。 必要なページの一部だけの場合は、この値を設定すべきです。 この にはパラメータが含まれています。
unit textSplitModepagesに設定されている場合のみ適用されます。 charactersでチャンクするか(デフォルト)かazureOpenAITokensでチャンクするかを指定します。 ユニットの設定は、 maximumPageLengthpageOverlapLengthに影響を与えます。
azureOpenAITokenizerParameters azureOpenAITokensユニットに追加パラメータを提供するオブジェクト。

encoderModelName はテキストをトークンに変換するために使われる指定トークナイザーであり、自然言語処理(NLP)タスクに不可欠です。 モデルによって異なるトークナイザーが使われています。 有効な値はGPT-4で使用されているcl100k_base(デフォルト)を含みます。 他の有効な値はr50k_base、p50k_base、p50k_editです。 このスキルはSharpTokenMicrosoft.ML.Tokenizersを通じてtiktokenライブラリを実装していますが、すべてのエンコーダーをサポートしているわけではありません。 例えば、現在GPT-4oで使われているo200k_baseエンコーディングのサポートはありません。

allowedSpecialTokens トークン化プロセス内で許可される特別なトークンの集合を定義します。 特別なトークンは、トークン化時に分割されないように、一意に扱いたい文字列です。 例えば、["START"]、[END]]。 tiktokenライブラリが言語固有の制限やその他の予期せぬ動作によりトークン化を期待通りに行わない場合は、代わりにテキスト分割を使うことが推奨されます。

スキルの入力

パラメーター名 説明
text テキストをサブストリングに分割します。
languageCode (任意)文書の言語コード。 テキスト入力の言語がわからない場合は(例えば LanguageDetectionSkill を使って言語を検出する場合)、このパラメータを省略しても構いません。 languageCodedefaultLanguageCodeのサポートリストにない言語に設定すると、警告が出てテキストが分割されません。

スキルの出力

パラメーター名 説明
textItems 出力は抽出された部分文字列の配列です。 textItems は出力のデフォルト名です。

targetName オプションですが、複数のテキストスプリットスキルを持っている場合は、最初のスキルのデータが2つ目のスキルで上書きされないように targetName 設定してください。 targetName設定されている場合は、出力フィールドのマッピングや、スキル出力を消費する下流スキル(例えば埋め込みスキル)で使用します。
offsets 出力は抽出されたオフセットの配列です。 各インデックスの値は、UTF-8、UTF-16、CodePointの3つのエンコーディングで、そのインデックス上のテキスト項目のオフセットを含むオブジェクトです。 offsets は出力のデフォルト名です。

targetName オプションですが、複数のテキストスプリットスキルを持っている場合は、最初のスキルのデータが2つ目のスキルで上書きされないように targetName 設定してください。 targetName設定されている場合は、出力フィールドのマッピングや、スキル出力を消費する下流スキル(例えば埋め込みスキル)で使用します。
lengths 出力は抽出された長さの配列です。 各インデックスの値は、UTF-8、UTF-16、CodePointの3つのエンコーディングで、そのインデックス上のテキスト項目のオフセットを含むオブジェクトです。 lengths は出力のデフォルト名です。

targetName オプションですが、複数のテキストスプリットスキルを持っている場合は、最初のスキルのデータが2つ目のスキルで上書きされないように targetName 設定してください。 targetName設定されている場合は、出力フィールドのマッピングや、スキル出力を消費する下流スキル(例えば埋め込みスキル)で使用します。
ordinalPositions 出力は、テキスト項目の位置に対応する順序数の配列です。 ordinalPositions は出力のデフォルト名です。

targetName オプションですが、複数のテキストスプリットスキルを持っている場合は、最初のスキルのデータが2つ目のスキルで上書きされないように 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": {
                "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
                ]
            }
        }
    ]
}

この例は textItemspages から targetNameに設定します。 targetName設定されているので、テキストスプリットスキルの出力を選択するにはpages値を使うべきです。 /document/pages/*を下流スキル、インデクサー出力フィールドマッピングナレッジストアプロジェクションインデックスプロジェクションに活用しましょう。 この例では offsetslengthsordinalPosition を他の名前に付けないため、下流スキルで使うべき値は変更されません。 offsets lengthsはプリミティブではなく複素型であり、複数のエンコーディング型の値を含むためです。 例えばUTF-8のような特定のエンコーディングを取得するために使うべき値は、次のようになります: /document/offsets/*/utf8

チャンク化とベクトル化の例

この例は積分ベクトル化のためのものです。

  • pageOverlapLength:重複するテキストは、同じ文書から生成されるチャンク間の連続性を保つため、 データチャンク作成 のシナリオで有用です。

  • maximumPagesToTakeページ数の制限は ベクトル化 のシナリオで有用で、ベクトル化を提供する埋め込みモデルの最大入力限界を抑えるのに役立ちます。

サンプル定義

この定義は100文字の pageOverlapLength と1文字の maximumPagesToTake を加えます。

maximumPageLengthが5,000文字(デフォルト)であると仮定すると、"maximumPagesToTake": 1各ソースドキュメントの最初の5,000文字を処理します。

この例は textItemsmyPages から 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」配列内で、最初の項目の後ろにあるテキストが2番目の項目の冒頭にコピーされます。

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

エラー ケース

言語がサポートされていない場合は警告が表示されます。

こちらも参照ください