Apa Itu Embedding dan Mengapa Penting
(simonwillison.net)- Embedding mengubah konten seperti teks, gambar, dan kode menjadi array floating-point dengan panjang tetap, sehingga item yang berdekatan secara makna dapat ditemukan lewat perhitungan jarak
- Dalam ruang vektor yang dibuat oleh model yang sama, meski tidak mengetahui arti tiap angka, kita dapat membandingkan dokumen terkait, gambar serupa, dan potongan kode dengan cosine similarity
- Dalam contoh yang menyimpan 472 tulisan TIL sebagai vektor 1.536 dimensi menggunakan OpenAI
text-embedding-ada-002, kueri pencarian tulisan terkait memakan waktu sekitar 400 ms, dan biaya embedding untuk total 402.500 token sekitar $0,04 - Dengan kombinasi model lokal dan alat kecil saja, kita bisa mengimplementasikan pencarian README, pencarian kode, pencarian gambar, clustering, dan RAG;
LLM,llm-sentence-transformers,Symbex,CLIP,E5-large-v2digunakan sebagai contoh - Pencarian semantik berbasis embedding tidak bergantung pada kecocokan kata persis, sehingga menjadi cara utama untuk memasukkan kutipan relevan ke prompt LLM dalam RAG seperti tanya jawab dokumen internal perusahaan
Konsep dasar embedding
- Embedding adalah cara mengubah satu potongan konten menjadi array angka floating-point
- Panjang array selalu sama terlepas dari panjang konten
- Panjang array ditentukan oleh model embedding yang digunakan; contohnya bisa 300, 1.000, atau 1.536 angka
- Array ini dapat dilihat seperti koordinat dalam ruang multidimensi
- Posisi dalam ruang tersebut merepresentasikan makna konten sebagaimana dipahami model embedding
- Karakteristik konten seperti warna, bentuk, dan konsep dapat tercermin di dalamnya
- Meski kita tidak sepenuhnya memahami arti tiap angka, relasi posisi dapat dimanfaatkan untuk tugas berguna seperti menemukan item yang berdekatan
Rekomendasi konten terkait: contoh blog TIL
- Di situs TIL berisi 472 tulisan, vektor embedding 1.536 dimensi untuk tiap tulisan dihitung menggunakan model OpenAI
text-embedding-ada-002- Vektor disimpan di database SQLite situs tersebut
- Tulisan terkait ditemukan dengan menghitung cosine similarity antara vektor tulisan target dan semua vektor tulisan lain, lalu mengembalikan 10 yang paling dekat
- Hasil teratas untuk tulisan contoh “Geospatial SQL queries in SQLite using TG, sqlite-tg and datasette-sqlite-tg” terdiri dari tulisan terkait SQLite, SpatiaLite, GDAL, dan kueri SQL spasial
- Similarity terhadap dirinya sendiri adalah 1.0
sqlite_geopoly.mdadalah 0.8817322855676049spatialite_viewing-geopackage-data-with-spatialite-and-datasette.mdadalah 0.8813094978399854
- Kueri perhitungan tulisan terkait memakan waktu sekitar 400 ms, sehingga 10 similarity teratas untuk semua tulisan dihitung terlebih dahulu lalu disimpan di tabel
similarities - Biaya API embedding OpenAI untuk situs TIL adalah sekitar $0,04, berdasarkan kurang lebih 402.500 token dengan tarif $0.0001/1.000 token
- Model proprietari perlu diperhatikan dalam operasional
- OpenAI pernah menghentikan sebagian model embedding lama
- Jika ada banyak embedding yang disimpan dengan model lama, konten baru mungkin perlu dihitung ulang berdasarkan model yang masih didukung agar dapat di-embed
- OpenAI berjanji menanggung biaya re-embedding dengan model baru, tetapi risiko ketergantungan pada model proprietari tetap ada
- Model berlisensi terbuka dapat dijalankan di hardware sendiri, sehingga dapat menghindari risiko penghentian model
Ruang vektor dilihat lewat Word2Vec
- Efficient Estimation of Word Representations in Vector Space dari Google Research adalah makalah Word2Vec yang dipublikasikan pada 16 Januari 2013
- Word2Vec adalah model embedding awal yang mengubah satu kata menjadi array berisi 300 angka
- turbomaze.github.io/word2vecjson adalah demo untuk menjelajahi 10.000 kata dan array 300 angka untuk tiap kata
- Kata yang dekat dengan “france” antara lain
french,belgium,paris,germany,italy,spain
- Kata yang dekat dengan “france” antara lain
- Relasi juga terlihat lewat operasi vektor
- Jika vektor “germany” ditambah “paris” lalu dikurangi “france”, vektor hasilnya paling dekat dengan “berlin”
- Ini menunjukkan bahwa model menangkap relasi kebangsaan dan geografi di dalam ruang vektor
- Word2Vec dilatih pada konten berisi 1,6 miliar kata, sedangkan model embedding saat ini dilatih pada dataset yang jauh lebih besar sehingga menangkap relasi yang lebih kaya
Menghitung embedding dengan alat LLM
- LLM adalah alat command-line sekaligus library Python untuk menangani large language model
- Dapat dipasang dengan
pip install llmataubrew install llm - Secara default dapat digunakan bersama OpenAI API
- Dapat dipasang dengan
- Dengan memasang plugin, kita dapat menambahkan model bahasa atau model embedding baru
- Plugin
llm-sentence-transformersadalah plugin yang membungkus library SentenceTransformers- Model
all-MiniLM-L6-v2dapat diunduh dari Hugging Face dan digunakan secara lokal - Perintah
llm embedmenampilkan satu kalimat sebagai array angka JSON
- Model
- Embedding tidak terlalu bermakna sebagai array angka tunggal; ia menjadi berguna jika disimpan lalu dibandingkan
llm embed-multidapat meng-embed banyak konten sekaligus dan menyimpannya di tabel SQLite bernama collection- Contoh perintah mencari semua file
README.mddi bawah direktori home dan menyimpannya ke collectionreadmes - Opsi
--storejuga menyimpan teks asli ke tabel SQLite - Hasil eksekusi menyimpan 16.796 file
README.mddan memakan waktu sekitar 30 menit di komputer lokal
- Contoh perintah mencari semua file
Pencarian semantik dan “vibes-based search”
- Perintah
llm similarmencari item yang mirip dengan kalimat input di collection embedding yang tersimpan - Jika collection
readmesdicari dengan kalimatsqlite backup tools, README proyek terkait backup SQLite atau proyek terkait sepertisqlite-diffable,sqlite-dump,sqlite-generate,sqlite-history, dansqlite-utilsmuncul di posisi atas - Tidak ada jaminan bahwa kata “backups” muncul langsung di dokumen hasil
- Jika konten mirip secara semantik dengan kata kunci, ia dapat muncul sebagai hasil
- Cara ini adalah pencarian semantik, dan dalam teks asli disebut vibes-based search
- Karena kecocokan teks persis saja tidak selalu cukup untuk menemukan apa yang dicari pengguna, pendekatan ini berguna untuk berbagai mesin pencari konten
Embedding kode: Symbex dan Datasette
- Symbex adalah alat untuk menjelajahi simbol dalam codebase Python
- Dibuat untuk menemukan fungsi dan class Python dengan cepat lalu meneruskannya ke LLM
- Setelah itu, ia memungkinkan perhitungan embedding semua fungsi dalam codebase untuk membuat mesin pencari kode
- Symbex dapat menampilkan simbol yang ditemukan sebagai JSON atau CSV, dan format tersebut dapat digunakan sebagai input
llm embed-multi - Contoh embedding semua fungsi dan method class di proyek Datasette menggunakan model gte-tiny
gte-tinyadalah file berukuran 60 MBsymbex '*' '*:*' --nlmenampilkan fungsi dan method class di direktori saat ini sebagai newline-delimited JSONllm embed-multi ... --format nllangsung menerima output tersebut sebagai input dan meng-embed-nya
- Setelah itu, Datasette dan plugin datasette-llm-embed dapat digunakan untuk menjalankan pencarian semantik kode dengan SQL
- SQLite digunakan sebagai titik integrasi yang mengikat beberapa alat bersama
- Mengekstrak fungsi dari kode
- Melewatkannya ke model embedding
- Mencatat hasilnya ke SQLite
- Mencari dengan SQL
Meng-embed teks dan gambar ke ruang yang sama dengan CLIP
- CLIP adalah model yang dirilis OpenAI pada Januari 2021, yang dapat meng-embed teks maupun gambar
- Intinya adalah memasukkan teks dan gambar ke ruang vektor yang sama
- Posisi embedding string “dog” dan posisi embedding foto anjing menjadi berdekatan dalam ruang yang sama
- Kita dapat mencari gambar terkait menggunakan teks, atau mencari teks terkait menggunakan gambar
- Demo CLIP yang berjalan di browser dibuat sebagai Observable notebook dan menjalankan model CLIP di dalam browser
- Halaman memuat resource 158 MB
- Model teks CLIP berukuran 64,6 MB, dan model gambar berukuran 87,6 MB
- Ada contoh perhitungan skor similarity per teks untuk foto pantai
beach: 26.946%city: 19.839%sunshine: 24.146%california beach: 27.427%
- Yang utama bukanlah sekadar menanyakan similarity antara foto acak dan satu kata, melainkan membangun antarmuka pencarian di atasnya
Faucet Finder: pencarian gambar berbasis CLIP
- Faucet Finder adalah alat pencarian khusus untuk mencari foto keran kamar mandi
- Drew Breunig mengumpulkan 20.000 foto keran dari pemasok keran dan menghitung embedding CLIP
- Implementasinya menggunakan LLM dan plugin llm-clip
- Dideploy dengan Datasette
- Alat ini memungkinkan pencarian keran lain yang secara visual mirip dengan keran tertentu
- Jika menyukai keran mahal, kita dapat menemukan opsi lebih murah yang mirip secara visual
- Demo Drew menggunakan embedding yang sudah dihitung sebelumnya, sehingga dapat menampilkan hasil serupa tanpa menjalankan model CLIP di server
- Setelah itu, model CLIP sisi server dideploy ke Fly.io, dan dibuat demo Observable notebook yang menggabungkan API embedding string teks dengan API tabel embedding keran
- Gambar keran dapat dicari secara semantik dengan kata kunci seperti “gold purple”
Clustering dan visualisasi 2D
- Selain rekomendasi konten terkait dan pencarian semantik, embedding juga dapat digunakan untuk clustering
- llm-cluster adalah plugin yang mengimplementasikan clustering menggunakan sklearn.cluster dari scikit-learn
- Dengan GitHub issues API dan paginate-json, kita dapat membuat judul issue dari repository
simonw/llmsebagai collectionllm-issues, lalu membuat 10 cluster - Opsi
llm cluster llm-issues 10 --summarymeneruskan teks cluster ke LLM untuk membuat nama deskriptif- Contoh nama yang muncul adalah “Log Management and Interactive Prompt Tracking” dan “Continuing Conversation Mechanism and Management”
- Ruang berdimensi tinggi sulit divisualisasikan, sehingga dimensi dapat dikurangi dengan principal component analysis (PCA)
- Matt Webb membuat embedding OpenAI dari deskripsi episode podcast BBC
In Our Time, lalu membuat visualisasi 2D dengan PCA - Meski 1.536 dimensi dikurangi menjadi 2 dimensi, episode terkait perang sejarah atau penemuan sains modern tetap muncul saling berdekatan
- Matt Webb membuat embedding OpenAI dari deskripsi episode podcast BBC
Mengklasifikasikan kalimat dengan posisi rata-rata
- Embedding juga dapat digunakan untuk klasifikasi
- Pertama, hitung posisi rata-rata dari grup embedding yang diklasifikasikan dengan cara tertentu
- Lalu bandingkan embedding konten baru lebih dekat ke posisi mana untuk menetapkan kategori
- Getting creative with embeddings dari Amelia Wattenberger adalah contoh pemberian skor apakah sebuah kalimat konkret atau abstrak
- Sampel kalimat konkret dan kalimat abstrak dibuat, lalu posisi rata-rata masing-masing grup dihitung
- Kalimat baru mendapat skor berdasarkan posisinya di antara dua posisi rata-rata tersebut
- Skor ini juga dapat diubah menjadi warna yang secara longgar menunjukkan seberapa abstrak atau konkret sebuah kalimat
RAG: tanya jawab dokumen pribadi dan dokumen internal perusahaan
- Orang yang pernah menggunakan ChatGPT sering bertanya-tanya bagaimana cara membuatnya menjawab pertanyaan berdasarkan catatan pribadi atau dokumen internal perusahaan
- Jawabannya mungkin bukan pelatihan model kustom yang mahal, melainkan kombinasi LLM siap pakai dan retrieval-augmented generation (RAG)
- Prosedur dasar RAG sederhana
- Pengguna mengajukan pertanyaan
- Cari konten yang terlihat relevan dengan pertanyaan di dokumen pribadi
- Masukkan kutipan relevan dan pertanyaan asli ke prompt dengan tetap mematuhi batas ukuran LLM
- LLM menjawab berdasarkan konten tambahan yang diberikan
- Batas ukuran umum berada di kisaran 3.000–6.000 kata
- Bagian sulit dalam RAG adalah menemukan kutipan terbaik untuk dimasukkan ke prompt
- Pencarian semantik berbasis embedding cocok untuk mengumpulkan konten yang kemungkinan besar relevan
Membangun Q&A offline berbasis blog dengan E5-large-v2
- Contoh RAG berbasis konten blog menggunakan E5-large-v2
- Kalimat pertanyaan dan jawaban memiliki tata bahasa berbeda, sehingga pertanyaan tidak selalu tertangkap dekat secara semantik dengan dokumen yang memuat jawabannya
- E5-large-v2 mendukung dua jenis konten
- factual sentence di-embed sebagai phrase
- question di-embed sebagai query
- Ini mirip dengan cara CLIP menempatkan gambar dan teks ke ruang yang sama
- 19.000 paragraf blog di-embed sebagai phrase, dan pertanyaan di-embed sebagai query untuk menemukan paragraf yang dekat dengan jawaban
- Contoh mengimplementasikan RAG dengan skrip Bash satu baris
- Mencari paragraf terkait dengan
llm similar - Mengekstrak konten dengan
jq - Meneruskan pertanyaan dan paragraf ke model Llama 2 Chat 7B yang berjalan di laptop lokal
- Mencari paragraf terkait dengan
- Untuk pertanyaan
What is shot-scraper?, model menghasilkan jawaban bahwashot-scraperadalah utilitas Python yang membungkus Playwright dan mengotomatiskan screenshot halaman web serta scraping berbasis JavaScript melalui antarmuka command-line dan alur konfigurasi berbasis YAML - Jawaban yang dihasilkan bukanlah kecocokan kalimat persis dari konten blog yang ada
Pilihan yang dapat disesuaikan dalam praktik
- LangChain adalah framework untuk mengimplementasikan fitur di atas LLM, dan RAG adalah salah satu fitur inti LangChain
- Fitur yang sama dapat dibuat di atas LangChain, tetapi memahami LangChain membutuhkan investasi yang cukup besar
- Di sini, kumpulan alat kecil yang dapat dikombinasikan lebih disukai daripada satu framework tunggal yang menyelesaikan semuanya
- Fungsi jarak yang digunakan secara default adalah cosine similarity
- Fungsi jarak lain belum dicoba
- RAG memiliki banyak elemen yang dapat disesuaikan, seperti fungsi jarak, model embedding, strategi prompt, dan LLM
- Contoh-contohnya berskala hingga sekitar 20.000 embedding, dan pada ukuran ini perhitungan cosine similarity brute force untuk seluruh data masih dapat memberikan hasil dalam waktu wajar
- Untuk data yang lebih besar seperti 1 miliar objek, vector database atau ekstensi database yang ada menjadi pilihan
- SQLite memiliki sqlite-vss
- PostgreSQL memiliki pgvector
- FAISS dari Facebook juga digunakan dalam eksperimen, dan ada plugin Datasette yang menggunakannya, yaitu datasette-faiss
- Tren yang diharapkan ke depan adalah model multimodal dan model yang lebih kecil
- Facebook ImageBind mempelajari embedding bersama untuk 6 modalitas: gambar, teks, audio, depth, thermal, dan data IMU
- Model yang semakin kecil seperti
gte-tinyberukuran 60 MB meningkatkan kemungkinan dijalankan di perangkat terbatas atau browser
Bacaan lebih lanjut
- What are embeddings? oleh Vicki Boykis
- Text Embeddings Visually Explained oleh Meor Amer untuk Cohere
- The Tensorflow Embedding Projector: alat interaktif untuk menjelajahi ruang embedding
- Learn to Love Working with Vector Embeddings: kumpulan tutorial embedding vektor dari Pinecone
1 komentar
Pendapat Hacker News
Setelah mengunggah tulisan ini, saya menemukan beberapa materi tambahan yang berguna untuk memahami embedding pada level yang lebih rendah
Tulisan saya sengaja dibuat pada level yang sangat tinggi, terutama berfokus pada penerapan
Text Embeddings Visually Explained dari Cohere: https://txt.cohere.com/text-embeddings/
Alat Tensorflow Embedding Projector: https://projector.tensorflow.org/
What are embeddings? dari Vicki Boykis juga layak dibaca: https://vickiboykis.com/what_are_embeddings/
Akan saya tambahkan ke “further reading” di bagian bawah halaman
Dengan embedding, saya meningkatkan engagement pada artikel terkait, dan secara pribadi saya menganggap embedding sebagai alat yang kuat tetapi kurang dihargai
Ini bisa dipakai untuk menelusuri dokumen atau kutipan berdasarkan kemiripan, atau sebaliknya menemukan konten yang unik, dan cukup “aman” karena tidak perlu khawatir soal halusinasi
Bagaimana embedding dibuat juga bisa menarik. Misalnya ada cara seperti memotong layer klasifikasi setelah pelatihan, atau pendekatan seperti EfficientNet
Ini sedang menjadi fondasi inti machine learning
Dalam computer vision dan algoritma visual SLAM, embedding telah menjadi metode de facto untuk pengenalan tempat, dan sangat mirip dengan isi tulisan ini
Ini disebut “bag-of-word place recognition”, dan kini dipakai di hampir semua library open source
Intinya adalah melewatkan setiap gambar melalui pipeline ekstraksi fitur dan descriptor, lalu “meng-embedding”-kannya menjadi vektor yang berisi N fitur teratas
Saat kamera bergerak, dibuat database gambar yang disebut keyframe, dan gambar disimpan sebagai vektor berdimensi jauh lebih rendah
Setelah itu, database dikueri dengan semua gambar, lalu pencocokan terbaik dicari di database vektor menggunakan metode seperti cosine similarity
Jika ada kecocokan, batasan stereo antara gambar kueri dan gambar yang cocok dapat dihitung untuk memperbarui peta
Paper aslinya adalah [1], dan implementasi paling terkenal adalah https://github.com/dorian3d/DBoW2
[1]: https://www.google.com/search?client=firefox-b-d&q=Bags+of+B...
Ini referensi pengantar yang sangat bagus
Dulu saya pernah membuat sendiri aplikasi catatan iOS, dan menambahkan embedding ke full-text search yang sudah ada ternyata 1) sangat mudah dan 2) jauh lebih kuat daripada perkiraan awal
Saya tahu bahwa mencari “dog” juga akan memunculkan catatan yang berisi “canine”, tetapi baru benar-benar sadar setelah mencoba sendiri bahwa pencarian seperti “hewan peliharaan yang mungkin saya sukai” bisa menangkap berbagai catatan tentang hewan dengan sentimen positif
Itu adalah momen “aha” besar pertama saya
Saat itu PR DocsGPT dari Supabase berguna sebagai contoh kode: https://github.com/supabase/supabase/pull/12056
Banyak aplikasi sangat bergantung pada nama atau proper noun, dan sering kali konteksnya kurang
Jika seekor anjing peliharaan hanya disebut dengan namanya tanpa penjelasan, model embedding tertentu mungkin tidak menangkapnya
Proper noun seperti orang, tempat, dan nama jalan bisa sangat penting untuk mengaitkan pencarian yang dipersonalisasi atau spesifik domain, tetapi model bahasa umum tidak mengetahuinya
Saya penasaran apakah ada cara khusus untuk menangani masalah ini
Pertanyaan terbesar saat ini adalah seberapa banyak teks yang dijadikan satu embedding
Apakah per kalimat, atau seluruh blok kalimat dalam satu halaman aplikasi catatan dijadikan satu, masih saya pertimbangkan
Contoh paling umum dari embedding kata adalah King - Man + Woman = Queen yang terkenal
Ini bekerja dengan baik di ruang vektor, tetapi saat diproyeksikan ke 2D, secara visual tidak terlalu terasa intuitif
Dari pengalaman saya, PCA, MDS, dan t-SNE semuanya sama saja: https://bhugueney.gitlab.io/test-notebooks-org-publish/jupyt...
Ini adalah JupyterLite Notebook yang menjalankan embedding kata di browser, dan sebaiknya tidak dijalankan di smartphone
Saya penasaran apakah ada yang tahu cara memvisualisasikan contoh klasik embedding kata dengan bagus
Jika benar-benar menginginkan ortogonalitas, bisa memakai Gram-Schmidt
Di 3D, kita bisa menambahkan satu sumbu lagi, sumbu Z sebagai “king”-“queen”, dan versi yang diortogonalisasi lebih mendekati konsep jarak yang dilihat model
Di 2D, kita tidak bisa menunjukkan seberapa jauh “king”-“man”+“woman” meleset dari “queen”, tetapi jarak sisanya bisa diperoleh dengan akurat
Di 3D, seharusnya bisa memberikan jarak yang akurat
“queen” biasanya dipilih karena merupakan kata dengan embedding yang paling dekat dengan X="king"-"man"+"woman"
Di grafik 2D, kita juga bisa menampilkan beberapa kata terdekat berikutnya, lalu menambahkan jarak ortogonal tiap kata dari bidang 2D
Dengan begitu, “queen” seharusnya menjadi kata dengan jumlah terkecil dari jarak kuadrat dari X dan jarak ortogonal kuadrat dari bidang, sehingga juga bisa cukup diverifikasi secara visual
Kira-kira bunyinya, “Kita tidak bisa memvisualisasikan 4 dimensi… setidaknya saya tidak bisa. Karena saya hanya punya tiga brane,” semacam permainan kata antara branes dan brains
Belakangan ChatGPT mengakui itu karangannya dan meminta maaf
Lalu ia juga mengeluarkan kutipan dari John von Neumann, H. G. Wells, dan Ian Stewart, dan akhirnya memberi jawaban seperti “Untuk memvisualisasikan 4 dimensi, visualisasikan 3 dimensi lalu katakan ‘n+1’,” yang paling mirip dengan lelucon dalam ingatan saya, tetapi kurang lucu
Jadi saya memintanya membuat kutipan halusinatif tentang memvisualisasikan ruang berdimensi tinggi dengan gaya Deepak Chopra, dan ia menumpahkan kutipan-kutipan palsu yang terdengar meyakinkan dengan mencampur istilah seperti septillion-dimensional embeddings, Hilbert space, Poincaré conjecture, Heisenberg uncertainty principle, dan Shannon entropy
Kesalahan umum dalam trigonometri praktis adalah melakukan perhitungan akar kuadrat yang tidak diperlukan
Pada kode contoh
magnitude_a = sum(x * x for x in a) * 0.5danmagnitude_b = sum(x * x for x in b) * 0.5,*0.5tidak diperlukanJika yang akan dibandingkan adalah kosinus, kita bisa membandingkan nilai kuadratnya saja, sehingga menghindari perhitungan akar yang mahal
Mirip dengan itu, dalam kriptografi kurva eliptik, operasi mahal seperti perhitungan invers sebisa mungkin ditunda, atau saat hanya membandingkan dua titik, perhitungan nilai kanonisnya sendiri kadang dihindari
Kalau tidak, saya akan menggantinya dengan kode SIMD tingkat rendah
dot_product = sum(x * y for x, y in zip(a, b)), kok begitu? Saya heran kenapa tidak memakai operasi numpy yang terv vectorisasiSaya jadi paham setelah melihat bagian “meminta ChatGPT menulis beberapa versi kode cosine similarity”
Pertama, saat menjelaskan kepada orang, saya merasa sintaks numpy justru mengganggu
Kedua, numpy bukan dependensi yang paling ringan
Saya memakainya saat butuh performa, tetapi tidak ingin menjadikannya pilihan default
Jika ingin melihat tulisan Show HN, startup ProductHunt, perusahaan YC, atau repositori Github yang terkait dengan embedding LLM, Anda bisa menemukannya dengan cepat di MVP LLM-Embeddings-Based Search Engine yang baru saja diluncurkan
https://payperrun.com/%3E/search?displayParams={%22q%22:%22L...
Saya mengira hasil pencarian akan langsung diperbarui saat menekan berbagai tombol filter, dan tidak menyangka harus melakukan pencarian ulang
Saya mengerti kenapa dibuat begitu
Ini yang paling menarik dari semua hal terkait “AI” yang saya baca dalam beberapa bulan terakhir
Setiap kali melihat model embedding dalam daftar, saya penasaran itu apa, dan juga penasaran kenapa semua orang membicarakan vector DB
Saya langsung terpikir cara menerapkannya pada side project yang sudah lama berjalan
Jika semua dokumen punya embedding, mungkin pengelompokan data pengguna yang berguna bisa benar-benar menjadi realistis
Saya penasaran apakah ada orang yang benar-benar pernah memakai embedding untuk hal lain selain approximate nearest neighbor dan clustering
Kemungkinan yang terpikir adalah proyeksi, pengindeksan, dan pengurutan terhadap sumbu arbitrer. Misalnya sumbu seperti “panas-dingin”, “bahagia-sedih”, “fiksi ilmiah-realisme”, “nilai sastra-nilai komersial”
Selain melakukan klasifikasi ala SVM di ruang embedding, melakukan inferensi ala word2vec seperti woman-man+king=queen, atau mengambil satu layer dari LLM, seharusnya ada juga cara untuk melatih embedding secara langsung
Saya tahu contrastive learning digunakan, tetapi tampaknya metode lain juga layak dieksplorasi, misalnya melatih embedding bersama jaringan saraf fungsi lalu menghasilkan persamaan fungsi untuk menghitung loss mean squared error
Mengejutkan karena tampaknya terlalu terfokus pada pencarian semantik, dan pasti ada aplikasi menarik lain
Yang pertama dan ketiga pada dasarnya sama
Dalam computer vision, kita mungkin ingin mengubah gambar secara semantik, misalnya menambahkan kacamata pada foto, dan pekerjaan yang terlihat di iklan Google adalah contoh semacam itu
Pekerjaan seperti ini dilakukan di latent space
Pada normalizing flow, ini sangat jelas karena ruangnya diubah menjadi Gaussian
Model difusi juga melakukan hal serupa dengan metode aproksimasi, tetapi tidak invertible, meski masih bisa dikembalikan
Kita memproyeksikan gambar, kalimat, atau data yang ingin dimanipulasi, memanipulasinya di ruang Gaussian, lalu mengembalikannya ke ruang target
Namun mungkin saja kita saling bingung karena kata embedding adalah istilah yang overloaded dan memiliki terlalu banyak arti
Mungkin yang dimaksud hanya blok pertama yang mengubah token bilangan bulat diskret menjadi floating point kontinu
Namun embedding itu juga dipelajari, jadi meskipun akhirnya tampak seperti lookup table, tetap saja itu proses jaringan saraf
Ada juga penggunaan SVM di ruang ini
Saya melihatnya mirip latent space, tetapi sedikit lebih abstrak
Setidaknya embedding harus injektif. Secara matematis begitu, tetapi…
Melatih embedding secara langsung itu secara harfiah adalah model embedding awal, yaitu Word2Vec
Saya menemukan banyak variasi dan singkatan nama kimia/biokimia, seperti penulisan dengan tanda hubung, tanpa tanda hubung, dan dengan spasi
Mungkin bisa saja digunakan untuk membuat kamus istilah teknis
Saya tidak tahu seberapa jauh bisa sampai ke definisi, tetapi meski vektor saja punya keterbatasan, itu bisa menjadi titik awal
Kemungkinan besar orang lain juga sudah membangun kamus dengan cara seperti ini
Saya pernah bereksperimen dengan embedding dan juga membuat beberapa use case produksi, dan ini adalah alat hebat yang memungkinkan banyak aplikasi keren
Namun saat membuatnya untuk domain tertentu, kita akan menemui batasan model embedding siap pakai
Model siap pakai memiliki banyak dimensi, tetapi sebagian dimensi mungkin penting untuk klasifikasi, kemiripan konten, clustering, dan sebagainya dalam aplikasi saya, sementara dimensi lain mungkin tidak penting
Dengan kata lain, dua vektor bisa terlihat dekat karena kedekatan pada dimensi yang tidak kita pedulikan
Saya berharap akan ada tool dan literatur yang lebih baik untuk fine-tuning model embedding
Tool seperti ini sudah ada sejak lama; misalnya, labeli sedikit data lalu latih SVM untuk klasifikasi di atas ruang embedding