Dua vektor embedding dapat mengarah ke arah yang sama meski memiliki norm yang sangat berbeda. Cosine similarity memberi keduanya skor arah yang sama. Raw dot product tidak demikian. Perbedaan ini menjadi batas implementasi ketika sistem retrieval mengganti metrik index, menormalisasi vektor saat ingestion, atau mencampur embedding dari pipeline yang berbeda.

Persoalannya bukan menentukan satu metrik yang unggul untuk semua kasus. Yang perlu ditetapkan adalah apakah magnitudo vektor membawa informasi yang memang hendak dipertahankan oleh kontrak scoring. Setelah vektor dinormalisasi menjadi unit length, informasi magnitudo tersebut tidak lagi ikut dalam perhitungan similarity.

Cosine similarity memisahkan sudut dari norm

Untuk vektor nonzero x dan y, cosine similarity adalah

cos(x, y) = (x · y) / (||x|| ||y||)

Denominator menghilangkan pengaruh skala kedua vektor. Jika a > 0 dan b > 0, maka

cos(a x, b y) = cos(x, y)

Mengalikan salah satu vektor dengan konstanta positif tidak mengubah skor. Cosine similarity membandingkan orientasi, bukan panjang absolut vektor.

Sifat ini berpengaruh ketika model embedding menghasilkan vektor dengan norm yang bervariasi. Vektor dengan norm 2 dan vektor lain dengan norm 20 dapat memperoleh skor cosine yang sama terhadap sebuah query jika arahnya identik. Fungsi scoring tidak lagi memiliki jalur untuk memasukkan perbedaan norm itu ke hasil.

Zero vector merupakan batas terpisah. Cosine similarity untuk vektor tersebut tidak terdefinisi karena denominator memuat norm nol. Library dan vector database dapat menolak, memberi perlakuan khusus, atau menetapkan perilaku yang spesifik pada implementasinya, sehingga serving path tidak dapat mengasumsikan satu hasil universal.

Unit normalization membuat ranking cosine setara dengan dot product

Definisikan vektor yang sudah dinormalisasi sebagai

x_hat = x / ||x||
y_hat = y / ||y||

untuk x dan y nonzero. Dot product keduanya adalah

x_hat · y_hat = cos(x, y)

Ini memberi ekuivalensi yang presisi: dot product pada unit-normalized vectors menghasilkan skor yang sama dengan cosine similarity pada vektor nonzero asal, dengan tetap memperhitungkan efek finite precision biasa.

Ekuivalensi tersebut tidak berlaku untuk raw vectors yang belum dinormalisasi. Pada raw vectors,

x · y = ||x|| ||y|| cos(x, y)

sehingga skor memuat alignment arah sekaligus kedua norm. Mengganti cosine dengan raw dot product karena itu dapat mengubah ranking meski semua vektor berasal dari dimensi embedding dan keluarga model yang sama.

Ini juga menjadi dasar bagi vector index dengan inner product untuk mereproduksi ranking cosine ketika stored vectors dan query vectors sama-sama dinormalisasi secara konsisten. Nama metrik saja belum cukup untuk menjelaskan perilakunya; preprocessing merupakan bagian dari definisi scoring.

Normalisasi satu sisi tidak menghapus semua efek norm

Misalkan query dinormalisasi tetapi stored vectors tidak. Skornya menjadi

q_hat · d = ||d|| cos(q, d)

Norm document vector masih mengalikan skor. Jika stored vectors dinormalisasi tetapi query tidak, norm query mengalikan semua skor untuk satu query dengan konstanta positif yang sama:

q · d_hat = ||q|| cos(q, d)

Untuk satu query nonzero yang tetap, faktor bersama itu tidak mengubah urutan kandidat jika scoring hanya memakai dot product tersebut. Namun nilainya tetap dapat berpengaruh ketika skor digunakan di luar ranking terisolasi, misalnya pada threshold, score fusion, atau perbandingan lintas query yang memakai nilai absolut.

Asimetri ini mudah terlewat ketika ingestion dan query encoding berada di service yang berbeda. Adanya normalisasi pada satu jalur tidak berarti keseluruhan sistem retrieval memiliki semantik cosine.

Magnitudo dapat menjadi sinyal, gangguan, atau artefak tanpa kontrak

Apakah norm perlu memengaruhi ranking bergantung pada representasi embedding dan kontrak aplikasi. Sebagian pipeline sengaja memakai cosine similarity karena hanya kedekatan angular yang dimaksudkan ikut dalam retrieval. Sistem lain dapat memakai inner product karena model atau objective training menjadikan skala vektor mentah relevan terhadap skor.

Norm yang bervariasi tidak otomatis memiliki makna semantik. Nilainya dapat mencerminkan perilaku model, detail pooling, quantization, numerical scaling, atau transformasi lain dalam pipeline embedding. Menganggap magnitudo sebagai semantic confidence tanpa dasar eksplisit menambahkan interpretasi yang belum tentu didukung oleh representasi vektor.

Kesalahan sebaliknya juga mungkin terjadi. Menormalisasi setiap vektor sebagai preprocessing generik menghapus magnitudo secara permanen dari similarity downstream. Jika aturan scoring yang dimaksudkan model bergantung pada inner product atas raw output, unit normalization mengubah aturan tersebut, bukan sekadar mempermudah komputasi.

Batas yang aman bersifat spesifik terhadap representasi: pilihan metrik dan normalisasi harus mengikuti kontrak model embedding serta tujuan retrieval, bukan asumsi umum tentang vector search.

Migrasi metrik dapat mengubah ranking tanpa mengubah embedding

Migrasi retrieval dapat mempertahankan setiap koordinat vektor tetapi tetap mengubah hasil jika metrik index berganti. Perpindahan dari cosine ke raw inner product memasukkan norm vektor ke skor. Perpindahan dari raw inner product ke cosine menghapusnya.

Efeknya dapat terlihat pada query q dan dua kandidat dengan arah serta norm berbeda:

cos(q, a) > cos(q, b)

namun tetap mungkin terjadi

q · a < q · b

ketika b memiliki norm yang cukup lebih besar. Tidak ada koordinat embedding yang perlu berubah agar urutannya berbalik; fungsi scoring memberi arti berbeda terhadap skala.

Atas alasan yang sama, membangun ulang index dengan stored vectors yang sudah dinormalisasi merupakan perubahan semantik jika sistem sebelumnya memakai raw inner product. Perubahan itu perlu dievaluasi sebagai perubahan scoring, bukan hanya perubahan storage atau indexing.

Score threshold bergantung pada kontrak metrik

Nearest-neighbor ranking dan interpretasi nilai skor merupakan dua hal terpisah. Threshold yang dipilih untuk skor cosine tidak dapat dipindahkan secara mekanis ke raw dot-product score. Cosine untuk real vectors nonzero berada pada rentang -1 hingga 1, sedangkan raw dot product tidak memiliki batas tetap yang sama tanpa constraint tambahan pada norm vektor.

Bahkan ketika unit normalization membuat cosine dan dot product ekuivalen secara numerik, transformasi lain dapat menghilangkan keterbandingan skor secara langsung. Quantization, approximate search, reranking, atau score fusion dapat membawa semantik dan efek numeriknya sendiri. Sebuah threshold melekat pada keseluruhan scoring pipeline yang menghasilkannya.

Batas ini makin relevan ketika retrieval score menjadi input bagi keputusan berikutnya, bukan hanya dipakai untuk mengurutkan kandidat. Sistem pada kondisi tersebut bergantung pada skala skor sekaligus urutannya.

Kebijakan normalisasi perlu menjadi bagian dari kontrak retrieval

Embedding store lebih mudah dianalisis jika provenance setiap vektor mencakup identitas model, dimensi embedding, metrik, dan kebijakan normalisasi. Tanpa informasi tersebut, dua array dengan shape sama dapat kompatibel secara matematis dengan sebuah index tetapi membawa semantik scoring yang berbeda.

Query processing memerlukan kontrak yang sama. Jika stored vectors dinormalisasi ke unit length sebelum indexing, query vectors harus mengikuti kebijakan yang sesuai agar inner-product scoring tetap ekuivalen dengan cosine. Jika raw vectors sengaja dipertahankan, penambahan normalisasi pada sisi query atau ingestion di kemudian hari dapat mengubah ranking atau skala skor.

Cosine similarity karena itu lebih dari sekadar label metrik pada index. Metrik ini menetapkan keputusan untuk membuang magnitudo dari pairwise similarity. Ketika keputusan tersebut dinyatakan secara eksplisit, pergantian index, model, atau komponen serving tidak perlu diam-diam mengubah arti sebuah retrieval score.