埋め込みの増分ベクトル更新戦略

埋め込みの重複を避ける方法

Posted by LuochuanAD on March 14, 2026 本文总阅读量

背景

「新規または変更されたコンテンツ」のみをembeddingし、毎回すべてのドキュメントを再処理しない。

1. 増分更新の3つのレベル

レベル 粒度 推奨度
ファイルレベル PDF ⭐⭐⭐⭐
ページレベル ページ ⭐⭐⭐
チャンクレベル 段落 ⭐⭐⭐⭐⭐

推奨されるワークフロー:

プライベートAPI
 ↓
ファイル取得
 ↓
PDFのハッシュ計算
 ↓
新規ファイルか判定
 ├── いいえ → スキップ
 └── はい
      ↓
テキスト抽出
 ↓
チャンク分割
 ↓
チャンクハッシュ計算
 ↓
存在確認
 ├── はい → スキップ
 └── いいえ
      ↓
embedding
 ↓
ベクターデータベース

方法1: ファイルハッシュ

import hashlib

def file_hash(file_bytes):
    return hashlib.md5(file_bytes).hexdigest()

データベース保存例:

file_hash
file_name
processed_at

方法2: ページごとのハッシュ

PDFをページごとに分割し、ページごとにハッシュを計算

データベース保存例:

file_id
page_number
page_hash

方法3: チャンクハッシュ(エンタープライズ向け)

def chunk_hash(text):
    return hashlib.sha1(text.encode()).hexdigest()

データベース保存例:

chunk_id
chunk_hash
vector
metadata

ベクターデータベースのメタデータ設計(方法1と方法3)

推奨メタデータ:

{
  file_id: "pdf123",
  file_hash: "...",
  chunk_hash: "...",
  page: 3,
  source: "Louis_pdf"
}

メリット:

  • ファイル削除が可能
  • ファイル更新が容易
  • ソースフィルタリングが可能

2. 重複排除戦略(重複embeddingを防ぐ)

方法1: 段落ごとの重複排除

多くのPDFに含まれる内容:

免責事項
フッター
会社紹介

方法2: セマンティック重複排除

2つのチャンクの類似度が 0.95 超え

方法3: テキスト近似重複排除

使用ツール:datasketch

適用対象:Webページ、メール、FAQ

3. Embeddingキャッシュ(非常に有効)

text_hash → embeddingをキャッシュとして構築

チャンク
 ↓
ハッシュ化
 ↓
キャッシュを検索

キャッシュが存在すれば、直接embeddingを利用