ストーリー
メタデータの種類
基本メタデータ
ドキュメントから自動的に取得できるメタデータです。
| メタデータ | 取得方法 | 用途 |
|---|---|---|
| ファイル名 | ファイルシステムから取得 | ドキュメント識別 |
| 作成日時 | ファイルシステム/APIから取得 | 鮮度フィルタリング |
| 更新日時 | ファイルシステム/APIから取得 | 最新情報の優先 |
| 作者 | API/ドキュメントヘッダーから取得 | 著者によるフィルタ |
| ファイル形式 | 拡張子/MIMEタイプ | 形式別処理 |
| ファイルサイズ | ファイルシステムから取得 | 処理の最適化 |
| ソースURL | API/パスから取得 | 参照元リンクの提示 |
構造メタデータ
ドキュメントの構造から抽出するメタデータです。
| メタデータ | 抽出方法 | 用途 |
|---|---|---|
| セクションタイトル | ヘッダー解析 | コンテキスト付加、検索精度向上 |
| パンくずパス | ヘッダー階層の再構成 | 階層的なコンテキスト |
| テーブル有無 | テーブルタグ/構造検出 | テーブル検索の最適化 |
| コードブロック有無 | コードフェンス検出 | コード検索の最適化 |
| リンク先一覧 | リンク抽出 | 関連ドキュメントのグラフ構築 |
エンリッチメントメタデータ
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分