Dense Passage Retrieval (DPR) とは?
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.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