🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Memperkenalkan Integrasi PyMilvus dengan Model Penyematan

Memperkenalkan Integrasi PyMilvus dengan Model Penyematan

  • Engineering
June 05, 2024
Stephen Batifol

Milvus adalah basis data vektor sumber terbuka yang dirancang khusus untuk aplikasi AI. Baik Anda sedang mengerjakan pembelajaran mesin, pembelajaran mendalam, atau proyek terkait AI lainnya, Milvus menawarkan cara yang tangguh dan efisien untuk menangani data vektor berskala besar.

Sekarang, dengan integrasi modul model di PyMilvus, SDK Python untuk Milvus, menambahkan model Embedding dan Reranking menjadi lebih mudah. Integrasi ini menyederhanakan transformasi data Anda menjadi vektor yang dapat dicari atau hasil pemeringkatan ulang untuk hasil yang lebih akurat, seperti dalam Retrieval Augmented Generation (RAG).

Dalam blog ini, kami akan mengulas model embedding padat, model embedding jarang, dan perangking ulang serta mendemonstrasikan cara menggunakannya dalam praktik menggunakan Milvus Lite, versi ringan Milvus yang dapat berjalan secara lokal di aplikasi Python Anda.

Penyematan Padat vs Penyematan Jarang

Sebelum kami memandu Anda tentang cara menggunakan integrasi kami, mari kita lihat dua kategori utama penyematan vektor.

Penyematan Vektor umumnya terbagi menjadi dua kategori utama: Penyematan Padat dan Penyematan Jarang.

  • Dense Embeddings adalah vektor berdimensi tinggi yang sebagian besar atau semua elemennya tidak nol, sehingga ideal untuk menyandikan semantik teks atau makna yang kabur.

  • Sparse Embeddings adalah vektor berdimensi tinggi dengan banyak elemen nol, lebih cocok untuk menyandikan konsep yang tepat atau berdekatan.

Milvus mendukung kedua jenis penyematan dan menawarkan pencarian hibrida. Pencarian Hibrida memungkinkan Anda melakukan pencarian di berbagai bidang vektor dalam koleksi yang sama. Vektor-vektor ini dapat mewakili aspek data yang berbeda, menggunakan model penyematan yang beragam, atau menggunakan metode pemrosesan data yang berbeda, dan menggabungkan hasilnya menggunakan pemeringkatan ulang.

Cara Menggunakan Integrasi Penyematan dan Pemeringkatan Ulang

Pada bagian berikut, kami akan mendemonstrasikan tiga contoh praktis dalam menggunakan integrasi kami untuk menghasilkan embedding dan melakukan pencarian vektor.

Contoh 1: Gunakan Fungsi Penyematan Default untuk Menghasilkan Vektor Padat

Anda harus menginstal klien pymilvus dengan paket model untuk menggunakan fungsi embedding dan reranking dengan Milvus.

pip install "pymilvus[model]"

Langkah ini akan menginstal Milvus Lite, yang memungkinkan Anda untuk menjalankan Milvus secara lokal di dalam aplikasi Python Anda. Langkah ini juga mencakup subpaket model, yang mencakup semua utilitas untuk embedding dan reranking.

Subpaket model mendukung berbagai model penyematan, termasuk model-model dari OpenAI, Sentence Transformers, BGE-M3, BM25, SPLADE, dan model-model yang sudah dilatih sebelumnya oleh Jina AI.

Contoh ini menggunakan DefaultEmbeddingFunction, berdasarkan model all-MiniLM-L6-v2 Sentence Transformer untuk kesederhanaan. 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 lightweight 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:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)

Hasil yang diharapkan adalah seperti 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 Jarang Menggunakan Model BM25

BM25 adalah metode terkenal yang menggunakan frekuensi kemunculan kata untuk menentukan relevansi antara kueri dan dokumen. Dalam contoh ini, kami akan menunjukkan cara menggunakan BM25EmbeddingFunction untuk menghasilkan sematan jarang untuk kueri dan dokumen.

Dalam BM25, penting untuk menghitung statistik dalam dokumen Anda untuk mendapatkan IDF (Inverse Document Frequency), yang dapat merepresentasikan pola dalam dokumen Anda. IDF mengukur seberapa banyak informasi yang diberikan oleh sebuah kata, apakah kata tersebut umum atau langka di semua dokumen.

from pymilvus.model.sparse import BM25EmbeddingFunction

# 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 = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()

# 2. Fit the corpus to get BM25 model parameters on your documents.
bm25_ef.fit(docs)

# 3. Store the fitted parameters to expedite future processing.
bm25_ef.save("bm25_params.json")

# 4. Load the saved params
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")

docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)

Contoh 3: Menggunakan ReRanker

Sistem pencarian bertujuan untuk menemukan hasil yang paling relevan dengan cepat dan efisien. Secara tradisional, metode seperti BM25 atau TF-IDF telah digunakan untuk menentukan peringkat hasil pencarian berdasarkan pencocokan kata kunci. Metode terbaru, seperti kemiripan kosinus berbasis penyematan, sangat mudah tetapi terkadang dapat melewatkan seluk-beluk bahasa dan, yang paling penting, interaksi antara dokumen dan maksud kueri.

Di sinilah penggunaan pemeringkatan ulang dapat membantu. Perangking ulang adalah model AI tingkat lanjut yang mengambil kumpulan hasil awal dari pencarian - sering kali disediakan oleh pencarian berbasis embeddings/token - dan mengevaluasinya kembali untuk memastikan bahwa hasil tersebut lebih sesuai dengan maksud pengguna. Ini melihat lebih dari sekadar pencocokan istilah di permukaan untuk mempertimbangkan interaksi yang lebih dalam antara kueri penelusuran dan konten dokumen.

Untuk contoh ini, kita akan menggunakan Jina AI Reranker.

from pymilvus.model.reranker import JinaRerankFunction

jina_api_key = "<YOUR_JINA_API_KEY>"

rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)

query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"

documents = [
   "In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
   "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
   "In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
   "The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]

results = rf(query, documents)

for result in results:
   print(f"Index: {result.index}")
   print(f"Score: {result.score:.6f}")
   print(f"Text: {result.text}\n")

Hasil yang diharapkan mirip dengan yang berikut ini:

Index: 1
Score: 0.937096
Text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.

Index: 3
Score: 0.354210
Text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.

Index: 0
Score: 0.349866
Text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.

Index: 2
Score: 0.272896
Text: In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.

Bintangi Kami di GitHub dan Bergabunglah dengan Discord Kami!

Jika Anda menyukai artikel blog ini, pertimbangkan untuk membintangi Milvus di GitHub, dan jangan ragu untuk bergabung dengan Discord kami! 💙

Like the article? Spread the word

Terus Baca