🙄

Dense Passage Retrieval (DPR) とは?

2025/03/06に公開

1. Dense Passage Retrieval (DPR) とは?

1.1 概要

DPR (Dense Passage Retrieval) は、質問応答 (QA) や情報検索 (IR) において高精度な文書検索を可能にする手法の一つです。従来の BM25 などの手法とは異なり、DPR は 学習済みの双方向エンコーダ を使用して、クエリと文書の埋め込み (Embedding) を取得し、それらの類似度を基に検索を行います。

1.2 仕組み

DPR は以下の2つのエンコーダを利用します。

  • クエリエンコーダ (Query Encoder): クエリを埋め込みに変換
  • パッセージエンコーダ (Passage Encoder): 文書(パッセージ)を埋め込みに変換

検索の際には、

  1. クエリをクエリエンコーダで埋め込みに変換
  2. 事前に埋め込み化された文書とクエリの埋め込みの 内積(またはコサイン類似度) を計算
  3. 類似度が高い順に文書を取得

1.3 メリット

  • BM25 よりも高精度な検索が可能
  • 事前にベクトル化することで高速検索が可能
  • Transformer ベースの学習で文脈を考慮した検索ができる

1.4 実装例

from transformers import DPRQuestionEncoder, DPRQuestionEncoderTokenizer

tokenizer = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
model = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base")

query = "What is Dense Passage Retrieval?"
inputs = tokenizer(query, return_tensors="pt")
outputs = model(**inputs)
print(outputs.pooler_output)  # クエリの埋め込みベクトル

2. BM25 とは?

2.1 概要

BM25 は、古典的な情報検索アルゴリズムの一つで、クエリと文書の単語頻度 (TF) や逆文書頻度 (IDF) を基にスコアリングする手法です。現在も多くの検索エンジンで利用されています。

2.2 仕組み

BM25 のスコアは次のように計算されます。

[
BM25(D, Q) = \sum_{t \in Q} IDF(t) \times \frac{TF(t, D) \times (k_1 + 1)}{TF(t, D) + k_1 \times (1 - b + b \times \frac{|D|}{avgD})}
]

ここで、

  • ( TF(t, D) ) : 文書 D における単語 t の出現頻度
  • ( IDF(t) ) : 単語 t の逆文書頻度
  • ( |D| ) : 文書 D の長さ
  • ( avgD ) : コーパスの平均文書長
  • ( k_1 ), ( b ) : ハイパーパラメータ

2.3 メリット

  • 高速な検索が可能
  • 単語の出現頻度を考慮できる
  • 計算がシンプルで実装が容易

2.4 実装例

from rank_bm25 import BM25Okapi

corpus = [
    "This is a test document.",
    "Another document related to information retrieval.",
    "DPR and BM25 are used in search engines."
]

tokenized_corpus = [doc.split() for doc in corpus]
bm25 = BM25Okapi(tokenized_corpus)

query = "search engine technology"
tokenized_query = query.split()

scores = bm25.get_scores(tokenized_query)
print(scores)  # 各文書のBM25スコア

3. Reciprocal Rank Fusion (RRF) とは?

3.1 概要

Reciprocal Rank Fusion (RRF) は、複数の検索結果を統合するための手法です。異なる検索手法(例:BM25、DPR、TF-IDFなど)の結果を組み合わせることで、より高精度なランキングを実現します。

3.2 仕組み

RRF は、各検索結果のランキングを基に 逆数スコア (reciprocal rank score) を計算し、それらを合算することで最終的なランキングを決定します。

各ドキュメントの RRF スコアは以下のように計算されます。

[
RRF(d) = \sum_{s \in S} \frac{1}{k + rank_s(d)}
]

ここで、

  • ( S ) : 検索アルゴリズムの集合(例:BM25, DPR, TF-IDF)
  • ( rank_s(d) ) : アルゴリズム ( s ) における文書 ( d ) の順位
  • ( k ) : ハイパーパラメータ(一般的に 60 を使用)

3.3 メリット

  • 複数の検索手法を組み合わせることで精度向上
  • 計算がシンプルで、実装が容易
  • ハイパーパラメータの調整が少なく、汎用性が高い

4. DPR と BM25 の比較

項目 DPR BM25
検索手法 ベクトル検索 (埋め込み) 単語マッチング
文脈の考慮 あり (Transformer) なし (キーワードベース)
検索速度 事前計算が必要 (遅い) 高速
精度 高い (文脈理解が可能) 一般的 (単語の頻度重視)
利用用途 高精度検索 (QA, 意味検索) 一般的なキーワード検索

5. まとめ

DPR は意味的な検索が得意であり、BM25 は高速なキーワード検索に適しています。両者を組み合わせ、RRF を使うことで、より精度の高い検索システムを構築できます。

Discussion