Tutorial Sentence Transformers: Embeddings, Similarity, dan Reranker

# Sentence Transformers: Embedding, Kemiripan Semantik, dan Reranker Sentence Transformers (sering disebut SBERT) adalah pustaka Python untuk mengubah teks menjadi embedding vektor padat yang menangk...

By Ruby Abdullah · · tutorial
Sentence TransformersEmbeddingsSemantic SearchNLPRerankingPython

Sentence Transformers: Embedding, Kemiripan Semantik, dan Reranker

Sentence Transformers (sering disebut SBERT) adalah pustaka Python untuk mengubah teks menjadi embedding vektor padat yang menangkap makna, bukan sekadar kata di permukaan. Dalam tutorial ini kita membangun sistem retrieval kecil di atas korpus contoh, mengukur kemiripan semantik, menambahkan reranker cross-encoder, lalu melatih model embedding kita sendiri dengan API pelatihan modern. Tujuannya adalah gambaran praktis menyeluruh tentang bagaimana pustaka ini cocok ke dalam pipeline pencarian atau RAG nyata.

Apa Itu Sentence Transformers

Pustaka sentence-transformers membungkus model transformer (BERT, RoBERTa, MPNet, dan banyak lainnya) dan menambahkan pooling sehingga satu kalimat atau paragraf utuh dipetakan ke satu vektor berukuran tetap. Dua teks dengan makna serupa menghasilkan vektor yang berdekatan, sehingga Anda dapat membandingkannya dengan cosine similarity alih-alih pencocokan kata kunci.

Pustaka ini dikelola bersama ekosistem Hugging Face, sehingga model dimuat dari Hub, dataset memakai format datasets, dan model hasil pelatihan dapat diunggah kembali ke Hub dengan satu pemanggilan. Ini adalah alat standar untuk membangun pencarian berbasis embedding, clustering, deduplikasi, dan tahap retrieval pada sistem RAG.

Bi-Encoder vs Cross-Encoder

Ada dua keluarga model dalam pustaka ini, dan memilih dengan tepat adalah keputusan desain yang paling penting.

Sebuah bi-encoder mengkodekan setiap teks secara independen menjadi sebuah vektor. Anda meng-embed seluruh korpus sekali, menyimpan vektornya, dan saat kueri datang Anda cukup meng-embed kuerinya saja lalu membandingkannya dengan vektor tersimpan. Ini cepat dan dapat menskala hingga jutaan dokumen karena perbandingannya hanya berupa dot product. Komprominya adalah akurasi: model tidak pernah melihat kueri dan dokumen secara bersamaan, sehingga dapat melewatkan interaksi halus.

Sebuah cross-encoder menerima pasangan teks sekaligus (kueri dan kandidat) dan menghasilkan satu skor relevansi. Karena model memperhatikan kedua teks secara bersamaan, akurasinya jauh lebih tinggi. Biayanya adalah Anda tidak dapat menghitung apa pun di awal: setiap pasangan kueri-dokumen harus dijalankan melalui model. Menilai satu kueri terhadap satu juta dokumen menjadi tidak praktis.

Pola standar menggabungkan keduanya. Bi-encoder mengambil beberapa lusin kandidat dengan cepat, lalu cross-encoder me-rerank hanya kandidat tersebut untuk presisi. Inilah pola retrieve-then-rerank yang kita bangun nanti.

Kueri --> [Bi-encoder] --> 50 kandidat teratas --> [Cross-encoder] --> 5 teratas hasil rerank

(cepat, perkiraan) (lambat, presisi)

Instalasi

Pasang pustaka dengan pip. Ia akan menarik PyTorch, transformers, dan datasets sebagai dependensi.

pip install -U sentence-transformers

Untuk pelatihan dan evaluasi Anda mungkin juga membutuhkan beberapa tambahan. Memasang accelerate memungkinkan pelatihan lebih cepat dan multi-GPU, dan datasets diperlukan oleh API pelatihan (biasanya sudah ikut terpasang).

pip install -U accelerate datasets

Verifikasi pemasangan dan periksa perangkat yang tersedia.

import torch

from sentencetransformers import SentenceTransformer

print("sentence-transformers siap")

print("CUDA tersedia:", torch.cuda.isavailable())

Memuat Model dan Mengkodekan Teks

Kelas inti adalah SentenceTransformer. Berikan nama model dari Hub dan ia akan mengunduh serta menyimpan bobotnya di cache. Model awal serbaguna yang baik adalah all-MiniLM-L6-v2: kecil, cepat, berdimensi 384, dan kuat untuk kemiripan semantik bahasa Inggris.

from sentencetransformers import SentenceTransformer

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

sentences = [

"Bagaimana cara mengatur ulang kata sandi akun saya?",

"Langkah memulihkan login yang terlupa",

"Cuaca di Jakarta panas hari ini.",

]

embeddings = model.encode(sentences)

print(embeddings.shape) # (3, 384)

Artikel Terkait

Tutorial BERTopic: Topic Modeling Modern dengan Embeddings

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

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 spaCy: NLP Berskala Industri dengan Python

spaCy: NLP Kelas Industri di Python spaCy adalah pustaka open-source untuk pemrosesan bahasa alami (NLP) yang dirancang ...

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