Embeddings
Gambaran umum embeddings
Embeddings teks adalah representasi numerik dari string teks, direpresentasikan sebagai vektor bilangan floating point. Anda dapat menggunakan jarak antara dua potongan teks yang disematkan (baik itu kata, frasa, atau kalimat) untuk mengukur seberapa terkait potongan teks tersebut satu sama lain. Pengukuran yang populer adalah cosine similarity, tetapi Anda juga dapat mengukur kesamaan melalui fungsi jarak lain seperti jarak euclidian atau dot product (lihat FAQ di bawah). Secara umum, jarak yang lebih kecil memprediksi keterkaitan yang lebih tinggi dalam hal hubungan semantik atau sintaksis antara teks.
Membandingkan kesamaan string, atau mengelompokkan string berdasarkan jarak satu sama lain, memungkinkan berbagai aplikasi termasuk pencarian (populer dalam arsitektur RAG), rekomendasi, dan deteksi anomali.
Cara mendapatkan embeddings dengan Anthropic
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 dengan domain yang ingin Anda sematkan. Data yang lebih besar atau lebih spesifik domain umumnya menghasilkan embeddings dalam domain yang lebih baik
- Arsitektur model: Desain dan kompleksitas model. Teknik dan arsitektur yang lebih modern seperti Transformer cenderung belajar dan menghasilkan embeddings dengan kualitas yang lebih tinggi
- Kinerja inferensi: Kecepatan pencarian embedding dan latensi end-to-end. Ini adalah pertimbangan yang sangat penting untuk penerapan produksi skala besar
- Kustomisasi: Opsi untuk melanjutkan pelatihan pada data pribadi, atau spesialisasi model untuk domain yang sangat spesifik. Ini dapat meningkatkan kinerja pada kosakata yang unik
Anthropic tidak menawarkan model embedding sendiri. Salah satu penyedia embeddings yang memiliki berbagai pilihan dan kemampuan yang mencakup keempat pertimbangan di atas adalah Voyage AI. Voyage AI membuat model embedding state of the art dan menawarkan model yang disesuaikan untuk domain industri tertentu seperti keuangan dan kesehatan, atau model fine-tuned khusus untuk pelanggan individu.
Panduan selanjutnya adalah untuk Voyage AI, tetapi kami mendorong Anda untuk menilai berbagai vendor embeddings untuk menemukan yang paling sesuai dengan kasus penggunaan spesifik Anda.
Memulai dengan Voyage AI
Lihat notebook embeddings kami untuk melihat contoh implementasi Voyage AI.
Untuk mengakses embeddings Voyage:
- Daftar di situs web Voyage AI
- Dapatkan API key
- Atur API key sebagai variabel lingkungan untuk kenyamanan:
export VOYAGE_API_KEY="<your secret key>"
Anda dapat menjalankan embeddings dengan menggunakan paket Python voyageai resmi atau permintaan HTTP, seperti yang dijelaskan di bawah ini.
Paket Python Voyage
Paket voyageai
dapat diinstal menggunakan perintah berikut:
pip install -U voyageai
Kemudian, Anda dapat membuat objek klien dan mulai menggunakannya untuk menyematkan teks Anda:
import voyageai
vo = voyageai.Client()
# Ini akan secara otomatis menggunakan variabel lingkungan VOYAGE_API_KEY.
# Atau, Anda dapat menggunakan vo = voyageai.Client(api_key="<your secret key>")
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-2", 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, dua embedding akan dicetak di layar:
[0.02012746, 0.01957859, ...] # embedding untuk "Sample text 1"
[0.01429677, 0.03077182, ...] # embedding untuk "Sample text 2"
Saat membuat embeddings, Anda dapat menentukan beberapa argumen lain untuk fungsi embed()
. Berikut adalah spesifikasinya:
voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)
- texts (List[str]) - Daftar teks sebagai daftar string, seperti
["I like cats", "I also like dogs"]
. Saat ini, panjang maksimum daftar adalah 128, dan total jumlah token dalam daftar paling banyak 320K untukvoyage-2
dan 120K untukvoyage-large-2
/voyage-code-2
. - model (str) - Nama model. Opsi yang direkomendasikan:
voyage-2
,voyage-large-2
,voyage-code-2
. - input_type (str, opsional, default ke
None
) - Jenis teks input. Default keNone
. Opsi lain:query
,document
- Ketika input_type diatur ke
None
, teks input akan langsung dikodekan oleh model embedding Voyage. Atau, ketika input adalah dokumen atau query, pengguna dapat menentukaninput_type
menjadiquery
ataudocument
, masing-masing. Dalam kasus seperti itu, Voyage akan menambahkan prompt khusus ke teks input dan mengirim input yang diperluas ke model embedding - Untuk kasus penggunaan retrieval/pencarian, kami merekomendasikan untuk menentukan argumen ini saat mengkodekan query atau dokumen untuk meningkatkan kualitas retrieval. Embeddings yang dihasilkan dengan dan tanpa argumen
input_type
kompatibel
- Ketika input_type diatur ke
- truncation (bool, opsional, default ke
None
) - Apakah akan memotong teks input agar sesuai dengan panjang konteks.- Jika
True
, teks input yang terlalu panjang akan dipotong agar sesuai dengan panjang konteks, sebelum divektorisasi oleh model embedding - Jika
False
, kesalahan akan muncul jika ada teks yang melebihi panjang konteks - Jika tidak ditentukan (default ke
None
), Voyage akan memotong teks input sebelum mengirimkannya ke model embedding jika sedikit melebihi panjang jendela konteks. Jika secara signifikan melebihi panjang jendela konteks, kesalahan akan muncul
- Jika
API HTTP Voyage
Anda juga dapat mendapatkan embeddings dengan meminta API HTTP 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-2"
}'
Respons yang Anda dapatkan adalah objek JSON yang berisi embeddings dan penggunaan token:
{
"object": "list",
"data": [
{
"embedding": [0.02012746, 0.01957859, ...],
"index": 0
},
{
"embedding": [0.01429677, 0.03077182, ...],
"index": 1
}
],
"model": "voyage-2",
"usage": {
"total_tokens": 10
}
}
Endpoint embedding Voyage AI adalah https://api.voyageai.com/v1/embeddings
(POST). Header permintaan harus berisi API key. Badan permintaan adalah objek JSON yang berisi argumen berikut:
- input (str, List[str]) - Satu string teks, atau daftar teks sebagai daftar string. Saat ini, panjang maksimum daftar adalah 128, dan total jumlah token dalam daftar paling banyak 320K untuk
voyage-2
dan 120K untukvoyage-large-2
/voyage-code-2
. - model (str) - Nama model. Opsi yang direkomendasikan:
voyage-2
,voyage-large-2
,voyage-code-2
. - input_type (str, opsional, default ke
None
) - Jenis teks input. Default keNone
. Opsi lain:query
,document
- truncation (bool, opsional, default ke
None
) - Apakah akan memotong teks input agar sesuai dengan panjang konteks- Jika
True
, teks input yang terlalu panjang akan dipotong agar sesuai dengan panjang konteks sebelum divektorisasi oleh model embedding - Jika
False
, kesalahan akan muncul jika ada teks yang melebihi panjang konteks - Jika tidak ditentukan (default ke
None
), Voyage akan memotong teks input sebelum mengirimkannya ke model embedding jika sedikit melebihi panjang jendela konteks. Jika secara signifikan melebihi panjang jendela konteks, kesalahan akan muncul
- Jika
- encoding_format (str, opsional, default ke
None
) - Format di mana embeddings dikodekan. Voyage saat ini mendukung dua opsi:- Jika tidak ditentukan (default ke
None
): embeddings direpresentasikan sebagai daftar angka floating-point "base64"
: embeddings dikompresi menjadi pengkodean Base64
- Jika tidak ditentukan (default ke
Contoh embedding Voyage
Sekarang setelah kita tahu cara mendapatkan embeddings dengan Voyage, mari kita lihat dalam tindakan dengan contoh singkat.
Misalkan kita memiliki korpus kecil dari enam dokumen untuk diambil
documents = [
"Diet Mediterania menekankan ikan, minyak zaitun, dan sayuran, diyakini mengurangi penyakit kronis.",
"Fotosintesis pada tanaman mengubah energi cahaya menjadi glukosa dan menghasilkan oksigen penting.",
"Inovasi abad ke-20, dari radio hingga smartphone, berpusat pada kemajuan elektronik.",
"Sungai menyediakan air, irigasi, dan habitat untuk spesies akuatik, vital bagi ekosistem.",
"Panggilan konferensi Apple untuk membahas hasil kuartal fiskal keempat dan pembaruan bisnis dijadwalkan pada hari Kamis, 2 November 2023 pukul 14:00 PT / 17:00 ET.",
"Karya Shakespeare, seperti 'Hamlet' dan 'A Midsummer Night's Dream,' bertahan dalam sastra."
]
Pertama-tama kita akan menggunakan Voyage untuk mengubah masing-masing menjadi vektor embedding
import voyageai
vo = voyageai.Client()
# Sematkan dokumen
doc_embds = vo.embed(
documents, model="voyage-2", input_type="document"
).embeddings
Embeddings akan memungkinkan kita untuk melakukan pencarian/pengambilan semantik dalam ruang vektor. Kemudian kita dapat mengubah contoh query,
query = "Kapan panggilan konferensi Apple dijadwalkan?"
menjadi embedding, dan kemudian melakukan pencarian tetangga terdekat untuk menemukan dokumen yang paling relevan berdasarkan jarak dalam ruang embedding.
import numpy as np
# Sematkan query
query_embd = vo.embed(
[query], model="voyage-2", input_type="query"
).embeddings[0]
# Hitung kesamaan
# Embeddings Voyage dinormalisasi ke panjang 1, oleh karena itu dot-product
# dan cosine similarity 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 menyematkan dokumen dan query, masing-masing. Spesifikasi lebih lanjut dapat ditemukan di sini.
Outputnya akan menjadi dokumen ke-5, yang memang paling relevan dengan query:
Panggilan konferensi Apple untuk membahas hasil kuartal fiskal keempat dan pembaruan bisnis dijadwalkan pada hari Kamis, 2 November 2023 pukul 14:00 PT / 17:00 ET.
Model Voyage yang tersedia
Voyage merekomendasikan menggunakan model embedding berikut:
Model | Panjang Konteks | Dimensi Embedding | Deskripsi |
---|---|---|---|
voyage-large-2 | 16000 | 1536 | Model embedding generalis paling kuat dari Voyage AI. |
voyage-code-2 | 16000 | 1536 | Dioptimalkan untuk pengambilan kode (17% lebih baik dari alternatif), dan juga SoTA pada korpus tujuan umum. Lihat posting blog Voyage ini untuk detailnya. |
voyage-2 | 4000 | 1024 | Model embedding generalis dasar yang dioptimalkan untuk latensi dan kualitas. |
voyage-lite-02-instruct | 4000 | 1024 | Instruction-tuned untuk tugas klasifikasi, pengelompokan, dan kesamaan tekstual kalimat, yang merupakan satu-satunya kasus penggunaan yang direkomendasikan untuk model ini. |
voyage-2
dan voyage-large-2
adalah model embedding generalis, yang mencap ai kinerja state-of-the-art di berbagai domain dan mempertahankan efisiensi tinggi. voyage-code-2
dioptimalkan untuk bidang kode, menawarkan panjang konteks 4x untuk penggunaan yang lebih fleksibel, meskipun dengan latensi yang relatif lebih tinggi.
Voyage secara aktif mengembangkan model yang lebih canggih dan khusus, dan juga menawarkan layanan fine-tuning untuk menyesuaikan model khusus untuk pelanggan individu. Email manajer akun Anthropic Anda atau hubungi dukungan Anthropic untuk informasi lebih lanjut tentang model khusus.
voyage-finance-2
: segera hadirvoyage-law-2
: segera hadirvoyage-multilingual-2
: segera hadirvoyage-healthcare-2
: segera hadir
Voyage di AWS Marketplace
Embeddings Voyage juga tersedia di AWS Marketplace. Berikut adalah instruksi untuk mengakses Voyage di AWS:
- Berlangganan paket model
- Navigasikan ke halaman daftar paket model dan pilih model untuk diterapkan
- Klik tombol
Continue to subscribe
- Tinjau dengan cermat detail di halaman
Subscribe to this software
. Jika Anda setuju dengan Perjanjian Lisensi Pengguna Akhir (EULA) standar, harga, dan ketentuan dukungan, klik “Accept Offer” - Setelah memilih
Continue to configuration
dan memilih wilayah, Anda akan disajikan dengan Product Arn. Ini adalah ARN paket model yang diperlukan untuk membuat model yang dapat diterapkan menggunakan Boto3- Salin ARN yang sesuai dengan wilayah yang Anda pilih dan gunakan di sel berikutnya
- Terapkan paket model
Dari sini, buat ruang JupyterLab di Sagemaker Studio, unggah notebook Voyage, dan ikuti instruksi di dalamnya.
Pertanyaan yang sering diajukan
Bagaimana cara menghitung jarak antara dua vektor embedding?
Cosine similarity adalah pilihan populer, tetapi sebagian besar fungsi jarak akan baik-baik saja. Embeddings Voyage dinormalisasi ke panjang 1, oleh karena itu cosine similarity pada dasarnya sama dengan dot-product antara dua vektor. Berikut adalah cuplikan kode yang dapat Anda gunakan untuk menghitung cosine similarity antara dua vektor embedding.
import numpy
similarity = np.dot(embd1, embd2)
# Embeddings Voyage dinormalisasi ke panjang 1, oleh karena itu cosine similarity
# sama dengan dot-product.
Jika Anda ingin menemukan K vektor embedding terdekat di atas korpus besar, kami merekomendasikan menggunakan kemampuan yang dibangun ke dalam sebagian besar database vektor.
Dapatkah saya menghitung jumlah token dalam string sebelum menyematkannya?
Ya! Anda dapat melakukannya dengan kode berikut.
import voyageai
vo = voyageai.Client()
total_tokens = vo.count_tokens(["Sample text"])
Harga
Kunjungi halaman harga Voyage untuk detail harga terbaru.