Embeddings
Text embeddings adalah representasi numerik dari teks yang memungkinkan pengukuran kemiripan semantik. Panduan ini memperkenalkan embeddings, penerapannya, dan cara menggunakan model embedding untuk tugas-tugas seperti pencarian, rekomendasi, dan deteksi anomali.
Sebelum mengimplementasikan embeddings
Saat memilih penyedia embeddings, ada beberapa faktor yang dapat Anda pertimbangkan tergantung pada kebutuhan dan preferensi Anda:
- Ukuran dataset & kekhususan domain: ukuran dataset pelatihan model dan relevansinya terhadap domain yang ingin Anda embed. Data yang lebih besar atau lebih spesifik terhadap domain umumnya menghasilkan embeddings dalam-domain yang lebih baik
- Performa inferensi: kecepatan pencarian embedding dan "latency" (latensi) end-to-end. Ini merupakan pertimbangan yang sangat penting untuk deployment produksi berskala besar
- Kustomisasi: opsi untuk pelatihan lanjutan pada data privat, atau spesialisasi model untuk domain yang sangat spesifik. Ini dapat meningkatkan performa pada kosakata yang unik
Cara mendapatkan embeddings dengan Anthropic
Anthropic tidak menawarkan model embedding sendiri. Salah satu penyedia embeddings dengan beragam model dan kemampuan adalah Voyage AI oleh MongoDB.
Voyage AI membuat model embedding dan reranker. Model embedding-nya mencakup model serbaguna, multimodal, terkontekstualisasi, dan spesifik domain.
Sisa panduan ini ditujukan untuk Voyage AI, tetapi Anda sebaiknya menilai berbagai vendor embeddings untuk menemukan yang paling sesuai dengan kasus penggunaan spesifik Anda.
Model yang tersedia
Voyage AI menawarkan model text embedding berikut:
Generasi terbaru
| Model | Panjang konteks | Dimensi embedding | Deskripsi |
|---|---|---|---|
voyage-4-large | 32.000 | 1024 (default), 256, 512, 2048 | Kualitas retrieval serbaguna dan multibahasa terbaik. Lihat postingan blog Voyage 4 untuk detailnya. |
voyage-4 | 32.000 | 1024 (default), 256, 512, 2048 | Dioptimalkan untuk kualitas retrieval serbaguna dan multibahasa. Menyeimbangkan kualitas dan efisiensi. Lihat postingan blog Voyage 4 untuk detailnya. |
voyage-4-lite | 32.000 | 1024 (default), 256, 512, 2048 | Dioptimalkan untuk latensi dan biaya. Lihat postingan blog Voyage 4 untuk detailnya. |
voyage-code-4 | 32.000 | 1024 (default), 256, 512, 2048 | Dioptimalkan untuk retrieval kode dan aplikasi agentic coding. Lihat postingan blog voyage-code-4 untuk detailnya. |
voyage-4-nano | 32.000 | 2048 (default), 256, 512, 1024 | Model open-weight (lisensi Apache 2.0) yang Anda unduh dari Hugging Face dan jalankan sendiri. Tidak tersedia melalui Atlas Embedding and Reranking API. Lihat postingan blog Voyage 4 untuk detailnya. |
Generasi sebelumnya
Untuk status siklus hidup setiap model dan pengganti yang direkomendasikan, lihat Model deprecations, lifecycle states, and support dalam dokumentasi MongoDB.
| Model | Panjang konteks | Dimensi embedding | Deskripsi |
|---|---|---|---|
voyage-3-large | 32.000 | 1024 (default), 256, 512, 2048 | Generasi sebelumnya dari voyage-4-large. Lihat postingan blog voyage-3-large untuk detailnya. |
voyage-3.5 | 32.000 | 1024 (default), 256, 512, 2048 | Generasi sebelumnya dari voyage-4. Lihat postingan blog voyage-3.5 untuk detailnya. |
voyage-3.5-lite | 32.000 | 1024 (default), 256, 512, 2048 | Generasi sebelumnya dari voyage-4-lite. Lihat postingan blog voyage-3.5 untuk detailnya. |
voyage-code-3 | 32.000 | 1024 (default), 256, 512, 2048 | Generasi sebelumnya dari voyage-code-4. Lihat postingan blog voyage-code-3 untuk detailnya. |
voyage-finance-2 | 32.000 | 1024 | Dioptimalkan untuk retrieval dan RAG keuangan. Lihat postingan blog voyage-finance-2 untuk detailnya. |
voyage-law-2 | 16.000 | 1024 | Dioptimalkan untuk retrieval dan RAG hukum. Lihat postingan blog voyage-law-2 untuk detailnya. |
Selain itu, Voyage AI menawarkan model embedding multimodal berikut. Panggil model-model ini dengan multimodal_embed() alih-alih embed():
| Model | Panjang konteks | Dimensi embedding | Deskripsi |
|---|---|---|---|
voyage-multimodal-3.5 | 32.000 | 1024 (default), 256, 512, 2048 | Model embedding multimodal yang kaya yang dapat memvektorisasi teks, gambar, dan video yang saling berselang-seling. Mencakup dukungan video sebagai model embedding video kelas produksi pertama. Lihat postingan blog voyage-multimodal-3.5 untuk detailnya. |
voyage-multimodal-3 | 32.000 | 1024 | Generasi sebelumnya dari voyage-multimodal-3.5. Memvektorisasi teks yang saling berselang-seling dan gambar yang kaya konten, seperti tangkapan layar PDF, slide, tabel, gambar, dan lainnya. Lihat postingan blog voyage-multimodal-3 untuk detailnya. |
Model contextualized chunk embedding berikut menghasilkan vektor tingkat chunk yang menangkap konteks dokumen secara penuh tanpa augmentasi metadata manual. Panggil model-model ini dengan contextualized_embed() alih-alih embed():
| Model | Panjang konteks | Dimensi embedding | Deskripsi |
|---|---|---|---|
voyage-context-4 | 120.000 | 1024 (default), 256, 512, 2048 | Contextualized chunk embeddings yang dioptimalkan untuk kualitas retrieval serbaguna dan multibahasa. Lihat postingan blog voyage-context-4 untuk detailnya. |
voyage-context-3 | 120.000 | 1024 (default), 256, 512, 2048 | Generasi sebelumnya dari voyage-context-4. Lihat postingan blog voyage-context-3 untuk detailnya. |
Batas 120.000 token berlaku ketika Anda mengatur enable_auto_chunking ke true. Jika tidak, jumlah total token di semua input tidak boleh melebihi 32.000.
Voyage AI juga menawarkan reranker, yang menerima sebuah query dan daftar dokumen lalu mengembalikannya dalam urutan berdasarkan relevansi terhadap query tersebut. Panggil model-model ini dengan rerank():
| Model | Panjang konteks | Deskripsi |
|---|---|---|
rerank-3 | 32.000 | Akurasi tertinggi. Direkomendasikan untuk sebagian besar aplikasi. Lihat postingan blog rerank-3 untuk detailnya. |
rerank-3-lite | 32.000 | Dioptimalkan untuk latensi dan biaya. Lihat postingan blog rerank-3 untuk detailnya. |
rerank-2.5 | 32.000 | Generasi sebelumnya dari rerank-3. Lihat postingan blog rerank-2.5 untuk detailnya. |
rerank-2.5-lite | 32.000 | Generasi sebelumnya dari rerank-3-lite. Lihat postingan blog rerank-2.5 untuk detailnya. |
Butuh bantuan memutuskan model mana yang akan digunakan? Lihat Voyage AI embedding and reranking models overview dalam dokumentasi MongoDB.
Memulai dengan Voyage AI
Untuk mengakses model Voyage AI, buat kunci API model di MongoDB Atlas:
- Buat akun MongoDB Atlas, atau masuk.
- Di proyek Atlas Anda, pilih AI Model APIs di bilah navigasi, klik Create model API key, beri nama kunci tersebut, lalu klik Create.
- Atur kunci API sebagai variabel lingkungan untuk kemudahan:
export VOYAGE_API_KEY="<your model API key>"Untuk detail lebih lanjut, lihat Voyage AI quick start dalam dokumentasi MongoDB.
Anda dapat memperoleh embeddings dengan menggunakan paket Python voyageai resmi atau permintaan HTTP, seperti yang dijelaskan di bagian-bagian berikut. Voyage AI juga memiliki klien TypeScript resmi. Untuk menggunakannya dengan kunci API model dari Atlas, atur opsi environment-nya ke https://ai.mongodb.com/v1, seperti yang dijelaskan dalam TypeScript client dalam dokumentasi MongoDB.
Pustaka Python Voyage AI
Instal paket voyageai menggunakan perintah berikut. Untuk menggunakan kunci API model dari Atlas, Anda memerlukan versi 0.3.7 atau yang lebih baru.
pip install -U voyageaiKemudian, Anda dapat membuat objek client dan mulai menggunakannya untuk meng-embed teks Anda:
import voyageai
vo = voyageai.Client()
# Ini akan otomatis menggunakan variabel lingkungan VOYAGE_API_KEY.
# Sebagai alternatif, Anda dapat menggunakan vo = voyageai.Client(api_key="<kunci API model Anda>")
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-4", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])result.embeddings adalah daftar berisi dua vektor embedding, masing-masing berisi 1024 bilangan floating-point. Setelah menjalankan kode di atas, kedua embeddings tersebut dicetak di layar:
[-0.013131560757756233, 0.019828535616397858, ...] # embedding for "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...] # embedding for "Sample text 2"Saat membuat embeddings, Anda dapat menentukan beberapa argumen lain pada fungsi embed().
Untuk informasi lebih lanjut tentang paket Python, lihat Accessing Voyage AI models dalam dokumentasi MongoDB.
HTTP API Voyage AI
Anda juga dapat memperoleh embeddings dengan mengirimkan permintaan HTTP ke Atlas Embedding and Reranking API. Misalnya, Anda dapat mengirim permintaan HTTP melalui perintah curl di terminal:
curl https://ai.mongodb.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-4",
"input_type": "document"
}'Respons yang akan Anda dapatkan adalah objek JSON yang berisi embeddings dan penggunaan token:
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"object": "embedding",
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}Kunci API model dari Atlas berfungsi dengan ai.mongodb.com, kecuali kunci yang dibatasi pada suatu geografi, yang menggunakan endpoint geografi tersebut. Jika Anda memiliki kunci API dari platform Voyage AI, lihat Migrate your applications to use the Atlas Embedding and Reranking API dalam dokumentasi MongoDB.
Untuk referensi lengkap permintaan dan respons, lihat Create text embeddings dalam dokumentasi Atlas Embedding and Reranking API.
AWS Marketplace
Model Voyage AI juga tersedia di AWS Marketplace melalui profil penjual MongoDB. Untuk petunjuknya, lihat Deploy Voyage AI models using AWS Marketplace dalam dokumentasi MongoDB.
Contoh quickstart
Contoh singkat berikut menunjukkan cara menggunakan embeddings.
Misalkan Anda memiliki korpus kecil berisi enam dokumen untuk di-retrieve
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature.",
]Pertama, gunakan Voyage AI untuk mengonversi setiap dokumen menjadi vektor embedding.
import voyageai
vo = voyageai.Client()
# Buat embedding untuk dokumen
doc_embds = vo.embed(documents, model="voyage-4", input_type="document").embeddingsEmbeddings memungkinkan Anda melakukan pencarian semantik / retrieval di ruang vektor. Diberikan sebuah contoh query,
query = "When is Apple's conference call scheduled?"Selanjutnya, konversikan query tersebut menjadi embedding dan lakukan pencarian nearest neighbor untuk menemukan dokumen yang paling relevan berdasarkan jarak di ruang embedding.
import numpy as np
# Buat embedding untuk kueri
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# Hitung kemiripan
# Embedding Voyage AI dinormalisasi ke panjang 1, sehingga dot-product
# dan cosine similarity bernilai sama.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])Perhatikan bahwa input_type="document" dan input_type="query" digunakan masing-masing untuk meng-embed dokumen dan query. Untuk informasi lebih lanjut tentang input_type, lihat Kapan dan bagaimana saya sebaiknya menggunakan parameter input_type? di FAQ.
Outputnya adalah dokumen kelima, yang memang paling relevan dengan query tersebut:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.Jika Anda mencari kumpulan resep terperinci tentang cara melakukan RAG dengan embeddings, termasuk database vektor, lihat resep RAG.
FAQ
Model embedding mengandalkan jaringan saraf yang kuat untuk menangkap dan mengompresi konteks semantik, mirip dengan model generatif. Tim peneliti AI berpengalaman Voyage AI mengoptimalkan setiap komponen dari proses embedding, termasuk:
- Arsitektur model
- Pengumpulan data
- Fungsi loss
- Pemilihan optimizer
Pelajari lebih lanjut tentang pendekatan teknis Voyage AI di blog Voyage AI.
Untuk embedding serbaguna, model yang direkomendasikan adalah:
voyage-4-large: Kualitas terbaikvoyage-4-lite: Latensi dan biaya terendahvoyage-4: Performa seimbang
Untuk retrieval, gunakan parameter input_type untuk menentukan apakah teks tersebut bertipe query atau dokumen.
Model spesifik domain:
- Tugas hukum:
voyage-law-2 - Retrieval kode dan agentic coding:
voyage-code-4 - Tugas terkait keuangan:
voyage-finance-2
Untuk retrieval tingkat chunk dan tingkat dokumen: voyage-context-4
Untuk teks, gambar, dan video: voyage-multimodal-3.5
Anda dapat menggunakan embeddings Voyage AI dengan kemiripan dot-product, kemiripan cosine, atau jarak Euclidean. Untuk penjelasan tentang kemiripan embedding, lihat panduan kemiripan vektor ini.
Embeddings Voyage AI dinormalisasi ke panjang 1, yang berarti bahwa:
- Kemiripan cosine setara dengan kemiripan dot-product, sementara yang terakhir dapat dihitung lebih cepat.
- Kemiripan cosine dan jarak Euclidean menghasilkan peringkat yang identik.
Lihat Tokenization dalam dokumentasi MongoDB.
Untuk semua tugas dan kasus penggunaan retrieval (misalnya, RAG), gunakan parameter input_type untuk menentukan apakah teks input adalah query atau dokumen. Jangan menghilangkan input_type atau mengatur input_type=None. Menentukan apakah teks input adalah query atau dokumen dapat menciptakan representasi vektor padat yang lebih baik untuk retrieval, yang dapat menghasilkan kualitas retrieval yang lebih baik.
Saat menggunakan parameter input_type, prompt khusus ditambahkan di awal teks input sebelum proses embedding. Secara spesifik:
📘 Prompt yang terkait dengan
input_type
- Untuk query, prompt-nya adalah
"Represent the query for retrieving supporting documents: ".- Untuk dokumen, prompt-nya adalah
"Represent the document for retrieval: ".- Contoh
- Ketika
input_type="query", query seperti "When is Apple's conference call scheduled?" akan menjadi "Represent the query for retrieving supporting documents: When is Apple's conference call scheduled?"- Ketika
input_type="document", dokumen seperti "Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET." akan menjadi "Represent the document for retrieval: Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET."
"Quantization" (kuantisasi) dalam embeddings mengonversi nilai presisi tinggi, seperti bilangan floating-point presisi tunggal 32-bit, ke format presisi lebih rendah seperti bilangan bulat 8-bit atau nilai biner 1-bit, sehingga mengurangi penyimpanan, memori, dan biaya masing-masing sebesar 4x dan 32x. Model Voyage AI yang didukung memungkinkan kuantisasi dengan menentukan tipe data output menggunakan parameter output_dtype:
float: Setiap embedding yang dikembalikan adalah daftar bilangan floating-point presisi tunggal 32-bit (4-byte). Ini adalah default dan memberikan presisi / akurasi retrieval tertinggi.int8danuint8: Setiap embedding yang dikembalikan adalah daftar bilangan bulat 8-bit (1-byte) yang masing-masing berkisar dari -128 hingga 127 dan 0 hingga 255.binarydanubinary: Setiap embedding yang dikembalikan adalah daftar bilangan bulat 8-bit yang merepresentasikan nilai embedding bit tunggal terkuantisasi yang dikemas dalam bit (bit-packed):int8untukbinarydanuint8untukubinary. Panjang daftar bilangan bulat yang dikembalikan adalah 1/8 dari dimensi sebenarnya dari embedding. Tipe binary menggunakan metode offset binary, seperti yang ditunjukkan contoh berikut.
Contoh kuantisasi biner
Pertimbangkan delapan nilai embedding berikut: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094, dan 0.03994751. Dengan kuantisasi biner, nilai yang kurang dari atau sama dengan nol akan dikuantisasi menjadi nol biner, dan nilai positif menjadi satu biner, menghasilkan urutan biner berikut: 0, 1, 0, 0, 1, 1, 0, 1. Delapan bit ini kemudian dikemas menjadi satu bilangan bulat 8-bit, 01001101 (dengan bit paling kiri sebagai bit paling signifikan).
ubinary: Urutan biner dikonversi secara langsung dan direpresentasikan sebagai bilangan bulat tak bertanda (uint8) 77.binary: Urutan biner direpresentasikan sebagai bilangan bulat bertanda (int8) -51, dihitung menggunakan metode offset binary (77 - 128 = -51).
Untuk model yang mendukung setiap tipe data, lihat Create text embeddings dalam dokumentasi Atlas Embedding and Reranking API.
Pembelajaran Matryoshka menciptakan embeddings dengan representasi dari kasar ke halus dalam satu vektor. Model Voyage AI yang mendukung beberapa dimensi output, seperti voyage-code-4, menghasilkan embeddings Matryoshka tersebut. Untuk mendapatkan vektor yang lebih pendek dari API, berikan output_dimension (misalnya, output_dimension=256). Untuk memperpendek vektor yang sudah Anda simpan, potong vektor tersebut dengan mempertahankan subset dimensi terdepan, lalu normalisasikan kembali. Misalnya, kode Python berikut menunjukkan cara memotong vektor 1024 dimensi menjadi 256 dimensi:
import voyageai
import numpy as np
def embd_normalize(v: np.ndarray) -> np.ndarray:
"""
Normalize the rows of a 2D numpy array to unit vectors by dividing each row by its Euclidean
norm. Raises a ValueError if any row has a norm of zero to prevent division by zero.
"""
row_norms = np.linalg.norm(v, axis=1, keepdims=True)
if np.any(row_norms == 0):
raise ValueError("Cannot normalize rows with a norm of zero.")
return v / row_norms
vo = voyageai.Client()
# Hasilkan vektor voyage-code-4, yang secara default berupa bilangan floating-point 1024 dimensi
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-4").embeddings
# Tetapkan dimensi yang lebih pendek
short_dim = 256
# Ubah ukuran dan normalisasi vektor ke dimensi yang lebih pendek
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()Harga
Untuk detail harga terbaru, lihat Model pricing dalam dokumentasi MongoDB.
Was this page helpful?