開発分析

RAGのチャンクサイズと重複幅はどう決める?固定値より先に見る4条件

RAGのチャンクサイズと重複幅はどう決める? — 固定値より先に見る4条件
目次

RAGで文書を分割するとき、「チャンクサイズは何文字が正解か」「重複は何%がよいか」と固定値を探したくなる。

しかし、先に見るべきなのは自分の文書と質問の形だ。同じ数字でも、FAQ、規約、マニュアル、議事録では意味の切れ方が違う。

RAGのチャンクサイズと重複幅はどう決める?固定値より先に見る4条件の要点を図解

図を拡大して見る

図: 主な比較軸を1枚に整理。細かな条件は本文と表で確認する。

まず文書の自然な区切りを見る

文書ごとに、一まとまりとして扱いたい単位を確認する。

  • FAQなら一つの質問と回答
  • マニュアルなら一つの操作手順
  • 規約なら一つの条項
  • 議事録なら一つの議題や発言のまとまり

この単位より細かく切りすぎると、答えに必要な条件や例外が別のチャンクへ分かれることがある。

反対に、何ページ分もの文章を一つにすると、質問と関係ない情報まで検索結果へ入りやすくなる。

最初に数件の質問を選び、「この質問へ答えるにはどこからどこまで一緒に取れてほしいか」を目で確認する。

チャンクサイズは検索する文書片の大きさ

Open WebUIのRAG資料でも、チャンクサイズは検索対象となる文書片の大きさとして扱われている。

小さいチャンクは、一つの事実や語句へ絞りやすい。一方、見出し・条件・例外が隣のチャンクへ分かれると、その関係を失いやすい。

大きいチャンクは周辺の説明を残しやすいが、不要な文章も一緒に含みやすい。

つまり、「小さいほど精密」「大きいほど高性能」と単純には決められない。

重複幅は境界で情報が切れるときに使う

チャンク同士を少し重ねる設定は、境界の前後にある情報を両方へ残すために使える。

たとえば見出しと本文がちょうど境界で分かれるなら、少し重ねることで両方を含められる場合がある。

ただし、重複を増やしすぎると、検索用の索引に似た文書片が大量に入る。

起きていること まず確認すること
必要な一文は取れるが条件が抜ける チャンクが細かすぎないか
関係ない文章も大量に取れる チャンクが大きすぎないか
境界付近の説明だけ抜ける 重複幅が足りないか
似た文書片ばかり返る 重複が多すぎないか

埋め込みモデルと生成モデルの入力条件も見る

チャンクを大きくするときは、埋め込みモデルが扱える入力長も確認する。

ただし、最大入力長が大きいからといって、その上限までチャンクを大きくする必要はない。

RAGでは、検索後の文書片を生成モデルへ渡すため、生成側で使える文脈量も関係する。埋め込みモデルだけを見て決めない。

日本語文書なら、モデル名や埋め込み次元数から検索品質を推測するより、実際の日本語の質問と文書で確かめる方が確実だ。

同じ質問で2〜3設定を比べる

最初から細かい組み合わせを大量に試す必要はない。

  1. 内容を把握している文書を一つ選ぶ
  2. 答えが明確な質問を5〜10件作る
  3. チャンクサイズと重複幅を2〜3通り用意する
  4. 各質問で、答えに必要な文書片が検索上位へ出るか見る
  5. 生成回答ではなく、まず検索結果を比較する

このとき、一度にチャンクサイズ、重複幅、埋め込みモデルを全部変えない。複数条件を同時に変えると、何が改善したのか分からなくなる。

失敗した質問も保存しておけば、後で文書解析方法や埋め込みモデルを変更したときに同じ条件で比べられる。

チャンク設定の目的は有名な数字に合わせることではなく、自分の質問に必要な情報を検索できる単位で残すことだ。

まとめ

  • チャンクサイズに全RAG共通の正解はなく、文書の構造と質問の細かさから決める
  • 細かく切りすぎると周辺条件を失いやすく、大きすぎると不要な文章まで一緒に検索されやすい
  • 重複幅は境界で情報が切れるのを防ぐための調整で、多ければよいわけではない
  • 同じ文書・同じ質問で2〜3設定を比べ、答えに必要な文書片が検索できるかで決める
同じテーマから

サイト内検索