Membandingkan Basis Data Vektor, Pustaka Pencarian Vektor, dan Plugin Pencarian Vektor
Halo - selamat datang kembali di Basis Data Vektor 101!
Lonjakan ChatGPT dan model bahasa besar (LLM) lainnya telah mendorong pertumbuhan teknologi pencarian vektor, yang menampilkan basis data vektor khusus seperti Milvus dan Zilliz Cloud di samping pustaka seperti FAISS dan plugin pencarian vektor terintegrasi di dalam basis data konvensional.
Pada postingan seri kami sebelumnya, kami mempelajari dasar-dasar database vektor. Pada tulisan ini, kita akan terus menjelajahi ranah pencarian vektor yang rumit, membandingkan database vektor, plugin pencarian vektor, dan pustaka pencarian vektor.
Apa itu pencarian vektor?
Pencarian vektor, juga dikenal sebagai pencarian kemiripan vektor, adalah teknik untuk mengambil k hasil teratas yang paling mirip atau secara semantik terkait dengan vektor kueri yang diberikan di antara kumpulan data vektor yang padat. Sebelum melakukan pencarian kemiripan, kami memanfaatkan jaringan syaraf untuk mengubah data yang tidak terstruktur, seperti teks, gambar, video, dan audio, menjadi vektor numerik berdimensi tinggi yang disebut vektor penyisipan. Setelah menghasilkan vektor penyisipan, mesin pencari vektor membandingkan jarak spasial antara vektor kueri masukan dan vektor di penyimpanan vektor. Semakin dekat jaraknya dalam ruang, semakin mirip keduanya.
Beberapa teknologi pencarian vektor tersedia di pasaran, termasuk pustaka pembelajaran mesin seperti NumPy dari Python, pustaka pencarian vektor seperti FAISS, plugin pencarian vektor yang dibangun di atas basis data tradisional, dan basis data vektor khusus seperti Milvus dan Zilliz Cloud.
Basis data vektor vs pustaka pencarian vektor
Basis data vektor khusus bukan satu-satunya tumpukan untuk pencarian kemiripan. Sebelum munculnya basis data vektor, banyak pustaka pencarian vektor, seperti FAISS, ScaNN, dan HNSW, digunakan untuk pencarian vektor.
Pustaka pencarian vektor dapat membantu Anda dengan cepat membangun prototipe sistem pencarian vektor berkinerja tinggi. Mengambil FAISS sebagai contoh, FAISS adalah sumber terbuka dan dikembangkan oleh Meta untuk pencarian kesamaan yang efisien dan pengelompokan vektor yang padat. FAISS dapat menangani koleksi vektor dengan berbagai ukuran, bahkan yang tidak dapat dimuat sepenuhnya ke dalam memori. Selain itu, FAISS menawarkan alat untuk evaluasi dan penyetelan parameter. Meskipun ditulis dalam bahasa C++, FAISS menyediakan antarmuka Python/NumPy.
Namun, pustaka pencarian vektor hanyalah pustaka ANN yang ringan dan bukan solusi terkelola, dan memiliki fungsionalitas yang terbatas. Jika dataset Anda kecil dan terbatas, library ini dapat mencukupi untuk pemrosesan data yang tidak terstruktur, bahkan untuk sistem yang berjalan dalam produksi. Namun, seiring dengan bertambahnya ukuran dataset dan bertambahnya pengguna yang bergabung, masalah skala menjadi semakin sulit untuk dipecahkan. Selain itu, database ini tidak mengizinkan modifikasi apa pun pada data indeks mereka dan tidak dapat ditanyakan selama impor data.
Sebaliknya, basis data vektor adalah solusi yang lebih optimal untuk penyimpanan dan pengambilan data yang tidak terstruktur. Database vektor dapat menyimpan dan meminta jutaan atau bahkan miliaran vektor sambil memberikan respons waktu nyata secara bersamaan; database vektor sangat skalabel untuk memenuhi kebutuhan bisnis pengguna yang terus berkembang.
Selain itu, database vektor seperti Milvus memiliki fitur yang jauh lebih mudah digunakan untuk data terstruktur/semi-terstruktur: cloud-nativity, multi-tenancy, skalabilitas, dll. Fitur-fitur ini akan menjadi jelas ketika kita menyelami tutorial ini lebih dalam.
Mereka juga beroperasi dalam lapisan abstraksi yang sama sekali berbeda dari pustaka pencarian vektor - basis data vektor adalah layanan lengkap, sedangkan pustaka ANN dimaksudkan untuk diintegrasikan ke dalam aplikasi yang Anda kembangkan. Dalam hal ini, pustaka ANN adalah salah satu dari banyak komponen yang dibangun di atas basis data vektor, mirip dengan bagaimana Elasticsearch dibangun di atas Apache Lucene.
Sebagai contoh mengapa abstraksi ini sangat penting, mari kita lihat bagaimana memasukkan elemen data baru yang tidak terstruktur ke dalam basis data vektor. Hal ini sangat mudah dilakukan di Milvus:
from pymilvus import Collectioncollection = Collection('book')mr = collection.insert(data)
Benar-benar semudah itu - 3 baris kode. Dengan pustaka seperti FAISS atau ScaNN, sayangnya, tidak ada cara mudah untuk melakukan hal ini tanpa secara manual membuat ulang seluruh indeks pada titik-titik tertentu. Bahkan jika Anda bisa, pustaka pencarian vektor masih kurang skalabilitas dan multi-tenancy, dua fitur basis data vektor yang paling penting.
Basis data vektor vs plugin pencarian vektor untuk basis data tradisional
Baiklah, sekarang kita telah mengetahui perbedaan antara pustaka pencarian vektor dan basis data vektor, mari kita lihat perbedaan basis data vektor dengan plugin pencarian vektor.
Semakin banyak database relasional tradisional, dan sistem pencarian seperti Clickhouse dan Elasticsearch yang menyertakan plugin pencarian vektor bawaan. Elasticsearch 8.0, misalnya, menyertakan penyisipan vektor dan fungsionalitas pencarian ANN yang dapat dipanggil melalui titik akhir API yang tenang. Masalah dengan plugin pencarian vektor seharusnya jelas seperti siang dan malam - solusi ini tidak mengambil pendekatan full-stack untuk manajemen penyisipan dan pencarian vektor. Sebaliknya, plugin ini dimaksudkan sebagai tambahan di atas arsitektur yang sudah ada, sehingga membuatnya terbatas dan tidak optimal. Mengembangkan aplikasi data yang tidak terstruktur di atas basis data tradisional sama saja dengan mencoba memasukkan baterai lithium dan motor listrik ke dalam rangka mobil bertenaga gas - bukan ide yang bagus!
Untuk mengilustrasikan mengapa demikian, mari kita kembali ke daftar fitur yang harus diimplementasikan oleh basis data vektor (dari bagian pertama). Plugin pencarian vektor tidak memiliki dua dari fitur-fitur ini - kemampuan penyesuaian dan API/SDK yang mudah digunakan. Saya akan terus menggunakan mesin ANN Elasticsearch sebagai contoh; plugin pencarian vektor lainnya beroperasi dengan cara yang sangat mirip sehingga saya tidak akan membahasnya lebih jauh. Elasticsearch mendukung penyimpanan vektor melalui tipe bidang data dense_vector
dan memungkinkan untuk melakukan kueri melalui knnsearch endpoint
:
PUT index
{
"mappings": {
"properties": {
"image-vector": {
"type": "dense_vector",
"dims": 128,
"index": true,
"similarity": "l2_norm"
}
}
}
}
PUT index/_doc
{
"image-vector": [0.12, 1.34, ...]
}
GET index/_knn_search
{
"knn": {
"field": "image-vector",
"query_vector": [-0.5, 9.4, ...],
"k": 10,
"num_candidates": 100
}
}
Plugin ANN Elasticsearch hanya mendukung satu algoritma pengindeksan: Hierarchical Navigable Small Worlds, juga dikenal sebagai HNSW (saya suka berpikir bahwa penciptanya mendahului Marvel dalam hal mempopulerkan multiverse). Selain itu, hanya jarak L2/Euclidean yang didukung sebagai metrik jarak. Ini adalah awal yang baik, tetapi mari kita bandingkan dengan Milvus, database vektor yang lengkap. Menggunakan pymilvus
:
>>> field1 = FieldSchema(name='id', dtype=DataType.INT64, description='int64', is_primary=True)
>>> field2 = FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='embedding', dim=128, is_primary=False)
>>> schema = CollectionSchema(fields=[field1, field2], description='hello world collection')
>>> collection = Collection(name='my_collection', data=None, schema=schema)
>>> index_params = {
'index_type': 'IVF_FLAT',
'params': {'nlist': 1024},
"metric_type": 'L2'}
>>> collection.create_index('embedding', index_params)
>>> search_param = {
'data': vector,
'anns_field': 'embedding',
'param': {'metric_type': 'L2', 'params': {'nprobe': 16}},
'limit': 10,
'expr': 'id_field > 0'
}
>>> results = collection.search(**search_param)
Meskipun Elasticsearch dan Milvus memiliki metode untuk membuat indeks, menyisipkan vektor penyisipan, dan melakukan pencarian tetangga terdekat, jelas dari contoh-contoh ini bahwa Milvus memiliki API pencarian vektor yang lebih intuitif (API yang lebih baik untuk pengguna) dan indeks vektor yang lebih luas + dukungan metrik jarak (kemampuan penyesuaian yang lebih baik). Milvus juga berencana untuk mendukung lebih banyak indeks vektor dan memungkinkan untuk melakukan kueri melalui pernyataan seperti SQL di masa depan, yang selanjutnya meningkatkan kemampuan penyesuaian dan kegunaan.
Kami baru saja membahas sedikit konten. Bagian ini memang cukup panjang, jadi bagi Anda yang membaca sekilas, berikut ini penjelasan singkatnya: Milvus lebih baik daripada plugin pencarian vektor karena Milvus dibangun dari awal sebagai basis data vektor, sehingga memungkinkan fitur yang lebih kaya dan arsitektur yang lebih cocok untuk data yang tidak terstruktur.
Bagaimana cara memilih dari berbagai teknologi pencarian vektor?
Tidak semua database vektor dibuat sama; masing-masing memiliki ciri-ciri unik yang melayani aplikasi tertentu. Pustaka dan plugin pencarian vektor mudah digunakan dan ideal untuk menangani lingkungan produksi berskala kecil dengan jutaan vektor. Jika ukuran data Anda kecil dan Anda hanya membutuhkan fungsionalitas pencarian vektor dasar, teknologi ini sudah cukup untuk bisnis Anda.
Namun, basis data vektor khusus harus menjadi pilihan utama Anda untuk bisnis intensif data yang berurusan dengan ratusan juta vektor dan menuntut respons waktu nyata. Milvus, misalnya, dengan mudah mengelola miliaran vektor, menawarkan kecepatan kueri secepat kilat dan fungsionalitas yang kaya. Selain itu, solusi yang dikelola sepenuhnya seperti Zilliz terbukti lebih menguntungkan, membebaskan Anda dari tantangan operasional dan memungkinkan fokus eksklusif pada aktivitas bisnis inti Anda.
Lihatlah lagi kursus Basis Data Vektor 101
- Pengantar ke Data Tidak Terstruktur
- Apa yang dimaksud dengan Basis Data Vektor?
- Membandingkan Basis Data Vektor, Pustaka Pencarian Vektor, dan Plugin Pencarian Vektor
- Pengantar ke Milvus
- Memulai Cepat Milvus
- Pengantar Pencarian Kemiripan Vektor
- Dasar-dasar Indeks Vektor dan Indeks File Terbalik
- Kuantisasi Skalar dan Kuantisasi Produk
- Dunia Kecil yang Dapat Dinavigasi Hirarkis (HNSW)
- Perkiraan Tetangga Terdekat Oh Yeah (ANNOY)
- Memilih Indeks Vektor yang Tepat untuk Proyek Anda
- DiskANN dan Algoritma Vamana
- Apa itu pencarian vektor?
- Basis data vektor vs pustaka pencarian vektor
- Basis data vektor vs plugin pencarian vektor untuk basis data tradisional
- Bagaimana cara memilih dari berbagai teknologi pencarian vektor?
- Lihatlah lagi kursus Basis Data Vektor 101
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word