RAG入門:AIに知識を与える技術
RAG精度改善(1):チャンキング戦略の見直し
このレッスンで分かること
- この記事では「RAG精度改善(1):チャンキング戦略の見直し」を RAG 実装 の現場で使える形で整理します
- RAGの精度を左右するチャンキングの重要性 をおさえれば、現場で迷ったときに立ち戻れる
- なぜチャンキング戦略の見直しが必要なのか? をおさえれば、現場で迷ったときに立ち戻れる
- 実践的なチャンキング手法の比較 をおさえれば、現場で迷ったときに立ち戻れる
- 1. 固定長チャンキング(Fixed-size Chunking) をおさえれば、現場で迷ったときに立ち戻れる
RAG精度改善(1) とは
RAGの回答精度を左右する「チャンキング戦略」を徹底解説。固定長分割や再帰的分割の違い、文脈を維持するためのオーバーラップ設定、データの性質に応じた適切なチャンクサイズの選び方など、実践的なテクニックを学べます。
RAGの精度を左右する「チャンキング」の重要性
RAG(検索拡張生成)システムを構築した際、「AIが期待通りの回答をしてくれない」「関連性の低いドキュメントを引用してしまう」といった課題に直面することがあります。その原因の多くは、実はプロンプトではなく、検索の前段階であるチャンキング(Chunking)の工程に潜んでいます。
チャンキングとは、膨大なドキュメントを管理しやすい小さな断片(チャンク)に分割する作業のことです。RAGにおいて、このチャンクは検索の最小単位となります。もし分割の仕方が不適切であれば、AIは必要な情報を正しく見つけ出すことができず、結果として回答の精度が著しく低下してしまいます。
チャンキングはRAGの土台 — 検索の最小単位を決める工程であり、ここが崩れるとプロンプトをどれだけ磨いても精度は伸びません。
本レッスンでは、RAGの精度を劇的に改善するためのチャンキング戦略について、具体的な手法と実践的なテクニックを詳しく解説します。
なぜチャンキング戦略の見直しが必要なのか?
RAGの仕組みを思い出してみましょう。ユーザーの質問に対して、システムはベクトルデータベースから最も類似度の高いチャンクを検索し、それをLLM(大規模言語モデル)に渡します。ここで、チャンキングが適切でないと以下のような問題が発生します。
- 文脈の欠落は文章が途中でぶつ切りになり、前後の意味が通じなくなる。
- ノイズの混入はチャンクが大きすぎて、無関係な情報が大量に含まれてしまう。
- 検索漏れは重要なキーワードが分割されたチャンクの境界線に位置し、正しくヒットしない。
これらの問題を解決するためには、単に文字数で区切るのではなく、ドキュメントの構造や意味を考慮した戦略が必要になります。
実践的なチャンキング手法の比較
チャンキングにはいくつかの代表的な手法があります。扱うデータの性質に合わせて最適なものを選択しましょう。
1. 固定長チャンキング(Fixed-size Chunking)
指定した文字数やトークン数で機械的に分割する方法です。実装は非常に簡単ですが、文章の途中で切れてしまうリスクが最も高い手法です。
2. 再帰的文字分割(Recursive Character Splitting)
LangChainなどのライブラリで推奨されている、より洗練された手法です。まず段落(\n\n)で区切り、それでも大きい場合は改行(\n)、句点(。)、空白という優先順位で、意味の切れ目を探しながら分割します。これにより、可能な限り文章のまとまりを維持できます。
3. セマンティック・チャンキング(Semantic Chunking)
AI(埋め込みモデル)を使用して、文章の意味的な変化を検知し、トピックが変わるタイミングで分割する高度な手法です。計算コストはかかりますが、最も文脈を保持しやすいのが特徴です。
まず再帰的分割から試す — 固定長は雑、セマンティックは重い。汎用ドキュメントなら再帰的分割を起点に、サイズとオーバーラップを調整するのが鉄板です。
| 手法 | メリット | デメリット | 適したデータ |
|---|---|---|---|
| 固定長 | 処理が速い、実装が楽 | 文脈が壊れやすい | 構造化されていない雑多なメモ |
| 再帰的分割 | 汎用性が高い、バランスが良い | 設定の微調整が必要 | 報告書、マニュアル、記事 |
| セマンティック | 文脈の保持が最強 | 処理コストが高い | 複雑な議論、物語、専門書 |
精度を高めるための「オーバーラップ」設定
チャンキングにおいて極めて重要なテクニックが、オーバーラップ(Overlap)の設定です。これは、隣接するチャンク同士で一部の内容を重複させることを指します。
避けたい例 オーバーラップなしの設定 チャンクA:「...プロジェクトの納期は12月20日です。」 チャンクB:「その日までに全てのテストを完了させる必要があります。」
→ 検索でチャンクBだけがヒットした場合、AIは「その日」がいつを指すのか理解できず、回答の精度が落ちます。
良い例 オーバーラップありの設定(例:20%程度の重複) チャンクA:「...プロジェクトの納期は12月20日です。その日までに」 チャンクB:「12月20日です。その日までに全てのテストを完了させる必要があります。」
→ どちらのチャンクがヒットしても、日付と行動の関連性が保たれるため、AIは正確に回答できます。
一般的に、チャンクサイズの10%〜20%程度をオーバーラップさせるのがベストプラクティスとされています。
ユースケース別:最適なチャンクサイズの目安
「適切なチャンクサイズはどれくらいか?」という問いへの答えは、データの種類によって異なります。
- Q&A形式のデータは1つの質問と回答が1チャンクに収まるように調整します(100〜300文字程度)。
- 社内規定・マニュアルは各条項や手順が途切れないよう、やや長めに設定します(500〜1000文字程度)。
- 技術ドキュメントはコードブロックが含まれる場合、コードが断片化しないよう構造を意識した分割が必要です。
やってみよう 考えてみよう:カスタマーサポートの対応履歴 過去のサポートメール(1通あたり平均800文字)をRAGに読み込ませる場合、あなたならどのようなチャンキング戦略を立てますか?
- 固定100文字で分割する
- 「件名」「問い合わせ内容」「回答」の構造を保って1通ごと、あるいは項目ごとに分割する
- 5文字ずつオーバーラップさせて500文字で切る
答え:2が最適です。メールは構造が明確なため、意味的なまとまりで分割することで
検索精度が飛躍的に向上します。
まとめ:データに合わせた「型」を見つけよう
RAGの精度改善において、チャンキングは「地味ながら最も効果が出る」工程です。以下の3点を意識して、自社のデータに最適な設定を検証してみましょう。
- 再帰的分割を基本とし、文章の構造(段落や句点)を尊重する。
- オーバーラップを適切に設定し、文脈の断片化を防ぐ。
- データの性質に合わせてチャンクサイズを使い分ける。
次回のレッスンでは、検索の精度をさらに引き上げる「HyDE」や「Reranking」といった高度な手法について学びます。
「データはAIのガソリン」と言われますが、RAGにおいては「適切にカットされたデータこそが最高品質の燃料」になります。最初は試行錯誤が必要ですが、ここを丁寧に作り込むことで、驚くほど賢いAIアシスタントが誕生しますよ!
現場でよくある具体例
- 業務ケース 1 — 社内規程 200 ページに RAG を導入。チャンクサイズ 512、
top-k=5、Re-ranker 有りで Recall@5 が 0.62 → 0.81 - 業務ケース 2 — エンジニア向け技術文書では「コードブロックを 1 チャンク」にしたら検索精度が大きく改善
- 業務ケース 3 — 営業 FAQ では
BM25+ Embedding の Hybrid Retrieval で、固有名詞検索の取りこぼしが減った
次にとるべきアクション
- 手元の社内 PDF / FAQ 10 件で RAG ミニ版を作る —
LangChainかLlamaIndexで構築し、「RAG精度改善(1):チャンキング戦略の見直し」の論点を試す - チャンクサイズと検索件数を 2 通り試す — 256 / 512 トークン × top-k=3 / 5 など、定量比較する
- 評価指標を 1 つ決める — Recall@k / 回答正答率 / コストのいずれかをチームで KPI 化する
次のレッスン
次は RAG精度改善(2):高度な検索手法(HyDE, Reranking) で、RAG精度改善(2):高度な検索手法(HyDE, Reranking) を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- RAG精度改善(1) の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. RAG精度改善(1) とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
参考にした出典
- Lewis et al.「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」 — RAG の原論文(出典: NeurIPS 2020, https://arxiv.org/abs/2005.11401)
- OpenAI Cookbook「Question answering using embeddings」 — Embedding ベース検索の実装例(出典: OpenAI, https://cookbook.openai.com/examples/question_answering_using_embeddings)
- LangChain 公式ドキュメント「RAG」 — チャンク分割・リトリーバ設計のベストプラクティス(出典: LangChain, https://python.langchain.com/docs/tutorials/rag/)
学習を加速したい方へ
RAG (検索拡張生成) 入門ガイドを体系的にマスターするなら、chotdekiru の無料学習ポータル で実際に手を動かして学習を始めるのがおすすめです。質問・つまずきも現役エンジニアが伴走します。
復習ミニクイズ
RAGシステムにおいて「前後の文章が分割されたことで、指示語(『その日』『同プロジェクト』など)の内容がAIに伝わらず、回答精度が下がる」という問題が発生しました。この文脈の断片化を防ぐために、最も一般的に推奨される設定はどれですか?