Embedding condensation adalah kondisi ketika vektor representasi dari model embedding menumpuk pada manifold berdimensi rendah atau memiliki kesamaan kosinus antar-vektor yang sangat tinggi (> 0.90) secara seragam. Kondisi ini sering muncul akibat bias arsitektur representasi (anisotropi) pada model transformer atau corpus data teks yang sangat homogen. Pada pgvector, konsentrasi titik data dalam ruang sempit merusak partisi ruang dan topologi graf indeks approximate nearest neighbor (ANN).
Dampak Kondensasi Vektor pada Indeks HNSW dan IVFFlat
Indeks ANN di pgvector dirancang dengan asumsi distribusi data memiliki variansi geometris yang cukup untuk membedakan ketetanggaan.
- Degradasi IVFFlat: IVFFlat membagi ruang vektor ke dalam klaster menggunakan algoritma k-means. Ketika kondensasi terjadi, centroid k-means runtuh saling berdekatan. Sebagian besar vektor berakhir pada sejumlah kecil list (imbalanced buckets). Hasilnya, PostgreSQL terpaksa melakukan sequential scan berulang pada bucket yang padat, menyebabkan latensi melonjak drastis dan recall turun kecuali parameter
ivfflat.probesdinaikkan mendekati jumlah total list. - Degradasi HNSW: HNSW menyusun graf multi-lapisan. Jika jarak antar-titik sangat rapat, variasi jarak euklidean atau kosinus menjadi sangat kecil. Algoritma penjelajahan graf (greedy traversal) mudah terjebak dalam local minima karena batas pemisah antar-node menjadi ambigu. Untuk mencapai target recall yang sama, indeks membutuhkan traversal node yang jauh lebih dalam.
Audit Distribusi Jarak Kosinus
Sebelum melakukan modifikasi indeks, validasi apakah corpus mengalami kondensasi melalui perhitungan sampling jarak kosinus antar-vektor.
-- Hitung statistik distribusi jarak kosinus acak (10.000 sampel pasangan)
WITH sample_a AS (
SELECT id, embedding FROM documents ORDER BY random() LIMIT 100
),
sample_b AS (
SELECT id, embedding FROM documents ORDER BY random() LIMIT 100
),
distances AS (
SELECT
a.id AS id_a,
b.id AS id_b,
(a.embedding <=> b.embedding) AS cosine_distance
FROM sample_a a
CROSS JOIN sample_b b
WHERE a.id <> b.id
)
SELECT
AVG(cosine_distance) AS avg_dist,
STDDEV(cosine_distance) AS std_dist,
MIN(cosine_distance) AS min_dist,
MAX(cosine_distance) AS max_dist,
percentile_cont(0.5) WITHIN GROUP (ORDER BY cosine_distance) AS median_dist
FROM distances;Jika avg_dist bernilai < 0.15 (cosine similarity > 0.85) dan std_dist bernilai sangat rendah (< 0.05), dataset terindikasi mengalami kondensasi ekstrem.
Mitigasi di Sisi Pipeline Data: Regularisasi dan Dispersi
Cara paling efektif mengatasi kondensasi adalah memproses embedding sebelum diinjeksi ke PostgreSQL. Dua teknik standar meliputi Mean-Centering dan Z-score Normalization untuk mengembalikan isotropi ruang.
import numpy as np
def post_process_embeddings(embeddings: np.ndarray) -> np.ndarray:
"""
embeddings: Matriks 2D (N, D).
Mengurangi rata-rata corpus (mean-centering) lalu normalisasi unit-length (L2).
"""
# Hitung rata-rata corpus per-dimensi
corpus_mean = np.mean(embeddings, axis=0)
# Geser vektor ke titik pusat
centered = embeddings - corpus_mean
# Normalisasi kembali ke unit length untuk mempertahankan kompatibilitas Cosine Distance
norms = np.linalg.norm(centered, axis=1, keepdims=True)
norms[norms == 0] = 1.0
dispersed = centered / norms
return dispersedPeringatan: Vektorcorpus_meanharus disimpan sebagai artefak inferensi. Setiap query vektor dari user input harus dikurangi dengancorpus_meanyang sama sebelum kueri dieksekusi di database.
Konfigurasi Parameter Indeks pgvector
Jika modifikasi data pada pipeline embedding tidak memungkinkan, mitigasi harus dilakukan melalui tuning struktur indeks dan runtime query pgvector.
1. Penyesuaian HNSW
Tingkatkan kapasitas keterhubungan node (m) dan cakupan eksplorasi saat membangun indeks (ef_construction). Hal ini meminimalkan node terisolasi pada wilayah yang padat.
-- Bangun indeks HNSW dengan konektivitas lebih padat
CREATE INDEX idx_documents_embedding_hnsw
ON documents
USING hnsw (embedding vector_cosine_ops)
WITH (m = 32, ef_construction = 128);Pada tingkat runtime kueri, perbesar hnsw.ef_search dari default (40) guna memaksa algoritma mengeksplorasi graf lebih luas sebelum memutuskan kandidat terdekat:
SET hnsw.ef_search = 100;
SELECT id, content
FROM documents
ORDER BY embedding <=> '[0.012, 0.043, ...]'
LIMIT 10;2. Penyesuaian IVFFlat
Pada IVFFlat, hindari jumlah list yang terlalu kecil agar ukuran tiap bucket tidak membludak. Pada data ter-kondensasi, probes harus disetel lebih tinggi.
-- Naikkan jumlah centroids
CREATE INDEX idx_documents_embedding_ivfflat
ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 1000);
-- Naikkan probes saat pencarian untuk menjaga recall
SET ivfflat.probes = 50;Trade-off dan Kesimpulan
Meningkatkan m dan ef_search pada HNSW akan memulihkan recall yang hilang akibat kondensasi, namun meningkatkan konsumsi memori shared buffers dan menaikkan response time kueri. Pendekatan perbaikan di level data (mean-centering dan normalisasi L2) menawarkan rasio trade-off terbaik tanpa menambah beban throughput query engine PostgreSQL.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!