- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け
- Nginx受け口
- アプリ処理今ここ
- DB保存
検索もまた、確かさを部品の外側で測るしかない部品です。語で探すかベクトルで探すかで、何を取りこぼすかが変わります。
まず結論
キーワード検索(BM25)は問いと同じ語が文書にあるかで点を付け、埋め込み検索は訓練が近いとした向きで点を付けます。前者は言い換えを、後者はまれにしか現れない際立った語句を取りこぼしうる、と DPR の著者は分析しています。似た記号列で埋め込みが外す例は、本回で作った条件での実演です。
どちらが上回るかは論文の間でも条件次第です。検索器を替えると上位に返る文書そのものが変わるので、自分の文書と問いで両方を測ってから選びます。
E1204・E1240・E2104 のように同じ4桁を並べ替えたエラーコードの文書が8件あります。各コードについて「What causes error E1240?」の形で8回問い、1位の文書が正しいかを数えました。埋め込み検索と BM25 の正解数はどうなったでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
語が重なるか、訓練で寄せられたか
RAG(検索拡張生成。問いで文書を探し、見つけた文書を添えて生成器に答えさせる構成)の検索器が問いに「近い」文書を探すとき、近さの決め方は大きく2つあります。
語の一致。BM25 は、問いの語が文書に現れるかをもとに点を付けます。言い換えられると、同じ意味でも語が重ならず点が付きません。
ベクトルの近さ。埋め込み(embedding)ベクトルは、問いと文書をそれぞれ数値の並びに変え、向きの近さで並べます。何を近くに置くかは訓練が決めたもので、意味が同じことを保証するものではありません。
DPR(埋め込み検索の代表的な論文)の著者は、付録で両者の弱みをこう分析しています。
Methods like BM25 are sensitive to highly selective keywords and phrases, but cannot capture lexical variations or semantic relationships well. In contrast, DPR excels at semantic representation, but might lack sufficient capacity to represent salient phrases which appear rarely.
同じ段落の例は The salient phrase “Thoros of Myr” is critical, and DPR is unable to capture it. です。まれな固有の語句が決め手になる問いでは、BM25 のほうが当たりました。
- ・取りこぼしうるものは DPR 付録の分析と、本回の小さな実演による。どちらも「必ず外す」ではない
同じ4桁を並べ替えたエラーコード8件
8件の文書を Error E1240 occurs when the certificate has expired. の形で作りました。コードは E1204・E1240・E2104・E1024・E4012・E1420・E2401・E4210 と、同じ4桁の並べ替えです。それぞれに What causes error E1240? の形で問い、1位の文書を見ます。
What causes error E1204? dense->E1204 bm25->E1204What causes error E1240? dense->E4210 bm25->E1240What causes error E2104? dense->E2104 bm25->E2104What causes error E1024? dense->E1024 bm25->E1024What causes error E4012? dense->E4210 bm25->E4012What causes error E1420? dense->E4210 bm25->E1420What causes error E2401? dense->E2401 bm25->E2401What causes error E4210? dense->E4210 bm25->E4210sentence-transformers/all-MiniLM-L6-v2 dense top1 correct 5 /8 bm25 top1 correct 8 /8
dense が埋め込み、bm25 が BM25 です。埋め込みは E1240・E4012・E1420 の3問で外し、3問とも E4210 を返しました。なぜ E4210 なのかは、この実験からは分かりません。
BM25 が全問当てた理由は単純です。問いを小文字の英数字で区切ると e1240 が1語になり、問いの語のうち文書を実質的に区別するのはそれだけです。一致する文書は1件しかありません。
ただし、これは似たコードだけが違うように作った組です。E1234 と E5678 のように互いに似ていないコードを使った別の6文書では、コードの文書2件を区別する問いで、埋め込みも正しく答えました。「埋め込みはエラーコードに弱い」とまでは言えません。
環境は Docker 上の Python 3.12.14、sentence-transformers 6.1.0、rank_bm25 0.2.2、モデルは all-MiniLM-L6-v2 です。
エラーコードの実験(埋め込み5/8・BM25 8/8)から言えることとして妥当なのはどれですか。
どちらが上かは、訓練と自分の文書が似ているかで変わる
では論文ではどちらが強いのか。答えは2本の論文で逆に見えます。
DPR の要旨(arXiv abs ページ)は、埋め込み検索が BM25 を上回ったと書きます。
our dense retriever outperforms a strong Lucene-BM25 system largely by 9%-19% absolute in terms of top-20 passage retrieval accuracy
上位20件に正解が入る割合で9〜19ポイント上、です。ただし With the exception of SQuAD と例外があり、著者はその理由を We conjecture(推測する)と断ったうえで、問いが文書を見てから書かれたため語の重なりが多く BM25 に有利だった、と述べています。
BEIR は、訓練に使っていない分野の18のデータで検索器を比べました。
Our results show BM25 is a robust baseline and re-ranking and late-interaction-based models on average achieve the best zero-shot performances, however, at high computational costs. In contrast, dense and sparse-retrieval models are computationally more efficient but often underperform other approaches
often underperform の主語は dense だけでなく sparse も含み、比べる相手も BM25 に限りません。そして同じ論文が、訓練と同じ分野では逆だと書きます。
In-domain performance is not a good indicator for out-of-domain generalization. We observe BM25 heavily underperforms neural approaches by 7-18 points on in-domain MS MARCO.
2本は矛盾していません。分かれ目は、検索器が訓練されたデータと、評価する文書・問いが似ているかです。BEIR 自身が no single approach consistently outperforms other approaches on all datasets と書いています。
言い換えた問いでは、向きが逆になる
別の6文書で試します。問いは I can't remember my login credentials(ログインの資格情報を思い出せない)。正解は、パスワードを忘れたときの再設定の文書(番号2)です。番号5は資格情報のローテーションの文書です。
Q='E5678'dense top2 [(1, 0.425), (0, 0.194)]bm25 top2 [(1, 1.317), (0, 0.0)]Q="I can't remember my login credentials"dense top2 [(2, 0.661), (5, 0.496)]bm25 top2 [(5, 1.266), (2, 1.219)]Q='what does error E1234 mean'dense top2 [(0, 0.643), (1, 0.425)]bm25 top2 [(0, 1.77), (1, 0.596)]
括弧は(文書番号, 点数)です。埋め込みは正解の2番を1位に返しました。BM25 は5番を1位にし、正解は僅差の2位です。正解の文書とは login の1語、外れの文書とは credentials の1語が一致しており、語の一致だけでは両者の差がほとんど付きません。
同じ出力の1〜3行目と7〜9行目では、互いに似ていないコードの問いに埋め込みも正しく答えています。先ほどの5/8を一般化してはいけない理由がここにあります。
DPR の論文は埋め込み検索が BM25 を上回ったと報告し、BEIR の論文は BM25 が頑健な基準だと報告しています。両者の関係として妥当なのはどれですか。
RAG の検索器を差し替える
同じ問いでも、BM25 は資格情報のローテーションの文書を、埋め込みはパスワード再設定の文書を1位に返しました。検索器は答えの一部です。
検索器 1位の文書 点数埋め込み 2 パスワード再設定 0.661BM25 5 資格情報のローテーション 1.266
SQL の索引を作る・消す
第17期「問い合わせは道筋を書かない」で見たとおり、SQL の問い合わせは欲しい行の条件だけを書きます。索引は探す道筋を変えますが、返る行の集合は変えません。Codd は索引を情報として冗長だと書きました。
どちらも探し方の部品を入れ替えています。返ってくるものが変わるのはどちらで、なぜでしょうか。
「正しい答え」が問いの側に書かれているかどうかを比べてください。
この章のまとめ
- BM25 は語の一致、埋め込みは訓練が決めた近さで点を付ける。DPR の著者は、前者は言い換えを、後者はまれな語句を取りこぼしうると分析した。
- 似たコード8件では埋め込み5/8・BM25 8/8。言い換えの問いでは埋め込みが当て、BM25 は外した。どちらも作った条件での結果。
- DPR(訓練と同じ分野)と BEIR(zero-shot)は矛盾しない。分かれ目は訓練データと自分の文書が似ているか。
- SQL の索引は答えを変えないが、検索器を替えると答えが変わる。性能だけでなく正しさの問題として、自分の問いで測って選ぶ。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
SQL で索引を作り替えることと、RAG で検索器を BM25 から埋め込みへ替えることの違いとして正しいのはどれですか。
用語集(3語)
- BM25
- 問いの語が文書に現れるかをもとに点を付ける検索の方式。本回の実演は rank_bm25 0.2.2 の BM25Okapi を既定値(k1=1.5, b=0.75)で使った。
- 埋め込み(embedding)ベクトル
- 文を数値の並びに変換したもの。本回は問いと文書を同じモデルで変換し、コサイン類似度の高い順に並べた。
- zero-shot(BEIR の評価条件)
- 検索器を訓練したデータとは別の分野のデータで評価すること。BEIR はこの条件で BM25 を頑健な基準と報告した。
出典(一次ソース)
- Karpukhin et al. (2020) Dense Passage Retrieval for Open-Domain Question Answering, EMNLP 2020, arXiv:2004.04906 v3 ↗
- Thakur et al. (2021) BEIR: A Heterogenous Benchmark for Zero-shot Evaluation of Information Retrieval Models, NeurIPS 2021 Datasets and Benchmarks Track, arXiv:2104.08663 v4 ↗
- Robertson & Zaragoza (2009) The Probabilistic Relevance Framework: BM25 and Beyond, Foundations and Trends in Information Retrieval, DOI 10.1561/1500000019 ↗
- sentence-transformers/all-MiniLM-L6-v2 モデルカード(Hugging Face) ↗