3 poin oleh GN⁺ 2024-05-04 | 1 komentar | Bagikan ke WhatsApp

Pengembangan fitur baru SQLite untuk pencarian vektor

  • sqlite-vec adalah ekstensi baru untuk pencarian vektor di SQLite dan akan menggantikan sqlite-vss yang ada.
  • Akan menjadi alat pencarian vektor tertanam yang "cukup cepat" dan dapat dijalankan di semua lingkungan tempat SQLite berjalan, termasuk WASM.
  • Meskipun masih dalam pengembangan, disarankan untuk mengecek repositori saat sudah siap.

Fitur sqlite-vec

  • Ekstensi SQLite yang ditulis dalam C murni dan tanpa dependensi.
  • Menyediakan fungsi SQL kustom dan tabel virtual untuk pencarian vektor yang cepat.
  • Menyediakan alat dan utilitas lain untuk operasi vektor (kuantisasi, konversi JSON/BLOB/numpy, operasi vektor, dll.).
  • Pencarian vektor dapat dilakukan hanya dengan SQL (menggunakan pernyataan CREATE VIRTUAL TABLE, INSERT INTO, dan SELECT).

Kelebihan sqlite-vec

  • Dibuat dalam C murni, sehingga dapat berjalan di semua platform (Linux/MacOS/Windows), browser web (WebAssembly), ponsel, Raspberry Pi, dan sebagainya.
  • Ukuran biner kecil, hanya ratusan KB.
  • Penggunaan memori lebih mudah dikontrol (menyimpan vektor dalam bentuk chunk dan membacanya per chunk saat pencarian KNN).
  • Kecepatan in-memory dapat ditingkatkan dengan perintah PRAGMA mmap_size.
  • Dengan dukungan embedding panjang variabel seperti Matryoshka serta vektor int8/bit, memungkinkan kuantisasi biner dan skalar.
  • Kontrol yang lebih besar atas kecepatan, akurasi, dan ruang disk.
  • Pada awalnya hanya mendukung pencarian vektor brute force, tetapi ke depan akan menambahkan IVF + HNSW.

Demo

  • sqlite-vec dapat dieksekusi langsung di browser (basis data SQLite movies.bit.db dimuat).
  • Tabel articles berisi kolom seperti title, release_date, dan overview.
  • Tabel virtual vec_movies menyimpan vektor embedding dari kolom overview (vektor biner 768 dimensi, 96 byte).
  • Pencarian bergaya KNN dapat menemukan 10 film paling mirip dengan film yang dipilih.

Masalah sqlite-vss

  • Hanya berjalan di Linux + MacOS (tidak mendukung Windows, WASM, perangkat seluler, dan lain-lain).
  • Menyimpan seluruh vektor di memori.
  • Banyak bug dan isu terkait transaksi.
  • Kompilasi sangat sulit dan memakan waktu lama.
  • Tidak ada operasi vektor umum (kuantisasi skalar/biner).
  • Masalah yang muncul karena ketergantungan pada Faiss.

Status pengembangan sqlite-vec

  • Fungsi inti sudah berjalan, tetapi saat ini hampir tidak ada penanganan error dan pengujian.
  • Terdapat 246 TODO pada file sqlite-vec.c.
  • Setelah semua TODO selesai, SQLite-vec v0.1.0 direncanakan dirilis bersama dokumentasi, demo, binding, dll. (target sekitar satu bulan).

Opini GN+

  • Menarik karena menjadi alat pencarian vektor tersemat yang dapat berjalan di berbagai platform dan lingkungan, khususnya karena bisa dijalankan di browser web melalui WASM.
  • Keunggulan lain adalah penerapan teknologi pencarian vektor terbaru seperti kontrol memori, embedding panjang variabel, dan kuantisasi. Ini tampak memungkinkan kontrol fleksibel atas kecepatan, akurasi, dan ruang penyimpanan.
  • Namun, keterbatasannya adalah mendukung hanya pencarian brute force. Jika ukuran data membesar, masalah kecepatan pencarian bisa muncul. Dukungan algoritma ANN seperti IVF + HNSW tampak mendesak.
  • Selain itu, karena masih tahap awal pengembangan, sepertinya belum siap untuk dipakai di lingkungan produksi. Masih diperlukan waktu lebih banyak agar stabil.
  • Perbandingan benchmark dengan pustaka pencarian vektor yang sudah ada seperti Faiss juga tampak perlu. Meski keunggulannya adalah sebagai ekstensi SQLite murni, performanya perlu divalidasi.

1 komentar

 
GN⁺ 2024-05-04
Komentar Hacker News
  • Penulis ikut berpartisipasi langsung di kolom komentar, memperkenalkan proyek barunya bernama sqlite-vec. Meskipun masih dalam pengembangan, ia menargetkan versi v0.1.0 dalam beberapa minggu. Proyek ini merupakan proyek lanjutan dari sqlite-vss yang sebelumnya pernah dibuat.
  • sqlite-vec adalah pustaka yang dioptimalkan untuk pencarian vektor tertanam, dan dapat berjalan di berbagai OS, mobile, Raspberry Pi, dan sebagainya. Penulis juga sedang mencoba menerapkan sqlite-vec pada aplikasi pencarian semantik Beepy.
  • Ada pertanyaan tentang bagaimana menyimpan vektor berdimensi 768 hanya dalam 96 byte. Biasanya dengan float64 diperlukan 6144 byte, sehingga muncul pertanyaan apakah menggunakan teknik kompresi atau penyimpanan nilai aproksimasi.
  • Seorang pengembang yang pernah memakai sqlite-vss menyampaikan terima kasih karena membantu dalam pengembangan model RAG. Ia menyatakan semuanya berjalan baik di lingkungan Ubuntu.
  • DuckDB juga baru-baru ini merilis ekstensi pencarian kemiripan vektor yang serupa.
  • Menceritakan pengalamannya mengembangkan aplikasi AI RAG dengan memanfaatkan Qdrant vector DB, sambil mengungkapkan antusiasme terhadap penggunaan sqlite-vec.
  • Ada yang bertanya apakah proyek ini akan memakai hanya API publik SQLite atau terintegrasi langsung ke amalgamation. Dari sudut pandang binding WebAssembly, juga muncul pertimbangan tentang skema distribusinya.
  • Komentar bahwa mereka suka proyek OSS yang sesuai dengan kebutuhan tertentu. Ia mengatakan sedang mempertimbangkan ide agar bisa dimanfaatkan di ekosistem TypeScript.
  • Ada tanggapan yang mengira ini bisa menjadi solusi untuk isu-isu sqlite-vss yang muncul beberapa bulan lalu.
  • Dipertanyakan bagaimana menyamakan jumlah dimensi untuk semua vektor fitur. Karena terlihat seperti menyimpan string yang diubah menjadi float, perlu dipastikan apakah vektor dengan panjang berbeda ikut dipertimbangkan dalam perhitungan jarak Hamming.
  • Ada pendapat bahwa proses pengembangannya tampak berbasis dokumentasi README—masih penasaran apakah mereka memulai dari menulis dokumentasi terlebih dulu.