AI・機械学習
上級

RAG向けチャンキング戦略(アールエージームケチャンキングセンリャク)

RAGにおけるチャンキングとは、大規模ドキュメントを検索・取得に適した小さなテキスト断片(チャンク)に分割する処理であり、分割戦略の選択がRAGシステム全体の検索精度と回答品質に直結する。

0 回閲覧
0 いいね

チャンキングの重要性

チャンキング(Chunking)は、RAGパイプラインのIngestion段階における最も重要な前処理ステップの一つである。適切なチャンキングは検索精度を高め、LLMに質の高いコンテキストを提供する。一方、不適切なチャンキングは関連情報の分断や無関係な情報の混入を引き起こし、RAG全体の性能を著しく低下させる。

チャンキングの設計で考慮すべき主要なトレードオフは「チャンクサイズ」である。チャンクが小さすぎると文脈が失われ、大きすぎるとノイズが増加しEmbeddingの精度が低下する。一般的に256〜1024トークンが推奨されるが、ドキュメントの種類やユースケースに応じた最適値の探索が必要である。

主要なチャンキング戦略

RAGで使用されるチャンキング戦略は大きく4つに分類される。

戦略概要適用場面メリットデメリット
固定長分割文字数・トークン数で機械的に分割構造が均一なテキスト実装が単純、予測可能文脈の途中で分断される
セマンティック分割意味的な区切りを検出して分割長文・論文・書籍意味的一貫性が高い計算コストが高い
再帰的分割区切り文字の優先順位に従い段階的に分割汎用的な文書バランスが良いパラメータ調整が必要
ドキュメント構造ベースHTML/Markdown/PDFの構造を活用構造化された文書論理構造を保持パーサーの品質に依存

固定長チャンキング

固定長チャンキング(Fixed-size Chunking)は、テキストを一定のトークン数または文字数で機械的に分割する最も基本的な手法である。実装が容易で処理速度も速いが、文の途中や段落の途中で分割が発生するリスクがある。

このリスクを緩和するため、オーバーラップ(重複)を設定することが一般的である。例えば、チャンクサイズ512トークン、オーバーラップ50トークンとすると、隣接するチャンク間で50トークンが共有され、分断による文脈損失を軽減できる。オーバーラップが大きすぎるとストレージコストとEmbeddingコストが増加するため、チャンクサイズの10〜20%が目安とされる。

LangChainのCharacterTextSplitterやLlamaIndexのTokenTextSplitterが代表的な実装である。

セマンティックチャンキング

セマンティックチャンキング(Semantic Chunking)は、テキストの意味的な区切りを自動検出して分割する高度な手法である。Greg Kamradt氏が提唱した手法では、隣接する文の埋め込みベクトル間のコサイン類似度を計算し、類似度が大きく低下する箇所(ブレイクポイント)でチャンクを分割する。

具体的なアルゴリズムは以下の通りである:

  1. テキストを文単位に分割する
  2. 各文のEmbeddingベクトルを計算する
  3. 隣接する文ペアのコサイン類似度を算出する
  4. 類似度のパーセンタイル閾値(例: 5%ile)を設定する
  5. 閾値を下回る箇所でチャンクを分割する

この手法のメリットは、意味的に一貫した単位でチャンクが生成されるため、検索時に関連性の高い情報が1つのチャンクに含まれやすい点である。デメリットは、Embeddingの計算コストが文数に比例して増大する点と、チャンクサイズのばらつきが大きくなる点である。

LlamaIndexのSemanticSplitterNodeParserやLangChainのSemanticChunkerが利用可能である。

再帰的チャンキング

再帰的チャンキング(Recursive Chunking)は、LangChainのRecursiveCharacterTextSplitterで実装されている手法で、複数の区切り文字を優先順位に従って段階的に適用する。

デフォルトの区切り文字優先順位は ["\n\n", "\n", " ", ""] である。まず段落区切り(\n\n)で分割を試み、結果のチャンクが指定サイズを超える場合は改行(\n)で、さらに超える場合はスペースで分割する。最終手段として文字単位の分割を行う。

この手法は固定長分割とセマンティック分割の中間に位置し、計算コストを抑えつつ文の途中での分断を最小化できるバランスの良さから、実務で最も広く採用されている。

Markdown文書に対しては、見出し(#、##、###)を最優先の区切り文字として追加するMarkdownHeaderTextSplitterが有効である。

ドキュメント構造ベースチャンキング

HTML、Markdown、PDF、DOCX等の構造化文書では、ドキュメント自体の論理構造(見出し階層、セクション区切り、テーブル、リスト等)を活用してチャンキングを行う手法が効果的である。

PDFの場合、Docling(IBM Research)やUnstructuredを使用すると、テーブル・ヘッダー・フッター・図表キャプション等を構造的に解析し、論理的なセクション単位でチャンクを生成できる。各チャンクにはセクションタイトルやページ番号等のメタデータが自動付与されるため、検索時のフィルタリングや回答時の出典表示に活用できる。

チャンクサイズの最適化

チャンクサイズ特徴推奨場面
128〜256トークン精密な検索、ピンポイント回答FAQ、定義検索、事実確認
256〜512トークンバランス型(最も汎用的)一般的なQA、ドキュメント検索
512〜1024トークン広い文脈、複雑な推論論文要約、法律文書分析
1024トークン以上章単位の理解書籍、レポートの包括的分析

最適なチャンクサイズはユースケースに依存するため、RAGASなどの評価フレームワークを用いて複数のサイズで実験し、Faithfulness・Answer Relevancyなどの指標で比較することが推奨される。

最新のチャンキング手法

2025年以降、LLMを活用した高度なチャンキング手法が登場している:

  • Agentic Chunking: LLMがドキュメント全体を読解し、意味的な単位を判断してチャンクを生成する。精度が高いが、LLM呼び出しのコストが大きい
  • Late Chunking: ドキュメント全体をまず長いコンテキストのEmbeddingモデルに通し、その後でチャンク境界を決定する。Jina AIのjina-embeddings-v2-base-enが対応している
  • Contextual Chunking: Anthropicが提案した手法で、各チャンクに元ドキュメントの文脈要約を付与することで、チャンク単体でも意味が通るようにする

よくある質問(FAQ)

Q: チャンクのオーバーラップはどの程度が最適ですか? A: チャンクサイズの10〜20%が一般的な目安である。512トークンのチャンクなら50〜100トークンのオーバーラップが妥当である。オーバーラップが大きすぎるとストレージとEmbeddingのコストが増加し、検索時に重複するチャンクが多く返されるため逆効果になる。

Q: 多言語ドキュメントのチャンキングで注意すべき点は? A: 日本語・中国語など単語間にスペースがない言語では、文字数ベースの分割よりもトークンベースの分割が推奨される。また、多言語対応のEmbeddingモデル(BGE-M3、multilingual-e5-large等)を使用し、トークナイザの違いによるチャンクサイズの不均一性に注意する必要がある。

Q: テーブルやコードブロックを含む文書はどうチャンキングしますか? A: テーブルやコードブロックは途中で分割すると意味が損なわれるため、「不可分要素」として扱い、チャンクサイズの上限を一時的に超過してでも1つのチャンクに収めるべきである。Unstructuredのpartition関数やDoclingはテーブルを構造的に認識して1チャンクとして保持する機能を持つ。