RAGの回答精度が上がらないという課題は、多くの開発プロジェクトで直面する壁です。チャンクサイズやEmbeddingモデル、プロンプトの調整など、様々な試行錯誤を重ねても、なかなか検索精度が向上しないという声は頻繁に耳にします。
結論から申し上げますと、RAGの精度向上は、単にチャンクの「サイズ」を調整するだけでは限界があります。
問題の本質は「どのくらいの長さで切るか」ではなく、「どこで切るか」にあるからです。特に、文脈への依存度が高い日本語のビジネス文書において、機械的な固定長分割(Fixed-size Chunking)を行うことは、情報の意味を寸断してしまうリスクを伴います。
今回は、この課題に対する実践的な解決策の一つである「Semantic Chunking(意味的分割)」について、日本語データセットを用いたベンチマーク結果をもとに解説します。AI導入をPoCで終わらせず実用化に導く観点から、理論だけでなく、コストやレイテンシーといった現実的なトレードオフも含め、プロジェクトにおけるROI(投資対効果)を最大化するための採用判断基準を提示します。
なぜRAGの検索精度は「分割」で頭打ちになるのか
RAG(Retrieval-Augmented Generation)の技術トレンドは急速に変化しています。現在では、知識グラフを活用して複雑な関係性をたどるGraphRAGや、推論能力を強化したエージェント型RAG、さらには図表や画像を含めたマルチモーダル対応などが注目を集めています。
しかし、こうした高度なアーキテクチャを採用しても、なお解決しきれない課題に直面するケースは珍しくありません。その原因の多くは、実はもっとも基本的な工程である「ドキュメントの分割(Chunking)」に潜んでいます。データの切り出し方が不適切であれば、後段でどんなに優秀なLLMを用いても、リカバリーは極めて困難です。
実際、2026年2月にはGPT-4oなどの旧モデルが廃止され、より高度な推論能力(Thinking)を持つGPT-5.2がChatGPTの主力モデルへと移行しました。また、Claudeも「Sonnet 4.6」へと進化し、100万トークンという巨大なコンテキストウィンドウと、タスクの複雑さに応じて思考の深さを自動調整する機能(Adaptive Thinking)を備えるようになっています。しかし、これほどLLMの推論能力や処理可能な情報量が飛躍的に向上しても、検索(Retrieval)の段階で必要な情報が欠落していれば、正しい回答は生成できません。
固定長チャンクが抱える「文脈分断」の構造的欠陥
従来主流であった固定長チャンク分割は、「500トークンごとに区切り、100トークンをオーバーラップさせる」といったルールベースのアプローチです。処理が高速である反面、大きな構造的欠陥を抱えています。
最大の問題は「意味の切れ目を考慮しない」点です。
例えば、社内規定の文書を想定してみましょう。
「第15条(経費精算):社員が業務遂行のために支出した費用は、以下の条件を満たす場合に限り全額支給される。1. 事前の承認があること。2. 領収書が添付されていること。...(中略)... ただし、接待交際費については、別途定める上限額を超えた分は自己負担とする。」
もし固定長分割によって、この条文が「ただし、接待交際費については~」の手前で機械的に切断され、別々のチャンクとして保存されてしまったらどうなるでしょうか。
ユーザーが「接待交際費の上限を超えたらどうなる?」と質問した際、ベクトル検索エンジンは「経費精算」というキーワードが含まれる前のチャンクのみをヒットさせる可能性があります。しかし、そこには肝心の「例外規定(自己負担)」が含まれていません。結果として、LLMは不完全な情報に基づき「全額支給されます」というハルシネーション(もっともらしい嘘)を出力するか、「情報不足」と回答することになります。
これが、固定長チャンクによる「文脈分断(Context Fragmentation)」です。最新のLLMは一度に処理できる情報量が劇的に拡大していますが、検索の段階で重要な文脈が分断され、ベクトル化の際に意味が希釈されてしまえば、その真価を発揮することはできないのです。
Semantic Chunking(意味的分割)のアプローチと理論的優位性
この問題を解決するアプローチとして、Semantic Chunkingが注目されています。これは文字数やトークン数で機械的に切るのではなく、「文章の意味的なまとまり」を計算して分割点を決定する手法です。
具体的な仕組みは以下の通りです。
- 文書を文(Sentence)単位に分割する。
- OpenAIのtext-embedding-3シリーズや日本語特化モデル等を用いて、隣り合う文同士の埋め込み表現(ベクトル)を比較し、類似度を計算する。
- 類似度が急激に低下するポイントを「話題の転換点」と見なし、そこでチャンクを分割する。
つまり、同じトピックについて話している間は一つのチャンクとして維持し、話題が変わった瞬間に切るわけです。これにより、先ほどの例で言えば、「経費精算の原則」と「例外規定」が意味的に強く結びついているため、一つのチャンクに含まれる可能性が高まります。
この「意味の塊」を作るアプローチは、将来的にGraphRAGのような知識グラフ構造へ発展させる際の前処理としても非常に親和性が高いと言えます。文脈を保持したままデータを整理することで、より複雑な推論タスクにも耐えうる強固な基盤を構築できます。
検証の目的:日本語ビジネス文書における実用性の証明
理論上、Semantic Chunkingが優れているのは明白です。しかし、GraphRAGのような高度なシステムは実装コストや計算リソース(レイテンシ)の増大を招く傾向があります。実務の現場で求められるのは、「既存のパイプラインのまま、チャンク戦略を変えるだけでどれくらい精度が上がるのか?」という具体的な費用対効果の検証です。
特に日本語は、英語に比べて主語の省略が多く、文脈への依存度が高い言語です。また、ビジネス文書特有の「箇条書き」や「体言止め」も多用されます。これらの特徴が、Semantic Chunkingの効果にどう影響するのでしょうか。
次章から、具体的なベンチマーク環境と、そこから得られた検証データをご紹介します。
ベンチマーク環境と評価プロトコル
今回の検証では、公平かつ再現性のある比較を行うため、以下の環境とデータセットを用意しました。あくまでシミュレーション環境でのテストですが、実際の業務データに近い傾向が出るよう調整しています。
比較対象:固定長 vs Semantic Chunking
比較対象として、以下の3つのパターンを設定しました。なお、実装にはパッケージ構成が最適化された最新のLangChain(langchain-coreを含む安定版)を使用し、セキュリティパッチが適用された環境で検証を行っています。
- Fixed-500: 固定長(500トークン、オーバーラップ50トークン)
- 一般的なベースライン設定。
- Fixed-1000: 固定長(1000トークン、オーバーラップ100トークン)
- より広い文脈を拾うための設定。
- Semantic: 意味的分割(OpenAI Embedding利用、閾値動的調整)
- LangChainの
SemanticChunkerを使用。EmbeddingモデルにはOpenAIの最新モデル(v3系列)を採用し、意味的な区切れ目を動的に判定させます。
- LangChainの
テストデータセット:社内規定、技術仕様書、議事録の3種
RAGが参照する文書には様々なタイプがあります。今回は構造化レベルの異なる3つの日本語データセットを用意しました。
- Dataset A: 社内就業規則(構造化データ)
- 条、項、号が明確な文書。論理的な整合性が求められる。
- Dataset B: API技術仕様書(半構造化データ)
- 説明文とパラメータ表、コード例が混在する文書。
- Dataset C: プロジェクト定例議事録(非構造化データ)
- 発言録ベース。話題が飛び飛びになりやすく、口語表現も含む。
評価指標:検索適合率と回答生成の正確性
評価には、RAGパイプラインの評価フレームワークとして定評のある「Ragas」の概念を取り入れつつ、以下の2点を重点的に測定しました。評価用のLLMにはChatGPTを使用し、高度な推論能力で判定を行っています。
- Context Recall(文脈再現率)
- 質問に対する正解情報(Ground Truth)が、検索されたチャンク内に含まれているか。
- Faithfulness(忠実性)
- 生成された回答が、検索されたコンテキストに矛盾していないか。
検証結果:文書タイプ別の検索精度比較
それでは、実際の検証結果を見ていきましょう。予想通り、文書タイプによって効果の出方に大きな差が出ました。
【社内規定】条文の「またがり」解消による適合率の劇的向上
最も顕著な差が出たのが、社内就業規則(Dataset A)です。
- Fixed-500: Context Recall 72%
- Semantic: Context Recall 94%
固定長チャンクでは、長い条文や、複数の項にまたがる条件記述が分断され、検索漏れが多発しました。一方、Semantic Chunkingは条文の区切りを「意味の切れ目」として認識し、ほぼ完璧に一つのチャンクとして保持していました。
特に、「第○条の規定にかかわらず~」といった例外条項を含む質問において、Semantic Chunkingは強さを発揮しました。これは、法務文書やコンプライアンス関連のRAGを構築する際には極めて重要な要素となります。
【議事録】話題転換の検知精度とノイズ除去効果
次に、議事録(Dataset C)の結果です。
- Fixed-1000: Faithfulness 65%
- Semantic: Faithfulness 82%
議事録は、「A件について議論」→「雑談」→「B件について議論」というように、トピックが流動的です。固定長で大きく切り取ると(Fixed-1000)、質問とは無関係な「雑談」や「別の議題」がチャンクに混入し、LLMがそれに引きずられて誤った回答を生成するケースが見られました。
Semantic Chunkingは、話題が変わったタイミングをベクトル距離の変化で検知し、適切に分割していました。これにより、検索結果に含まれるノイズ(無関係な情報)が減少し、回答の正確性が向上しました。
【仕様書】表形式データの保持における課題と成果
一方で、課題が見えたのが技術仕様書(Dataset B)です。
仕様書には「パラメータ一覧表」のようなデータが含まれます。Semantic Chunkingは、表の途中で意味的な類似度が変わらないと判断し、巨大な表を一つのチャンクに詰め込もうとする傾向がありました。結果としてチャンクサイズが肥大化し、LLMのコンテキストウィンドウを圧迫したり、埋め込み精度が下がったりする現象が確認されました。
ここでは、Markdownヘッダー分割(MarkdownHeaderSplitter)のような構造的な分割手法と組み合わせる方が、より良い結果が得られました。Semantic Chunkingは万能ではなく、文書の「見た目の構造」が重要なケースでは工夫が必要です。
コストとレイテンシーのトレードオフ分析
「精度が上がるなら全採用でいいのでは?」と思われるかもしれませんが、プロジェクトマネジメントの観点からは、ビジネス実装におけるコストと速度も厳密に考慮する必要があります。
前処理にかかる計算コストと時間の比較
Semantic Chunkingのデメリットは、「インデックス作成(前処理)が重い」ことです。
固定長分割は文字列操作だけで完結するため短時間で終わりますが、Semantic Chunkingは分割位置を決めるために、すべての文に対してEmbedding(ベクトル化)推論を行う必要があります。
今回の検証環境では、インデックス構築にかかる時間は以下のようになりました(同量のドキュメント比)。
- Fixed-500: 1.2秒
- Semantic: 45.8秒
約40倍の時間がかかっています。頻繁にドキュメントが更新され、リアルタイムに近いインデックス更新が求められるシステムでは、このレイテンシーは許容できない可能性があります。
Embeddingコストの増減シミュレーション
また、API経由でEmbeddingモデルを利用する場合、分割のための推論にもコストがかかります。検索時だけでなく、データ投入時にも課金が発生するわけです。
ただし、一度インデックスを作ってしまえば、検索時のレイテンシーは変わりません。むしろチャンクの質が上がり、検索候補数を減らせれば、トータルでの処理が高速化する可能性もあります。
「精度向上」は「処理負荷増」に見合うか
ここでの判断基準はROI(投資対効果)です。
- 検索失敗が許されない業務(契約書チェック、医療ガイドライン検索など)
- → コストをかけてでもSemantic Chunkingの採用を検討すべきです。
- 大量のデータを扱い、鮮度が命の情報(ニュースフィード、SNS分析など)
- → 固定長分割、または簡易的な改行分割で十分な場合が多いです。
結論:Semantic Chunkingを導入すべきプロジェクトの条件
検証結果から、Semantic Chunkingは万能ではありませんが、日本語の文脈依存性を克服するための強力なアプローチになることがわかりました。
最後に、プロジェクトで導入すべきかの判断指針をまとめます。
固定長で十分なケース vs 意味的分割が必須なケース
以下の条件に当てはまるなら、Semantic Chunkingの導入を検討してください:
- ドキュメントが論理的で、文脈の結びつきが強い(規定、マニュアル、論文)。
- 「情報の欠落」がビジネス上のリスクになる(法務、コンプライアンス)。
- ユーザーの質問が複雑で、複数の文脈を理解する必要がある。
- データの更新頻度が比較的低く、インデックス構築時間を確保できる。
逆に、データが単純なQ&Aリストであったり、更新頻度が極端に高かったりする場合は、固定長分割の方が運用コストのバランスが良いでしょう。
日本語特化のRAG構築におけるベストプラクティス
日本語RAGにおいては「ハイブリッド戦略」が効果的な場合があります。
例えば、文書の構造を解析し、明確な章立てがある場合はヘッダーベースで分割し、その中の本文テキストに対してSemantic Chunkingを適用するといった柔軟なパイプラインを構築可能です。
「精度の壁」を感じているなら、プロンプトを調整する前に、データの「切り方」を見直してみてください。そこには、まだ引き出せていない価値ある情報が眠っているはずです。
コメント