
RAG精度改善の実践法
入力文書と埋め込み設計で8割決まる
文書の正規化と構造保全
精度は「何を索引したか」に強く依存します。PDFのヘッダー/フッター、ページ番号、脚注のノイズは削除し、見出し階層や表は構造として保持します。OCRは言語に合ったエンジンで再実行し、分割ハイフンの復元と全角・半角の統一を行います。社内固有語は同義語辞書(例:品番A123=旧名X-1)を前処理で付与し、後段の検索で拾えるようにします。
チャンク設計の基準
ページ分割は避け、意味単位で分割します。目安は500〜800トークン、オーバーラップは100〜150トークン。見出し・章ID・版数・有効期間などのメタデータをチャンクに持たせ、タイムレンジや製品ラインでの絞り込みを可能にします。表は行・列の見出しを再掲し、質問文に含まれやすい語(例:「価格」「納期」)を補助語としてチャンクに追記するとヒット率が上がります。
埋め込みモデルの選定と次元
日本語中心なら多言語より日本語強化モデルを優先。単語の綴り揺れが多い領域ではサブワード重視のモデルが安定します。次元数は768か1024が現実解で、ベクトルDBのメモリと検索レイテンシのトレードオフを見ます。まずはcosine類似度、k=40で広めに呼び、後段で絞るのが安全です。
検索を強くする設計:ハイブリッドと再ランキングの実務
ハイブリッド検索(BM25+ベクトル)
略語・品番・数値が多い領域はベクトル単独だと取りこぼします。BM25でk=100、ベクトルでk=40を取得し、スコア正規化後に重み付き合成(例:0.6ベクトル+0.4BM25)が基本。辞書で強化した同義語展開はBM25側に効くため、組み合わせでRecallが伸びます。
再ランキングとデデュープ
一次取得を広くしたら、cross-encoderで上位30件を再ランキングします。重複チャンクは見出し+ハッシュで除外し、同一文書からの連続ヒットは最大2〜3件に制限。これだけで幻覚率が下がり、生成プロンプトが短くなります。
メタデータ・フィルタとバージョン管理
製品の世代や施行日で矛盾が起きがちです。検索時に「最新の有効期間のみ」「地域=JP」などをFiltersで強制。更新パイプラインは「差分検知→再抽出→再埋め込み→エイジングで旧版を低スコア化」の順に自動化します。
生成側の制御:プロンプト、出典、否定回答
プロンプトの型
生成モデル(ChatGPTやClaude、Geminiなど)には、出典付き回答を強制します。上位N件の要約→根拠本文→最終回答の三段構成にし、「根拠ゼロの場合は回答しない(NO_ANSWER)」を明記。引用は出典IDと該当行だけに限定し、長文貼り付けは避けます。
クエリ再書き換えと意図判定
ユーザー入力は短く曖昧です。まず「定義/手順/比較/トラブル」の意図を分類し、意図ごとに検索クエリのテンプレートを変えるとヒット率が向上します(例:「比較」なら製品名+“違い/比較/対比”語を追加)。社内チャットやCopilot連携では、直近メッセージから不要語を除去し、固有表現だけを抽出してから検索に回します。
安全策とフォーマット
回答は「結論→根拠→出典」の順。数値は単位を必ず表示し、不明時は空欄のままにするルール化が現場では効きます。計算が絡むときは中間計算を内部に留め、ユーザーに見せるのは最終式のみ。テンプレートは業務別に複数用意し、質問意図で切り替えます。
身近な企業活用例と評価・運用の型
ケース:部品商社(従業員数十名)の営業FAQ
営業が製品仕様・代替可否を即答できず、RAGで社内カタログを検索する仕組みを導入。初期はPDFをページ分割、ベクトル単独、メタデータなし。結果、ヒットはするが型番の取りこぼしが多く、幻覚回答も散発。
改善は次の順で実施しました。
- 前処理:表の見出しをセルごとに再掲、分割ハイフン復元、旧品番→現品番の同義語注入
- チャンク:600トークン、120オーバーラップ。メタデータに「製品ライン/改訂日/終売フラグ」
- 検索:BM25(k=100)+ベクトル(k=40)のハイブリッド、重み0.55/0.45。クロスエンコーダで上位30を再ランキング
- 生成:NO_ANSWER運用、出典必須、回答テンプレートを「仕様/互換/納期」で分岐
- 評価:ゴールデン100問を用意。Hit@5、nDCG@10、否定回答の妥当率を週次で計測
結果、Hit@5は52%→86%、nDCG@10は0.41→0.68、幻覚率は月間で62%低減。営業の一次回答時間は平均2.8分短縮、クレーム起因の誤案内がゼロになりました。モデルはClaudeとGeminiをA/Bし、数表の読解はClaude、手順説明はGeminiが優位だったためタスク別ルーティングに落ち着いています。
評価と自動改善の運用
評価は「検索」と「生成」を分けます。検索はクエリ→正解チャンクの包含率(Recall@k)と再ランキング後の順位。生成は出典整合率とNO_ANSWERの適切性。週次でWorstクエリTop20を抽出し、用語辞書とチャンク分割規則にフィードバック。新規文書はCIに組み込み、差分だけ再埋め込みしてインデックスをローテーション更新します。閾値の目安は、Recall@20で90%以上、NO_ANSWERの適切性95%以上を越えたら本番適用、下回れば検索側から先に手当てします。
これらの設計は、モデルがChatGPTでもClaudeでもGeminiでも有効です。生成AIプラットフォーム事業としては、前処理・埋め込み・ハイブリッド検索・再ランキング・評価ダッシュボードを一連の運用レールに載せることが価値になります。個別最適のノウハウをパイプライン化し、ドメイン差分だけを設定で切り替えられる状態が、精度と運用コストの両立に直結します。