VECTOR_CHUNKS

ベクトル索引またはハイブリッド・ベクトル索引とともに使用できるベクトル埋込みを生成するために、プレーン・テキストを複数の小さいチャンクに分割するには、VECTOR_CHUNKSを使用します。

chunks_table_arguments::=

split_characters_list::=

custom_split_characters_list

custom_normalization_spec

目的

VECTOR_CHUNKSは、text_document引数として文字値を取り、それらを、オプションのchunking_specで指定されたチャンク化パラメータによって制御されるプロセスを使用して複数のチャンクに分割します。チャンクは、仮想リレーショナル表の行として返されます。そのため、VECTOR_CHUNKSは、副問合せのFROM句においてのみ指定できます。

返された仮想表には次の列があります:

  • データ型NUMBERCHUNK_OFFSETは、ソース・ドキュメント内の各チャンクの位置であり、そのドキュメントの開始位置(位置1)を基準とします。

  • データ型NUMBERCHUNK_LENGTHは、各チャンクの長さです。

  • CHUNK_TEXTは、text_documentから分割されたテキストのセグメントです。

CHUNK_TEXT列のデータ型と、CHUNK_OFFSETCHUNK_LENGTHの値で使用される長さ単位は、次の表で示すように、text_documentのデータ型によって異なります。

表7-13 入力および出力のデータ型の詳細

入力データ型 出力データ型 オフセットと長さの単位

VARCHAR2

VARCHAR2

byte

CHAR

VARCHAR2

byte

CLOB

VARCHAR2

character

NVARCHAR2

NVARCHAR2

byte

NCHAR

NVARCHAR2

byte

NCLOB

NVARCHAR2

character

ノート:

  • データ型の詳細は、SQLリファレンス・マニュアルのデータ型を参照してください。

  • VARCHAR2入力データ型は、MAX_STRING_SIZEパラメータがEXTENDED (32767に制限が拡大されます)に設定されていないかぎり4000バイトに制限されます。

パラメータ

すべてのチャンク化パラメータはオプションであり、デフォルトのチャンク化指定はチャンク・データに自動的に適用されます。

このAPIのチャンク化パラメータを指定する場合は、これらのパラメータをリストされている順序でのみ指定するようにしてください。

表7-14 チャンク化パラメータの表

パラメータ 説明および許容される値

BY

データを分割するモードを指定します。つまり、文字、単語または語彙トークンの数をカウントして分割します。

有効値:

  • CHARACTERS (またはCHARS):

    文字数をカウントして分割します。

  • WORDS:

    単語数をカウントして分割します。

    単語は、英字のシーケンス、数字のシーケンス、個々の句読点、または記号として定義されます。空白の単語境界のないセグメント化された言語(中国語、日本語、タイ語など)では、各ネイティブ文字が単語とみなされます(つまり、ユニグラム)。

  • VOCABULARY:

    語彙トークンの数をカウントして分割します。

    語彙トークンは、埋込みモデルで使用されるトークナイザの語彙によって認識される単語または単語の断片です。語彙ファイルは、VECTOR_CHUNKSヘルパーAPIのDBMS_VECTOR_CHAIN.CREATE_VOCABULARYを使用してロードできます。

    ノート: 正確な結果を得るには、選択したモデルがチャンク化に使用される語彙ファイルと一致するようにしてください。語彙ファイルを使用していない場合は、入力長がモデルのトークン制限内で定義されていることを確認してください。

デフォルト値: WORDS

MAX

各チャンクの最大サイズの制限を指定します。この設定では、大きいテキストで最大制限に達したときに、固定された位置で入力テキストが分割されます。MAXの単位は、BYモードに対応しています。つまり、特定の数の文字、単語、数字、句読点または語彙トークンが最大サイズ制限に達したときにデータが分割されます。

有効値:

  • BY CHARACTERS: 50から4000文字

  • BY WORDS: 10から1000ワード

  • BY VOCABULARY: 10から1000トークン

デフォルト値: 100

SPLIT [BY]

最大サイズ制限に達したときに入力テキストを分割する位置を指定します。これにより、チャンクに対して適切な境界を定義することで、関連するデータが一緒になるように維持できます。

有効値:

  • NONE:

    文字、単語または語彙トークンのMAX制限で分割します。

  • NEWLINEBLANKLINEおよびSPACE:

    これらは、MAX値の前の最後の分割文字で分割される単一分割文字条件です。

    テキストの行の最後で分割するには、NEWLINEを使用します。空白行(2つの改行などの文字のシーケンス)の最後で分割するには、BLANKLINEを使用します。空白の最後で分割するには、SPACEを使用します。

  • RECURSIVELY:

    これは、文字(またはシーケンス)の順序付きリストを使用して入力テキストを分割する複数分割文字条件です。

    RECURSIVELYは、次の順序でBLANKLINENEWLINESPACENONEとして事前定義されています。

    1. 入力テキストがMAX値より大きい場合は、最初の分割文字で分割されます。

    2. 失敗した場合は、2番目の分割文字で分割します。

    3. このように続きます。

    4. 分割文字が存在しない場合は、テキスト内のMAXの位置で分割します。

  • SENTENCE:

    これは、文の境界で入力テキストを分割する文末分割条件です。

    この条件では、入力言語の文の句読点およびコンテキスト・ルールの知識を使用して、文の境界が自動的に判断されます。この言語固有の条件は、主に文末(EOS)の句読点および一般的な略記法に依存しています。

    コンテキスト・ルールは単語情報に基づいているため、この条件はテキストを(文字ではなく)単語または語彙で分割する場合にのみ有効です。

    ノート: この条件は、BY WORDおよびMAXの設定に従っているため、場合によっては正確な文の境界を判断できないことがあります。たとえば、文がMAX値より大きい場合、文はMAXで分割されます。同様に、MAXの制限内に収まる場合にのみ、テキストに複数の文が含まれます。

  • CUSTOM:

    文字列のカスタム・リストに基づいて分割します(マークアップ・タグなど)。指定できるカスタム・シーケンスは、文字列の16分割までで、それぞれ10バイトまでです。

    次のように有効なテキスト・リテラルを指定します。
    VECTOR_CHUNKS(c. doc, BY character SPLIT CUSTOM ('<html>' , '</html>')) vc

デフォルト値: RECURSIVELY

OVERLAP

チャンクに含める必要がある先行するテキストの量(正の整数リテラルまたはゼロ)を指定します(存在する場合)。これは、先行するチャンク・テキストの一部を含めて、関連するテキスト(文など)を論理的に分割するのに役立ちます。

重なりの量は、チャンクの最大サイズの測定方法(文字、単語または語彙トークン)によって異なります。重なりは、指定されたSPLIT条件(NEWLINEなど)から始まります。

有効な値: MAX5%から20%

デフォルト値: 0

LANGUAGE

入力データの言語を指定します。

この句は、別の言語では異なる解釈になる可能性がある特定の文字(句読点や略語など)がテキストに含まれている場合に特に重要です。

有効値:

空白を含む言語名には、二重引用符(")を使用する必要があります。たとえば:

LANGUAGE "simplified chinese"

1ワードの言語名の場合、引用符は必要ありません。たとえば:

LANGUAGE american

デフォルト値: セッションのNLS_LANGUAGE

NORMALIZE

ドキュメントがテキストに変換されるときに発生する可能性のある問題(連続する複数の空白やスマート・クォートなど)を自動的に前処理または後処理します。正規化モードを使用して高品質のチャンクを抽出することをお薦めします。

有効値:

  • NONE:

    正規化を適用しません。

  • ALL:

    マルチバイト(Unicode)の句読点を標準のシングルバイトに正規化します。

  • サポートされているすべての正規化モード(PUNCTUATIONWHITESPACEおよびWIDECHAR)を適用します。

    • PUNCTUATION:

      そのテキストの文字セットでサポートされている引用符、ダッシュおよびその他の句読点文字を、共通のASCII形式に変換します。たとえば:

      • U+2013 (エンダッシュ)はU+002D (ハイフンマイナス)にマップされます

      • U+2018 (左一重引用符)はU+0027 (アポストロフィ)にマップされます

      • U+2019 (右一重引用符)はU+0027 (アポストロフィ)にマップされます

      • U+201B (単一の高逆9引用符)はU+0027 (アポストロフィ)にマップされます

    • WHITESPACE:

      不要な文字を排除することで、空白を最小化します。

      たとえば、空白行は維持しますが、余分な改行、空白またはタブは削除します: " \n \n " => "\n\n"

    • WIDECHAR:

      ワイド文字とマルチバイト文字の数字および(a-z)をシングルバイトに正規化します。

      これらは、0-9およびa-z A-Zに相当するマルチバイト文字であり、中国語、日本語または韓国語のテキストで出現することがあります。

デフォルト値: NONE

EXTENDED

MAX_STRING_SIZEパラメータをEXTENDEDに設定することなく、VARCHAR2文字列の出力制限を32767バイトに増やします。

EXTENDEDchunking_specに存在する場合、CHUNK_TEXT列値の最大長は32767バイトです。それが存在しない場合のその最大長は、MAX_STRING_SIZESTANDARDに設定されているときは4000バイト、MAX_STRING_SIZEEXTENDEDに設定されているときは32767バイトです。

VECTOR_CHUNKSは、次の例で示すように、文字リテラルまたはバインド変数で指定された単一の文字値に対してコールできます。

COLUMN chunk_offset HEADING Offset FORMAT 999
COLUMN chunk_length HEADING Len    FORMAT 999
COLUMN chunk_text   HEADING Text   FORMAT a60

VARIABLE txt VARCHAR2(4000)
EXECUTE :txt := 'An example text value to split with VECTOR_CHUNKS, having over 10 words because the minimum MAX value is 10';

SELECT * FROM VECTOR_CHUNKS(:txt BY WORDS MAX 10);

SELECT * FROM VECTOR_CHUNKS('Another example text value to split with VECTOR_CHUNKS, having over 10 words because the minimum MAX value is 10' BY WORDS MAX 10);

表の列の値をチャンク化するには、次の例で示すように、左相関を使用してVECTOR_CHUNKSコールとその表を結合する必要があります。

CREATE TABLE documentation_tab (
  id   NUMBER,
  text VARCHAR2(2000));

INSERT INTO documentation_tab
   VALUES(1, 'sample');

COMMIT;

SET LINESIZE 100;
SET PAGESIZE 20;
COLUMN pos FORMAT 999;
COLUMN siz FORMAT 999;
COLUMN txt FORMAT a60;

PROMPT SQL VECTOR_CHUNKS
SELECT D.id id, C.chunk_offset pos, C.chunk_length siz, C.chunk_text txt
FROM documentation_tab D, VECTOR_CHUNKS(D.text
                                  BY words
                                  MAX 200
                                  OVERLAP 10
                                  SPLIT BY recursively
                                  LANGUAGE american
                                  NORMALIZE all) C; 

関連項目: