01 RAG 前書き
RAG(Retrieval-Augmented Generation)技術は、AI応用開発のコア技術スタックとなっていますが、実際の応用では効果がしばしば期待に及ばないことがあります。成熟した商用またはオープンソースソリューションを使用しても、正確率は理想的なレベルに達しにくく、異なるシナリオ間で切り替える際に正確性が大幅に低下することがあります。
RAGは習得しやすいが極めるのが困難な技術で、その正確性は各技術詳細に隠されています。汎用RAGからGraphRAG、さらにAgentic RAGまで、技術の急速な発展と同時に実装の複雑さも増しています。本記事では、RAGデータ前処理のコア要素である分块戦略(Chunking Strategy)に焦点を当て、5つの一般的な手法を系統的に分析し、技術実践の参考を提供します。
RAGの基本原理:知識をベクトル化して保存し、類似度マッチングによって関連コンテンツを検索し、最終的にユーザーの質問と一緒にLLMに送信して回答を生成します。
02 RAG 分块概要
RAGにおける「分块(Chunking)」は、コアのデータ前処理ステップで、検索効果を向上させ、最終的な回答の正確性と関連性を向上させることを目的としています。
簡単に言うと、「分块」とは原文書コンテンツ(PDF、Webページ、記事など)をより小さなテキスト単位に分割することです。例えば、各段落300token、各段落1ページのテキスト、各段落1つの小節などです。
03 なぜRAGに分块が必要なのか
3.1 Embeddingの長さ制限
大多数のテキストembeddingモデル(OpenAIのtext-embedding-3-small
や、Hugging Faceのall-MiniLM-L6-v2
など)は、入力テキストの長さに厳しい制限があります。文書全体が長すぎると直接embeddingを生成できず、ベクトル化検索ができません。
3.2 意味的関連性と精度の向上
RAGの本質は、ユーザーの質問と「意味的ベクトル化されたコンテンツ块」との類似度マッチングです。
実際の事例比較:
大きな块の文書:5000文字の技術文書に複数のトピックが含まれ、ユーザーが「データベースの設定方法」を質問しても、マッチした大きな块の中で関連するコンテンツは10%のみ
適切な分块:文書をトピック別に500文字の複数の块に分割すると、同じ質問でもデータベース設定専用の块に正確にマッチできます
適切な分块により、意味がより集中し、マッチング度が高くなり、検索されるコンテンツの関連性もより強くなります。
3.3 コンテキスト汚染の回避と生成負荷の軽減
LLMはコンテキストの長さに制限があります。過大な文書を直接入力すると以下の問題が発生します:
- 大量のtokenを消費し、コストが高く、検索速度が遅い
- モデルの真に関連する情報への注意度が低下
- 幻覚リスクが増加
正しい分块とTop-K検索の組み合わせにより、最も関連性の高いコンテンツのみを生成モデルに送信できます。
3.4 増分更新のサポート
分块された文書は、部分的な知識更新、バージョン管理、動的コンテンツ維持をより簡単に実現できます。
04 5つの分块戦略詳解
RAGでよく使われる5つの分块戦略:固定サイズ分块、意味的分块、再帰分块、文書構造ベース分块、LLMベース分块。
4.1 固定サイズ分块
固定サイズ分块は最も直感的な分块方法で、指定されたウィンドウサイズに基づいてテキストを長さが「均等」な断片に分割します。
文の意味的完全性を破壊しないため、連続する断片間で一定の重複(Overlap部分)を保つことが推奨されます。
優点:実装が簡単で、計算オーバーヘッドが最小
欠点:文や観点間で強制的に分割され、重要な情報が異なる块に分散される可能性があり、意味的な一貫性が破壊される
4.2 意味的分块
意味的分块は、単純な文字数ではなく、コンテンツの意味的類似度に基づいて分块境界を決定します。
実装フロー:
- 文書を段落または文に基づいて初期分割
- 各分割に対してベクトル化表現(Embedding)を生成
- 最初のベクトル化分割から類似度を計算開始
- 隣接する分割が高いコサイン類似度を持つ場合、マージ
- コサイン類似度が著しく低下するまで継続してマージ
- 類似度が低下した時点で、前の分割を1つの分块にマージ
- すべてのコンテンツが処理されるまでこのプロセスを繰り返し
下図を見ると、語義分割の結果が分かります。色の違いがそれぞれ異なるチャンクを示しています。
優点:文の流暢性と意味的一貫性を最大限に保持し、検索精度を著しく向上させる
欠点:閾値による類似度低下の判定に依存し、閾値は文書タイプによって調整が必要で、実装難易度が高い
4.3 再帰分块
再帰分块は階層処理戦略を採用し、自然なテキスト区切り文字を優先して分割します。
実装フロー:
- 段落、章節などの自然な区切り文字に基づいて分块
- 分块サイズが事前定義された制限を超えるかチェック
- サイズ制限に適合する場合、そのまま保持
- 制限を超える場合、次級の区切り文字でさらに分割
- すべての块がサイズ要件を満たすまで再帰実行
優点:固定サイズ分块と比較して意味的一貫性をより良く保持。意味的分块と比較して実装複雑度が大幅に低下し、効果と実装難易度の良好なバランス
欠点:実装と計算複雑度において一定の追加オーバーヘッドが存在
4.4 文書構造ベース分块
文書構造ベースの分块方法は、文書の固有の構造特徴を利用して情報块の境界を定義します。
この方法は文書の論理構造、例えばタイトル、章節、または段落階層を十分に活用して分块境界を決定します。
一般的な文書構造:
- Markdown形式のタイトル階層(#、##、###)
- HTMLのタグ構造(h1、h2、h3、divなど)
- PDFの章節タイトルとページ分割
- Word文書のアウトライン構造
優点:構造が明確で、分块境界が自然かつ合理的で、ユーザーの理解コストが低い
欠点:文書に必ずしも明確な構造があるとは限らず、異なる断片の長さの差が大きく、一部の断片がモデルのコンテキスト制限を超える可能性がある
4.5 LLMベース分块
LLMベースの分块は最新の分块戦略で、大規模言語モデルの理解能力を直接利用してインテリジェントな分块を行います。
実装フロー:
文書コンテンツを精心設計されたプロンプトと一緒にLLMに送信し、大規模言語モデルに意味理解に基づいて合理的な分块結果を生成させます。LLMは文書の意味構造、トピック転換点を理解し、それに基づいて意味的に独立で意味のある断片を生成できます。
優点:最高のインテリジェンス化レベルで、複雑な意味関係とコンテキストを理解でき、分块品質は通常非常に高い
欠点:計算コストが最も高い。また、LLMsには通常コンテキスト長制限があるため、超長文書の処理には特別な処理が必要
05 分块戦略の比較と選択
5.1 戦略比較表
分块戦略 | 実装難易度 | 計算コスト | 意味保持 | 処理速度 | 適用シーン |
---|---|---|---|---|---|
固定サイズ | 低 | 低 | 不良 | 速い | 高速プロトタイプ、簡単な文書 |
意味的分块 | 中 | 中 | 優秀 | 中 | 効果優先、複雑な文書 |
再帰分块 | 中 | 低 | 良好 | 速い | バランス選択、汎用シーン |
文書構造 | 低 | 低 | 良好 | 速い | 構造化文書 |
LLM分块 | 低 | 高 | 優秀 | 遅い | 予算充分、高品質要求 |
5.2 選択提案
技術実践と関連文献によると、意味的分块は多くの場合で最高の効果を示し、RAGシステムの検索精度を著しく向上させることができます。しかし、最終的には具体的なビジネスシナリオでテスト検証を行う必要があります。
段階的提案:
高速プロトタイプ段階:固定サイズ分块または再帰分块から開始
効果最適化段階:意味的分块またはLLMベースの分块を検討
本番環境:効果、コスト、維持複雑度間でバランスポイントを見つける
5.3 実装チェックリスト
文書特徴評価:
- 文書に明確な構造階層があるか?
- コンテンツのトピックが相対的に集中しているか?
- 文書の長さと複雑度はどうか?
- 更新頻度と維持要求は?
効果テスト指標:
- 検索精度(Precision)
- 検索再現率(Recall)
- 応答時間と処理コスト
- 最終回答品質スコア
よくある問題の解決:
- 分块が大きすぎる:chunk_size設定をチェック、再帰分割を検討
- 意味的断裂:overlapを増やす、または意味的分块に変更
- 検索が不正確:類似度閾値を調整、embeddingモデルを最適化
- コストが高すぎる:LLM分块が必要か評価、ダウングレード案を検討
適切な分块戦略の選択は、RAGシステム成功の重要な要因の一つです。実際のプロジェクトではA/Bテストを実施し、データ駆動型の方法で最適な分块戦略を選択することをお勧めします。