SQLiteでベクトル検索を行うための新しい拡張機能を開発中
- sqlite-vecは、SQLiteでベクトル検索を行うための新しい拡張機能で、既存のsqlite-vssを置き換える予定です
- SQLiteが動作するすべての環境(WASMを含む)で実行可能な、組み込み可能な「十分に高速な」ベクトル検索ツールになる見込みです
- まだ開発中ではありますが、準備が整い次第リポジトリを確認することをおすすめします
sqlite-vecの特徴
- ピュアCで作成され、依存関係のないSQLite拡張機能
- 高速なベクトル検索のためのユーザー定義SQL関数と仮想テーブルを提供
- ベクトル作業(量子化、JSON/BLOB/numpy変換、ベクトル演算など)のためのその他のツールとユーティリティを提供
- SQLだけでベクトル検索が可能(CREATE VIRTUAL TABLE、INSERT INTO、SELECT文使用)
sqlite-vecのメリット
- ピュアCで作成され、すべてのプラットフォーム(Linux/MacOS/Windows)、ウェブブラウザ(WebAssembly)、モバイル端末、Raspberry Piなどで実行可能
- バイナリサイズが数百KBレベルで小さい
- メモリ使用量をよりよく制御できる(ベクトルをチャンク単位で保存し、KNN検索時にチャンクごとに読み込む)
- PRAGMA mmap_sizeコマンドでインメモリ速度を向上可能
- Matryoshka埋め込みなど可変長埋め込みとint8/bitベクトルのサポートにより、バイナリおよびスカラー量子化が可能
- 速度、精度、ディスク空間のより多くの制御が可能
- 最初は全件検索のベクトル検索のみをサポートするが、将来的にIVF + HNSWを追加予定
デモ
- ブラウザで直接sqlite-vecを実行可能(movies.bit.dbのSQLiteデータベースをロード)
- articlesテーブルにはtitle、release_date、overviewなどのカラムがある
- vec_movies仮想テーブルにはoverviewカラムの埋め込みベクトルが保存される(768次元バイナリベクトル、96バイト)
- KNNスタイル検索で選択した映画と最も類似する映画を10件検索できる
sqlite-vssの問題点
- Linux + MacOSでのみ動作(Windows、WASM、モバイル機器などは未対応)
- ベクトルをすべてメモリに保存
- トランザクション関連のバグと問題が多数
- コンパイルが非常に難しく、時間がかかる
- 一般的なベクトル演算(スカラー/バイナリ量子化)が不足
- Faissに依存するため発生する問題
sqlite-vecの開発状況
- コア機能は動作するが、エラー処理とテストがほぼない状態
- sqlite-vec.cファイルに246件のTODOがある
- すべてのTODOを完了した後、ドキュメント、デモ、バインディングなどとともにsqlite-vec v0.1.0をリリース予定(目標は約1か月)
GN⁺の意見
- 様々なプラットフォームと環境で実行可能な組み込み型のベクトル検索ツールである点が魅力的です。特に、WebブラウザでWASMとして実行できる点が興味深いです。
- メモリ制御、可変長埋め込み、量子化などの最新のベクトル検索技術を反映した点も長所。速度、精度、保存容量などを柔軟に制御できるように見えます。
- ただし全件検索のみのサポートは限界があります。データサイズが大きくなると検索速度に問題が生じる可能性があります。IVF+HNSWなどのANNアルゴリズムサポートが急務に見えます。
- また、まだ開発初期段階で、実際の本番環境で使うには難しいように見えます。安定化にはもう少し時間が必要そうです。
- Faissなど既存のベクトル検索ライブラリとのベンチマーク比較も必要に見えます。純粋なSQLite拡張という長所はあるが、性能面では検証が必要です。
1件のコメント
Hacker News のコメント