Embedding & representasi vektor
Sebelum bisa membangun pencarian semantik atau RAG, kamu perlu paham satu ide dasar: mengubah teks jadi deretan angka yang menangkap maknanya, bukan sekadar hurufnya.
Intisari
- Embedding adalah representasi teks sebagai vektor (deretan angka, mis. 1536 dimensi) โ teks dengan makna mirip menghasilkan vektor yang berdekatan di ruang itu.
- Ini beda fundamental dari pencarian kata kunci (
LIKE '%kucing%'): embedding menangkap makna, jadi 'kucing' dan 'anak kucing lucu' bisa dianggap dekat meski tidak ada kata yang sama persis. - Kedekatan makna diukur pakai cosine similarity (atau jarak Euclidean) antar vektor โ angka mendekati 1 berarti sangat mirip, mendekati 0 berarti tidak berhubungan.
- Embedding dihasilkan oleh model khusus (bukan model chat) lewat API โ satu panggilan, satu teks masuk, satu vektor keluar. Anthropic merekomendasikan Voyage AI; OpenAI, Google, dan lainnya punya model embedding sendiri.
- Embedding adalah fondasi dari semantic search, RAG (Fase 5), dan rekomendasi berbasis kemiripan โ hampir semua sistem 'pencarian pintar' berbasis LLM dibangun di atas ini.
Dari teks ke angka
Komputer tidak bisa membandingkan "makna" dua kalimat secara langsung. Embedding memecahkan ini dengan mengubah teks jadi vektor โ deretan angka desimal (biasanya ratusan hingga ribuan dimensi) โ sedemikian rupa sehingga teks dengan makna serupa menghasilkan vektor yang posisinya berdekatan di ruang berdimensi itu.
from openai import OpenAI
client = OpenAI()
def embed(teks: str) -> list[float]:
response = client.embeddings.create(model="text-embedding-3-small", input=teks)
return response.data[0].embedding
v1 = embed("kucing yang menggemaskan")
v2 = embed("anak kucing lucu")
v3 = embed("laporan keuangan kuartal tiga")
print(len(v1)) # 1536 โ jumlah dimensi vektornya
Ini bukan model chat. Model embedding tidak "menjawab" apa pun โ satu panggilan menerima satu
teks, mengembalikan satu vektor angka. Tidak ada system prompt, tidak ada percakapan. Fungsinya
murni satu: mengubah teks jadi koordinat yang bisa dibandingkan secara matematis.
Mengukur kedekatan: cosine similarity
Untuk membandingkan dua vektor, ukuran paling umum adalah cosine similarity โ mengukur sudut antara dua vektor, menghasilkan angka antara -1 dan 1 (untuk embedding teks pada praktiknya biasanya 0 sampai 1). Semakin dekat ke 1, semakin mirip maknanya.
import numpy as np
def cosine_similarity(a: list[float], b: list[float]) -> float:
a, b = np.array(a), np.array(b)
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
print(cosine_similarity(v1, v2)) # ~0.85 โ sangat mirip maknanya
print(cosine_similarity(v1, v3)) # ~0.15 โ nyaris tidak berhubungan
| Pendekatan | "kucing" cocok dengan "anak kucing lucu"? | Kenapa |
|---|---|---|
Pencarian kata kunci (LIKE, full-text search dasar) | Tidak โ kecuali kata "kucing" muncul persis | Mencocokkan string/token, bukan makna |
| Embedding + cosine similarity | Ya โ dianggap dekat secara makna | Menangkap kemiripan semantik, bukan kecocokan huruf |
Kapan memakai embedding vs pencarian kata kunci
| Kebutuhan | Pakai |
|---|---|
| Pengguna mencari istilah/kode persis (SKU produk, nomor invoice) | Pencarian kata kunci โ presisi, cepat, murah |
| Pengguna mencari dengan bahasa bebas ("cara reset password" vs dokumen berjudul "lupa kata sandi") | Embedding/semantic search โ menangkap makna meski kata berbeda |
| Kedua kebutuhan sekaligus | Hybrid search โ gabungan keduanya, dibahas lagi di Fase 5 |
Anthropic tidak punya model embedding sendiri โ dokumentasi resmi mereka merekomendasikan Voyage AI. Ini contoh konkret dari materi Fase 0: satu provider tidak harus dipakai untuk semua bagian sistem. Wajar dan umum memakai Claude untuk generasi jawaban, tapi model embedding dari provider lain (Voyage, OpenAI, atau model open-weight) untuk representasi vektor.
Latihan: buat embedding untuk lima kalimat โ dua yang maknanya mirip, tiga yang tidak berhubungan โ lalu hitung cosine similarity untuk semua pasangan (10 pasangan). Urutkan hasilnya dari yang paling mirip ke paling tidak mirip, dan periksa apakah urutannya sesuai intuisimu.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.