LESSON 30分

ストーリー

田中VPoE
チャンキングの次はメタデータだ。メタデータはRAGの「見えない武器」と言ってもいい
あなた
メタデータって、ファイル名や作成日時のことですか?
田中VPoE
それは基本中の基本だ。メタデータにはもっと多くの情報を含められる。部門、プロジェクト名、ドキュメントの種類、技術スタック、関連するチケット番号…こういった情報を付加することで、検索時のフィルタリングが可能になる
あなた
「開発部のRAG関連の技術文書だけを検索」といったことができるようになるわけですね
田中VPoE
その通り。しかもLLMを使ってメタデータを自動生成する手法もある。手動でタグ付けする手間を省きつつ、検索精度を大幅に向上させられる

メタデータの種類

基本メタデータ

ドキュメントから自動的に取得できるメタデータです。

メタデータ取得方法用途
ファイル名ファイルシステムから取得ドキュメント識別
作成日時ファイルシステム/APIから取得鮮度フィルタリング
更新日時ファイルシステム/APIから取得最新情報の優先
作者API/ドキュメントヘッダーから取得著者によるフィルタ
ファイル形式拡張子/MIMEタイプ形式別処理
ファイルサイズファイルシステムから取得処理の最適化
ソースURLAPI/パスから取得参照元リンクの提示

構造メタデータ

ドキュメントの構造から抽出するメタデータです。

メタデータ抽出方法用途
セクションタイトルヘッダー解析コンテキスト付加、検索精度向上
パンくずパスヘッダー階層の再構成階層的なコンテキスト
テーブル有無テーブルタグ/構造検出テーブル検索の最適化
コードブロック有無コードフェンス検出コード検索の最適化
リンク先一覧リンク抽出関連ドキュメントのグラフ構築

エンリッチメントメタデータ

LLMや機械学習モデルを使って自動生成するメタデータです。

メタデータ生成方法用途
要約LLMによる自動要約検索結果のプレビュー
キーワードLLMによるキーワード抽出キーワード検索の補完
カテゴリLLM/分類モデルによる分類カテゴリフィルタリング
技術スタック正規表現 + LLMによる抽出技術領域による絞り込み
質問リストLLMによる仮想質問生成検索ヒット率の向上
難易度LLMによる判定ユーザーレベルに応じたフィルタ

LLMによるメタデータ自動生成

仮想質問生成(Hypothetical Questions)

チャンクの内容に基づいて、「このチャンクが回答になるような質問」をLLMに生成させる手法です。

仮想質問生成の流れ:

チャンク内容: "Qdrantはベクトルの類似度検索に特化したデータベースです。
Rust製で高パフォーマンス、ハイブリッド検索にも対応しています。"

→ LLMで仮想質問を生成:
  Q1: "Qdrantとは何ですか?"
  Q2: "高パフォーマンスなベクトルDBは?"
  Q3: "ハイブリッド検索に対応したベクトルDBは?"

→ 仮想質問もEmbedding化してインデックスに格納
→ ユーザーのクエリが仮想質問とマッチしやすくなる

効果: ユーザーの質問とドキュメントの表現ギャップを埋める

自動要約の付加

自動要約の活用:

チャンク:
{
  "content": "(500トークンの詳細な技術説明)",
  "metadata": {
    "summary": "QdrantはRust製のベクトルDBで、高速な類似度検索と
                ハイブリッド検索を提供する。HNSWインデックスを使用し、
                メタデータフィルタリングにも対応。",
    "keywords": ["Qdrant", "ベクトルDB", "HNSW", "ハイブリッド検索"],
    "category": "インフラ/データベース"
  }
}

メタデータスキーマ設計

NetShop社のメタデータスキーマ

{
  // 基本メタデータ
  "doc_id": "string",
  "source": "string",           // "confluence" | "notion" | "wiki"
  "source_url": "string",
  "created_at": "datetime",
  "updated_at": "datetime",
  "author": "string",

  // 分類メタデータ
  "doc_type": "string",         // "技術文書" | "議事録" | "FAQ"
  "department": "string",       // "開発部" | "インフラ部" | "CS部"
  "project": "string",          // プロジェクト名
  "tags": ["string"],           // タグ一覧

  // 構造メタデータ
  "section_title": "string",    // セクション見出し
  "breadcrumb": "string",       // パンくずパス
  "has_code": "boolean",
  "has_table": "boolean",
  "chunk_index": "integer",     // チャンクの順番
  "total_chunks": "integer",    // 元ドキュメントの総チャンク数

  // エンリッチメントメタデータ
  "summary": "string",
  "keywords": ["string"],
  "hypothetical_questions": ["string"],
  "tech_stack": ["string"],
  "difficulty": "string"        // "初級" | "中級" | "上級"
}

メタデータ設計のベストプラクティス

原則説明
フィルタリングに使う項目を優先検索時に絞り込みに使う項目を明確にする
カーディナリティを意識値の種類が多すぎるとフィルタが非効率になる
型の一貫性を保つ日付は日付型、数値は数値型で統一
null許容を定義必須項目とオプション項目を明確に分ける
インデックス設計と連動ベクトルDB側のインデックス設計と合わせる

メタデータの品質管理

課題対策
メタデータの欠損デフォルト値の設定、バリデーションルール
メタデータの不整合統一的な正規化処理(部門名の表記揺れ等)
古いメタデータ更新パイプラインの自動化
LLM生成メタデータの誤りサンプリングによる定期的な品質チェック

「メタデータの品質がフィルタリングの品質を決める。ゴミを入れるとゴミが出てくるのはRAGでもメタデータでも同じだ」 — 田中VPoE


まとめ

ポイント内容
メタデータの種類基本(ファイル情報)、構造(セクション等)、エンリッチメント(LLM生成)
仮想質問生成チャンクが回答になる質問をLLMで生成し、検索ヒット率を向上
スキーマ設計フィルタリング用途、カーディナリティ、型の一貫性を意識
品質管理バリデーション、正規化、定期的な品質チェック

チェックリスト

  • メタデータの3つの種類(基本/構造/エンリッチメント)を理解した
  • 仮想質問生成の仕組みと効果を理解した
  • メタデータスキーマの設計原則を理解した
  • メタデータの品質管理手法を理解した

次のステップへ

次は「前処理パイプライン設計」を学びます。ドキュメントローディング、チャンキング、メタデータ抽出を統合したETLパイプラインを設計しましょう。


推定読了時間: 30分