AIナレッジベースのPDF解析とベクトルDBのデータ品質

症状: RAG に数千の PDF を入れたのに、回答がフッターの著作権表示や壊れた表、古い付録を引用する——embedding ジョブはすべて成功しているのに。
根本原因: 低品質 PDF は PDF Parsing の段階で壊れ、汚れたチャンクがそのまま Vector Database に入り、検索の信頼度は下がらず上がることさえある。

2026年7月、社内 Knowledge Base チームの 2,400 件の PDF を監査したところ、ゴールデン質問の引用精度は 78% から 51% に低下。top-3 ヒットの 63% に繰り返しヘッダーや OCR ノイズが含まれていた。本文はその防汚染パイプラインをまとめたもの——パーサーランキングではなく、埋め込み前に実行できるゲートと評価。数値は 2026-08-07 時点。

本記事で得られるもの: ナレッジベースを構築・運用するエンジニア向けの探索型ガイド——Quick Answer、5 つの汚染パターン、パーサー選定表、7 ステップチェックリスト、20 問評価テンプレート。

Quick Answer:リコールより先に汚データを止める

状況最初にやること急がないこと
初めて PDF を投入50 件サンプルで Parsing 比較 + 抽出率ゲートより大きい embedding モデルへ変更
回答にヘッダー/著作権ヘッダー・フッター除去 + 重複行 dedupさらに文書を増やす
表の回答が幻覚表を別解析または HTML/Markdown 化盲目的に chunk を小さくする
スキャン PDF が中心OCR 品質スコア + 低スコアは人手キューすべて PyPDF に任せる
大規模化で精度低下source_id バッチ削除 + ゴールデン回帰原因調査なしの全再埋め込み

Vector Database を汚す 5 つの PDF パターン

ベクトルストアはテキストが無意味かどうかを知らない——embedding されれば類似度で競合する。PDF 特有のレイアウト罠が Knowledge Base 汚染の最大要因。

パターン症状検索への影響検出シグナル
繰り返しヘッダー/フッター毎ページ同じ社名・ページ番号汎用クエリが著作権にヒットチャンク内同一短文 ≥3 回
OCR ノイズl1 の混同キーワード・意味の両方がずれる非辞書文字 >8%
壊れた表列崩れ・セル順序乱れ数値の幻覚区切りなし長数字列
2 段組/脚注の混線段が交差引用が不連続行幅の急変
古い付録廃止済みポリシー正しいが古い回答mtime と業務バージョン不一致

文字数が多い ≠ 良い Knowledge Base。 最高文字数のパーサーは、レイアウト対応より 11 ポイント低い 回答可能率——ノイズも「内容」に数えられていた。

インジェストゲート:embedding の前に遮断

Vector Database をファイル置き場ではなく本番 DB として扱う。最小 4 段階のゲート:

  1. ファイル: パスワード保護、0 文字、抽出率 <15% → 拒否または OCR キュー。
  2. ページ: 空白・画像のみ・近複製 → スキップ。
  3. チャンク: token <30、重複行 >40% → 破棄。
  4. 業務: source_id なし → 書き込み禁止。

長コンテキストはクリーンな ingest の代替にならない——Kimi K3 1M コンテキストと RAG の境界 を参照。

PDF Parsing:文字数ではなく回答可能率で選ぶ

シナリオ推奨長所注意
デジタル PDF・本文中心PyMuPDF / pdfplumber高速表が壊れやすい
複雑レイアウトUnstructured / Doclingブロック分類CPU/RAM 増
スキャンクラウド OCR精度高コスト・プライバシー

実測(2026-07、50 PDF): hit@3 はレイアウト対応 74%、pdfplumber 61%。出力を 10 分読むのが正解。

チャンク分割:フッターを増幅させない

  • 見出し・section 単位で分割し、長い節だけスライディングウィンドウ。
  • ヘッダー重複時は overlap を抑え、10–15% に。
  • 表は content_type=table で独立。

メタデータでロールバック可能な Knowledge Base に

source_idingest_batchparser_versioncontent_hasheffective_date を必須に。近複製(cosine >0.95)は密度の高い方を残す。

事例:2,400 PDF のロールバック

指標修正前ゲート + 再解析後
40 問 hit@351%79%
ヘッダー/著作権引用63%4%
チャンク総数1.28M0.71M

7 ステップチェックリスト

  • 50 PDF をサンプルし、自動ゲートと人手ラベルを比較。
  • 2 つの PDF Parsing を 20 問で比較。
  • ヘッダー/フッター規則を staging で検証。
  • メタデータ完備source_id 削除の確認。
  • 20–50 問の評価セットを維持。
  • 拒否率の急増を監視。
  • 四半期ごとに期限切れ文書を整理。

ローカル試行は 30 分 AI 開発環境 を参照。

パースはワーカー、Vector Database はクリーンな塊だけ

PDF Parsing はバッチ CPU ジョブ。Macstripe クラウド Mac で macOS 専用変換を回し、Linux 側のベクトルサービスへ同期する構成も有効。

原則: 品質改善の第一レバーはデータ。悪い PDF を先に止めてから hybrid retrieval を調整する。

FAQ

PDF はなぜ Markdown より Vector DB を汚しやすい?

レイアウト非表示、OCR、繰り返しヘッダー、壊れた表がそのまま embedding され、繰り返しでランクが上がるため。

embedding 前の最低ゲートは?

抽出率、重複行、長さ、言語検出。source_id なしは書き込み禁止。

どの PDF Parsing?

デジタルは PyMuPDF/pdfplumber、複雑版面は Unstructured/Docling、スキャンは OCR。ゴールデン質問で選ぶ。

汚染を全再埋め込みなしで直せる?

source_idingest_batch があれば、該当バッチだけ削除→再解析→再埋め込み。

まとめ

順序:PDF Parsing 品質 → ゲート → チャンク + メタデータ → ゴールデン評価 → embedding 調整。Vector Database はゴミを高信頼で返す。

関連:長コンテキストと RAG · ローカル AI 環境