Tutorial Semantic Search Engine dari Nol: Embeddings dan Vector Search

# Membangun Mesin Pencari Semantik dari Nol ## Daftar Isi 1. [Pendahuluan](#pendahuluan) 2. [Prasyarat](#prasyarat) 3. [Memahami Pencarian Semantik](#memahami-pencarian-semantik) 4. [Text Embedding...

By Ruby Abdullah · · tutorial
Semantic SearchEmbeddingsFAISSVector SearchSentence TransformersFastAPI

Membangun Mesin Pencari Semantik dari Nol

Daftar Isi

  • Pendahuluan
  • Prasyarat
  • Memahami Pencarian Semantik
  • Text Embedding dengan Sentence-Transformers
  • Pengindeksan Vektor dengan FAISS
  • Pengindeksan Vektor dengan Annoy
  • Membangun Pipeline Pencarian
  • Filtering dan Metadata
  • Reranking untuk Relevansi yang Lebih Baik
  • Pencarian Hybrid: Menggabungkan Semantik dan Kata Kunci
  • Membangun API dengan FastAPI
  • Metrik Evaluasi
  • Praktik Terbaik
  • Kesimpulan

  • Pendahuluan

    Mesin pencari berbasis kata kunci tradisional mencocokkan dokumen berdasarkan kecocokan kata yang tepat atau samar. Pencarian semantik melangkah lebih jauh dengan memahami makna di balik query dan dokumen. Ketika pengguna mencari "cara memperbaiki pipa bocor," mesin pencari semantik juga dapat mengembalikan hasil tentang "perbaikan saluran air" atau "solusi kebocoran pipa" -- meskipun kata-kata persis tersebut tidak ada dalam query.

    Tutorial ini memandu Anda membangun mesin pencari semantik lengkap dari nol. Anda akan mempelajari cara menghasilkan text embedding, membangun indeks vektor dengan FAISS dan Annoy, mengimplementasikan filtering dan reranking, menggabungkan pencarian semantik dan kata kunci menjadi sistem hybrid, mengekspos semuanya melalui REST API FastAPI, dan mengukur kualitas pencarian dengan metrik evaluasi standar.


    Prasyarat

    • Python 3.9 atau lebih tinggi
    • Pemahaman dasar tentang konsep machine learning
    • Keakraban dengan REST API

    pip install sentence-transformers faiss-cpu annoy numpy fastapi uvicorn rank-bm25 scikit-learn pydantic
    


    Memahami Pencarian Semantik

    Pencarian semantik bekerja dalam tiga tahap:

  • Pengindeksan: Dokumen diubah menjadi vektor embedding padat dan disimpan dalam indeks vektor.
  • Pencarian: Query pengguna diubah menjadi embedding menggunakan model yang sama.
  • Pengambilan: Indeks vektor menemukan dokumen yang embedding-nya paling dekat dengan embedding query.
  • Wawasan kuncinya adalah bahwa teks yang mirip secara semantik menghasilkan vektor yang mirip, memungkinkan pengambilan berbasis makna alih-alih pencocokan kata kunci.

    Query Pengguna: "mobil listrik terjangkau"
    

    |

    v

    [Model Embedding] -> Vektor Query [0.12, -0.45, 0.78, ...]

    |

    v

    [Indeks Vektor] -> Pencarian Tetangga Terdekat

    |

    v

    Hasil:

  • "EV ramah anggaran untuk 2025" (kemiripan: 0.92)
  • "Perbandingan kendaraan listrik murah" (kemiripan: 0.89)
  • "Panduan harga Tesla Model 3" (kemiripan: 0.84)

  • Text Embedding dengan Sentence-Transformers

    Sentence-Transformers adalah pustaka Python yang menyediakan model terlatih untuk menghasilkan text embedding berkualitas tinggi.

    Memuat dan Menggunakan Model Embedding

    from sentencetransformers import SentenceTransformer
    

    import numpy as np

    Muat model terlatih

    'all-MiniLM-L6-v2' adalah keseimbangan yang baik antara kecepatan dan kualitas

    model = SentenceTransformer('all-MiniLM-L6-v2')

    Hasilkan embedding untuk teks tunggal

    teks = "Machine learning adalah bagian dari kecerdasan buatan."

    embedding = model.encode(teks)

    print(f"Bentuk embedding: {embedding.shape}") # (384,)

    print(f"Tipe data embedding: {embedding.dtype}") # float32

    Hasilkan embedding untuk beberapa teks (batch untuk efisiensi)

    dokumen = [

    "Python adalah bahasa pemrograman serbaguna.",

    "Deep learning menggunakan jaringan saraf dengan banyak lapisan.",

    "FastAPI adalah framework web modern untuk Python.",

    "Pemrosesan bahasa alami berurusan dengan pemahaman teks.",

    "Container Docker menyederhanakan deployment aplikasi.",

    ]

    embdokumen = model.encode(dokumen, showprogressbar=True, batchsize=32)

    Artikel Terkait

    Tutorial Sentence Transformers: Embeddings, Similarity, dan Reranker

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

    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+...

    Tutorial Reflex: Membangun Web App Full-Stack dengan Python Murni

    Reflex: Membangun Aplikasi Web Full-Stack dengan Python Murni Reflex memungkinkan Anda membangun aplikasi web lengkap — ...

    Tutorial BERTopic: Topic Modeling Modern dengan Embeddings

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