Hugging Face RankerCompatible with Milvus v2.6.20+
Pencarian vektor mengurutkan hasil berdasarkan jarak vektor, tetapi urutan awal mungkin tidak mencerminkan seberapa baik teks setiap kandidat menjawab kueri. Hugging Face Ranker mengirimkan kueri dan teks kandidat ke Penyedia Inferensi Hugging Face yang dihosting dan menggunakan skor " sentence-similarity " untuk mengurutkan ulang kandidat yang dikembalikan oleh Milvus.
Integrasi ini menggunakan router Hugging Face yang dihosting. Untuk melakukan pengurutan ulang menggunakan layanan Text Embeddings Inference (TEI) yang di-deploy secara terpisah, lihat TEI Ranker.
Batasan
- Fungsi harus merujuk tepat pada satu bidang `
VARCHAR` yang tidak boleh null diinput_field_names. - Jumlah string di `
queries` harus sama dengan jumlah kueri pencarian (nq).
Cara kerjanya
Alur kerja Hugging Face Ranker
Hugging Face Ranker berjalan setelah pencarian vektor awal:
- Mengambil entitas kandidat. Milvus mencari di bidang vektor yang telah dikonfigurasi dan mengumpulkan entitas kandidat.
- Siapkan teks untuk pengurutan ulang. Fungsi ini membaca teks kueri dari
params.queriesdan teks kandidat dari bidangVARCHARyang ditentukan diinput_field_names. - Meminta skor kesamaan. Milvus mengirimkan kueri sebagai
source_sentencedan teks kandidat sebagaisentencesmelaluihf-inferenceke pipa Hugging Facesentence-similarity. - Menyusun ulang peringkat kandidat. Hugging Face mengembalikan satu skor per kandidat. Milvus mengurutkan kandidat dari skor tertinggi ke terendah dan mengembalikan hasil yang telah disusun ulang peringkatnya.
Bagaimana skor kesamaan dihitung
Bagaimana Hugging Face Ranker menghitung skor kesamaan
Model Hugging Face menghitung skor dalam tiga tahap:
- Siapkan input teks. Ranker membaca teks kueri dari
params.queriesdan teks kandidat dari bidangVARCHARyang telah dikonfigurasi. - Membuat representasi model terpisah. Milvus mengirimkan kueri sebagai
source_sentencedan teks kandidat sebagaisentences. Model secara internal mengenkode kueri dan setiap kandidat secara terpisah. - Bandingkan dan kembalikan skor. Model membandingkan representasi kueri dengan setiap representasi kandidat dan mengembalikan satu skor kesamaan per kandidat.
Embedding atau representasi yang digunakan oleh model Hugging Face merupakan proses pemrosesan model antara. Hugging Face mengembalikan skor, bukan vektor. Oleh karena itu, pengambilan vektor awal dan pemeringkatan ulang model menggunakan representasi terpisah dan mungkin menggunakan model yang berbeda.
Sebelum Anda memulai
Sebelum menggunakan Hugging Face Ranker, pastikan Anda memiliki:
- Milvus 2.6.20 atau yang lebih baru dalam lini rilis 2.6.
- PyMilvus 2.6.16 atau yang lebih baru.
- Token Akses Pengguna Hugging Face yang dapat memanggil Penyedia Inferensi.
- Model yang saat ini disajikan oleh
hf-inferenceuntuksentence-similaritytugas tersebut. - Sebuah koleksi yang menyimpan teks kandidat dalam bidang
VARCHARyang tidak boleh bernilai null.
Milvus tidak mengontrol apakah model Hugging Face tetap tersedia melalui hf-inference, atau apakah model tersebut memenuhi persyaratan stabilitas, latensi, dan kualitas keluaran Anda. Verifikasi model di Hugging Face dan evaluasi untuk beban kerja Anda sebelum menggunakannya dalam produksi.
Contoh-contoh ini hanya sentence-transformers/all-MiniLM-L6-v2 hanya untuk mendemonstrasikan konfigurasi. Model tersebut bukanlah rekomendasi atau sertifikasi dari Milvus.
Konfigurasikan kredensial
Anda dapat mengonfigurasi Token Akses Pengguna Hugging Face di milvus.yaml atau melalui variabel lingkungan.
Urutan prioritas kredensial adalah:
Function credential label -> provider credential label in milvus.yaml -> environment variable
Opsi 1: Berkas konfigurasi
Tentukan token di bawah bagian tingkat atas credential, lalu arahkan penyedia ranker Hugging Face ke label kredensial:
# milvus.yaml
credential:
huggingface_apikey:
apikey: <YOUR_HUGGING_FACE_TOKEN>
function:
rerank:
model:
providers:
huggingface:
credential: huggingface_apikey
# url: https://router.huggingface.co
Parameter ` credential ` tingkat Fungsi dapat menggantikan label tingkat penyedia. Nilainya harus berupa label kredensial yang didefinisikan di ` milvus.yaml`, bukan token itu sendiri.
Opsi 2: Variabel lingkungan
Jika baik konfigurasi Fungsi maupun penyedia tidak menentukan label kredensial, atur ` MILVUS_HUGGINGFACE_API_KEY ` di lingkungan layanan Milvus:
# docker-compose.yaml
standalone:
environment:
MILVUS_HUGGINGFACE_API_KEY: <YOUR_HUGGING_FACE_TOKEN>
Gunakan Hugging Face Ranker
Hugging Face Ranker didefinisikan dan diterapkan pada saat pencarian. Anda dapat mengubah atau mengabaikan ranker untuk setiap pencarian tanpa mengubah skema koleksi.
Langkah 1: Siapkan koleksi
Contoh berikut membuat koleksi dengan bidang teks untuk pengurutan ulang dan bidang vektor untuk pengambilan awal:
from pymilvus import DataType, Function, FunctionType, MilvusClient
client = MilvusClient(uri="http://localhost:19530")
collection_name = "hugging_face_rerank_demo"
schema = client.create_schema()
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=1000)
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=4)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE",
)
client.create_collection(
collection_name=collection_name,
schema=schema,
index_params=index_params,
)
client.insert(
collection_name=collection_name,
data=[
{
"id": 1,
"document": "Recent renewable energy developments include improved solar efficiency.",
"dense": [0.10, 0.20, 0.30, 0.40],
},
{
"id": 2,
"document": "Climate policy and carbon markets have evolved rapidly in recent years.",
"dense": [0.11, 0.19, 0.28, 0.39],
},
{
"id": 3,
"document": "New battery technology helps stabilize wind and solar power generation.",
"dense": [0.90, 0.10, 0.05, 0.02],
},
{
"id": 4,
"document": "Vector databases support similarity search for machine learning applications.",
"dense": [0.01, 0.02, 0.03, 0.04],
},
],
)
Langkah 2: Tentukan Fungsi rerank
Tentukan fungsi ` RERANK ` yang membaca teks kandidat dari ` document ` dan menggunakan teks kueri di ` queries`:
hugging_face_ranker = Function(
name="hugging_face_semantic_ranker",
input_field_names=["document"],
function_type=FunctionType.RERANK,
params={
"reranker": "model",
"provider": "huggingface",
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
"hf_provider": "hf-inference",
"queries": ["renewable energy developments"],
"credential": "huggingface_apikey",
"max_client_batch_size": 32,
},
)
Jika Anda hanya menggunakan kredensial tingkat penyedia atau variabel lingkungan, hilangkan credential dari parameter Fungsi.
Tabel berikut menjelaskan parameter Hugging Face Ranker:
| Parameter | Wajib? | Deskripsi |
|---|---|---|
reranker | Ya | Implementasi reranking. Atur nilai ini menjadi model. |
provider | Ya | Penyedia model. Tetapkan nilai ini ke huggingface. |
model_name | Ya | ID model Hugging Face untuk model yang disajikan melalui hf-inference untuk tugas sentence-similarity. |
queries | Ya | String kueri yang digunakan untuk penentuan peringkat ulang. Berikan tepat satu string per kueri pencarian, bahkan ketika pengambilan awal menggunakan vektor kueri. |
hf_provider | Tidak | Rute Penyedia Inferensi Hugging Face. Nilai default dan satu-satunya yang didukung di Milvus 2.6.20 adalah hf-inference. |
credential | Tidak | Label kredensial yang didefinisikan di bagian tingkat atas credential pada milvus.yaml. Nilai ini bukanlah token itu sendiri. |
max_client_batch_size | Tidak | Jumlah maksimum teks kandidat yang dikirim dalam satu permintaan Hugging Face. Nilai defaultnya adalah 32, dan nilainya harus lebih besar dari 0. |
Langkah 3: Lakukan pencarian dengan ranker
Masukkan Fungsi melalui parameter ` ranker ` dari ` search()`:
query_vector = [0.12, 0.21, 0.29, 0.41]
results = client.search(
collection_name=collection_name,
data=[query_vector],
anns_field="dense",
limit=3,
output_fields=["document"],
ranker=hugging_face_ranker,
consistency_level="Strong",
)
print(results)
Milvus pertama-tama mengambil kandidat dari dense, kemudian menggunakan teks kueri di queries dan teks kandidat di document untuk menghitung skor kesamaan kalimat. Kandidat yang dikembalikan diurutkan berdasarkan skor Hugging Face.
Pemecahan Masalah
Model tidak tersedia untuk kesamaan kalimat
Buka halaman model di Hugging Face dan periksa bagian Penyedia Inferensi. Pastikan bahwa hf-inference menyediakan model untuk sentence-similarity. Jika tidak, pilih model lain yang mendukung tugas tersebut.
Jumlah string kueri tidak sesuai dengan permintaan pencarian
Jumlah string di queries harus sama dengan jumlah kueri pencarian (nq). Untuk pencarian dengan satu vektor kueri, berikan tepat satu string kueri.
Teks kandidat hilang atau dapat bernilai null
Pastikan bahwa input_field_names berisi tepat satu bidang VARCHAR yang tidak boleh null dan bahwa setiap entitas kandidat berisi teks di bidang tersebut.
Milvus melaporkan kredensial Hugging Face yang hilang
Pastikan label kredensial Function ada di milvus.yaml, label tingkat penyedia valid, atau MILVUS_HUGGINGFACE_API_KEY ada di lingkungan layanan Milvus.
Langkah selanjutnya
- Untuk perilaku dan batasan model-ranker bersama, lihat Ikhtisar Model Ranker.
- Untuk menghasilkan embedding melalui Penyedia Inferensi Hugging Face yang dihosting, lihat Hugging Face.
- Untuk menerapkan ranker pada pencarian hibrida, lihat Pencarian Hibrida Multi-Vektor.