Gambaran Umum Embedding
Embedding adalah konsep pembelajaran mesin untuk memetakan data ke dalam ruang dimensi tinggi, di mana data dengan semantik yang sama ditempatkan berdekatan. Biasanya berupa Deep Neural Network dari BERT atau keluarga Transformer lainnya, model embedding dapat secara efektif merepresentasikan semantik teks, gambar, dan tipe data lainnya dengan serangkaian angka yang dikenal sebagai vektor. Fitur utama dari model ini adalah jarak matematis antara vektor dalam ruang dimensi tinggi dapat menunjukkan kemiripan semantik teks atau gambar asli. Properti ini membuka banyak aplikasi pencarian informasi, seperti mesin pencari web seperti Google dan Bing, pencarian produk dan rekomendasi di situs e-commerce, dan paradigma Retrieval Augmented Generation (RAG) yang baru-baru ini populer dalam AI generatif.
Ada dua kategori utama penyematan, masing-masing menghasilkan jenis vektor yang berbeda:
Penyematan padat: Sebagian besar model penyematan merepresentasikan informasi sebagai vektor titik mengambang dengan ratusan hingga ribuan dimensi. Keluarannya disebut vektor "padat" karena sebagian besar dimensi memiliki nilai bukan nol. Sebagai contoh, model penyematan sumber terbuka yang populer, BAAI/bge-base-en-v1.5 menghasilkan vektor 768 angka floating point (vektor float 768 dimensi).
Penyematan yangjarang: Sebaliknya, vektor keluaran dari embedding jarang memiliki sebagian besar dimensi nol, yaitu vektor "jarang". Vektor-vektor ini sering kali memiliki dimensi yang jauh lebih tinggi (puluhan ribu atau lebih) yang ditentukan oleh ukuran kosakata token. Vektor jarang dapat dihasilkan oleh Deep Neural Networks atau analisis statistik dari korpus teks. Karena kemampuan interpretasi dan kemampuan generalisasi di luar domain yang lebih baik, sematan jarang semakin banyak diadopsi oleh pengembang sebagai pelengkap sematan padat.
Milvus adalah basis data vektor yang dirancang untuk manajemen, penyimpanan, dan pengambilan data vektor. Dengan mengintegrasikan model penyematan dan pemeringkatan ulang yang umum, Anda dapat dengan mudah mengubah teks asli menjadi vektor yang dapat dicari atau memeringkat ulang hasil menggunakan model yang kuat untuk mencapai hasil yang lebih akurat untuk RAG. Integrasi ini menyederhanakan transformasi teks dan menghilangkan kebutuhan akan komponen penyematan atau pemeringkatan ulang tambahan, sehingga menyederhanakan pengembangan dan validasi RAG.
Untuk membuat penyematan dalam tindakan, lihat Menggunakan Model PyMilvus Untuk Menghasilkan Penyematan Teks.
Fungsi Penyematan | Jenis | API atau Sumber terbuka |
---|---|---|
openai | Padat | API |
pengubah-kalimat | Padat | Bersumber terbuka |
Splade | Jarang | Bersumber terbuka |
bge-m3 | Hibrida | Sumber terbuka |
voyageai | Padat | API |
jina | Padat | API |
koheren | Padat | API |
Instruktur | Padat | Sumber terbuka |
Mistral AI | Padat | API |
Nomic | Padat | API |
mGTE | Hibrida | Sumber terbuka |
Contoh 1: Gunakan fungsi penyematan default untuk menghasilkan vektor padat
Untuk menggunakan fungsi embedding dengan Milvus, pertama-tama instal pustaka klien PyMilvus dengan subpaket model
yang membungkus semua utilitas untuk pembuatan embedding.
pip install "pymilvus[model]"
Subpaket model
mendukung berbagai model embedding, mulai dari OpenAI, Sentence Transformers, BGE M3, hingga model-model yang telah dilatih sebelumnya oleh SPLADE. Untuk mempermudah, contoh ini menggunakan DefaultEmbeddingFunction
yang merupakan model sentence transformer all-MiniLM-L6-v2, model ini berukuran sekitar 70MB dan akan diunduh pada saat pertama kali digunakan:
from pymilvus import model
# This will download "all-MiniLM-L6-v2", a light weight model.
ef = model.DefaultEmbeddingFunction()
# Data from which embeddings are to be generated
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
embeddings = ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)
Hasil yang diharapkan mirip dengan yang berikut ini:
Embeddings: [array([-3.09392996e-02, -1.80662833e-02, 1.34775648e-02, 2.77156215e-02,
-4.86349640e-03, -3.12581174e-02, -3.55921760e-02, 5.76934684e-03,
2.80773244e-03, 1.35783911e-01, 3.59678417e-02, 6.17732145e-02,
...
-4.61330153e-02, -4.85207550e-02, 3.13997865e-02, 7.82178566e-02,
-4.75336798e-02, 5.21207601e-02, 9.04406682e-02, -5.36676683e-02],
dtype=float32)]
Dim: 384 (384,)
Contoh 2: Menghasilkan vektor padat dan vektor jarang dalam satu pemanggilan dengan model BGE M3
Dalam contoh ini, kami menggunakan model hibrida BGE M3 untuk menyematkan teks ke dalam vektor padat dan vektor jarang dan menggunakannya untuk mengambil dokumen yang relevan. Keseluruhan langkahnya adalah sebagai berikut:
Sematkan teks sebagai vektor padat dan vektor jarang menggunakan model BGE-M3;
Siapkan koleksi Milvus untuk menyimpan vektor padat dan jarang;
Masukkan data ke Milvus;
Cari dan periksa hasilnya.
Pertama, kita perlu menginstal dependensi yang diperlukan.
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import (
utility,
FieldSchema, CollectionSchema, DataType,
Collection, AnnSearchRequest, RRFRanker, connections,
)
Gunakan BGE M3 untuk menyandikan dokumen dan kueri untuk pengambilan embedding.
# 1. prepare a small corpus to search
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Who started AI research?"
# BGE-M3 model can embed texts as dense and sparse vectors.
# It is included in the optional `model` module in pymilvus, to install it,
# simply run "pip install pymilvus[model]".
bge_m3_ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")
docs_embeddings = bge_m3_ef(docs)
query_embeddings = bge_m3_ef([query])