project
TurboVec - Googleが開発したオープンソースの新しいベクトルインデックスアルゴリズム
turbovecは、Google ResearchのTurboQuantアルゴリズムのオープンソース実装です。Rustで記述され、Pythonバインディングも付属しており、RAGシナリオ向けの高性能ベクトルインデックスライブラリです。このツールは、データに依存しない量子化戦略を採用しています。
TurboVecとは何ですか?
turbovecは、Google ResearchのTurboQuantアルゴリズムをRustで実装したオープンソースライブラリで、Pythonバインディングも付属しています。RAGシナリオ向けの高性能ベクトルインデックスライブラリです。このツールはデータに依存しない量子化戦略を採用しており、トレーニングフェーズなしで1,000万個のfloat32ベクトルを31GBから約4GBに圧縮します。ARMおよびx86プラットフォームでは、手書きのSIMDカーネルによりFAISSよりも高速な検索速度を実現し、検索中のフィルタリング、永続化、および主流フレームワークとのプラグアンドプレイによる置き換えをサポートしています。
ターボベックの主な機能
-
オンライン入学インデックスベクトルを追加するとインデックス作成が自動的に完了するため、コーパスが大きくなるにつれて、トレーニング手順、パラメータ調整、再構築といった作業が不要になります。
-
SIMDクイック検索手書きのNEON(ARM)およびAVX-512BW(x86)カーネルで、FAISS IndexPQFastScanよりも高速な検索速度を実現。
-
検索時のフィルタリングIDホワイトリストまたはスロットビットマスクの入力をサポートし、フィルタリングロジックはSIMDカーネル内で直接短絡されるため、過剰なデータスクレイピングは不要です。
-
安定した外部IDと削除:合格
IdMapIndexカスタムのuint64外部IDをサポートし、IDによる削除はO(1)の時間計算量で行えます。 -
インデックスの永続性:サポート
writeディスクに保存してload迅速な復旧が可能で、再コーディングは不要です。 -
プラグアンドプレイフレームLangChain、LlamaIndex、Haystack、Agnoとの公式統合機能を提供しており、インポート文を数行変更するだけで既存のベクターストレージを置き換えることができます。
-
純粋なローカル運用ホスティングサービスは不要で、データはローカルマシンまたはVPCから外部に持ち出されないため、完全にオフラインのRAGスタックを構築できます。
TurboVecの技術原理
-
正規化各ベクトルの長さ(ノルム)を取り除き、それを別々に保存することで、残りの部分が単位超球面上の方向ベクトルとなるようにします。
-
ランダム直交回転すべてのベクトルを同じランダム直交行列を使用して回転させ、各座標が元のデータの内容とは無関係に、予測可能なベータ分布に従うようにします。
-
TQ+ 適応型キャリブレーションベクトルを初めて追加する際、各座標は5%/95パーセンタイルに基づいてスケーリングおよび平行移動され、経験分布を標準ベータ周辺分布にマッピングします。以降のベクトルは、再学習なしでこの較正パラメータを再利用します。
-
ロイド=マックス・スカラー量子化既知の分布に基づいて、最適な量子化バケットの境界と重心が事前に計算され、歪みは情報理論の下限の約2.7倍に近い値となる。
-
ビットパッケージング各座標を小さな整数に圧縮し、それらを密に詰め込むことで、1536次元のベクトルを6144バイトから384バイトに削減し、16倍の圧縮率を達成した。
-
長さ正規化スコアエンコード中に追加のスケーリング係数が計算され、検索時に乗算されることで、量子化によって引き起こされる系統的内積の過小評価が解消され、推定器が偏りから不偏に修正され、再現率がさらに向上します。
WeChatでフォローして「オープンソース「、参加するAIオープンソースプロジェクトに関するディスカッショングループ
TurboVecの使い方
-
インストールライブラリ:埋め込む
pip install turbovecPythonバインディングを取得します。 -
インデックスを作成するインスタンス化
TurboQuantIndex(dim=1536, bit_width=4)次元と量子化ビット数を指定してください。 -
ベクターを追加: 電話
index.add(vectors)データはバッチ処理でインポートされた後、システムは自動的に回転、キャリブレーション、量子化を実行します。 -
検索を実行する: 電話
index.search(query, k=10)上位K件の類似度スコアとインデックスを取得します。 -
永続ストレージ:使用
index.write("my_index.tv")インデックスを保存するには、TurboQuantIndex.load回復する。 -
外部ID管理: 変化
IdMapIndex成し遂げるadd_with_idsそしてO(1)は削除されます。 -
ハイブリッド検索まず、SQL/BM25または同様のシステムを使用して候補IDをフィルタリングし、それらを渡します。
allowlist高密度で精密な処理手順を実行する。
TurboVecのプロジェクトアドレス
- プロジェクト公式サイト:https://pypi.org/project/turbovec/
- GitHubリポジトリ:https://github.com/RyanCodrai/turbovec
Turbovecと類似の競合製品との比較
| 寸法 | turbovec | FAISS (IndexPQFastScan) |
|---|---|---|
| 定量的トレーニング | 研修不要、オンライン受付 | k-meansトレーニングコードブックが必要です |
| 圧縮比 | 16x(2-bit)/ 8x(4-bit) | 同様に、それはトレーニングの質にも左右される。 |
| ARMの検索速度 | FastScanより10~19%高速 | ベンチマーク |
| x86検索速度 | 4ビットが勝ち、2ビットも僅差。 | ベンチマーク、2ビットVBMIには利点がある |
| 検索時のフィルタリング | SIMDカーネルの短絡、ゼロリコール損失 | まず計算を行い、それからフィルタリングを行う。これは過剰なデータ取得につながる。 |
| 導入フォーム | 純粋なネイティブ組み込みライブラリ | 純粋なネイティブ組み込みライブラリ |
| フレームワーク統合 | LangChainを含む4つのフレームワークを公式にサポート | 地域社会からの幅広い支援 |
| 低次元リコール | TQ+は、キャリブレーション後、同等またはそれ以上の性能を発揮します。 | ベンチマーク |
TurboVecの応用シナリオ
-
記憶に敏感なRAG小規模から中規模のチームやローカル環境での展開では、限られたメモリ内で数千万件のドキュメントをインデックス化し、31GBの1000万個のベクトルを4GBに圧縮する必要がある。
-
低遅延オンラインサービスベクトル検索において厳しいレイテンシ要件を持つオンラインRAG、レコメンデーション、または検索システムは、高速化のためにSIMDに依存している。
-
プライバシーを最優先とするアーキテクチャデータは第三者、あるいは国外の政府機関、企業、金融機関などにアップロードすることはできません。ホスティングサービスを利用せず、完全にローカルで動作します。
-
エッジとモバイルARMは、携帯電話、IoTデバイス、組み込みハードウェア上でベクトル検索を実行するのに最適化されています。
-
ハイブリッド検索システムまず、SQL/BM25/権限システムを使用して候補IDを大まかに絞り込み、それらを渡します。
allowlist密なベクトルソートを実行します。