第2章 データ準備 / 想定学習時間:30〜40分 / 最終確認:2026年8月

2-3. チャンキング戦略(固定長、意味単位、オーバーラップ設定など)とその使い分け

🎯 この節の学習目標

1. なぜチャンキングが必要なのか

抽出したテキストをそのまま1文書=1レコードで埋め込み・索引化することは、通常しません。文書を適切な大きさの断片(チャンク)に分割する工程がチャンキングです。必要な理由は3つあります。

  1. 埋め込みモデルの入力上限 — 埋め込みモデルには入力トークン数の上限があり、長い文書は物理的にそのまま埋め込めません。上限を超えた部分が黙って切り捨てられれば、その内容は検索不能になります。
  2. 検索粒度 — 文書全体を1本のベクトルにすると、多様な話題が1つのベクトルに「平均化」され、特定の質問と強く一致しなくなります。質問に対応する適切な粒度の断片に分けるほど、検索は精密になります。
  3. LLMのコンテキスト長 — 検索結果はプロンプトに詰めてLLMに渡します。巨大な断片はコンテキストウィンドウを圧迫し、コストとレイテンシも増やします。

つまりチャンクは「検索の単位」であり「LLMに渡す文脈の単位」です。この二役を意識すると、以降の戦略の良し悪しが判断できるようになります。

生文書PDF / HTML など(Volume に格納)
テキスト抽出2-2
クリーニング2-5
チャンキングこの節(2-3)
メタデータ付与2-6
埋め込み埋め込みモデルでベクトル化
AI Search インデックス3-3

図:データ準備パイプラインの全体像。チャンキングは抽出・クリーニングの後、埋め込みの前に位置します。

2. 固定長チャンキングとオーバーラップ

最も基本的な戦略が、文字数またはトークン数で機械的に区切る固定長チャンキングです(例:500トークンごと)。実装が簡単で、どんな文書にも一律に適用でき、チャンクサイズが揃うため運用も予測しやすいのが長所です。

欠点は、文や段落の途中でも容赦なく切れることです。「解約金は当社が定める料金表に基づき/(チャンク境界)/10万円とする」のように、意味の連続した情報が2つのチャンクに泣き別れすると、どちらのチャンク単体でも質問に答えられなくなります。

この境界問題を緩和する定番がオーバーラップ(重複)です。隣接チャンクの末尾と先頭を一定量(例:チャンク500トークンに対し50〜100トークン)重複させることで、境界をまたぐ文脈がどちらかのチャンクには完全な形で含まれる可能性を高めます。代償はチャンク数と保存・埋め込みコストの微増です。

# LangChainでの固定長+オーバーラップの例
from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,      # チャンクの最大サイズ
    chunk_overlap=100,    # 隣接チャンクとの重複量
)
chunks = splitter.split_text(document_text)

3. 意味の切れ目を尊重する戦略

固定長の「機械的に切れる」欠点を改善する方向に、いくつかの戦略があります。

戦略仕組み長所短所
再帰的分割(Recursive)段落(\n\n)→文→単語の順に「自然な区切り」を探し、サイズ内に収まるよう再帰的に分割実装容易なまま、文・段落の切れ目を極力尊重できる。汎用のデフォルトとして最有力意味の変化までは見ていない
文単位・段落単位文または段落を最小単位として結合しチャンクを作る文の途中で切れない文・段落の長さ次第でサイズが不揃いになる
構造ベースMarkdownやHTMLの見出し(セクション)単位で分割書き手が意図した意味のまとまりを保てる。見出しをメタデータ化できる構造情報が抽出時に保持されている必要がある(2-2)。セクション長のばらつきが大きい
セマンティックチャンキング文ごとの埋め込みを計算し、意味が大きく変化する点を境界として分割話題のまとまりに忠実埋め込み計算のコストがかかり、パイプラインが複雑になる

「高度なほど良い」わけではありません。整った見出し構造を持つ文書なら構造ベースが素直で安価に効きますし、構造のないプレーンテキストの雑多なコーパスなら再帰的分割+オーバーラップが堅実です。セマンティックチャンキングは品質要求が高く前処理コストを許容できる場合の選択肢です。

📝 試験のポイント

各戦略の名前と特徴の対応がそのまま問われます。「文の途中で切れる問題を簡単に緩和する→オーバーラップ」「段落・文の区切りを優先しつつサイズ制御→再帰的分割」「意味の変化点で分割し、埋め込み計算が必要→セマンティックチャンキング」「見出し単位→構造ベース」という対応を即答できるようにしておきましょう。

4. 文書タイプ別の使い分け

チャンキング戦略の選択は、突き詰めると「ユーザーの質問に答えるための情報のまとまりは、この文書ではどの単位か」という問いです。文書タイプごとの定石を示します。

文書タイプ情報のまとまり推奨戦略
FAQ1つのQ&AペアQ&A単位で1チャンク。複数のQ&Aを混ぜない
契約書・規程条・項条項単位の構造ベース分割。条番号をメタデータに残す
マニュアル・技術文書セクション(見出し配下)見出し単位の構造ベース。長大なセクションはさらに再帰的分割
チャットログ・議事録話題のまとまり発言単位の結合、またはセマンティックチャンキング
構造のないプレーンテキスト段落再帰的分割+オーバーラップ(汎用デフォルト)

💼 例:FAQを固定長で切ってはいけない

200件のQ&Aからなる社内FAQを、固定長500トークンで機械的に分割したとします。すると「Q:経費精算の締め日は? A:毎月25日です」というペアの途中で境界が入り、質問文だけのチャンクと回答文だけのチャンクに分かれることが起こります。質問文チャンクはユーザーの質問と高い類似度でヒットしますが、肝心の回答が含まれていないため、LLMは答えられません。FAQは「1つのQ&Aペア=1チャンク」が定石であり、この場合チャンクサイズの調整よりも分割単位の変更が正しい対処です。

5. 戦略選択のチェックリスト

実務・試験の双方で使える判断手順をまとめます。

  1. 文書に構造はあるか? — 見出し・条項・Q&Aなどの構造があるなら、まずそれを分割単位の候補にする。
  2. 想定される質問の粒度は? — 「1つの質問に答えるのに必要な情報」が1チャンクに収まる単位を選ぶ(サイズの定量的な調整は次節2-4)。
  3. 境界で泣き別れしやすいか? — 固定長・再帰的分割を使うならオーバーラップを設定する。
  4. コストと複雑さは見合うか? — セマンティックチャンキングなど高コストな手法は、単純な手法で品質が不足すると評価で確認してから導入する。

✅ この節のまとめ

練習問題

問1. 固定長チャンキングを採用したところ、重要な説明が文の途中でチャンク境界により分断され、検索されたチャンク単体では回答に必要な文脈が欠けるケースが多発した。実装を大きく変えずにこの問題を緩和する最も適切な方法はどれか。

  1. チャンクサイズを半分にする
  2. 隣接チャンク間にオーバーラップ(重複)を設定する
  3. 埋め込みモデルをより大きなものに変更する
  4. チャンキングをやめて文書全体を1チャンクにする
解答と解説を見る

正解:B

境界をまたぐ文脈の断絶には、隣接チャンクを一部重複させるオーバーラップが定番の緩和策です。Aはチャンクを小さくするため境界がむしろ増え、問題が悪化します。Cは分割の問題であり埋め込みモデルでは解決しません。Dは埋め込み上限・検索粒度の観点で非現実的です。

問2. 「段落の区切り、次に文の区切り、それでも収まらなければ単語の区切り」という順序で自然な分割点を探しながら、指定サイズ以内のチャンクを作る戦略はどれか。

  1. 固定長チャンキング
  2. セマンティックチャンキング
  3. 再帰的分割(Recursive splitting)
  4. 構造ベースチャンキング
解答と解説を見る

正解:C

区切り文字の優先順位(段落→文→単語)をたどりながら再帰的に分割するのが再帰的分割で、LangChainのRecursiveCharacterTextSplitterが代表例です。Aは区切りを考慮せず一定サイズで切ります。Bは埋め込みを用いて意味の変化点で切る手法、Dは見出しなど文書構造の単位で切る手法です。

問3. 数百件のQ&Aからなる社内FAQコーパスをRAG化する。チャンキング戦略として最も適切なのはどれか。

  1. コーパス全体を連結し、1000トークンの固定長で分割する
  2. 1つの質問と対応する回答のペアを1チャンクとする
  3. ページ単位で分割する
  4. 1文字ずつに分割して最大限の検索粒度を得る
解答と解説を見る

正解:B

FAQでは「質問+回答のペア」が自己完結した情報のまとまりであり、これを1チャンクにするのが定石です。Aは固定長の境界がQ&Aペアの途中に入り、質問と回答が泣き別れするリスクがあります。Cのページは複数の無関係なQ&Aを混在させます。Dは意味を成さない断片になり、埋め込みも検索も機能しません。

問4. 整った見出し階層を持つMarkdown形式の技術マニュアルをチャンク化する。書き手が意図した意味のまとまりを最も安価に活かせる戦略はどれか。

  1. 見出し(セクション)単位で分割する構造ベースチャンキング
  2. 文ごとの埋め込みを計算して意味の変化点で分割するセマンティックチャンキング
  3. 200文字の固定長チャンキング(オーバーラップなし)
  4. 文書全体を1チャンクにする
解答と解説を見る

正解:A

Markdownの見出しは書き手自身が付けた意味の区切りであり、これを分割単位に使う構造ベースが最も素直で、追加の計算コストもかかりません。Bでも良い分割は得られますが、埋め込み計算のコストがかかり、構造が既にある文書に対しては過剰です。Cは構造を無視して意味のまとまりを壊し、Dは埋め込み上限と検索粒度の点で不適切です。