Tutorial FAISS: Pencarian Kemiripan Vektor dalam Skala Besar

# FAISS: Pencarian Kemiripan Vektor yang Efisien dalam Skala Besar FAISS (Facebook AI Similarity Search) adalah library C++ dengan binding Python untuk mengindeks dan mencari vektor dense. Ketika apl...

By Ruby Abdullah · · tutorial
FAISSVector SearchSimilarity SearchEmbeddingsANNPython

FAISS: Pencarian Kemiripan Vektor yang Efisien dalam Skala Besar

FAISS (Facebook AI Similarity Search) adalah library C++ dengan binding Python untuk mengindeks dan mencari vektor dense. Ketika aplikasi Anda perlu menemukan tetangga terdekat dari sebuah embedding di antara jutaan atau miliaran vektor, FAISS memberi kendali rinci atas trade-off kecepatan, memori, dan recall yang biasanya disembunyikan vector database terkelola di balik API. Tutorial ini berfokus pada library-nya sendiri: tipe-tipe index, cara kerja internalnya, dan cara menggunakannya di produksi.

Untuk siapa tutorial ini

Ini bukan sekadar panduan generik "membangun mesin pencari semantik". Kami berasumsi Anda sudah memahami embedding dan cosine similarity secara umum. Sebagai gantinya kita membahas mendalam ragam index FAISS: index flat eksak, index inverted-file (IVF), product quantization (PQ), graph HNSW, pemetaan ID, persistensi, dan offload ke GPU. Di akhir tutorial Anda akan mampu memilih index yang tepat sesuai ukuran dataset dan anggaran latensi, serta menyetelnya secara sengaja, bukan menebak-nebak.

Apa itu FAISS dan apa yang bukan

FAISS menyelesaikan satu masalah dengan sangat baik: diberikan sebuah vektor query, kembalikan k vektor paling mirip dari koleksi, menggunakan jarak L2 (Euclidean) atau inner product. Ini adalah library, bukan service. Tidak ada lapisan jaringan, autentikasi, mesin filter metadata, maupun persistensi bawaan selain membaca dan menulis satu file index.

Minimalisme itulah intinya. FAISS memungkinkan Anda:

  • Menentukan dengan tepat cara vektor disimpan (presisi penuh, terkuantisasi, di disk).
  • Menukar recall demi kecepatan dengan mengubah satu parameter saat query.
  • Menjalankan index yang sama di CPU atau GPU dengan satu baris pemindahan.
  • Menanamkan index langsung di dalam proses Anda sendiri, menghindari round-trip jaringan.

Kapan memakai FAISS vs vector database terkelola

Gunakan FAISS ketika:

  • Anda ingin satu library tertanam di service tanpa infrastruktur tambahan.
  • Anda butuh kendali presisi atas struktur index dan jejak memori.
  • Vektor Anda sebagian besar statis, atau index dibangun ulang secara terjadwal.
  • Anda melakukan riset atau komputasi kemiripan secara batch.

Gunakan vector database terkelola (Qdrant, Milvus, Weaviate, pgvector, Pinecone) ketika:

  • Anda butuh filter metadata yang kaya dikombinasikan dengan pencarian vektor.
  • Anda memerlukan insert, update, dan delete yang sering dengan jaminan durabilitas.
  • Anda ingin penskalaan horizontal, replikasi, dan API HTTP/gRPC langsung pakai.
  • Mengoperasikan service stateful dapat diterima dan Anda tidak ingin membangunnya sendiri.

Banyak database tersebut sebenarnya memakai algoritma mirip FAISS (IVF, HNSW, PQ) di belakang layar, jadi memahami FAISS membuat Anda lebih mahir menyetelnya juga.

Instalasi

FAISS hadir sebagai dua paket yang saling eksklusif. Pasang persis satu.

# Build CPU-only (jalan di mana saja, default yang baik)

pip install faiss-cpu

Build GPU (butuh GPU berkemampuan CUDA dan runtime CUDA yang cocok)

pip install faiss-gpu

Untuk contoh-contoh ini kita juga memakai sentence-transformers untuk menghasilkan embedding dan numpy untuk penanganan array.

pip install sentence-transformers numpy

Pemeriksaan cepat:

import faiss

import numpy as np

print("Versi FAISS:", faiss.version)

print("Jumlah GPU yang terlihat FAISS:", faiss.getnumgpus())

Jika getnumgpus() mengembalikan 0, Anda memakai build CPU, yang baik-baik saja untuk semuanya kecuali bagian GPU di akhir.

Membuat embedding

FAISS bekerja dengan array NumPy float32 berbentuk (nvektor, dimensi). FAISS tidak menghasilkan embedding sendiri; Anda membawa milik Anda. Di sini kita memakai model sentence-transformer kecil.

from sentencetransformers import SentenceTransformer

import numpy as np

model = SentenceTransformer("all-MiniLM-L6-v2") # output 384 dimensi

documents = [

"FAISS melakukan pencarian nearest-neighbour atas vektor dense.",

"Product quantization memampatkan vektor untuk menghemat memori.",

"Index inverted file mempartisi ruang vektor menjadi sel-sel.",

"HNSW membangun graph small-world yang mudah dinavigasi untuk pencarian cepat.",

Artikel Terkait

Tutorial Semantic Search Engine dari Nol: Embeddings dan Vector Search

Membangun Mesin Pencari Semantik dari Nol Daftar Isi Pendahuluan Prasyarat Memahami Pencarian Semantik [Text Embedding.....

Tutorial BERTopic: Topic Modeling Modern dengan Embeddings

BERTopic: Pemodelan Topik Modern dengan Embedding BERTopic adalah library pemodelan topik yang menggabungkan embedding t...

Tutorial Sentence Transformers: Embeddings, Similarity, dan Reranker

Sentence Transformers: Embedding, Kemiripan Semantik, dan Reranker Sentence Transformers (sering disebut SBERT) adalah p...

Tutorial Milvus: Distributed Vector Database untuk AI

Tutorial 10: Milvus - Database Vektor Terdistribusi untuk AI Daftar Isi Pendahuluan Prasyarat Arsitektur Milvus [Instala...