最適なRAG検索のための固定サイズ・セマンティック・再帰的・センテンスウィンドウアプローチを含む効果的なチャンク分割戦略の解説。
チャンク分割はドキュメントをエンベディング用に分割する方法を決定します。固定サイズチャンクはシンプルですが意味単位を分断する可能性があります。セマンティックチャンクは自然な境界で分割します。再帰的チャンクは複数の区切り文字を階層的に試みます。センテンスウィンドウチャンクは文をエンベディングしつつ周辺コンテキストを取得します。多くのシステムでは10〜20%のオーバーラップを持つ256〜1024トークンを使用します。
チャンク分割はRAGシステムのパフォーマンスに最も大きな影響を与えるパラメータの一つです。チャンクが大きすぎると無関係な情報がコンテキストに混入し、LLMが本質的な情報を見落とします。チャンクが小さすぎると文脈が失われ、意味的な完全性が損なわれます。適切なチャンクサイズはドキュメントの種類、クエリの特性、使用するエンベディングモデルによって異なります。
最もシンプルな方法:N トークンごとに分割。LangChainのCharacterTextSplitterやTokenTextSplitterで実装。典型的なパラメータ:chunk_size=512、overlap=50。オーバーラップの目的:文境界をまたぐ情報の分断を防ぎます。欠点:意味的な単位を無視して分割するため、文の途中や段落の途中で切れることがあります。構造のない均質なテキスト(ログファイル等)には適していますが、構造のある文書には不向きです。
LangChainのRecursiveCharacterTextSplitterが実装。区切り文字を階層的に試みます:まず2つの改行(段落区切り)で分割、次に1つの改行(行区切り)、次にピリオド(文区切り)、最後にスペース(単語区切り)。チャンクサイズがターゲットを超えるまで大きな単位で維持し、超えたら次のレベルの区切り文字を使います。固定サイズよりも意味的なまとまりを保ちやすく、汎用的な文書に適しています。多くのプロジェクトのデフォルト選択肢です。
連続する文のエンベディングの類似度が大きく低下する箇所で分割します。実装:各文をエンベディング→隣接文ペアのコサイン類似度計算→類似度が閾値(例:平均-1σ)以下の箇所で分割。GregorioとColombetが提案したBinarized similarity thresholdingが実用的な実装です。利点:トピックの変わり目で自然に分割され、意味的完全性が高い。欠点:各文のエンベディング計算コストが高く、インデックス構築時間が増加します。
LlamaIndexが提案するパターン:各文を個別にエンベディングしてインデックスに保存(精度の高い検索のため)、しかし文書としてLLMに渡す際はその文の前後N文(例:前後2文)を含むウィンドウを使用します。小さな粒度で検索しつつ、コンテキストが豊富なウィンドウでLLMに回答させます。設定:sentence_window_size=3(前後3文ずつ)。ファクト確認クエリや特定の事実を問うRAGシステムに効果的です。
マークダウン文書はヘッダー(H1、H2、H3)で自然なセクション境界が定義されています。MarkdownHeaderTextSplitter(LangChain)はヘッダー階層を保持したままチャンクを生成します。各チャンクのメタデータに「このチャンクはH2セクション:アーキテクチャの配下のH3:データベース設計にある」という階層情報を保持します。HTMLParsers(BeautifulSoup)で`<section>`、`<article>`タグや`<h*>`タグで分割することも有効です。
PDFは構造が失われやすく、チャンク分割が難しいフォーマットです。unstructured.ioライブラリはPDF、Word、PowerPoint等から構造を抽出します。表は特に問題で、行列として意味を持つデータが連続テキストに変換されると理解しにくくなります。高精度が必要な場合はLLMによるPDF解析(GPT-4 Vision、Claude 3)で表や図のテキスト化を行います。コスト対効果のトレードオフを評価して選択します。
エンベディングモデルには最大入力トークン制限があります:text-embedding-3-small(OpenAI)は8191トークン、all-MiniLM-L6-v2(SentenceTransformers)は256トークン(実効値)。制限を超えたテキストは切り捨てられ、後半の情報が失われます。チャンクサイズはモデルの最大入力より十分小さくする必要があります。モデルの最適なチャンクサイズはモデルのトレーニングデータの粒度に依存します。
チャンクサイズとオーバーラップのグリッドサーチ:chunk_size=[256, 512, 1024]、overlap=[0, 50, 100, 200]。評価データセットでRecall@5とMRRを比較します。多くのRAGユースケースでは512〜1024トークン、10〜20%オーバーラップが出発点として適切です。専門的な技術文書は大きめ(1024)、FAQや短い事実は小さめ(256)が一般的な傾向です。
汎用的な出発点:RecursiveCharacterTextSplitter(chunk_size=512、overlap=50)。構造化マークダウン/HTML文書:MarkdownHeaderTextSplitterで階層を保持。高精度が必要なファクト検索:SentenceWindowNodeParser(前後2〜3文ウィンドウ)。トピックが明確に変わる長文ドキュメント:SemanticChunker。チャンク戦略は一度決めたら終わりではなく、評価指標の変化を見ながら継続的に調整するプロセスです。
From guide to production
Our team has hands-on experience implementing these systems. Book a free architecture call to discuss your specific requirements and get a clear delivery plan.
御社の課題をお聞かせください。24時間以内に、AI活用の可能性と具体的な進め方について無料でご提案いたします。
Boolean and Beyond
825/90, 13th Cross, 3rd Main
Mahalaxmi Layout, Bengaluru - 560086
590, Diwan Bahadur Rd
Near Savitha Hall, R.S. Puram
Coimbatore, Tamil Nadu 641002