0Pricing
AI Engineering Academy · Pelajaran

Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE

Integrasikan endpoint rerank milik Cohere dan model BGE-reranker untuk memberi skor pada pasangan kueri-dokumen serta mengurutkan ulang potongan top-k berdasarkan relevansi sebenarnya.

Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa Itu Cross-Encoder?

Cross-encoder adalah model neural yang menerima kueri dan dokumen sebagai satu input yang digabungkan, lalu menghasilkan skor relevansi. Berbeda dari bi-encoder yang menyematkan kueri dan dokumen secara terpisah, lapisan perhatian cross-encoder melihat kedua teks secara bersamaan sehingga dapat memodelkan sinyal relevansi yang lebih terperinci dan tidak tertangkap oleh bi-encoder. Pemrosesan bersama inilah yang membuat cross-encoder jauh lebih akurat dalam melakukan pemeringkatan.

# Bi-encoder: separate encoding
query_vec = encoder.encode(query)          # [768] vector
doc_vec = encoder.encode(document)         # [768] vector
score = cosine_similarity(query_vec, doc_vec)  # compare independently

# Cross-encoder: joint encoding
combined_input = '[CLS] ' + query + ' [SEP] ' + document + ' [SEP]'
logits = cross_encoder.forward(combined_input)  # score from joint attention
# The model attends from every query token to every document token

API Cohere Rerank

Cohere Rerank adalah API pemeringkatan ulang dengan cross-encoder yang dihosting di cloud. API ini menerima kueri dan daftar hingga 1.000 teks dokumen, lalu mengembalikan skor relevansi. API ini menggunakan model cross-encoder besar yang dilatih dengan kumpulan data pemeringkatan berkualitas tinggi dan secara konsisten mengungguli cross-encoder kecil yang dihosting sendiri pada sebagian besar tolok ukur. Biaya API ini dihitung berdasarkan setiap seribu dokumen yang diperingkat ulang.

import cohere

co = cohere.Client('YOUR_COHERE_API_KEY')

candidates = [
    'How to configure pgvector in PostgreSQL for vector search',
    'BM25 scoring formula and hyperparameters explained',
    'Installing and using the pgvector extension for embeddings',
    'Hybrid search combining BM25 and dense retrieval',
]

result = co.rerank(
    model='rerank-english-v3.0',
    query='pgvector setup guide',
    documents=candidates,
    top_n=3,
    return_documents=True,
)

for item in result.results:
    print(f'Score {item.relevance_score:.4f}: {item.document.text[:60]}')

Cohere Rerank dalam Pipeline RAG

Mengintegrasikan Cohere Rerank ke dalam pipeline RAG mengikuti pola sederhana: ambil 20–50 kandidat dari penyimpanan vektor Anda, ekstrak teksnya, panggil API Cohere Rerank, lalu ambil hasil teratas sebanyak K untuk diteruskan ke LLM. Tambahan latensinya biasanya 100–300 md, dan ini dapat diterima jika peningkatan presisi menghasilkan jawaban akhir yang lebih baik.

import cohere
from openai import OpenAI

co = cohere.Client('COHERE_KEY')
client = OpenAI()

def rag_with_rerank(question: str, retriever, top_k: int = 5) -> str:
    # Stage 1: coarse retrieval
    candidates = retriever.invoke(question)  # returns 30 docs
    texts = [doc.page_content for doc in candidates]

    # Stage 2: Cohere re-ranking
    rerank_result = co.rerank(
        model='rerank-english-v3.0',
        query=question,
        documents=texts,
        top_n=top_k,
    )
    top_texts = [texts[r.index] for r in rerank_result.results]
    context = '\n\n'.join(top_texts)

    # Stage 3: generation
    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[
            {'role': 'system', 'content': 'Answer using only the provided context.'},
            {'role': 'user', 'content': f'Context:\n{context}\n\nQuestion: {question}'},
        ],
    )
    return response.choices[0].message.content

BGE Reranker: Alternatif Sumber Terbuka

BGE Reranker (BAAI General Embedding) adalah keluarga model cross-encoder sumber terbuka dari Beijing Academy of AI. Model BAAI/bge-reranker-v2-m3 mendukung pemeringkatan ulang multibahasa dan memperoleh skor yang mendekati Cohere Rerank pada tolok ukur berbahasa Inggris, sekaligus dapat dijalankan secara lokal. Gunakan model ini dengan pustaka sentence-transformers untuk pemeringkatan ulang yang sepenuhnya dihosting sendiri tanpa biaya API.

from sentence_transformers import CrossEncoder

# Load BGE reranker model
reranker = CrossEncoder(
    'BAAI/bge-reranker-v2-m3',
    max_length=512,
    device='cpu',  # use 'cuda' if GPU is available
)

def bge_rerank(query: str, documents: list[str], top_k: int = 5) -> list[dict]:
    pairs = [[query, doc] for doc in documents]
    scores = reranker.predict(pairs, show_progress_bar=False)
    ranked = sorted(
        zip(documents, scores.tolist()),
        key=lambda x: x[1],
        reverse=True,
    )
    return [{'text': doc, 'score': score} for doc, score in ranked[:top_k]]

Varian Model BGE Reranker

Keluarga BGE reranker menawarkan kompromi antara ukuran dan kualitas. bge-reranker-base (278 juta parameter) adalah yang paling cepat dan paling kecil. bge-reranker-large (560 juta parameter) lebih akurat. bge-reranker-v2-m3 mendukung banyak bahasa dan direkomendasikan sebagai bawaan untuk produksi. Untuk akurasi maksimum, bge-reranker-v2-gemma menggunakan arsitektur dasar Gemma dan memimpin sebagian besar tolok ukur berbahasa Inggris di antara opsi sumber terbuka.

# Model size vs accuracy trade-offs
models = [
    ('BAAI/bge-reranker-base',   '278M params', 'fast,   English-focused'),
    ('BAAI/bge-reranker-large',  '560M params', 'better, English-focused'),
    ('BAAI/bge-reranker-v2-m3',  '570M params', 'best for multilingual use'),
    ('BAAI/bge-reranker-v2-gemma', '2B params', 'SOTA open-source accuracy'),
]

# For most RAG applications, bge-reranker-v2-m3 offers the best
# balance of accuracy, multilingual support, and inference speed on CPU

Mengelompokkan Prediksi Cross-Encoder

Secara bawaan, cross-encoder memproses pasangan (kueri, dokumen) satu per satu, tetapi prediksi secara berkelompok meningkatkan throughput secara drastis dengan menjalankan beberapa pasangan melalui model secara bersamaan. Parameter batch_size mengontrol jumlah pasangan yang diproses bersama. Pada GPU, ukuran kelompok 32–128 merupakan nilai yang umum. Pada CPU, kelompok yang lebih kecil, yaitu 4–16, mengurangi tekanan pada memori sekaligus tetap meningkatkan throughput dibandingkan pemrosesan berurutan.

def batch_rerank(reranker, query: str, documents: list[str],
                 top_k: int = 5, batch_size: int = 32) -> list[dict]:
    pairs = [[query, doc] for doc in documents]

    # Batch prediction
    all_scores = reranker.predict(
        pairs,
        batch_size=batch_size,
        show_progress_bar=len(pairs) > 100,
    )

    ranked = sorted(
        zip(documents, all_scores.tolist()),
        key=lambda x: x[1],
        reverse=True,
    )
    return [{'text': doc, 'score': score} for doc, score in ranked[:top_k]]

Integrasi CrossEncoderReranker dengan LangChain

LangChain menyediakan CrossEncoderReranker sebagai kompresor dokumen yang mengintegrasikan pemeringkatan ulang dengan cross-encoder ke dalam pola ContextualCompressionRetriever. Dengan demikian, Anda dapat membungkus retriever yang sudah ada dengan tahap pemeringkatan ulang hanya menggunakan beberapa baris kode, lalu memasukkannya ke rantai LCEL apa pun yang menerima antarmuka retriever.

from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

# Base retriever (coarse stage)
base_retriever = FAISS.from_documents(
    documents, OpenAIEmbeddings()
).as_retriever(search_kwargs={'k': 30})

# Re-ranker (fine stage)
model = HuggingFaceCrossEncoder(model_name='BAAI/bge-reranker-v2-m3')
compressor = CrossEncoderReranker(model=model, top_n=5)

# Combined two-stage retriever
two_stage_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=base_retriever,
)

docs = two_stage_retriever.invoke('how does hybrid search work?')

Interpretasi Skor dan Penerapan Ambang

Skor cross-encoder tidak memiliki skala yang universal. BGE reranker menghasilkan logit mentah, sering kali dalam rentang -10 hingga +10, sedangkan Cohere mengembalikan skor relevansi yang dinormalisasi antara 0 dan 1. Anda dapat menerapkan ambang skor minimum untuk mengecualikan dokumen dengan relevansi sangat rendah dari konteks yang dikirim ke LLM, sehingga lebih lanjut mengurangi derau. Mulailah dengan ambang pada persentil ke-25 skor, lalu sesuaikan dari sana.

def rerank_with_threshold(reranker, query, documents, top_k=5, min_score=-2.0):
    pairs = [[query, doc] for doc in documents]
    scores = reranker.predict(pairs)

    scored_docs = [
        {'text': doc, 'score': float(score)}
        for doc, score in zip(documents, scores)
        if float(score) >= min_score  # filter low-relevance docs
    ]

    scored_docs.sort(key=lambda x: x['score'], reverse=True)

    if not scored_docs:
        return []  # nothing passed the threshold
    return scored_docs[:top_k]

Cohere vs BGE: Mana yang Harus Dipilih

Gunakan Cohere Rerank jika Anda menginginkan API terkelola, memerlukan akurasi tertinggi pada data perusahaan berbahasa Inggris, dan ingin menghindari infrastruktur GPU. Gunakan BGE Reranker jika Anda perlu melakukan hosting sendiri demi privasi data, menginginkan biaya API per kueri sebesar nol, memerlukan dukungan multibahasa, atau ingin menjalankannya secara luring. Keduanya mencapai skor NDCG yang serupa pada sebagian besar tolok ukur—pilihan terutama bergantung pada preferensi infrastruktur dan model biaya.

Pemeringkatan Ulang Konten Multibahasa

Jika korpus atau pengguna Anda mencakup banyak bahasa, pilih cross-encoder multibahasa. bge-reranker-v2-m3 menangani lebih dari 100 bahasa, dan Cohere Rerank memiliki varian model multibahasa. Pemeringkatan ulang lintas bahasa—menilai kueri berbahasa Inggris terhadap dokumen berbahasa Prancis atau Spanyol—juga didukung. Hal ini berguna dalam penerapan perusahaan global yang basis pengetahuannya tersedia dalam banyak bahasa.

from sentence_transformers import CrossEncoder

# Multilingual BGE reranker
ml_reranker = CrossEncoder('BAAI/bge-reranker-v2-m3')

# Cross-lingual example: English query, French document
query_en = 'How to configure vector search?'
doc_fr = 'La configuration de la recherche vectorielle dans PostgreSQL'

score = ml_reranker.predict([[query_en, doc_fr]])
print(f'Cross-lingual relevance score: {float(score):.3f}')
# Positive score indicates the document is relevant to the query
# despite being in a different language

Menyimpan Hasil Pemeringkatan Ulang dalam Tembolok

Inferensi cross-encoder merupakan bagian paling lambat dari pipeline dua tahap. Untuk aplikasi yang sering memproses ulang pasangan (kueri, dokumen) yang sama, menyimpan hasil pemeringkatan ulang dalam tembolok dapat menghilangkan inferensi yang berulang. Hash pasangan (kueri, document_id) sebagai kunci tembolok, lalu simpan skornya di Redis dengan TTL. Rasio tembolok tercapai sebesar 30–50 persen umum ditemukan dalam aplikasi dukungan pelanggan, karena pengguna sering mengajukan pertanyaan yang serupa.

import redis
import hashlib
import json

r = redis.Redis(host='localhost', port=6379)

def cached_rerank_score(reranker, query: str, doc_text: str, doc_id: str) -> float:
    cache_key = 'rerank:' + hashlib.md5((query + doc_id).encode()).hexdigest()
    cached = r.get(cache_key)
    if cached:
        return float(cached)

    score = float(reranker.predict([[query, doc_text]]))
    r.setex(cache_key, 3600, str(score))  # cache 1 hour
    return score

Pemeriksaan Singkat

Uji pemahaman Anda tentang pemeringkatan ulang dengan cross-encoder berdasarkan pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda telah mempelajari bahwa Cohere Rerank menyediakan API cross-encoder yang dihosting di cloud dengan akurasi tercanggih, BGE Reranker merupakan alternatif sumber terbuka untuk penerapan yang dihosting sendiri, termasuk untuk konten multibahasa, dan pemrosesan secara berkelompok secara drastis meningkatkan throughput saat menilai banyak pasangan (kueri, dokumen). CrossEncoderReranker milik LangChain mengintegrasikan keduanya ke dalam pola ContextualCompressionRetriever. Selanjutnya, kita akan mengimplementasikan kompresi kontekstual untuk mengurangi derau dalam potongan yang diambil.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE” gratis?

Ya — teks lengkap “Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE”?

Integrasikan endpoint rerank milik Cohere dan model BGE-reranker untuk memberi skor pada pasangan kueri-dokumen serta mengurutkan ulang potongan top-k berdasarkan relevansi sebenarnya. Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?

Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Pengambilan Dua Tahap Berhasil
  2. Pemeringkatan Ulang Cross-Encoder dengan Cohere dan BGE
  3. Kompresi Kontekstual dan Penyaringan Relevansi
  4. Mengukur Dampak Pemeringkatan Ulang
← Kembali ke AI Engineering Academy