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 di input_field_names.
  • Jumlah string di ` queries ` harus sama dengan jumlah kueri pencarian (nq).

Cara kerjanya

Hugging Face Ranker workflow Alur kerja Hugging Face Ranker

Hugging Face Ranker berjalan setelah pencarian vektor awal:

  1. Mengambil entitas kandidat. Milvus mencari di bidang vektor yang telah dikonfigurasi dan mengumpulkan entitas kandidat.
  2. Siapkan teks untuk pengurutan ulang. Fungsi ini membaca teks kueri dari params.queries dan teks kandidat dari bidang VARCHAR yang ditentukan di input_field_names.
  3. Meminta skor kesamaan. Milvus mengirimkan kueri sebagai source_sentence dan teks kandidat sebagai sentences melalui hf-inference ke pipa Hugging Face sentence-similarity.
  4. 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

How Hugging Face Ranker calculates similarity scores Bagaimana Hugging Face Ranker menghitung skor kesamaan

Model Hugging Face menghitung skor dalam tiga tahap:

  1. Siapkan input teks. Ranker membaca teks kueri dari params.queries dan teks kandidat dari bidang VARCHAR yang telah dikonfigurasi.
  2. Membuat representasi model terpisah. Milvus mengirimkan kueri sebagai source_sentence dan teks kandidat sebagai sentences. Model secara internal mengenkode kueri dan setiap kandidat secara terpisah.
  3. 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-inference untuk sentence-similarity tugas tersebut.
  • Sebuah koleksi yang menyimpan teks kandidat dalam bidang VARCHAR yang 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:

ParameterWajib?Deskripsi
rerankerYaImplementasi reranking. Atur nilai ini menjadi model.
providerYaPenyedia model. Tetapkan nilai ini ke huggingface.
model_nameYaID model Hugging Face untuk model yang disajikan melalui hf-inference untuk tugas sentence-similarity.
queriesYaString kueri yang digunakan untuk penentuan peringkat ulang. Berikan tepat satu string per kueri pencarian, bahkan ketika pengambilan awal menggunakan vektor kueri.
hf_providerTidakRute Penyedia Inferensi Hugging Face. Nilai default dan satu-satunya yang didukung di Milvus 2.6.20 adalah hf-inference.
credentialTidakLabel kredensial yang didefinisikan di bagian tingkat atas credential pada milvus.yaml. Nilai ini bukanlah token itu sendiri.
max_client_batch_sizeTidakJumlah 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