Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

  1. Beranda
  2. Blog
  3. Kecerdasan Buatan

Kecerdasan Buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Penyematan memungkinkan komputer membandingkan makna alih-alih mencocokkan kata dengan tepat. Mereka mendukung pencarian semantik, rekomendasi, dan RAG. Pelajari apa itu, bagaimana kesamaan diukur, dan di mana hal tersebut mengecewakan Anda.

8 menit baca
Apa itu embeddings? Kesamaan vektor dan kosinus dijelaskan secara sederhana

Poin penting

  • penyematan adalah daftar angka yang mewakili arti teks, gambar, atau data lainnya.
  • Item serupa berakhir dengan angka serupa, sehingga maknanya dapat dibandingkan dengan matematika.
  • Kesamaan kosinus membandingkan arah, dan ini adalah cara umum untuk menilai seberapa mirip dua embeddings.
  • Hanya bandingkan penyematan dari model yang sama, dan uji hasilnya pada data Anda sendiri.

Telusuri “cara mendapatkan uang saya kembali”, dan sistem yang baik akan menemukan halaman berjudul “Kebijakan pengembalian dana”, meskipun keduanya tidak memiliki kata-kata penting yang sama. Kemampuan tersebut berasal dari embeddings, salah satu ide paling berguna dalam AI modern.

Panduan ini menjelaskan penyematan tanpa perhitungan yang rumit. Kami menjalankan contoh kecil di Python 3.13, dan hasilnya ditunjukkan di bawah. Vektor-vektor di dalamnya adalah vektor-vektor yang kami buat dengan tangan, dengan masing-masing hanya tiga angka, agar gagasannya mudah dilihat. Penyematan nyata berasal dari model terlatih dan sering kali memiliki ratusan atau ribuan nomor.

Apa itu penyematan?

Penyematan adalah representasi sesuatu sebagai daftar angka, yang disebut vektor. Suatu model dilatih agar item-item yang mempunyai arti terkait mendapatkan vektor-vektor yang berdekatan.

"kitten"  -> [0.9, 0.8, 0.1]
"cat"     -> [0.9, 0.7, 0.2]
"invoice" -> [0.0, 0.1, 0.9]

Setelah teks berada dalam bentuk ini, komputer dapat menghitung seberapa mirip dua bagian teks, yang tidak dapat dilakukan secara langsung dengan kata-kata. Penyematan juga tidak terbatas pada kata-kata. Kalimat, seluruh dokumen, gambar, audio, dan produk semuanya dapat disematkan.

Mengapa tidak mencocokkan kata kunci saja?

Kueri dan dokumen Pencarian kata kunci Menyematkan pencarian
“uang kembali” dan “kebijakan pengembalian dana” Merindukan itu, tidak ada kata-kata yang dibagikan Dapat menemukannya
“laptop” dan “komputer notebook” Merindukan itu Dapat menemukannya
“kesalahan E1042” dan halaman dengan “E1042” Menemukannya dengan tepat Mungkin melewatkannya
“bank” (sungai) dan “bank” (uang) Perlakukan mereka dengan cara yang sama Dapat memisahkannya, sesuai konteksnya

Panduan kami untuk RAG menunjukkan hal ini dalam praktiknya. Pencarian sederhana berdasarkan jumlah kata menghasilkan nol untuk “Kapan saya bisa mendapatkan uang saya kembali?” terhadap dokumen pengembalian dana, karena mereka tidak berbagi kata-kata. Perhatikan juga baris ketiga: pengidentifikasi yang tepat adalah kelemahan penyematan, jadi pencarian kata kunci masih mendapat tempat.

Bayangkan sebuah peta

Bayangkan menempatkan setiap kata pada peta besar, yang lokasinya mencerminkan maknanya. “Kucing” dan “anak kucing” duduk bersebelahan, “anjing” berada di lingkungan yang sama, dan “faktur” berada di kota yang berbeda. Untuk menemukan kata-kata terkait, Anda cukup melihat di dekatnya.

Penyematan sebenarnya bekerja dengan cara yang sama, hanya saja petanya memiliki ratusan dimensi, bukan dua. Orang tidak bisa membayangkannya, tapi perhitungannya tetap sama. Angka-angka individu umumnya tidak memiliki arti yang rapi, seperti “furriness”. Yang penting adalah posisi keseluruhan.

Contoh kerja kecil

Berikut ini cara membandingkan vektor buatan tangan kita:

import math

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    return dot / (math.sqrt(sum(x * x for x in a)) *
                  math.sqrt(sum(y * y for y in b)))

vectors = {
    "kitten":  [0.9, 0.8, 0.1],
    "cat":     [0.9, 0.7, 0.2],
    "dog":     [0.8, 0.3, 0.2],
    "invoice": [0.0, 0.1, 0.9],
}

for word in ("kitten", "dog", "invoice"):
    print(word, round(cosine(vectors["cat"], vectors[word]), 3))

# kitten 0.994
# dog 0.955
# invoice 0.238

Terhadap “kucing”, “anak kucing” mendapat skor tertinggi, “anjing” berikutnya, dan “faktur” jauh lebih rendah. Kami memilih vektor-vektor ini untuk menghasilkan pola tersebut, sehingga peringkat tersebut tidak membuktikan apa pun tentang bahasa sebenarnya. Ini hanya menunjukkan bagaimana perhitungan berperilaku. Pencarian semantik melakukan hal yang sama dalam tiga langkah: menyematkan kueri, menilainya berdasarkan setiap item yang disimpan, dan mengurutkan.

query = [0.85, 0.75, 0.15]
sorted(vectors, key=lambda w: cosine(query, vectors[w]), reverse=True)

# ['kitten', 'cat', 'dog', 'invoice']

Kesamaan kosinus dijelaskan

Setiap vektor dapat diibaratkan sebagai anak panah yang menunjuk dari titik asal. Kesamaan kosinus mengukur sudut antara dua anak panah, dengan mengabaikan panjangnya. Kami mengonfirmasi nilai-nilai kunci:

cosine([1, 2, 3], [2, 4, 6])   # 1.0   same direction
cosine([1, 0], [0, 1])         # 0.0   unrelated (at right angles)
cosine([1, 0], [-1, 0])        # -1.0  opposite directions
Skor Artinya
Dekat dengan 1 Arahkan ke arah yang hampir sama, jadi sangat mirip
Dekat dengan 0 Tidak berhubungan
Mendekati -1 Tunjuk ke arah yang berlawanan

Lihatlah baris pertama. [2, 4, 6] dua kali lebih panjang dari [1, 2, 3], namun skornya sempurna 1,0, karena yang terpenting adalah arah. Hal ini berguna untuk teks, yang panjangnya dapat mencerminkan hal-hal seperti ukuran dokumen, bukan makna. Hati-hati dengan ambang batas juga. Tidak ada skor universal yang berarti “serupa”, karena rentang yang berguna berbeda dari model ke model, jadi ujilah data Anda sendiri.

Pengukuran jarak lainnya

Ukur Apa yang dilihatnya Catatan
Kesamaan kosinus Hanya sudut Default umum untuk teks
Produk titik Sudut dan panjang Cepat, dan sama dengan kosinus pada vektor yang dinormalisasi
Jarak Euclidean Jarak garis lurus Lebih kecil berarti lebih mirip

Perbedaannya mudah dilihat. Dua vektor yang sama dengan skor kosinus 1,0 mempunyai jarak Euclidean 3,742, karena yang satu lebih panjang dari yang lain. Banyak sistem menormalkan vektor, menskalakan masing-masing vektor menjadi 1. Setelah itu, hasil kali titik dan kosinus memberikan jawaban yang sama, dan kami mengonfirmasi hal ini: keduanya memberikan 0,955 untuk “kucing” dan “anjing”. Periksa dokumentasi model Anda untuk melihat ukuran mana yang direkomendasikan.

Bagaimana embeddings dipelajari

Tidak ada seorang pun yang memberikan angka-angka ini secara manual dalam sistem nyata. Jaringan saraf mempelajarinya selama pelatihan. Gagasan awal dan berpengaruh adalah bahwa kata-kata yang muncul dalam konteks serupa cenderung memiliki arti yang sama, seperti “Saya memberi makan kucing saya” dan “Saya memberi makan anjing saya”. Model seperti Word2Vec dan GloVe mempelajari vektor kata dari pola tersebut.

Belakangan, model berbasis transformator seperti BERT membuat penyematan peka konteks, sehingga “bank” bisa mendapatkan vektor berbeda di “tepi sungai” dan “pinjaman bank”. Banyak model modern menyematkan seluruh kalimat atau bagian sekaligus. Panduan kami untuk model bahasa besar menjelaskan cara transformator menangani konteks.

Tempat penyematan digunakan

Gunakan Bagaimana ini membantu
Pencarian semantik Menemukan hasil berdasarkan makna, bukan kata-kata yang tepat
RAG Mengambil bagian yang relevan untuk model bahasa
Rekomendasi Menyarankan item yang serupa dengan yang Anda sukai
Pengelompokan Grup mendukung tiket atau ulasan berdasarkan topik
Deteksi duplikat Temukan pertanyaan atau daftar serupa
Klasifikasi Menyediakan fitur untuk model sederhana
Deteksi anomali Menandai item jauh dari yang lainnya

Contoh kami membandingkan kueri dengan setiap item, yang dikenal sebagai penelusuran tepat. Itu berfungsi dengan baik untuk ribuan item, tetapi menjadi lambat pada jutaan item. Perkiraan indeks tetangga terdekat (ANN) seperti HNSW memecahkan masalah ini. Mereka menemukan kecocokan yang sangat dekat dengan cepat, dengan memberikan sedikit peluang untuk melewatkan yang terbaik.

Basis data dan ekstensi vektor, seperti pgvector untuk PostgreSQL, menyediakan indeks ini bersama dengan pemfilteran dan penyimpanan. panduan basis data vektor kami mencakup opsi-opsinya. Untuk proyek kecil, Anda mungkin tidak memerlukannya sama sekali, dan pencarian di dalam memori adalah cara yang baik untuk memulai.

Tips: Pertimbangkan penelusuran hibrid sejak dini. Menggabungkan kesamaan penyematan dengan pencocokan kata kunci sering kali memberikan hasil yang lebih baik daripada keduanya saja, terutama saat pengguna menelusuri kode produk, nama, atau pesan kesalahan.

Memilih model penyematan

  • Bahasa. Jika konten Anda dalam bahasa Hindi atau Tamil, misalnya, periksa apakah model dapat menanganinya dengan baik.
  • Domain. Model umum mungkin bermasalah dengan istilah hukum atau medis khusus.
  • Dimensi. Lebih banyak dimensi dapat menangkap lebih banyak detail, namun memerlukan lebih banyak penyimpanan dan memori.
  • Biaya dan hosting. Bandingkan API yang dihosting dengan model terbuka yang dapat Anda jalankan sendiri, terutama untuk data pribadi.
  • Panjang masukan. Model memiliki batasan, sehingga dokumen yang panjang harus dipecah menjadi beberapa bagian terlebih dahulu.

Tes terbaik adalah data Anda sendiri. Kumpulkan sekitar 20 kueri nyata beserta dokumen yang harus mereka temukan, dan bandingkan bagaimana setiap model memberi peringkat pada kueri tersebut. Tolok ukur yang dipublikasikan mungkin tidak mencerminkan konten Anda.

Keterbatasan

  • Penguncian model. Vektor dari model yang berbeda tidak dapat dibandingkan. Jika Anda mengganti model, Anda harus menyematkan semuanya lagi.
  • Istilah persisnya. ID, kode, dan nama langka mungkin tidak dapat dicocokkan dengan pasti.
  • Negasi. “Pengembalian dana diperbolehkan” dan “pengembalian dana tidak diperbolehkan” dapat terjadi bersamaan, meskipun memiliki arti yang berlawanan.
  • Serupa tidak berarti benar. Kecocokan yang mirip mungkin sudah ketinggalan jaman atau hanya salah.
  • Bias. Penyematan dapat menyerap stereotip dari data pelatihannya.
  • Cosinus bukanlah sihir. Para peneliti mempertanyakan seberapa bermakna hal tersebut pada beberapa embeddings yang dipelajari, jadi perlakukan skor sebagai sinyal yang berguna dan bukan sebagai ukuran kebenaran.

Kesalahan umum

  • Mencampur model. Sematkan kueri dan dokumen dengan model dan versi yang sama.
  • Menggunakan satu ambang kesamaan di semua tempat. Sesuaikan untuk setiap model dan tugas.
  • Menyematkan seluruh dokumen berukuran besar. Maknanya akan berkurang, jadi potong-potong terlebih dahulu.
  • Melewatkan evaluasi. Tanpa kueri pengujian, Anda tidak dapat mengetahui apakah suatu perubahan membantu.
  • Menggunakan embeddings untuk semuanya. Jika pengguna mencari ID yang tepat, indeks database normal lebih baik.

Penutup

Penyematan mengubah makna menjadi angka, sehingga perangkat lunak dapat membandingkan ide, bukan string. Konsepnya sederhana, sedangkan kerja prakteknya terletak pada pemilihan model, pengelompokan data, dan pengujian pada kueri nyata. Untuk mencobanya sendiri, sematkan beberapa lusin dokumen Anda sendiri dengan model penyematan apa pun, telusuri dokumen tersebut dengan pertanyaan nyata, dan lihat hasilnya yang mengejutkan Anda.

Pertanyaan yang sering diajukan

Apa itu embeddings secara sederhana?

Embeddings adalah daftar angka yang mewakili makna. Item dengan arti serupa mendapatkan nomor serupa, yang memungkinkan komputer membandingkannya secara matematis.

Apa yang dimaksud dengan persamaan kosinus?

Ini mengukur sudut antara dua vektor, dari -1 hingga 1. Skor yang mendekati 1 berarti keduanya menunjuk ke arah yang hampir sama, yang menunjukkan konten yang serupa.

Apa perbedaan antara penyematan dan token?

Token adalah sepotong teks yang diproses oleh model. Penyematan adalah vektor numerik yang mewakili makna token, kalimat, atau dokumen.

Berapa banyak dimensi yang harus dimiliki sebuah penyematan?

Itu tergantung pada modelnya, dan ratusan hingga beberapa ribu adalah hal yang umum. Lebih banyak dapat menangkap lebih banyak detail, namun membutuhkan lebih banyak penyimpanan, jadi ujilah apa yang dibutuhkan kasus penggunaan Anda.

Apakah saya memerlukan database vektor untuk menggunakan embeddings?

Tidak. Koleksi kecil dapat dicari di memori. Basis data vektor menjadi berguna dengan koleksi yang lebih besar, pembaruan yang sering, atau kebutuhan pemfilteran.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengujian perangkat lunak

User Acceptance Testing (UAT): Proses, Checklist dan Contoh Nyata

Pengujian penerimaan pengguna menjelaskan: siapa yang menjalankannya, perbedaannya dengan QA, proses tujuh langkah, templat kasus uji UAT, daftar pe…

Baca artikel →
Basis data & SQL

Penjelasan Nilai NULL SQL: IS NULL, COALESCE, NULLIF dan Jebakan yang Harus Dihindari

Nilai SQL NULL dijelaskan dengan kueri yang kami jalankan: logika tiga nilai, IS NULL, COALESCE, NULLIF, cara agregat, penggabungan, dan pengurutan …

Baca artikel →
Basis data & SQL

Pernyataan SQL CASE WHEN: Sintaks, Contoh Nyata dan Kesalahan Umum

SQL CASE KETIKA dijelaskan dengan kueri yang kami jalankan: formulir sederhana dan dicari, urutan kondisi, pivot dengan SUM, trik COUNT, pengurutan …

Baca artikel →
Pengembangan perangkat lunak

Apa itu JWT? Token Web JSON Dijelaskan Dengan Contoh Kerja

Apa itu JWT? JSON Web Tokens menjelaskan: tiga bagian, token yang dibuat dan dirusak dalam kode yang kami jalankan, sesi JWT vs, penyimpanan, token …

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Loop Acara JavaScript: Call Stack, Microtasks, dan Timer Dengan Contoh

Perulangan peristiwa JavaScript dijelaskan dengan kode yang kami jalankan: tumpukan panggilan, antrian tugas dan tugas mikro, mengapa setTimeout 0 t…

Baca artikel →
Pengembangan perangkat lunak

Generator Python dan Penjelasan Hasil: Menghemat Memori Dengan Contoh Nyata

Generator dan hasil Python dijelaskan dengan kode yang kami jalankan: bagaimana mereka menjeda dan melanjutkan, mengukur penghematan memori, saluran…

Baca artikel →
Kecerdasan buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Apa itu embeddings? Panduan bahasa sederhana tentang vektor, kesamaan kosinus, dan penelusuran semantik, dengan contoh kecil yang kami jalankan, pen…

Baca artikel →
DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Penjelasan penerapan blue-green vs canary: cara kerja masing-masing, biaya, risiko dan rollback, pengelompokan pengguna stabil yang kami uji, migras…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →