Hal-hal yang Saya Pelajari Selama 2 Tahun Bekerja di Perusahaan Vector DB
(leoniemonigatti.com)Sambil bekerja di Weaviate, sebuah vector DB, saya merangkum 37 pelajaran yang diperoleh dari pengalaman operasional nyata
↳ Dari BM25, manfaat pencarian kata kunci, hingga pencarian vektor, embedding, dan pencarian hibrida
1. BM25 adalah baseline yang kuat dalam pencarian
- Dalam praktik, lebih realistis untuk mulai dari pencarian kata kunci sederhana seperti BM25 guna memeriksa performa, lalu secara bertahap memperluas ke pencarian vektor dibanding langsung memakai pencarian vektor yang kompleks
2. Pencarian vektor itu bersifat aproksimatif (Approximate), bukan eksak (Exact)
- Pada data berskala besar, algoritme approximate nearest neighbor (ANN) (HNSW, IVF, ScaNN, dll.) digunakan untuk meningkatkan kecepatan, tetapi ada kompromi pada akurasi
- Pengindeksan vektor adalah kunci yang menjamin kecepatan skala besar pada vector DB
3. Vector DB tidak hanya menyimpan embedding
- Data asli (teks, dll.) dan metadata juga disimpan bersama, sehingga memungkinkan filtering metadata, pencarian kata kunci, pencarian hibrida, dan sebagainya
4. Kegunaan utama vector DB bukan generative AI, melainkan ‘pencarian’
- Memasukkan context ke LLM pada dasarnya juga merupakan ‘pencarian’, dan vector DB serta LLM adalah kombinasi yang sangat cocok
5. Jumlah hasil pencarian harus ditentukan secara eksplisit
- Jika parameter
limitatautop_ktidak ditentukan, semua hasil yang paling dekat dengan kueri akan diurutkan dan dikembalikan
6. Jenis embedding itu beragam
- Selain vektor dense, ada juga berbagai format vektor embedding seperti sparse, binary, multi-vector
7. Benchmark untuk memilih model embedding
- MTEB mencakup berbagai tugas embedding (klasifikasi, clustering, pencarian, dll.)
- Untuk benchmark yang khusus pada information retrieval, lihat BEIR
8. Sebagian besar model di MTEB khusus untuk bahasa Inggris
- Jika lingkungannya multibahasa/non-Inggris, disarankan memakai benchmark MMTEB
9. Sejarah embedding: Static vs Contextual
- Embedding statis seperti Word2Vec, GloVe memiliki representasi tetap untuk tiap kata
- Embedding kontekstual seperti BERT menghasilkan vektor secara dinamis sesuai konteks
- Embedding statis dapat dirujuk dengan cepat pada lingkungan dengan keterbatasan resource
10. Perbedaan sparse vector dan sparse embedding
- sparse vector: dibuat dengan pendekatan berbasis statistik seperti TF-IDF/BM25 atau berbasis neural (sparse embedding, SPLADE, dll.)
- Semua sparse embedding adalah sparse vector, tetapi tidak berlaku sebaliknya
11. Berbagai data selain teks juga bisa di-embedding
- Gambar, PDF (setelah dikonversi menjadi gambar), graf, dll. juga bisa di-embedding sehingga memungkinkan pencarian vektor multimodal
12. Dimensi embedding dan biaya penyimpanan
- Semakin besar jumlah dimensi, semakin tinggi pula biaya storage
- Untuk penggunaan sederhana seperti “chatbot”, model berdimensi tinggi bisa jadi tidak diperlukan
- Dimensi juga bisa diturunkan dengan Matryoshka Representation Learning
13. Tutorial “Chat with your docs” adalah hello world dari generative AI
14. Model embedding harus dipanggil berulang kali
- Bukan hanya saat ingestion dokumen, tetapi juga saat kueri, saat dokumen ditambah/diubah, dan saat model embedding diganti, embedding dan indexing diperlukan
15. Kemiripan vektor dan relevance yang sesungguhnya bisa berbeda
- Kalimat yang mirip (misalnya “cara memperbaiki keran” vs “tempat membeli keran”) bisa saja memiliki keterkaitan yang rendah secara praktis
16. Cosine similarity dan cosine distance itu berbeda
- Similarity dan distance berbanding terbalik secara matematis
- Jika vektornya sama, similarity = 1 dan distance = 0
17. Jika vektor dinormalisasi, cosine similarity dan dot product menjadi sama
- Untuk vektor yang dinormalisasi, secara komputasi dot product lebih efisien
18. Huruf R pada RAG bukan ‘vector search’, melainkan ‘retrieval’
- Dalam RAG, metode retrieval beragam (kata kunci, vektor, filter, dll.)
19. Pencarian vektor hanyalah salah satu alat pencarian
- Yang penting adalah berbagai metode dan kombinasinya (hibrida) seperti pencarian kata kunci, filtering, reranking, dan lain-lain
20. Penerapan yang tepat untuk pencarian kata kunci/vektor
- Pencocokan semantik/sinonim cocok untuk pencarian vektor, kata kunci eksak cocok untuk pencarian kata kunci, dan jika keduanya diperlukan maka gunakan pencarian hibrida serta pengaturan bobot
alpha
21. Makna pencarian hibrida
- Biasanya berarti kombinasi kata kunci + vektor, tetapi kombinasi dengan metode pencarian lain seperti metadata juga semuanya disebut ‘hibrida’
22. Filtering tidak selalu meningkatkan kecepatan
- Misalnya, connectivity pada graf HNSW bisa rusak, dan pada post-filtering bisa jadi tidak ada hasil
- Tiap vector DB memiliki teknik optimasi yang berbeda untuk menangani ini
23. Kegunaan pipeline pencarian dua tahap
- Bukan hanya untuk sistem rekomendasi, dalam RAG dan kasus lain pun kualitas bisa ditingkatkan dengan mengekstrak kandidat awal lebih dulu, lalu melakukan reranking berkinerja tinggi pada tahap kedua
24. Perbedaan pencarian vektor dan reranking
- Pencarian vektor mengembalikan sebagian hasil dari seluruh DB, sedangkan reranking menyusun ulang urutan himpunan hasil yang sudah diterima
25. Sulitnya menentukan ukuran chunk untuk embedding
- Jika terlalu kecil, context akan hilang; jika terlalu besar, makna akan terdilusi
- Seluruh dokumen juga bisa divektorkan dengan mean pooling, tetapi informasinya bisa terdilusi (diibaratkan seperti poster yang menggabungkan semua frame film)
26. Perbedaan library pengindeksan vektor dan vector DB
- Keduanya cepat, tetapi vector DB juga menyediakan daya tahan, CRUD, filter/hibrida, dan fungsi pengelolaan data lainnya
27. RAG terus berevolusi meski context LLM makin panjang
- Setiap kali LLM dengan context panjang muncul, selalu ada diskusi bahwa ‘RAG sudah mati’, tetapi dalam praktiknya tetap dibutuhkan
28. Dengan kuantisasi vektor, informasi bisa dikurangi 97% tetapi pencarian tetap terjaga
- Dengan memanfaatkan binary quantization, dsb., storage bisa dihemat hingga 32 kali lipat (mis. 32-bit float → 1-bit)
29. Pencarian vektor tidak robust terhadap typo
- Bahkan pada korpus teks skala besar, tidak semua typo tercerminkan; hanya sebagian typo yang tercakup
30. Beragam metrik evaluasi kualitas pencarian
- Metrik berbasis ranking seperti NDCG@k, maupun metrik sederhana seperti Precision/Recall, bisa efektif tergantung situasi
31. Contoh praktik trade-off Precision-Recall
- Dijelaskan dengan kasus ekstrem seperti hanya mengembalikan satu hasil (Precision ↑/Recall ↓) atau mengembalikan semua hasil (Recall ↑/Precision ↓)
32. Metrik yang merefleksikan urutan hasil pencarian
- Precision/Recall tidak mempertimbangkan urutan, sehingga dibutuhkan metrik yang mempertimbangkan ranking seperti MRR@k, MAP@k, NDCG@k
33. Pengaruh tokenizer
- Bukan hanya BPE, tokenizer juga memengaruhi kualitas pencarian kata kunci/hibrida
34. Out-of-domain dan out-of-vocabulary itu berbeda
- OOV bisa diatasi dengan tokenizer yang cerdas, tetapi untuk out-of-domain embedding itu sendiri menjadi tidak bermakna
35. Perlunya optimasi kueri
- Seperti pada pencarian kata kunci, pencarian vektor juga memerlukan kebiasaan mengoptimalkan input kueri
36. Paradigma setelah pencarian vektor
- Pencarian kata kunci → pencarian vektor → retrieval berbasis reasoning LLM
37. Information retrieval adalah bidang yang paling ‘panas’ saat ini
- Bersama LLM, menemukan ‘informasi terbaik’ untuk diberikan ke LLM adalah tugas yang paling inti dan penting
1 komentar
Bagus karena ada banyak hal yang sempat dipikirkan saat menangani pencarian vektor.