Memilih Model Embedding: Benchmark Praktis

Foto oleh golanlevin on flickr
Tidak ada satu model terbaik secara mutlak, semuanya tergantung bahasa, domain, dan anggaran Anda. Model terkelola kecil dengan dimensi terpotong cocok untuk proyek berbahasa Inggris murni dengan anggaran terbatas, sementara model multibahasa self-hosted cenderung tampil lebih baik pada korpus campuran bahasa Inggris dan Indonesia. Cara paling andal untuk memutuskan adalah menjalankan pengujian recall at k terhadap pasangan kueri dan dokumen berlabel milik Anda sendiri.
MTEB menggabungkan skor dari banyak jenis tugas, termasuk klasifikasi dan clustering, yang mungkin tidak terlalu berkaitan dengan kualitas retrieval untuk aplikasi Anda. Sebuah model bisa berperingkat tinggi secara keseluruhan namun kurang baik pada pola retrieval spesifik yang dibutuhkan RAG, dan ketidakcocokan domain atau bahasa bisa membalikkan peringkat sepenuhnya begitu diuji dengan data Anda sendiri.
Dimensi yang lebih besar umumnya memberikan batas atas recall yang lebih tinggi tetapi biayanya lebih mahal untuk disimpan dan dikueri. Banyak model modern mendukung pemotongan bergaya Matryoshka, yang memungkinkan Anda memperkecil vektor setelah dihasilkan sambil mempertahankan sebagian besar sinyal yang berguna, sehingga ukuran yang tepat sering kali lebih kecil dari dimensi asli model setelah biaya dan ukuran indeks diperhitungkan.
Tidak secara otomatis. Skor retrieval bahasa Inggris di papan peringkat publik hampir tidak memberi tahu apa pun tentang performa bahasa Indonesia, karena imbuhan dan reduplikasi ditokenisasi secara berbeda dan banyak model dilatih terutama dengan data bahasa Inggris dan Mandarin. Benchmark multibahasa seperti MMTEB menunjukkan model multibahasa terkuat tidak selalu yang terbesar, sehingga pengujian dengan kueri berbahasa Indonesia sungguhan sangat penting.
Bisa, tetapi ini membutuhkan re-embedding seluruh korpus, bukan hanya dokumen baru, karena vektor dari model yang berbeda tidak bisa dibandingkan satu sama lain. Anggarkan waktu dan biaya pengindeksan ulang sebagai bagian dari keputusan sejak awal, alih-alih menganggap pemilihan model embedding mudah dibalik di kemudian hari.

Foto oleh golanlevin on flickr
Setiap proyek retrieval-augmented generation cepat atau lambat sampai pada persimpangan yang sama: model embedding mana yang sebenarnya layak masuk ke produksi. Papan peringkat MTEB membuat ini terlihat seperti masalah ranking sederhana, ambil saja model yang berada di puncak lalu lanjutkan. Pada praktiknya ini lebih mirip keputusan sistem daripada sekadar melihat papan peringkat, karena jumlah dimensi, harga per token, latensi, dan seberapa baik model menangani bahasa serta domain spesifik Anda semuanya menarik ke arah yang berbeda.
Tulisan ini membahas trade-off yang benar-benar saya pertimbangkan saat memilih model embedding untuk proyek klien, mengapa skor benchmark agregat hanya titik awal dan bukan vonis akhir, bagaimana model multibahasa berperilaku berbeda pada teks berbahasa Indonesia dibandingkan skor bahasa Inggrisnya, dan sebuah kerangka evaluasi recall at k kecil yang bisa Anda jalankan pada pasangan kueri dan dokumen berlabel milik Anda sendiri sebelum berkomitmen pada satu model.
Massive Text Embedding Benchmark menggabungkan skor dari puluhan dataset dan delapan kategori tugas, termasuk klasifikasi, clustering, dan retrieval. Skor MTEB keseluruhan sebuah model adalah rata-rata dari tugas-tugas yang mungkin tidak ada hubungannya dengan kasus penggunaan Anda. Model yang unggul dalam kemiripan kalimat atau clustering tetap bisa kurang baik pada jenis retrieval asimetris dari kueri ke dokumen panjang yang justru dibutuhkan RAG.
Jangan memilih model embedding hanya dengan menggulir ke puncak papan peringkat publik. Selisih setengah poin pada skor agregat bisa berbalik total begitu Anda mengujinya dengan kueri dan dokumen Anda sendiri.
Setiap model embedding mempublikasikan dimensi vektor asli, dan sebagian besar model modern memungkinkan Anda memotong vektor tersebut menjadi ukuran lebih kecil tanpa menghitung ulang, teknik yang umum disebut representasi Matryoshka. Vektor yang lebih kecil berarti penyimpanan lebih murah, pencarian kemiripan lebih cepat, dan beban memori lebih rendah pada indeks vektor Anda, tetapi bisa diam-diam mengorbankan recall pada kueri yang lebih sulit. Tabel di bawah adalah perbandingan kasar beberapa model yang umum dipakai untuk RAG pada tahun 2026.
| Model | Dimensi asli | Biaya relatif | Catatan |
|---|---|---|---|
| text-embedding-3-small | 1536 | Rendah | Pilihan default yang baik untuk korpus berbahasa Inggris dengan anggaran terbatas |
| text-embedding-3-large | 3072 | Sedang | Batas atas recall lebih tinggi, mendukung pemotongan dimensi |
| multilingual-e5-large-instruct | 1024 | Gratis, self-hosted | Retrieval multibahasa yang kuat, membutuhkan GPU atau proses batch CPU |
| bge-m3 | 1024 | Gratis, self-hosted | Retrieval dense, sparse, dan multi-vektor dalam satu model |
Aturan praktis yang berguna: dokumentasi resmi OpenAI mencatat bahwa model embedding besar yang dipotong menjadi ukuran jauh lebih kecil tetap bisa mengungguli model lama yang tidak dipotong pada ukuran penuh. Artinya pertanyaan yang jujur jarang sekali soal model mana yang punya vektor terbesar, melainkan model mana yang mempertahankan sinyal paling berguna pada ukuran dimensi yang benar-benar mampu diindeks dan dikueri infrastruktur Anda pada skala produksi.
Jika sebagian korpus Anda berbahasa Indonesia, peringkat papan peringkat berbahasa Inggris sebaiknya dianggap sebagai derau, bukan sinyal. Massive Multilingual Text Embedding Benchmark memperluas cakupan ke ratusan bahasa justru karena evaluasi khusus bahasa Inggris menyembunyikan kesenjangan performa yang besar. Temuan yang dipublikasikan benchmark ini menjadi pemeriksaan akal sehat yang baik terhadap asumsi bahwa model yang lebih besar selalu menang: model multibahasa publik terkuat dalam evaluasi tersebut hanya memiliki beberapa ratus juta parameter, jauh di bawah banyak model embedding tujuan umum.
Jika Anda melayani pengguna berbahasa Inggris dan Indonesia sekaligus, jangan berasumsi satu model embedding terbaik untuk keduanya. Jalankan evaluasi recall yang sama dua kali, sekali per bahasa, dan hanya berstandar pada satu model jika penurunan pada bahasa yang lebih lemah cukup kecil untuk diterima.
Satu-satunya benchmark yang secara andal memprediksi perilaku produksi adalah benchmark yang dibangun dari kueri dan dokumen Anda sendiri. Anda tidak butuh ribuan pasangan berlabel untuk mendapatkan sinyal yang berguna secara arah, tiga puluh hingga lima puluh pasangan kueri dan dokumen relevan yang realistis, diambil dari tiket dukungan sungguhan, log pencarian sungguhan, atau beberapa jam pelabelan manual, sudah cukup untuk memisahkan model yang benar-benar lebih baik dari model yang sekadar lebih populer. Skrip di bawah menghitung recall at k, yaitu proporsi kueri di mana dokumen yang benar muncul dalam k hasil retrieval teratas, untuk model embedding apa pun yang menyediakan pemanggilan embedding secara batch.
// Minimal recall@k harness against your own labeled pairs
import { OpenAI } from "openai"
interface EvalPair {
query: string
relevantDocId: string
}
const openai = new OpenAI()
async function embed(texts: string[], model: string) {
const res = await openai.embeddings.create({ model, input: texts })
return res.data.map((d) => d.embedding)
}
function cosineSim(a: number[], b: number[]) {
let dot = 0, magA = 0, magB = 0
for (let i = 0; i < a.length; i++) {
dot += a[i] * b[i]
magA += a[i] * a[i]
magB += b[i] * b[i]
}
return dot / (Math.sqrt(magA) * Math.sqrt(magB))
}
async function recallAtK(
pairs: EvalPair[],
corpus: { id: string; text: string }[],
model: string,
k = 5
) {
const corpusVecs = await embed(corpus.map((c) => c.text), model)
const queryVecs = await embed(pairs.map((p) => p.query), model)
let hits = 0
pairs.forEach((pair, i) => {
const scored = corpus.map((doc, j) => ({
id: doc.id,
score: cosineSim(queryVecs[i], corpusVecs[j]),
}))
scored.sort((a, b) => b.score - a.score)
const topK = scored.slice(0, k).map((s) => s.id)
if (topK.includes(pair.relevantDocId)) hits++
})
return hits / pairs.length
}Jalankan skrip yang sama terhadap setiap model kandidat dengan pasangan kueri dan dokumen yang sama, dan Anda mendapatkan perbandingan setara yang memperhitungkan strategi chunking Anda yang sebenarnya, panjang dokumen Anda yang sebenarnya, dan kosakata Anda yang sebenarnya, semua hal yang tidak bisa dilihat oleh papan peringkat publik. Biasanya prosesnya memakan waktu kurang dari satu jam untuk dijalankan terhadap tiga atau empat model kandidat setelah pasangan berlabel tersedia.
Setelah Anda memiliki angka recall dari data Anda sendiri, beberapa batasan praktis biasanya mempersempit pilihan menjadi satu atau dua opsi realistis.
Model yang lebih kecil dan lebih murah yang benar-benar Anda validasi terhadap data Anda sendiri akan mengalahkan model yang lebih besar dan lebih mahal yang hanya Anda percayai karena peringkatnya di papan peringkat. Waktu untuk validasi tidak pernah sia-sia dalam keputusan ini.
Untuk proyek RAG tujuan umum berbahasa Inggris murni dengan anggaran ketat, model terkelola kecil dengan dimensi terpotong adalah pilihan default yang masuk akal. Untuk apa pun yang menyentuh konten berbahasa Indonesia, model multibahasa self-hosted yang dievaluasi khusus pada pasangan kueri dan dokumen berbahasa Indonesia secara konsisten mengungguli model terkelola yang disetel untuk bahasa Inggris dalam pengujian saya sendiri, bahkan ketika model terkelola tersebut menang di papan peringkat umum. Apa pun yang Anda pilih, perlakukan keputusan itu sebagai bisa dibalik hanya jika Anda telah menganggarkan waktu untuk melakukan re-embedding seluruh korpus, karena embedding dari model berbeda tidak pernah bisa dibandingkan satu sama lain.