Sebelum mengimplementasikan embeddings

Ketika memilih penyedia embeddings, ada beberapa faktor yang dapat Anda pertimbangkan tergantung pada kebutuhan dan preferensi Anda:
  • Ukuran dataset & spesifisitas domain: ukuran dataset pelatihan model dan relevansinya dengan domain yang ingin Anda embed. Data yang lebih besar atau lebih spesifik domain umumnya menghasilkan embeddings dalam domain yang lebih baik
  • Performa inferensi: kecepatan pencarian embedding dan latensi end-to-end. Ini adalah pertimbangan yang sangat penting untuk deployment produksi skala besar
  • Kustomisasi: opsi untuk pelatihan berkelanjutan pada data pribadi, 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 yang memiliki berbagai pilihan dan kemampuan yang mencakup semua pertimbangan di atas adalah Voyage AI. Voyage AI membuat model embedding canggih dan menawarkan model yang disesuaikan untuk domain industri tertentu seperti keuangan dan kesehatan, atau model yang disesuaikan khusus untuk pelanggan individu. Sisa panduan ini untuk Voyage AI, tetapi kami mendorong Anda untuk menilai berbagai vendor embeddings untuk menemukan yang paling sesuai untuk kasus penggunaan spesifik Anda.

Model yang Tersedia

Voyage merekomendasikan menggunakan model embedding teks berikut:
ModelPanjang KonteksDimensi EmbeddingDeskripsi
voyage-3-large32,0001024 (default), 256, 512, 2048Kualitas retrieval tujuan umum dan multibahasa terbaik. Lihat blog post untuk detail.
voyage-3.532,0001024 (default), 256, 512, 2048Dioptimalkan untuk kualitas retrieval tujuan umum dan multibahasa. Lihat blog post untuk detail.
voyage-3.5-lite32,0001024 (default), 256, 512, 2048Dioptimalkan untuk latensi dan biaya. Lihat blog post untuk detail.
voyage-code-332,0001024 (default), 256, 512, 2048Dioptimalkan untuk retrieval kode. Lihat blog post untuk detail.
voyage-finance-232,0001024Dioptimalkan untuk retrieval dan RAG keuangan. Lihat blog post untuk detail.
voyage-law-216,0001024Dioptimalkan untuk retrieval dan RAG hukum dan konteks panjang. Juga meningkatkan performa di semua domain. Lihat blog post untuk detail.
Selain itu, model embedding multimodal berikut direkomendasikan:
ModelPanjang KonteksDimensi EmbeddingDeskripsi
voyage-multimodal-3320001024Model embedding multimodal yang kaya yang dapat memvektorisasi teks yang diselingi dan gambar yang kaya konten, seperti screenshot PDF, slide, tabel, figur, dan lainnya. Lihat blog post untuk detail.
Butuh bantuan memutuskan model embedding teks mana yang akan digunakan? Lihat FAQ.

Memulai dengan Voyage AI

Untuk mengakses embeddings Voyage:
  1. Daftar di website Voyage AI
  2. Dapatkan API key
  3. Atur API key sebagai variabel lingkungan untuk kemudahan:
export VOYAGE_API_KEY="<your secret key>"
Anda dapat memperoleh embeddings dengan menggunakan paket Python resmi voyageai atau permintaan HTTP, seperti yang dijelaskan di bawah ini.

Library Python Voyage

Paket voyageai dapat diinstal menggunakan perintah berikut:
pip install -U voyageai
Kemudian, Anda dapat membuat objek klien dan mulai menggunakannya untuk meng-embed teks Anda:
import voyageai

vo = voyageai.Client()
# Ini akan secara otomatis menggunakan variabel lingkungan VOYAGE_API_KEY.
# Alternatifnya, Anda dapat menggunakan vo = voyageai.Client(api_key="<your secret key>")

texts = ["Sample text 1", "Sample text 2"]

result = vo.embed(texts, model="voyage-3.5", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])
result.embeddings akan menjadi daftar dua vektor embedding, masing-masing berisi 1024 angka floating-point. Setelah menjalankan kode di atas, kedua embeddings akan dicetak di layar:
[-0.013131560757756233, 0.019828535616397858, ...]   # embedding untuk "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...]  # embedding untuk "Sample text 2"
Ketika membuat embeddings, Anda dapat menentukan beberapa argumen lain untuk fungsi embed(). Untuk informasi lebih lanjut tentang paket python Voyage, lihat dokumentasi Voyage.

HTTP API Voyage

Anda juga dapat mendapatkan embeddings dengan meminta HTTP API Voyage. Misalnya, Anda dapat mengirim permintaan HTTP melalui perintah curl di terminal:
curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["Sample text 1", "Sample text 2"],
    "model": "voyage-3.5"
  }'
Respons yang akan Anda dapatkan adalah objek JSON yang berisi embeddings dan penggunaan token:
{
  "object": "list",
  "data": [
    {
      "embedding": [-0.013131560757756233, 0.019828535616397858, ...],
      "index": 0
    },
    {
      "embedding": [-0.0069352793507277966, 0.020878976210951805, ...],
      "index": 1
    }
  ],
  "model": "voyage-3.5",
  "usage": {
    "total_tokens": 10
  }
}

Untuk informasi lebih lanjut tentang HTTP API Voyage, lihat dokumentasi Voyage.

AWS Marketplace

Embeddings Voyage tersedia di AWS Marketplace. Instruksi untuk mengakses Voyage di AWS tersedia di sini.

Contoh quickstart

Sekarang kita tahu cara mendapatkan embeddings, mari kita lihat contoh singkat. Misalkan kita memiliki korpus kecil dari enam dokumen untuk diambil dari
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."
]

Kita akan terlebih dahulu menggunakan Voyage untuk mengonversi masing-masing menjadi vektor embedding
import voyageai

vo = voyageai.Client()

# Embed dokumen
doc_embds = vo.embed(
    documents, model="voyage-3.5", input_type="document"
).embeddings
Embeddings akan memungkinkan kita melakukan pencarian semantik / retrieval di ruang vektor. Diberikan contoh query,
query = "When is Apple's conference call scheduled?"
kita mengonversinya menjadi embedding, dan melakukan pencarian tetangga terdekat untuk menemukan dokumen yang paling relevan berdasarkan jarak di ruang embedding.
import numpy as np

# Embed query
query_embd = vo.embed(
    [query], model="voyage-3.5", input_type="query"
).embeddings[0]

# Hitung kesamaan
# Embeddings Voyage dinormalisasi ke panjang 1, oleh karena itu dot-product
# dan kesamaan cosinus adalah sama.
similarities = np.dot(doc_embds, query_embd)

retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])
Perhatikan bahwa kita menggunakan input_type="document" dan input_type="query" untuk meng-embed dokumen dan query, masing-masing. Spesifikasi lebih lanjut dapat ditemukan di sini. Output akan menjadi dokumen ke-5, yang memang paling relevan dengan query:
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 set cookbook terperinci tentang cara melakukan RAG dengan embeddings, termasuk database vektor, lihat cookbook RAG kami.

FAQ

Model embedding bergantung pada jaringan neural yang kuat untuk menangkap dan mengompresi konteks semantik, mirip dengan model generatif. Tim peneliti AI berpengalaman Voyage mengoptimalkan setiap komponen dari proses embedding, termasuk:
  • Arsitektur model
  • Pengumpulan data
  • Fungsi loss
  • Pemilihan optimizer
Pelajari lebih lanjut tentang pendekatan teknis Voyage di blog mereka.
Untuk embedding tujuan umum, kami merekomendasikan:
  • voyage-3-large: Kualitas terbaik
  • voyage-3.5-lite: Latensi dan biaya terendah
  • voyage-3.5: Performa seimbang dengan kualitas retrieval superior pada titik harga yang kompetitif
Untuk retrieval, gunakan parameter input_type untuk menentukan apakah teks adalah query atau tipe dokumen.Model spesifik domain:
  • Tugas hukum: voyage-law-2
  • Kode dan dokumentasi pemrograman: voyage-code-3
  • Tugas terkait keuangan: voyage-finance-2
Anda dapat menggunakan embeddings Voyage dengan kesamaan dot-product, kesamaan cosinus, atau jarak Euclidean. Penjelasan tentang kesamaan embedding dapat ditemukan di sini.Embeddings Voyage AI dinormalisasi ke panjang 1, yang berarti bahwa:
  • Kesamaan cosinus setara dengan kesamaan dot-product, sementara yang terakhir dapat dihitung lebih cepat.
  • Kesamaan cosinus dan jarak Euclidean akan menghasilkan peringkat yang identik.
Silakan lihat halaman ini.
Untuk semua tugas retrieval dan kasus penggunaan (misalnya, RAG), kami merekomendasikan bahwa parameter input_type digunakan untuk menentukan apakah teks input adalah query atau dokumen. Jangan abaikan input_type atau atur 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.Ketika menggunakan parameter input_type, prompt khusus ditambahkan di depan teks input sebelum embedding. Secara khusus:
📘 Prompt yang terkait dengan input_type
  • Untuk query, prompt adalah “Represent the query for retrieving supporting documents: ”.
  • Untuk dokumen, prompt 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", query 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.”
voyage-large-2-instruct, seperti namanya, dilatih untuk responsif terhadap instruksi tambahan yang ditambahkan di depan teks input. Untuk klasifikasi, clustering, atau subtugas MTEB lainnya, silakan gunakan instruksi di sini.
Kuantisasi dalam embeddings mengonversi nilai presisi tinggi, seperti angka floating-point presisi tunggal 32-bit, ke format presisi lebih rendah seperti integer 8-bit atau nilai biner 1-bit, mengurangi penyimpanan, memori, dan biaya masing-masing 4x dan 32x. Model Voyage yang didukung memungkinkan kuantisasi dengan menentukan tipe data output dengan parameter output_dtype:
  • float: Setiap embedding yang dikembalikan adalah daftar angka floating-point presisi tunggal 32-bit (4-byte). Ini adalah default dan memberikan presisi / akurasi retrieval tertinggi.
  • int8 dan uint8: Setiap embedding yang dikembalikan adalah daftar integer 8-bit (1-byte) yang berkisar dari -128 hingga 127 dan 0 hingga 255, masing-masing.
  • binary dan ubinary: Setiap embedding yang dikembalikan adalah daftar integer 8-bit yang mewakili nilai embedding satu bit yang dikuantisasi dan dikemas bit: int8 untuk binary dan uint8 untuk ubinary. Panjang daftar integer yang dikembalikan adalah 1/8 dari dimensi sebenarnya dari embedding. Tipe binary menggunakan metode offset binary, yang dapat Anda pelajari lebih lanjut di FAQ di bawah ini.
Contoh kuantisasi binary Pertimbangkan delapan nilai embedding berikut: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094, dan 0.03994751. Dengan kuantisasi binary, nilai yang kurang dari atau sama dengan nol akan dikuantisasi menjadi nol binary, dan nilai positif menjadi satu binary, menghasilkan urutan binary berikut: 0, 1, 0, 0, 1, 1, 0, 1. Delapan bit ini kemudian dikemas menjadi satu integer 8-bit, 01001101 (dengan bit paling kiri sebagai bit paling signifikan).
  • ubinary: Urutan binary langsung dikonversi dan direpresentasikan sebagai integer unsigned (uint8) 77.
  • binary: Urutan binary direpresentasikan sebagai integer signed (int8) -51, dihitung menggunakan metode offset binary (77 - 128 = -51).
Pembelajaran Matryoshka menciptakan embeddings dengan representasi kasar-ke-halus dalam satu vektor. Model Voyage, seperti voyage-code-3, yang mendukung beberapa dimensi output menghasilkan embeddings Matryoshka tersebut. Anda dapat memotong vektor ini dengan menyimpan subset dimensi terdepan. 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:
    """
    Normalisasi baris array numpy 2D menjadi vektor unit dengan membagi setiap baris dengan
    norma Euclidean-nya. Menimbulkan ValueError jika ada baris yang memiliki norma nol untuk mencegah pembagian dengan nol.
    """
    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-3, yang secara default adalah angka floating-point 1024-dimensi
embd = vo.embed(['Sample text 1', 'Sample text 2'], model='voyage-code-3').embeddings

# Atur 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

Kunjungi halaman harga Voyage untuk detail harga terbaru.