チャンク化の手法と例

サポートされているすべてのチャンク化パラメータについては、これらの例を確認してください。これらの例によって、各チャンク化手法の長所と短所がわかるため、データをチャンク化するときに戦略を定義するのに役立ちます。

ここでは、様々なチャンク化パラメータを適用したときに、次の5行のサンプル・テキストがどのように分割されるかを確認できます。

次のことに注意してください:

  • 行には説明のためのリファレンスとして番号が振られており、ワード数が角括弧で囲まれています(たとえば、1[15])。空白行も示されています。
  • チャンクの開始境界と終了境界は、色付きのマーカーで表されます。
  • BY VOCABULARYモードで例を実行するには、事前にカスタム語彙を作成する必要があります(たとえば、DOC_VOCAB)。「カスタム語彙の作成および使用」を参照してください。

例4-1 BY chars MAX 200 OVERLAP 0 SPLIT BY none

この例は、最も単純な形式のチャンク化を示しており、テキスト内のどの位置であっても、テキストを固定された文字数(行末文字を含む)で分割します。

最初のチャンクのテキストは、絶対最大200文字で分割され、最初の2つのチャンクの間でindexesという単語が分割されます。同様に、2番目と3番目のチャンクの間で、Oracleという単語が分割されています。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY chars MAX 200 OVERLAP 0
                           SPLIT BY none LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
-------------------------------------------------------------------------
1	     200          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized ind

201	     200          exes that are designed for Artificial Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

                          Why Use Oracle AI Vector Search?
                          The biggest benefit of O

401	     146          racle AI Vector Search is that semantic search on unstructured data can be combined with relational search on business data in one single system.

例4-2 BY chars MAX 200 OVERLAP 0 SPLIT BY newline

この例では、テキストは最大制限の200文字以内で、可能な場合は改行で4つのチャンクに分割されます。

3行目では最大値を超えるため、最初のチャンクのテキストは2行目の後で分割されます。3行目は最大値内に完全に収まります。4行目と5行目も最大値を超えるため、2つのチャンクが生成されます。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY chars MAX 200 OVERLAP 0
                           SPLIT BY newline LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	      138         Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search

143	      196         Vector Indexes are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

343	      33          Why Use Oracle AI Vector Search?

377	      170         The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be combined with relational search on business data in one single system.

例4-3 BY chars MAX 200 OVERLAP 0 SPLIT BY recursively

この例では、テキストは、最大200文字内で、空白行、改行、および可能な場合は空白を使用して、再帰的に5つのチャンクに分割されます。

最初のチャンクは、最初の空白行の後に分割されます。これは、2番目の空白行の後のテキストを含めると最大値を超えるためです。2番目の節は単独で最大値を超えるため、改行で2つのチャンクに分割されます。同様に、3番目の節も改行で2つのチャンクに分割されます。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY chars MAX 200 OVERLAP 0
                           SPLIT BY recursively LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1            104          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

109	     30           About Oracle AI Vector Search

143	     196          Vector Indexes are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

343	     33           Why Use Oracle AI Vector Search?

377	     170          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be combined with relational search on business data in one single system.

例4-4 BY words MAX 40 OVERLAP 0 SPLIT BY none

この例では、テキストは絶対最大40ワードで、3行目のwordloadsの後と5行目のwithの後で、3つのチャンクに分割されます。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 0
                           SPLIT BY none LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     266          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized indexes that are designed for Artificial
                          Intelligence (AI) workloads

267	     223          that allow you to query data based on semantics, rather than keywords.

                          Why Use Oracle AI Vector Search?
                          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be combined with


490	     57           relational search on business data in one single system.

例4-5 BY words MAX 40 OVERLAP 0 SPLIT BY newline

この例では、テキストは最大40ワード以内で、可能な場合は改行でチャンクに分割されます。

最初のチャンク(21語)は2行目の後で分割されます。3行目は単語の最大数を超えるためです(21+33語)。3行目と4行目は最大値内に収まります。5行目は29ワードなので、最後のチャンクに収まります。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 0
                           SPLIT BY newline LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     138          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search

143	     233          Vector Indexes are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

                          Why Use Oracle AI Vector Search?

377          170          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be combined with relational search on business data in one single system.

例4-6 BY words MAX 40 OVERLAP 0 SPLIT BY recursively

この例では、チャンクは、空白行、改行および空白を使用して、単語によって再帰的に分割されます。

2番目の空白行の後のテキストが最大単語数を超えているため、最初のチャンクは最初の空白行で終わります。2番目のチャンク(38ワード)は次の空白行で終わります。最後のチャンク(35ワード)は残りの入力で構成されます。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 0
                           SPLIT BY recursively LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     104          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

109	     230          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized indexes that are designed for Artificial 
                          Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

343	     204          Why Use Oracle AI Vector Search?
                          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be
                          combined with relational search on business data in one single system.

例4-7 BY vocabulary MAX 40 OVERLAP 0 SPLIT BY none

この例では、テキストは絶対最大語彙トークン40個で4つのチャンクに分割されます。これは例4-4で3つのチャンクが生成されたことと対照的です。これは語彙トークンには単語の断片が含まれているためであり、通常、チャンク・テキストは単純な単語の分割よりも小さくなります。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY vocabulary doc_vocab MAX 40 OVERLAP 0
                           SPLIT BY none LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     157          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search
                          Vector Indexes
158	     156          are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads that allow you to query data based on semantics

314          150          , rather than keywords.

                          Why Use Oracle AI Vector Search?
                          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured

464	     83           data can be combined with relational search on business data in one single system.

例4-8 BY vocabulary MAX 40 OVERLAP 0 SPLIT BY newline

この例では、テキストは、絶対最大語彙トークン40個を使用して、改行で5つのチャンクに分割されます。これは、例4-5と対照的です。

語彙トークンには単語の断片が含まれているため、通常、チャンク・テキストは単純な単語の分割よりも小さくなります。この例では、例4-5の3つではなく5つのチャンクが生成され、中間の節が2に分割され、最後の単語は4番目のチャンクに収まりません。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY vocabulary doc_vocab MAX 40 OVERLAP 0
                           SPLIT BY newline LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     138          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search

143	     148          Vector Indexes are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads that allow you to query

291	     85           data based on semantics, rather than keywords.

                          Why Use Oracle AI Vector Search?

377	     162          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be combined with relational search on business data in one single

539	     8            system.

例4-9 BY vocabulary MAX 40 OVERLAP 0 SPLIT BY recursively

この例では、テキストは、空白行、改行および空白を使用して、絶対最大語彙トークン40個で再帰的に7つのチャンクに分割されます。これは、例4-6で3つのチャンクが生成されたことと対照的です。

語彙トークンには単語の断片が含まれているため、通常、チャンク・テキストは単純な単語の分割よりも小さくなります。この例では、中間の節が3つに分割され、最後の節が3つに分割されて、7つのチャンクが生成されます。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY vocabulary doc_vocab MAX 40 OVERLAP 0
                           SPLIT BY recursively LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     104          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

109	     30           About Oracle AI Vector Search

143	     148          Vector Indexes are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads that allow you to query

291	     48           data based on semantics, rather than keywords.

343	     33           Why Use Oracle AI Vector Search?

377	     162          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be combined with relational search on business data in one single

539	     8            system.

例4-10 BY words MAX 40 OVERLAP 5 SPLIT BY none

この例は例4-4と似ていますが、ここではOVERLAP 5が使用されています。

最初のチャンクは、最大40ワード(workloadsの後)で終わります。2番目のチャンクは、最初のチャンクのカッコを含む最後の5つの単語と重なり、unstructuredの後で終わります。重なり合う単語には下線が引かれています。3番目のチャンクは、最後の5つの単語と重なり、下線が引かれています。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 5
                           SPLIT BY none LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
-------------------------------------------------------------------------------------------------
1	     266         Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                         About Oracle AI Vector Search
                         Vector Indexes are a new classification of specialized indexes that are designed for Artificial Intelligence (AI) workloads

239	     225         Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

                         Why Use Oracle AI Vector Search?
                         The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured

427	     120         that semantic search on unstructured data can be combined with relational search on business data in one single system.

例4-11 BY words MAX 40 OVERLAP 5 SPLIT BY newline

この例は例4-5と似ていますが、ここではOVERLAP 5が使用されています。チャンクが重なる部分は、同じ分割条件に従っている必要があります。この場合は、改行で開始する必要があります。

3行目は最大40語を超えるため、最初のチャンクは2行目で終わります。2番目のチャンクは、1番目のチャンクの5ワードの2行目(下線が引かれています)で始まり、3行目で終わります。3番目のチャンクは、前の行が最大値5を超えているため重なりません。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 5
                           SPLIT BY newline LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
---------------------------------------------------------------------------------------------------
1	     138          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search

109	     230          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized indexes that are designed for Artificial 
                          Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

343	     204          Why Use Oracle AI Vector Search?
                          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be
                          combined with relational search on business data in one single system.

例4-12 BY words MAX 40 OVERLAP 5 SPLIT BY recursively

この例は例4-6と似ていますが、ここではOVERLAP 5が使用されています。チャンクが重なる部分は、同じ分割条件に従っている必要があります。この場合は、空白行、改行または空白のいずれかで始まる必要があります。

2番目の空白行の後のテキストが最大単語数を超えているため、最初のチャンクは最初の空白行で終わります。2番目のチャンクは、5ワード(空白で始まり、下線が引かれています)が重なり、2番目の行を含みますが、33ワードの3行目は除外されます。3番目のチャンクは5ワードが重複し、2番目の空白行で終わります。4番目のチャンクは残りの入力で構成されます。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 5
                           SPLIT BY recursively LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     104         Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

71           68          retrieval and similarity search.
 
                         About Oracle AI Vector Search

109	     230         About Oracle AI Vector Search
                         Vector Indexes are a new classification of specialized indexes that are designed for Artificial
                         Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

316          231         rather than keywords.

                         Why Use Oracle AI Vector Search?
                         The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be
                         combined with relational search on business data in one single system.

例4-13 BY chars MAX 200 OVERLAP 0 SPLIT BY none NORMALIZE none

この例は最初の例(例4-1)と同じであり、正規化を使用した次の例(例4-14)とは対照的です。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY chars MAX 200 OVERLAP 0
                           SPLIT BY none LANGUAGE american NORMALIZE none) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     200          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized ind

201         200           exes that are designed for Artificial Intelligence (AI) workloads that allow you to query data based
                          on semantics, rather than keywords.

                          Why Use Oracle AI Vector Search?
                          The biggest benefit of O

401         146           racle AI Vector Search is that semantic search on unstructured data can be combined with relational
                          search on business data in one single system.

例4-14 BY chars MAX 200 OVERLAP 0 SPLIT BY none NORMALIZE whitespace

この例では、whitespaceの正規化が有効にされており、冗長な空白が縮小され、チャンクの最大値内により多くの内容が生成されます。

最初のチャンクは、インデントされた2つの行にそれぞれ4つの空白があるため、8文字増えています(下線_が引かれています)。2番目のチャンクは、インデントされた1つの行に合計4個の空白があるため、4文字増えています。3番目のチャンクは残りの入力で構成されます。

この例は、チャンクの長さ(通常はバイト単位)がチャンク・テキストのサイズと異なる可能性があることを示しています。CHUNK_OFFSETおよびCHUNK_LENGTHは、チャンクの元のソースの場所を表します。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY chars MAX 200 OVERLAP 0
                           SPLIT BY none LANGUAGE american NORMALIZE whitespace) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1	     208          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

                          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized indexes tha

209	     205          t are designed for Artificial Intelligence (AI) workloads that allow you to query data based on sema
                          ntics, rather than keywords.

                          Why Use Oracle AI Vector Search?
                          The biggest benefit of Oracle AI Vect

414          133          or Search is that semantic search on unstructured data can be combined with relational search on business data in one single system.

例4-15 BY words MAX 40 OVERLAP 0 SPLIT BY sentence LANGUAGE American

この例では、言語固有のデータとヒューリスティック(文の句読点、コンテキスト・ルール、一般的な略語など)を使用した文末分割を使用して、文境界であるかどうかを判断します。3つのチャンクが生成され、各チャンクはピリオドで終わります。

この手法を使用すると、多数の分割文を含むチャンクの場合にテキストをそのまま維持できます。そうしないと、テキストはセマンティック・コンテキストを失い、特定の情報をターゲットとする問合せに役立たない可能性があります。

構文:
SELECT C.*
FROM documentation_tab D, VECTOR_CHUNKS(D.text BY words MAX 40 OVERLAP 0
                           SPLIT BY sentence LANGUAGE american NORMALIZE NONE) C;
出力:
CHUNK_OFFSET CHUNK_LENGTH CHUNK_TEXT
--------------------------------------------------------------------------------------------------
1            102          Oracle AI Vector Search stores and indexes vector embeddings for fast retrieval and similarity search.

109          228          About Oracle AI Vector Search
                          Vector Indexes are a new classification of specialized indexes that are designed for Artificial
                          Intelligence (AI) workloads that allow you to query data based on semantics, rather than keywords.

343	     203          Why Use Oracle AI Vector Search?
                          The biggest benefit of Oracle AI Vector Search is that semantic search on unstructured data can be
                          combined with relational search on business data in one single system.

例4-16 BY words MAX 40 OVERLAP 0 SPLIT BY sentence LANGUAGE Simplified Chinese

前述の例の続きのこの例では、入力として簡体字中国語テキストを使用して、言語固有の文チャンクを指定します。

出力には4つのチャンクが含まれ、各チャンクはピリオドで終了します。

わかりやすくするために、この例では、documentation_tabは、次のChineseDoc.txtドキュメントとともに挿入されたCLOBです。
使用 My Oracle Support 之前,您的用户概要信息中必须至少具有一个客户服务号。客户服务号是
标识您所在组织的唯一参考号。使用 My Oracle Support 门户向您的概要信息中添加一个客户服务
号。有关详细信息,请参阅 My Oracle Support 帮助的“如何将客户服务号添加到概要信息?

次のようにチャンク操作を実行します。

-- create a relational table

DROP TABLE IF EXISTS documentation_tab;
CREATE TABLE documentation_tab (
    id   NUMBER,
    text CLOB);

-- create a local directory and store the document into the table

CREATE OR REPLACE DIRECTORY VEC_DUMP AS '/my_local_dir/';
CREATE OR REPLACE PROCEDURE my_clob_from_file(
    p_dir in varchar2,
    p_file in varchar2,
    p_id in number 
  ) AS
  dest_loc CLOB;
  v_bfile bfile := null;
  v_lang_context number := dbms_lob.default_lang_ctx;
  v_dest_offset integer := 1;
  v_src_offset integer := 1;
  v_warning number;
BEGIN
        insert into documentation_tab values(p_id,empty_clob()) returning text
        into dest_loc;

                v_bfile := BFileName(p_dir, p_file);

                dbms_lob.open(v_bfile, dbms_lob.lob_readonly);
                dbms_lob.loadClobFromFile(
                                dest_loc, 
                                v_bfile,
                                dbms_lob.lobmaxsize,
                                v_dest_offset,
                                v_src_offset,
                                873,
                                v_lang_context,
                                v_warning);
        dbms_lob.close(v_bfile);
END my_clob_from_file;
/

show errors;

-- transform clob into chunks

exec my_clob_from_file('VEC_DUMP', 'ChineseDoc.txt', 1);

SELECT rownum as id, C.chunk_offset pos, C.chunk_length as siz,
       REPLACE(SUBSTR(C.chunk_text,1,15),CHR(10),'_') as beg,
       '...' as rng,
       REPLACE(SUBSTR(C.chunk_text,-15),CHR(10),'_') as end
FROM documentation_tab D, VECTOR_CHUNKS(to_char(D.text) BY words
                                 MAX 40
                                 OVERLAP 0
                                 SPLIT BY sentence
                                 LANGUAGE "simplified chinese"
                                 NORMALIZE none) C;
出力:
ID   POS  SIZ  BEG                          RNG END
---- ---- ---- ---------------------------  --- ------------------------
 1    1   103  使用 My Oracle Su             ... 中必须至少具有一个客户服务号。
 2  104    60  客户服务号是标识您所在组织的唯    ... 是标识您所在组织的唯一参考号。
 3  164    85  使用 My Oracle Su             ... 概要信息中添加一个客户服务号。
 4  249   109  有关详细信息,请参阅 My O       ... 何将客户服务号添加到概要信息?

関連トピック