ユニット 3 / 11

チャンク化とドキュメントの準備

利益:

  • チャンク サイズ、オーバーラップ、セマンティック チャンキングのトレードオフを数値的に評価します。
  • さまざまなドキュメント タイプ (PDF、表、コード、チャット ログ) に応じた適切なチャンク化戦略の選択
  • 各チャンクにメタデータを追加することで、取得品質とフィルタリングを強化します。

これは最も見落とされがちですが、RAG で最も決定的なステップです。つまり、ドキュメントをどのように細分化するかです。これをチャンキングと呼びます。同じドキュメントを同じモデルに与えたとしても、チャンク化が不適切なため、検索では間違った部分が返され、モデルは決して優れた答えを生成しません。この単元では、断片化戦略、ドキュメントの種類に応じて断片化戦略を適応させる方法、および各断片に意味のあるメタデータを追加する方法について説明します。

なぜ細断するのか?

理由は 3 つあります。まず、埋め込みモデルは、特定の長さまでのテキストを意味のあるベクトルに変換します。 40 ページの章全体を 1 つのベクトルに詰め込むと、意味が「ぼやけて」しまいます。次に、コンテキストとして必要な部分のみをモデルに与えたいと考えています。書類全体を引き渡すのは費用がかかり、気が散ります。第三に、検索を正確に行うためには、検索単位が小さく、焦点が絞られている必要があります。

したがって、チャンクは取得の最小単位です。大きすぎず、小さすぎず、ちょうどいい大きさです。

チャンクサイズとオーバーラップバランス

主な設定は 2 つあります。チャンク サイズ (チャンク内に含まれるトークン/ワードの数) とオーバーラップ (隣接するチャンクによって共有される部分) です。

非常に小さなチャンク (例: 100 トークン): 焦点は絞られていますが、コンテキストからは切り離されています。 「14日間」と言っていますが、14日間とは何かは前の文に残っています。非常に大きなチャンク (例: 2000 トークン): コンテキストは保持されますが、多くのスレッドが混在します。埋め込みが混乱し、無関係なトピックが集まってしまいます。

オーバーラップは境界の問題を解決します。文がちょうど 2 つの部分の境界にある場合、文は重ならずに 2 つに分割され、意味が失われます。 50 ~ 100 個のトークンが重なると、制限内にある情報が少なくとも 1 つの部分でそのまま残ることが保証されます。

チャンクサイズ

利点

短所

適切な内容

小規模 (100 ~ 250 トークン)

高感度、集中力

コンテキストが壊れる可能性がある

FAQ、短い記事、定義

中 (300 ~ 600 トークン)

バランス;ほとんどのシナリオ

手順、ポリシーテキスト

大(800~1500トークン)

コンテキストの整合性

ぼやけた埋め込み

物語的で長い説明

ヒント: どこから始めればよいかわからない場合は、400 ~ 500 のトークン チャンクと 50 ~ 80 のトークン オーバーラップから始めてください。その後、独自のデータを測定して調整します。 「適切な」サイズは普遍的なものではなく、状況によって異なります。

チャンク戦略

固定サイズ: N トークンごとにテキストをトリミングします。シンプルで速いですが、文の途中で中断する場合があります。

セパレータベース (再帰/セパレータ): 段落に従って分割し、次に文の境界に従って分割します。意味の整合性がより良く保たれます。ほとんどの実稼働システムはこれで始まります。

セマンティック チャンキング: 文の埋め込みを調べ、主語の変更が発生する箇所で分割します。これは最高品質ですが、最も高価な方法です。大量の場合、取引コストが増加します。

構造認識: 見出し、セクション、表などの文書構造を使用します。たとえば、Markdown ドキュメントを見出しごとに分割すると、各部分に独自の見出しが付けられるようになります。

文書タイプ別の適応

すべての文書が同じというわけではありません。戦略はタイプによって異なります。

  • PDF/ポリシーテキスト: ブックマークベース、中サイズ。ページの上部/下部の繰り返し (ヘッダー/フッター) をクリアします。
  • 表: 行を文脈から切り離さないでください。各行にヘッダー情報 (「品目: X、価格: Y、在庫: Z」) を保持します。多くの場合、生のテーブルをプレーン テキストに変換することが不可欠です。
  • コード: 関数/クラスの境界によって分割。邪魔にならない機能を切り取らないでください。
  • チャット/チケット録音: メッセージまたは会話ラウンドごとに分割。誰が何を言ったかを常に把握しておいてください。

# 括弧ベースのチャンク (概念) chunks = bol( text, target_size=450, # トークンの重複=70, # トークン括弧=["\n\n", "\n", ". ", " "] # 段落が最初、単語が最後)

各トラックにメタデータを追加する

チャンク化は単なる「分割」ではありません。それぞれの作品を豊かにすることです。トラックに付けたすべてのタグは、将来のフィルタリングやソース引用のために金貨のような価値があります。

# 強化されたチャンク (概念的){ "text": "勤続 1 ~ 5 年の場合、年次有給休暇は 14 日です...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 年次休暇", "page": 23, "date": "2025-06", "Department": "IK", "privacy": "internal" }}

もう 1 つの強力なテクニックは、コンテキスト ヘッダーを追加することです。つまり、各部分の先頭に、そのヘッダーが属する章のタイトルを書きます。したがって、「For 14 days」のような支離滅裂な作品であっても、「Annual Leave - 14 days」としてよりよく埋め込まれ、より意味のあるものになります。

弱いチャンキング / 強いチャンキング

弱い (ブラインド ハードカット、メタデータなし):

テキストを 1000 文字ごとに切り詰めます。テキストのみを保持します。# 結果: 表は中央で分割され、「14 日」はコンテキストなしで残ります。# どのドキュメントから来たのかは不明で、フィルターは作成できません。

強力 (構造認識 + ヘッダー + メタデータ):

文書を見出しごとに分割します。各パートにセクションのタイトルを追加し、ソース、ページ、日付、プライバシーのメタデータを添付します。 tablerow をヘッダー付きのプレーン テキストに変換します。# 結果: 焦点が絞られ、コンテキストに応じてフィルタリング可能、ソース可能になります。

ミニケース3個

ケース 1 — 塗装事故。財務チームは 200 ページの価格表をやみくもにハードカットして分割しました。テーブルの行がランダムに分割されました。 「製品Xの価格はいくらですか?」モデルは間違った行を読み取り、間違った価格を与えました (12 件中 9 件が間違っていました)。テーブルの行を「製品: … | 価格: … | 単位: …」という形式のプレーン テキストに変換すると、エラーは 12 件中 0 件に減少しました。

ケース 2 — 非常に大きなチャンク。 Wiki では、各ページは 1 つのチャンク (3,000 トークンという説もあります) で構成されます。 1 ページに「休暇」、「残業」、「給与計算」があるため、埋め込みがぼやけています。休暇問題に関しては、労働時間セクションも関係した。ページがタイトルごとに中サイズに分割された場合、再現率 @5 は 64% から 91% に増加しました。

ケース 3 — 重複せずに切り詰められた文。法務チームの場合は 250 トークンの固定カット、重複なし。重要な定義が 2 つの部分の境界線上にあり、2 つに分割されました。どちらにも完全な答えは含まれていません。 60個のトークンの重複を追加すると、同じ定義がそのまま1枚に残り、正解が返されました。

よくある間違い

  • ブラインド固定カット: 文と表を真ん中で分割します。意味が失われます。
  • オーバーラップをゼロのままにすると、境界に該当する情報は分割され、失われます。
  • メタデータを付加しない場合:フィルタリングやソース表示ができなくなります。
  • テーブルを生のままにする: モデルはテーブル構造を解決できません。行をプレーンテキストに変換します。
  • 1 つの戦略を課す: PDF、コード、テーブルは同じ方法では分割されません。ジャンルに合わせて対応します。
注意: Chunking を一度設定したら忘れないでください。新しいドキュメント タイプ (新しいシステムからのチケット、スキャンされた PDF) が到着したときに、検索品質を再測定します。不正な入力データは、不正な応答 (「ガベージイン、ガベージアウト」) を意味します。

要約すると

  • チャンクは取得の最小単位です。大きすぎず、小さすぎず、内容に合わせてバランスよく配置しましょう。
  • チャンク サイズはフォーカスとコンテキストのバランスを示します。オーバーラップは境界損失を管理します。
  • ブラケットベースで構造を意識したチャンキングは、ほとんどの生成システムの開始点です。セマンティック チャンキングは高品質ですが高価です。
  • テーブル、スクリプト、チャットなどのタイプには独自の戦略が必要です。テーブルをプレーンテキストに変換します。
  • 各トラックにソース/日付/章/プライバシー メタデータとセクション タイトルを追加します。これがフィルタリングと引用の基礎です。

アプリケーションタスク

選択したドキュメントのセクションを 3 つの異なる方法に分割します: (1) 200 トークンの小部分、(2) 500 トークンの中程度の部分 (70 トークンの重複)、(3) 単一の大きな部分。各戦略について同じ 3 つの質問をし、どの要素を導入するかを手動でマークし、その文書にどの戦略が最適であるかの理由を書き留めます。次に、少なくとも 4 つのメタデータ フィールドと「チャプター タイトル」を各トラックに追加します。ドキュメントに表が含まれている場合は、表の行を「フィールド:値」形式のプレーン テキストに変換します。

チェックリスト

  • [ ] チャンクは取得の最小単位であり、サイズはフォーカスとコンテキストのバランスであることがわかります。
  • [ ] オーバーラップが境界損失を防ぐ理由がわかりました。
  • [ ] 私は括弧ベースのチャンク化、セマンティックなチャンク化、および構造を意識したチャンク化を区別できます。
  • [ ] テーブル、コード、チャットの戦略を適応させることができます。
  • [ ] 各トラックにメタデータとチャプター タイトルを追加することで検索性を強化します。