3 ポイント 投稿者 GN⁺ 2024-05-04 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-05-04
Hacker News のコメント
  • 著者はコメント欄に直接参加し、新規プロジェクトの sqlite-vec を紹介している。まだ開発中だが、数週間以内の v0.1.0 リリースを目標にしている。以前に開発していた sqlite-vss の後継プロジェクトという位置づけだ。
  • sqlite-vec は組み込み向けベクトル検索に最適化されたライブラリで、さまざまな OS やモバイル、Raspberry Pi などで動作可能だ。著者はこれを Beepy というセマンティック検索アプリに適用して試している。
  • 768 次元ベクトルを 96 バイトでどのように保存するのかという質問があった。通常、float64 なら 6144 バイト必要だが、圧縮や近似値保存などの手法かどうかが気になっているという反応だった。
  • sqlite-vss を使っていた開発者が、RAG モデル開発に役立ったと感謝の意を示した。Ubuntu 環境でうまく動作したとも。
  • DuckDB も最近、同様のベクトル類似度検索エクステンションを公開している。
  • Qdrant ベクトル DB を活用して AI RAG アプリ開発を行った経験を語り、sqlite-vec の活用に期待を示した。
  • SQLite の public API のみを使うのか、amalgamation に直接統合するのか気になっていた。WebAssembly バインディングの観点から配布方式についての課題も述べている。
  • OSS プロジェクトが特定のニーズに合うと嬉しいというコメント。TypeScript エコシステムで活用できるアイデアを検討中だという。
  • 数か月前の sqlite-vss イシューの解決策になり得るという反応。
  • すべての feature ベクトルの次元数をどう合わせているのかが気になる。文字列を float に変換して保存しているようだが、ハミング距離計算時に長さの違うベクトルも扱うか確認が必要。
  • README から開発されているように見えるという意見がある。ドキュメント作成から始めたのかを気にしている。