Database Vektor: Pengantar Teknis [PDF]
(tge-data-web.nyc3.digitaloceanspaces.com)- Saat aplikasi AI menangani data tidak terstruktur dan berdimensi tinggi, database vektor menjadi penting sebagai sistem khusus untuk menyimpan dan menelusuri data dalam bentuk array angka
- Intinya adalah menghubungkan record berdasarkan kemiripan antar atribut data, bukan baris-kolom atau relasi eksplisit, sehingga dapat memanfaatkan makna implisit
- Ketika hubungan semantik dienkode sebagai vektor multidimensi, tugas analisis seperti pencarian kemiripan, clustering, dan klasifikasi dapat dilakukan lebih cepat
- Dalam AI generatif, database ini digunakan untuk mengelola data berdimensi tinggi dalam jumlah besar, serta meningkatkan kecepatan pelatihan dan inferensi dan hasil personalisasi melalui pencarian vektor serupa
- Pengindeksan tingkat lanjut mengurangi target pencarian menjadi subset yang lebih relevan untuk menurunkan waktu pencarian, serta memungkinkan kueri kompleks yang menggabungkan kemiripan dengan kondisi lain
Bentuk data yang ditangani database vektor
- Database vektor adalah basis data khusus untuk menyimpan, mengelola, dan memproses vektor sebagai representasi data berdimensi tinggi
- Berbeda dari basis data tradisional yang menyimpan data dalam baris dan kolom, database vektor menyimpan data sebagai vektor dalam ruang multidimensi
- Setiap vektor adalah array angka yang merepresentasikan karakteristik atau atribut dari suatu titik data
Koneksi berbasis makna dan kemiripan
- Basis data tradisional menetapkan hubungan antar elemen berdasarkan tautan eksplisit atau hierarki
- Database vektor menghubungkan record secara algoritmis berdasarkan kemiripan atribut data
- Pendekatan ini memungkinkan terciptanya koneksi yang lebih intuitif berdasarkan makna implisit di dalam elemen basis data
Struktur yang disesuaikan untuk kueri analitis
- Ketika data dienkode sebagai vektor multidimensi, yaitu array angka yang mencerminkan hubungan semantik, tugas analitis tingkat lanjut dapat dijalankan dengan cepat
- Operasi yang didukung mencakup pencarian kemiripan, clustering, dan klasifikasi
- Model komputasi ini cocok untuk deteksi pola, analitik prediktif, dan aplikasi dengan kebutuhan analisis yang tinggi
Pemanfaatan dalam AI dan AI generatif
- Meluasnya AI dan machine learning menjadi latar belakang utama meningkatnya permintaan akan database vektor
- Di ranah AI generatif, database vektor dirancang untuk menyimpan dan mengelola data berdimensi tinggi dalam jumlah besar secara efisien
- Kemampuan untuk dengan cepat menelusuri dan mengambil hasil dari vektor serupa dapat sangat mempercepat proses pelatihan dan inferensi model AI generatif
- Database ini juga dimanfaatkan agar sistem AI generatif dapat memberikan konten yang lebih dipersonalisasi dan lebih relevan kepada pengguna
Pengindeksan dan kondisi pencarian yang kompleks
- Database vektor menggunakan teknik pengindeksan tingkat lanjut untuk menelusuri dan mencari vektor serupa dengan cepat
- Indeks mempersempit target pencarian ke subset vektor yang lebih kecil dan lebih relevan, sehingga waktu pencarian berkurang secara signifikan
- Basis data ini juga dapat menangani kueri kompleks yang menggabungkan kondisi kemiripan dengan kriteria pencarian lainnya
- Fleksibilitas ini penting dalam aplikasi AI tingkat lanjut yang memerlukan kemampuan pencarian yang canggih
1 komentar
Opini Hacker News
A Comprehensive Survey on Vector Database: Storage and Retrieval Technique, Challenge: https://arxiv.org/abs/2310.11703
Survey of Vector Database Management Systems: https://arxiv.org/abs/2310.14021
What are Embeddings: https://raw.githubusercontent.com/veekaybee/what_are_embeddi...
Penyebutan sumber: https://twitter.com/eatonphil/status/1745524630624862314 dan https://twitter.com/ChristophMolnar/status/17457316026829826...
Juga tersedia dalam bentuk materi presentasi beranotasi dan video 38 menit opsional
Artikel Wikipedia: https://en.wikipedia.org/wiki/Vector_database
Vector Database 101: https://zilliz.com/learn/introduction-to-unstructured-data
Approximate nearest neighbor dan similarity search: https://vinija.ai/concepts/ann-similarity-search/
Basis data terdistribusi: https://15445.courses.cs.cmu.edu/fall2021/notes/21-distribut...
Itu juga bagian yang membuat saya penasaran, jadi akan bagus kalau ada kriteria atau aturan praktisnya
Baru-baru ini saya mencoba menangani embedding dengan tool
llmyang luar biasa dari Simon Willison, dan pendekatannya paling sederhana: menyimpan embedding di SQLite bersama beberapa UDF untuk perhitungan jarakKesederhanaan ini menarik, tetapi begitu traffic dan data melewati level tertentu, pasti akan perlu basis data yang lebih terspesialisasi; saya penasaran kira-kira di mana batasnya
Pencariannya dilakukan dengan cara paling sederhana, menyapu semuanya dan membandingkan jarak Hamming (
xordanpopcount); di satu core MBP keluaran 2011, saya bisa memindai 200 ribu hash dalam kurang dari 10 ms untuk menemukan item yang paling miripKodenya kira-kira 1.000 baris, jadi pada akhirnya tidak perlu basis data vektor eksternal
Namun di atas itu, opsi yang layak seperti Pinecone menjadi rumit, lambat, dan kelewat mahal
Sepengetahuan saya, opsi terbaik adalah turbopuffer.com; biayanya kira-kira 100 kali lebih murah daripada Pinecone dan tampaknya benar-benar bisa diskalakan
Karena tidak ada dalam daftar rekomendasi vector DB di slide, saya lemparkan sebagai rekomendasi yang cukup bagus
https://news.ycombinator.com/item?id=38703943
Kuliah ini memadukan teori dan demo yang membahas konsep dasar vektor, basis data vektor, indeks, dan similarity search, lalu diakhiri dengan demo basis data Pinecone dan Weaviate
Pada tahap ini, penilaian manusia masuk dengan sangat halus, kadang hampir sampai diabaikan, sehingga dari luar tampak seperti sistem “cuma matematika” yang sangat terotomatisasi
Ambil audio sebagai contoh: fitur apa yang akan diekstrak untuk membuat vektor berdimensi N? Jawaban mudahnya mungkin “sebanyak mungkin”
Namun pertama, bahkan fitur yang mudah diberi nama pun belum tentu memiliki akses ke data karakterisasinya
Kedua, tanpa pengetahuan domain yang mendalam, Anda mungkin bahkan tidak tahu adanya fitur laten yang seharusnya dipakai
Ketiga, sekalipun memiliki pengetahuan domain yang mendalam, Anda masih mungkin tidak tahu fitur laten yang seharusnya dipakai
Misalnya, anggap Anda penggemar musik minimalis dengan phase shifting ala Reich. Anda mengajukan kueri tidak langsung ke basis data vektor untuk mencari musik yang mirip dengan karya representatif genre ini, misalnya Piano Phase
Basis data menggunakan berbagai fitur audio dan musik seperti frekuensi dominan, interval antar-onset nada, volume, fitur timbre berbasis distribusi frekuensi, serta root dan tangga nada yang tampak
Namun jika kumpulan fitur basis data tidak memiliki “interval antar-nada yang konstan seiring waktu”, kueri mungkin bisa menemukan hal-hal yang mirip dalam timbre, harmoni, melodi, dan ritme, tetapi untuk menemukan lagu yang berbagi ciri inti berupa fase relatif dua garis melodi yang berubah secara konsisten, itu sepenuhnya bergantung pada keberuntungan
Tidak sulit membuat contoh serupa untuk jenis data apa pun, seperti visual, teks, numerik, dan sebagainya
Tentu saja, ini bukan berarti basis data vektor dan klasifikasi fitur tidak berguna
Salah satu pertanyaan awal yang harus diajukan saat berhasil atau gagal menemukan pola kecocokan dalam dataset tertentu adalah apakah kumpulan fitur dijamin kuat sudah lengkap, dan jika tidak, bagaimana perlu diperluas
Basis data vektor diarahkan untuk pencarian dan pengambilan hasil pencarian
Biasanya cara membuat vektor adalah dengan melakukan fine-tuning pada model pralatih berskala besar lalu mengekstrak representasi internalnya
Karena dataset berisi kueri yang berhasil beserta hasil pengambilannya, cukup optimalkan fungsi loss terhadap tujuan kemiripan yang didukung basis data vektor menggunakan input mentah
Pada modalitas umum seperti tabel, teks, gambar, dan audio, hampir tidak ada penilaian manusia yang masuk ke pemilihan fitur; cukup terapkan attention
Sebagai catatan, model teks-ke-vektor mutakhir seperti E5-Mistral bahkan tidak memerlukan kurasi manusia dalam dataset
Anda tepat menyoroti soal “tidak tahu apa yang tidak diketahui”
Senang melihat penggemar Steve Reich lainnya, dan saya penasaran rekomendasi lagu yang mirip dengan Music for 18 Musicians favorit saya
Ini ikhtisar yang bagus, tetapi bagian terakhir tidak membahas pertanyaan klise tentang harus memakai penyimpanan vektor seperti Postgres+pgvector atau basis data vektor seperti Pinecone
Saya ingin melihat lebih banyak presentasi yang membahas berbagai trade-off seperti kecepatan kueri, kecepatan insert dan pembangunan indeks, kemudahan penggunaan, dan seterusnya, agar membantu memilih yang sesuai untuk tiap aplikasi
PR selalu diterima
Basis data adalah penyimpanan yang diberi berbagai fitur tambahan
digitaloceanspaces.com adalah penyedia hosting bergaya S3, jadi akan bagus jika Hacker News memperlakukannya secara khusus dan menampilkannya seperti tge-data-web.nyc3.digitaloceanspaces.com, alih-alih menyederhanakan domainnya menjadi digitaloceanspaces.com
Namun S3 juga tampaknya punya masalah yang sama: https://news.ycombinator.com/item?id=38876761
Ada preseden di tempat lain. Situs subdomain x.github.io diperlakukan khusus di sini: https://news.ycombinator.com/from?site=lfranke.github.io
Materi ini terlihat cukup berbahaya untuk dijadikan titik awal oleh engineer
Pernyataan seperti dikelompokkan berdasarkan makna atau dioptimalkan untuk analitik terasa meragukan
Pengelompokan bergantung pada embedding yang dihitung. Jika Anda percaya embedding itu mendekati makna data dengan baik, mungkin tidak apa-apa berpikir seperti itu
Namun mudah membayangkan embedding yang mematahkan asumsi tersebut. Misalnya, meski file audio dan file teks dengan makna yang sama dimasukkan ke proses embedding yang sama, jika bukan multimodal, keduanya kemungkinan besar akan berjauhan di ruang vektor embedding
Ke depannya, saya yakin akan muncul embedding yang menempatkan objek berdekatan di ruang vektor berdasarkan cara pemanfaatannya, bukan kemiripan semantik
Jika membuat sistem rekomendasi, Anda tidak ingin mengelompokkan berbagai variasi pembelian sekali pakai secara berdekatan
Misalnya, penerbangan yang paling mirip secara semantik mungkin penerbangan lain ke tujuan yang sama pada jam berbeda atau penerbangan ke bandara terdekat, tetapi dalam praktiknya Anda mungkin ingin mengelompokkan hotel yang sering dibeli bersama oleh orang-orang yang membeli penerbangan tersebut
Basis data vektor juga dapat memasukkan dimensi tambahan seperti kesadaran waktu ke dalam data. Tidak harus selalu memakai vektor yang mengodekan makna
Jadi basis data vektor dioptimalkan untuk lookup atau pencarian berbasis vektor input, bukan mirip dengan kueri OLAP
Ini lebih dekat ke Elasticsearch daripada Snowflake. Jika Anda menggunakan basis data vektor dengan ekspektasi reporting atau analitik skala besar atas ruang vektor, sejauh yang saya tahu belum ada produk yang benar-benar layak dipakai saat ini
Saya paham bahwa dari foto apel kita menuju vektor yang merepresentasikan “keapelannya”, lalu vektor itu dibandingkan dengan vektor lain menggunakan matematika biasa
Yang tidak saya pahami adalah siapa/apa yang menerima gambar sebagai input dan mengeluarkan vektor
Dokumen juga sama. Jika ingin menambahkan dimensi dengan cara memasukkan satu angka lagi ke array, bagian mana dari basis data vektor yang harus dimodifikasi agar dimensi itu ikut dalam perhitungan vektor?
Atau apakah proses mengubah dokumen, gambar, atau apa pun menjadi representasi vektor dilakukan dengan cara lain di luar basis data?
Sunting: perhitungan embedding tampaknya seperti tugas algoritma machine learning, tetapi kalau begitu algoritma itu juga harus dilatih lebih dulu. Pada akhirnya ini seolah berlanjut tanpa henti ke pelatihan
Saya tidak tahu mengapa PQ dicantumkan sebagai “strategi indeks”
PQ adalah teknik kompresi dan kuantisasi vektor, bukan sarana untuk mempartisi ruang pencarian
Anda bisa mengenkode vektor dengan PQ pada exhaustive search/flat index, indeks IVF, maupun HNSW, dan di Faiss masing-masing tersedia sebagai IndexPQ, IndexIVFPQ, dan IndexHNSWPQ
Jika mau, ini juga bisa dipakai bersama k-D tree atau ANNOY
Pernyataan “gunakan HNSW atau Annoy untuk dataset yang sangat besar ketika kecepatan kueri lebih penting daripada presisi” juga bermasalah
Teknik berbasis graf memiliki overhead memori dan biaya pembangunan yang besar, dan tidak praktis untuk dataset skala 1 miliar
Biasanya memang lebih akurat dan cepat daripada teknik IVF, karena untuk memperoleh akurasi serupa IVF harus mengunjungi banyak sel
Sebaliknya, berbeda dari teknik lain, IVF dapat diskalakan hingga basis data skala 1 triliun tanpa overhead besar, sambil tetap menawarkan trade-off kecepatan dan akurasi yang masuk akal
Saya akan mengatakan “gunakan untuk dataset ukuran menengah ketika kecepatan kueri penting tetapi Anda juga menginginkan akurasi tinggi, dan flat/exhaustive index tidak realistis”
Lakukan PQ terlebih dahulu, lalu jalankan KNN pada vektor diskret baru
Dengan begitu, ruang kosakata dapat dikompresi ke ukuran tetap
Pada tabel di slide 15, kolom Indexing & Search Efficiency untuk Traditional Databases dan Vector Databases tampaknya tertukar
Apakah ada rekomendasi basis data embedding tertanam seperti SQLite?
Untuk masalah berskala kecil, tetapi akan lebih baik jika lebih praktis daripada LMDB + FAISS
Dapat dijalankan di dalam proses Python, menyimpan konten di SQLite, dan mendukung penyimpanan vektor embedding dalam format indeks vektor lokal (Faiss, HNSW, Annoy)
Sebagai catatan, saya adalah penulis utama txtai
https://github.com/patricktrainer/hackernews-comment-search
llmmilik Simon Willison hanya menggunakan SQLite dan beberapa UDFKesederhanaannya menarik, tetapi saya belum benar-benar paham kapan dan mengapa itu menjadi tidak cukup
Untuk Go, saya baru-baru ini mulai membuat chromem-go yang terinspirasi oleh antarmuka Chroma: https://github.com/philippgille/chromem-go
Belum memiliki fitur lanjutan atau ditujukan untuk penggunaan skala besar, tetapi demo RAG sudah berjalan
[1] https://github.com/chroma-core/chroma