RAGの精度が低い原因は、7つの層に渡って点在しています。順番にチェックしていきましょう。
第一にソース文書の品質。古い情報、矛盾する情報、冗長な情報が混在していないか。RAGはドキュメントの内容をそのまま信じるため、ソースが汚いと出力も汚れます。文書の棚卸しと、正本/参考/廃止 の区分けが第一歩です。
第二に前処理(パース)の品質。PDFの表が崩れていないか、ヘッダー・フッターが本文に混入していないか、改行が文脈を切っていないか。Unstructured、PyMuPDF、LlamaParse など、コンテンツに応じたパーサを使い分けます。
第三にチャンキング戦略。固定800字で切ると意味の途中で切れることがあります。段落単位・節単位・あるいは LLM ベースのセマンティック チャンキングが有効です。チャンク同士に少しオーバーラップを持たせる(例: 100字)と、検索時の取りこぼしが減ります。
第四に埋め込みモデルの選定。OpenAI の text-embedding-ada-002 と text-embedding-3-large でも全く違います。日本語データなら multilingual-e5 系も検討の余地があります。同じデータで複数モデルを比較し、評価データセットで最良のものを選びます。
第五に検索戦略。コサイン類似度だけだと固有名詞や数値に弱いです。BM25 を併用したハイブリッド検索、クエリ拡張(HyDE)、メタデータフィルタなどで Recall を改善します。
第六に再ランキング。検索で上位20件取って、Cohere Rerank や Cross Encoder で上位5件に絞り込むと、生成側の品質が劇的に上がります。
第七に生成プロンプト。「以下の文脈から答えてください」だけでは不十分。「文脈に明確な答えがなければ『分からない』と回答してください」「回答には引用元の文書ID を [doc#XX] の形で付けてください」など、丁寧な指示が品質を決めます。
これらを一つひとつ見直すには、まず評価データセット(Q&A 30〜100組)を作ることから始めます。計測なくして改善なし、です。
第一にソース文書の品質。古い情報、矛盾する情報、冗長な情報が混在していないか。RAGはドキュメントの内容をそのまま信じるため、ソースが汚いと出力も汚れます。文書の棚卸しと、正本/参考/廃止 の区分けが第一歩です。
第二に前処理(パース)の品質。PDFの表が崩れていないか、ヘッダー・フッターが本文に混入していないか、改行が文脈を切っていないか。Unstructured、PyMuPDF、LlamaParse など、コンテンツに応じたパーサを使い分けます。
第三にチャンキング戦略。固定800字で切ると意味の途中で切れることがあります。段落単位・節単位・あるいは LLM ベースのセマンティック チャンキングが有効です。チャンク同士に少しオーバーラップを持たせる(例: 100字)と、検索時の取りこぼしが減ります。
第四に埋め込みモデルの選定。OpenAI の text-embedding-ada-002 と text-embedding-3-large でも全く違います。日本語データなら multilingual-e5 系も検討の余地があります。同じデータで複数モデルを比較し、評価データセットで最良のものを選びます。
第五に検索戦略。コサイン類似度だけだと固有名詞や数値に弱いです。BM25 を併用したハイブリッド検索、クエリ拡張(HyDE)、メタデータフィルタなどで Recall を改善します。
第六に再ランキング。検索で上位20件取って、Cohere Rerank や Cross Encoder で上位5件に絞り込むと、生成側の品質が劇的に上がります。
第七に生成プロンプト。「以下の文脈から答えてください」だけでは不十分。「文脈に明確な答えがなければ『分からない』と回答してください」「回答には引用元の文書ID を [doc#XX] の形で付けてください」など、丁寧な指示が品質を決めます。
これらを一つひとつ見直すには、まず評価データセット(Q&A 30〜100組)を作ることから始めます。計測なくして改善なし、です。
初動チェックリスト
- 1.Q&A評価データセット(30問以上)を作る
- 2.現状の Recall@5 と精度を計測
- 3.チャンクサイズを300/500/800で比較
- 4.埋め込みモデルを2種類以上で比較
- 5.再ランキングを試す(Cohere Rerank等)
この症状でお困りなら、まず無料相談
60分無料相談を予約