Pengambilan Padat vs Jarang: Keseimbangan
Pahami kapan embedding padat melewatkan kecocokan kata kunci yang persis dan kapan BM25 melewatkan parafrasa semantik, serta alasan penggabungan keduanya secara konsisten mengungguli masing-masing metode secara terpisah.
Pengambilan Padat vs Jarang: Keseimbangan adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Dua Sinyal Pengambilan yang Berbeda Secara Mendasar
Sistem pengambilan modern mengandalkan dua sinyal yang berbeda: pengambilan padat mengodekan makna ke dalam ruang vektor kontinu, sedangkan pengambilan jarang menghitung kemunculan istilah secara persis. Sinyal-sinyal ini saling melengkapi, bukan dapat saling menggantikan. Memahami kelebihan dan kekurangan masing-masing adalah langkah pertama untuk membangun sistem yang menggunakan keduanya secara efektif.
Cara Kerja Penyematan Padat
Pengambilan padat memetakan kueri dan setiap dokumen ke dalam vektor berdimensi tinggi menggunakan pengode neural. Kemiripan diukur dengan jarak kosinus atau hasil kali titik antarvektor. Karena pengode dilatih menggunakan korpus teks yang besar, frasa yang berkaitan secara semantik akan berdekatan dalam ruang vektor meskipun tidak memiliki kata yang sama—inilah keunggulan utama pengambilan padat.
from openai import OpenAI
import numpy as np
client = OpenAI()
def embed(text: str) -> list[float]:
resp = client.embeddings.create(
model='text-embedding-3-small',
input=text,
)
return resp.data[0].embedding
def cosine_similarity(a, b):
a, b = np.array(a), np.array(b)
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
q = embed('How do I cancel my subscription?')
d = embed('Steps to unsubscribe from the service')
print(cosine_similarity(q, d)) # high similarity despite different wordsKegagalan Pengambilan Padat
Model padat kesulitan menangani istilah langka yang kurang terwakili selama pelatihan pengode. Kueri yang berisi nomor model produk tertentu seperti RTX-4090-Ti-OC, nama obat medis, atau pengenal internal milik perusahaan sering kali gagal menemukan dokumen yang benar karena pengode tidak memiliki representasi terpelajar untuk rangkaian token tersebut. Vektor tersebut akhirnya berada di lokasi yang tidak membantu dalam ruang penyematan.
Cara Kerja Pengambilan BM25 yang Jarang
BM25 (Best Matching 25) adalah fungsi pemeringkatan probabilistik yang memberi skor pada dokumen berdasarkan seberapa sering istilah kueri muncul di dalam dokumen, dinormalisasi berdasarkan panjang dokumen dan diredam berdasarkan kejenuhan frekuensi istilah. Fungsi ini menghasilkan vektor skor jarang—sebagian besar dimensinya bernilai nol karena dokumen hanya memuat sebagian kecil kosakata.
# BM25 scoring formula (conceptual)
# score(D, Q) = sum over query terms t of:
# IDF(t) * (tf(t,D) * (k1 + 1)) / (tf(t,D) + k1 * (1 - b + b * |D|/avgdl))
# k1 controls term frequency saturation (typically 1.2-2.0)
# b controls document length normalization (typically 0.75)
# IDF(t) = log((N - df(t) + 0.5) / (df(t) + 0.5))
# N = total documents, df(t) = documents containing term t
# tf(t,D) = frequency of t in document D, |D| = doc length, avgdl = average doc lengthKelebihan BM25: Istilah Persis dan Jargon
BM25 unggul pada kueri yang melibatkan istilah teknis persis, nama produk, kode kesalahan, dan pengenal numerik yang harus dicocokkan secara tepat. Kueri untuk ORA-01017 (kode kesalahan Oracle) akan menempatkan dokumen yang memuat string persis tersebut jauh di atas dokumen yang hanya membahas autentikasi basis data secara umum. Hal ini tidak mungkin dilakukan oleh model padat yang belum pernah melihat kode khusus tersebut.
from rank_bm25 import BM25Okapi
corpus = [
'Oracle database ORA-01017 invalid username or password logon denied',
'Database authentication and connection troubleshooting guide',
'How to resolve login errors in Oracle and MySQL databases',
]
tokenized_corpus = [doc.lower().split() for doc in corpus]
bm25 = BM25Okapi(tokenized_corpus)
query = 'ORA-01017 error fix'
scores = bm25.get_scores(query.lower().split())
print(dict(zip(range(len(corpus)), scores)))
# doc 0 scores highest because it contains ORA-01017Kegagalan BM25: Parafrasa dan Sinonim
BM25 tidak mampu mengenali parafrasa semantik. Dokumen tentang “perbaikan mesin mobil” akan mendapat skor nol untuk kueri tentang “pemeliharaan motor kendaraan” karena tidak ada kata persis yang sama. Masalah ketidakcocokan kosakata ini, yang terkadang disebut kesenjangan leksikal, berarti pencarian kata kunci murni melewatkan sejumlah besar konten relevan yang hanya menggunakan kata berbeda untuk menyampaikan gagasan yang sama.
from rank_bm25 import BM25Okapi
corpus = [
'automobile engine repair and maintenance tips',
'car motor maintenance guide for beginners',
'vehicle powertrain service intervals',
]
tokenized = [doc.split() for doc in corpus]
bm25 = BM25Okapi(tokenized)
scores = bm25.get_scores(['car', 'motor', 'maintenance'])
print(scores)
# doc 1 scores high, doc 0 and 2 score lower despite being semantically relatedBukti Tolok Ukur: Hibrida Menang Secara Konsisten
Tolok ukur pada BEIR, MS MARCO, dan himpunan data tanya jawab perusahaan secara konsisten menunjukkan bahwa pengambilan hibrida mengungguli pengambilan padat maupun jarang secara terpisah sebesar 5–15 persen pada NDCG@10. Peningkatannya paling besar pada himpunan data yang mencampur pencarian fakta (yang terbantu oleh BM25) dan kueri parafrasa (yang terbantu oleh penyematan padat). Tidak ada satu metode pengambilan yang unggul untuk semua jenis kueri.
Analisis Jenis Kueri: Pengambil Mana yang Menang
Anda dapat memprediksi pengambil mana yang akan bekerja lebih baik dengan menganalisis jenis kueri. Pengambilan padat unggul pada pertanyaan konseptual, parafrasa, dan kueri topik yang luas. BM25 unggul pada kueri yang berisi nama diri, nomor versi, cuplikan kode, akronim, dan istilah teknis yang langka. Hibrida selalu unggul ketika jenis kueri tidak diketahui sebelumnya—yang hampir selalu terjadi dalam produksi.
# Query type heuristics
def predict_retriever_advantage(query: str) -> str:
tokens = query.split()
has_numbers = any(t[0].isdigit() for t in tokens)
has_uppercase_acronyms = any(t.isupper() and len(t) > 2 for t in tokens)
is_short = len(tokens) <= 4
if has_numbers or has_uppercase_acronyms:
return 'BM25 likely wins (exact terms)'
elif is_short:
return 'Dense likely wins (semantic matching needed)'
else:
return 'Hybrid recommended (mixed signals)'Masalah Ketidakcocokan Skor
Menggabungkan hasil padat dan jarang tidaklah sederhana karena skornya berada pada skala yang tidak kompatibel. Kemiripan kosinus menghasilkan nilai antara -1 dan 1, sedangkan BM25 menghasilkan skor positif tanpa batas yang bergantung pada ukuran korpus. Anda tidak dapat begitu saja menjumlahkannya. Solusi standarnya adalah menggunakan penggabungan berbasis peringkat, bukan penggabungan berbasis skor — menggabungkan daftar berperingkat, bukan skor mentah.
Keputusan Praktis: Kapan Menggunakan Masing-Masing
Gunakan pengambilan data padat saja ketika korpus Anda berada dalam domain yang sempit dengan kosakata yang konsisten dan Anda memerlukan generalisasi semantik terhadap parafrasa. Gunakan BM25 saja ketika kueri terutama berupa pencarian dengan pengenal yang persis dan himpunan data Anda cukup kecil sehingga pencarian secara menyeluruh masih memungkinkan. Gunakan pendekatan hibrida dalam semua sistem RAG produksi ketika jenis kueri beragam — beban tambahannya kecil dan peningkatan perolehannya signifikan.
Pertukaran Kinerja dan Infrastruktur
Pengambilan data padat memerlukan pencarian tetangga terdekat aproksimasi yang dipercepat GPU atau basis data vektor, yang menambah biaya infrastruktur. BM25 berjalan sepenuhnya pada CPU dengan indeks terbalik dan sangat cepat. Pengambilan data hibrida memerlukan kedua komponen infrastruktur tersebut, ditambah satu langkah penggabungan. Kompleksitas tambahan ini sepadan dengan peningkatan perolehan untuk sebagian besar kasus penggunaan produksi, tetapi harus dipertimbangkan terhadap anggaran infrastruktur Anda.
Pemeriksaan Singkat
Uji pemahaman Anda tentang pertukaran antara pengambilan data padat dan jarang dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: pengambilan data padat menangkap makna semantik, tetapi gagal pada istilah persis yang jarang muncul; pengambilan data jarang BM25 menangani kata kunci persis, tetapi melewatkan parafrasa; dan pengambilan data hibrida secara konsisten mengungguli masing-masing metode jika digunakan sendiri pada beragam jenis kueri. Skornya tidak kompatibel dan harus digabungkan melalui penggabungan peringkat, bukan penjumlahan skor. Selanjutnya, kita akan mengimplementasikan pencarian kata kunci BM25 dalam Python.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengambilan Padat vs Jarang: Keseimbangan” gratis?
Ya — teks lengkap “Pengambilan Padat vs Jarang: Keseimbangan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengambilan Padat vs Jarang: Keseimbangan”?
Pahami kapan embedding padat melewatkan kecocokan kata kunci yang persis dan kapan BM25 melewatkan parafrasa semantik, serta alasan penggabungan keduanya secara konsisten mengungguli masing-masing me… Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Pengambilan Padat vs Jarang: Keseimbangan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengambilan Padat vs Jarang: Keseimbangan
- Menerapkan Pencarian Kata Kunci BM25
- Penggabungan Peringkat Timbal Balik untuk Menggabungkan Skor
- Pencarian Hibrida di Pinecone dan pgvector