クラスタベース
グラフベース
ベクトル量子化
東京でラーメン屋を探すのに日本全国を回らない。まず「東京」に絞って、その中を探す。IVFはこれをベクトル空間でやっている。
グループの数。事前に決める設定で「空間をいくつに区切るか」を指定する。一度決めたら変えられない(グループ分けをやり直す必要がある)。
検索時に見るグループの数。「いくつの区画を探すか」を指定する。検索のたびに自由に変えられる。
nprobeが小さいと速いがTop-kの一致率が下がり、nprobeが大きいと一致率は上がるが遅くなる。
nlistも精度と速度に直接影響する。少なすぎると速くならず、多すぎるとk-meansの学習が重くなり境界の見落としが増える。
「一番近い中心点のグループに入る」。これだけ。各ベクトルについて全中心点との距離を計算し、最も距離が小さい中心点のグループに割り当てる。
参照資料が N 件あれば N 回の距離計算が必要。N = 100万なら100万回。データが倍なら時間も倍。線形に増え続ける。
IVFの検索は「2段階の全件比較」。第1段階で中心点だけを見て候補を絞り、第2段階で絞った範囲内を全件比較する。
空間をnlist個に区切ると、各グループには平均 N/nlist 件が入る。nprobe個のグループだけ見るので、見る件数は nprobe × N/nlist。中心点の比較コスト nlist を足したものが総コスト。
コスト f(nlist) = nlist + nprobe × N / nlist の2つの項はトレードオフの関係にある。nlistを増やすと前半が増え後半が減る。相加相乗平均(AM-GM)の不等式から、両項が等しいとき総コストが最小。
nlistが小さすぎると1グループが巨大で後半のコストが爆発。nlistが大きすぎると中心点の比較コストが爆発。底がU字型のカーブになり、その底が √N 付近。
nprobeは「Recallをどこまで許容するか」で決める。まず nprobe=1 で速度を測定し、nprobe を 5, 10, 20 と増やしながら Recall が目標(例: 95%)に達する点を探す。
| N | nlist | nprobe | 件/グループ | 中心比較 | グループ内 | 合計 | vs 全件 |
|---|---|---|---|---|---|---|---|
| 100,000 | 100 | 1 | 1,000 | 100 | 1,000 | 1,100 | 1/91 |
| 100,000 | 100 | 10 | 1,000 | 100 | 10,000 | 10,100 | 1/10 |
| 100,000 | 316 (√N) | 1 | 316 | 316 | 316 | 632 | 1/158 |
| 100,000 | 316 (√N) | 10 | 316 | 316 | 3,160 | 3,476 | 1/29 |
| 1,000,000 | 1,000 (√N) | 1 | 1,000 | 1,000 | 1,000 | 2,000 | 1/500 |
| 1,000,000 | 1,000 (√N) | 10 | 1,000 | 1,000 | 10,000 | 11,000 | 1/91 |
| 10,000,000 | 3,162 (√N) | 10 | 3,162 | 3,162 | 31,620 | 34,782 | 1/287 |
「データベース」ではなく「アルゴリズムの道具箱」。IndexFlatL2(全件比較)からIndexIVFFlat、HNSWまで複数のインデックスを提供。
「同じクラスタに属するものは同じとみなす」ことで、元の世界をk個の代表点だけの世界に縮約する。全件比較(一本の矢印)を商を経由する二本の矢印に分解している。
精度が落ちるのは、同値関係の境界付近にいるベクトルが間違ったクラスタに分類されるから。「本当は近いのに違う同値類に入ってしまった」ペアの情報が消える。
nprobe=1は商を全面的に信用。nprobe=kは商を取らない(元の空間に戻る)。nprobeの調整は商空間上の位相を変えている(ε-近傍の膨張)。
100万個のベクトルが一つ一つ区別されている。日本に住む1億2000万人、一人一人が区別される。
k個の代表点だけの世界。同じクラスタの点は「同じ」とみなす。47都道府県。同じ県の人は「同じ」。
全ての「分け方」は順序構造を持ち、束を成す。nlistを選ぶとはこの束の中の一点を選ぶこと。
元の距離 d と商の距離 d̃ のズレには上界がある。クラスタが小さいほど商の距離は元の距離に近い。nlistの選択は「メトリックの劣化をどこまで許容するか」の定量的な判断。
商を圏論で言い直すと余等化子(coequalizer)。Embed/検索の構造が随伴、IVFのクラスタリングが余極限(余等化子)に対応する。
| Method | 速度 | 精度 | メモリ | 適用場面 |
|---|---|---|---|---|
| HNSW | ◎ | ◎ | △(重い) | 100万件以下、リアルタイム応答 — デファクトスタンダード |
| IVF | ○ | ○ | ○ | メモリとのバランスが必要な場面 |
| IVF-PQ | ○ | △ | ◎(軽い) | 数億件〜、メモリコストが問題になる規模 |
ベクトル空間上の話。すでにベクトルになったものを「検索を速くするために」空間的に区画分けする。
テキストの話。元の文書を「LLMに渡せるサイズの断片に切る」作業。