【RAG性能向上】ドキュメントのチャンキング(Chunking)最適化手法をコード付きで解説
はじめに
2026年、生成AIのビジネス活用においてRAG(Retrieval-Augmented Generation)は標準的な技術となりました。しかし、多くのエンジニアが直面するのが「検索精度の壁」です。LLM自体の性能向上も重要ですが、実は検索精度を左右する最大の要因は、ドキュメントをどのように分割するか、つまり**「チャンキング(Chunking)」**にあります。
「Garbage In, Garbage Out(ゴミを入れればゴミが出る)」の通り、不適切な分割は文脈の欠落を招き、LLMが正しい回答を生成するのを妨げます。本記事では、ハノイを拠点に高度なAI開発を行う NKKTech Software の知見をもとに、主要なチャンキング手法とそれぞれの最適化コードを解説します。
1. なぜチャンキングの最適化が必要なのか?
単一のドキュメント(例:100ページのPDF)をそのままベクトル化して検索することは不可能です。モデルの入力トークン制限や検索の関連性を考慮し、適切なサイズに分割する必要があります。
- チャンクが大きすぎる場合: ノイズが多くなり、LLMが回答に必要な情報を特定しにくくなる。
- チャンクが小さすぎる場合: 重要な文脈が途切れてしまい、意味が通じなくなる。
2. 実践的なチャンキング手法
2026年現在、主流となっている3つの手法をコードとともに紹介します。
① 再帰的文字分割 (Recursive Character Splitting)
LangChainなどのライブラリで標準的に使われる手法です。段落、文、単語の順に、指定したチャンクサイズに収まるよう再帰的に分割を試みます。
from langchain_text_splitters import RecursiveCharacterTextSplitter
text = "ここに長大な社内ドキュメントのテキストが入ります..."
# チャンクサイズとオーバーラップ(重なり)を設定
# オーバーラップを設けることで、文脈の断絶を防ぎます
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", "。", "、", " ", ""]
)
chunks = splitter.split_text(text)
print(f"分割後の数: {len(chunks)}")
② セマンティック・チャンキング (Semantic Chunking)
2026年現在のRAG実装において、最も「インテリジェント」な分割手法として注目されているのがセマンティック・チャンキングです。
従来の「文字数」ベースの分割とは異なり、Embeddingモデルを用いて文章間の「意味的な距離」を計算します。話題が急激に変化する箇所(意味的な類似度が閾値を下回るポイント)をAIが自動で検知して分割するため、コンテキストが破壊されにくいという大きなメリットがあります。
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai.embeddings import OpenAIEmbeddings
# 意味的な類似度を計算するためにEmbeddingモデルを使用
# 2026年現在の高性能なモデル(text-embedding-3-small等)を推奨します
embeddings = OpenAIEmbeddings()
# セマンティック・チャンカーの初期化
# breakpoint_threshold_type="percentile" を指定することで、
# 全体の類似度分布から統計的に適切な分割ポイントを特定します
semantic_chunker = SemanticChunker(
embeddings,
breakpoint_threshold_type="percentile"
)
# チャンク分割の実行
# 意味の連続性が保たれた、精度の高いチャンクが生成されます
chunks = semantic_chunker.create_documents([text])
# 結果の確認
for i, chunk in enumerate(chunks):
print(f"--- Chunk {i+1} ---")
print(chunk.page_content)
③ 構造化ドキュメント分割 (Markdown / HTML Splitter)
Wiki、技術仕様書、マニュアルなど、マークダウン形式やHTMLといった明確な構造を持つドキュメントに極めて有効な手法です。
最大の特徴は、見出し(# や ##)を基準に分割する点です。これにより、特定のトピックに関する記述が途中で断絶されるのを防ぎ、情報の「階層構造」を維持したままベクトルデータベースへ格納できます。
from langchain_text_splitters import MarkdownHeaderTextSplitter
# 分割の基準とするヘッダーレベルを指定
headers_to_split_on = [
("#", "Header 1"),
("##", "Header 2"),
("###", "Header 3"),
]
# スプリッターの初期化
markdown_splitter = MarkdownHeaderTextSplitter(
headers_to_split_on=headers_to_split_on,
strip_headers=False # ヘッダーテキストをチャンク内に保持するかどうか
)
# 分割の実行
md_header_splits = markdown_splitter.split_text(text)
# 各チャンクのメタデータには、どの見出しに属しているかの情報が自動付与されます
for chunk in md_header_splits:
print(f"Metadata: {chunk.metadata}")
print(f"Content Sample: {chunk.page_content[:50]}...")
3. 最適な手法を選ぶための比較表
ドキュメントの性質に合わせて、以下の表を参考に最適な手法を選択してください。
| 手法 | 適したドキュメント | メリット | デメリット |
|---|---|---|---|
| 再帰的分割 | 一般的なテキスト、ニュース、雑記 | 実装が容易で高速。計算コストが低い。 | 意味の区切れを無視し、文脈が断絶しやすい。 |
| セマンティック | 論文、契約書、技術解説 | 文章の意味の連続性を高度に維持できる。 | Embedding計算が必要なため、コストと時間がかかる。 |
| 構造化分割 | Wiki、マニュアル、README | 情報の階層構造(見出し関係)を完璧に維持。 | MarkdownやHTML形式でない文書には適用不可。 |
4. 精度向上のための3大チェックポイント
チャンキング手法を決めた後、さらに精度を引き上げるための運用上の工夫です。
-
Overlap(重複)の設定
前後のチャンクと 5〜10%程度の内容を重複(Overlap) させてください。これにより、分割地点付近にあるキーワードの文脈が途切れるのを防ぎ、検索ヒット率が劇的に向上します。 -
メタデータの付与
分割された各チャンクには、必ず以下の情報をメタデータとして付与しましょう。-
source: 元ファイル名やURL -
page_number: 参照元のページ番号 -
summary: そのセクションの短い要約(ハイブリッド検索に有効)
これらは検索時のフィルタリングや、LLMが回答の根拠を示す際に不可欠です。
-
-
定量評価(RAGAS)の導入
「なんとなく良くなった」を卒業しましょう。 RAGAS や TruLens といった評価フレームワークを用い、現在のチャンク設定が「忠実性(Faithfulness)」や「文脈の妥当性」において何点なのかを定量的に計測し、改善サイクルを回します。
まとめ:チャンキングは「AIの視力」を決める
RAGにおいて、チャンキングはAIが膨大な情報の中から必要なデータを見つけ出すための「レンズ」の役割を果たします。
ドキュメントの性質に合わせて最適な手法を選択し、パラメータを微調整することで、回答精度は劇的に向上します。「RAGの回答がズレる」「ハルシネーション(嘘)が多い」と悩んでいる方は、モデルを変更する前に、まず チャンキングの戦略 を見直してみてください。
🚀 NKKTech Software:高精度AI開発のパートナー
私たちは、ベトナム・ハノイを拠点に、日本品質のきめ細やかなマネジメントと最先端のAI技術力を融合させた開発チームです。
- 検索精度を極限まで高めたRAGシステム(社内FAQ・マニュアル検索)の構築
- 大規模ドキュメントのAI自動解析パイプラインの開発
- セキュアかつスケーラブルな社内ナレッジベースの構築
AI導入や現在のRAGシステムの精度改善でお困りでしたら、ぜひ一度ご相談ください。
- 🌎 Webサイト: https://nkktech.com
- 📩 メール: contact@nkk.com.vn
- 💼 LinkedIn: NKKTech Company Profile
確かなエンジニアリング力で、貴社のデータから真の価値を引き出します。
