AI Engineering Academy · Ders

Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması

Sorgu-belge çiftlerini puanlamak ve en üstteki k parçalarınızı gerçek ilgililiklerine göre yeniden sıralamak için Cohere'ın yeniden sıralama uç noktasını ve BGE-reranker modelini bütünleştirin.

2. ders / 413 adım

Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.

Çapraz Kodlayıcı Nedir?

Çapraz kodlayıcı, bir sorguyu ve belgeyi birleştirilmiş tek bir girdi olarak alan ve bir ilgililik puanı üreten sinir ağı modelidir. Sorguyu ve belgeyi ayrı ayrı gömen çift kodlayıcının aksine, çapraz kodlayıcının dikkat katmanları her iki metni aynı anda görür. Bu sayede çift kodlayıcının gözden kaçırdığı ince ayrıntılı ilgililik sinyallerini modelleyebilir. Çapraz kodlayıcıların sıralama konusunda çok daha isabetli olmasını sağlayan şey bu ortak işlemedir.

# 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

Cohere Yeniden Sıralama API'si

Cohere Yeniden Sıralama, bir sorguyu ve en fazla 1000 belge metninden oluşan bir listeyi kabul edip ilgililik puanları döndüren, bulutta barındırılan bir çapraz kodlayıcı yeniden sıralama API'sidir. Yüksek kaliteli sıralama veri kümeleriyle eğitilmiş büyük çapraz kodlayıcı modelleri kullanır ve çoğu kıyaslamada kendi sunucunuzda barındırdığınız küçük çapraz kodlayıcılardan sürekli olarak daha iyi sonuç verir. API, yeniden sıralanan her bin belge için ücretlendirilir.

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]}')

RAG İşlem Hattında Cohere Yeniden Sıralama

Cohere Yeniden Sıralamayı bir RAG işlem hattına entegre etmek basit bir örüntü izler: vektör deponuzdan 20-50 aday getirin, metinlerini çıkarın, Cohere Yeniden Sıralama API'sini çağırın ve LLM'ye aktarılacak en iyi K sonucu alın. Gecikme ek yükü genellikle 100-300 ms'dir; iyileşen kesinlik daha iyi nihai yanıtlar sağladığında bu değer kabul edilebilir.

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 Yeniden Sıralayıcı: Açık Kaynaklı Alternatif

BGE Yeniden Sıralayıcı (BAAI Genel Gömme), Beijing Academy of AI tarafından geliştirilen açık kaynaklı bir çapraz kodlayıcı model ailesidir. BAAI/bge-reranker-v2-m3 modeli çok dilli yeniden sıralamayı destekler ve yerel olarak çalışırken İngilizce kıyaslamalarda Cohere Yeniden Sıralama'ya yakın puanlara ulaşır. API maliyeti olmadan tamamen kendi sunucunuzda barındırılan yeniden sıralama için bu modeli sentence-transformers kitaplığıyla kullanın.

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]]

BGE Yeniden Sıralayıcı Model Çeşitleri

BGE yeniden sıralayıcı ailesi, boyut ve kalite arasında farklı seçenekler sunar. bge-reranker-base (278 milyon parametre) en hızlı ve en küçük seçenektir. bge-reranker-large (560 milyon parametre) daha isabetlidir. bge-reranker-v2-m3 birden çok dili destekler ve üretim ortamları için önerilen varsayılandır. En yüksek isabet için bge-reranker-v2-gemma, Gemma omurgasını kullanır ve açık kaynaklı seçenekler arasında İngilizce kıyaslamaların çoğunda öne çıkar.

# 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

Çapraz Kodlayıcı Tahminlerini Toplu İşleme

Çapraz kodlayıcılar, (sorgu, belge) çiftlerini varsayılan olarak tek tek işler; ancak toplu tahmin, birden çok çifti modelden aynı anda geçirerek işlem hacmini büyük ölçüde artırır. batch_size parametresi, birlikte kaç çiftin işleneceğini denetler. GPU üzerinde 32-128 arası toplu işlem boyutları yaygındır. CPU üzerinde ise 4-16 gibi daha küçük toplu işlemler bellek baskısını azaltırken sıralı işlemeye kıyasla işlem hacmini yine artırır.

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]]

LangChain CrossEncoderReranker Entegrasyonu

LangChain, çapraz kodlayıcı yeniden sıralamasını ContextualCompressionRetriever örüntüsüne entegre eden bir belge sıkıştırıcısı olarak CrossEncoderReranker sağlar. Bu sayede mevcut herhangi bir getiriciyi yalnızca birkaç kod satırıyla bir yeniden sıralama aşaması kullanacak şekilde sarmalayabilir ve getirici arayüzünü kabul eden herhangi bir LCEL zincirine ekleyebilirsiniz.

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?')

Puanları Yorumlama ve Eşik Belirleme

Çapraz kodlayıcı puanlarının evrensel bir ölçeği yoktur. BGE yeniden sıralayıcı ham logit değerleri (çoğunlukla -10 ile +10 arasında) üretirken Cohere, 0 ile 1 arasında normalleştirilmiş bir ilgililik puanı döndürür. LLM'ye gönderilen bağlamdan çok düşük ilgililiğe sahip belgeleri çıkarmak için bir asgari puan eşiği uygulayabilirsiniz. Gürültüyü daha da azaltmak için puanların 25. yüzdelik dilimindeki bir eşikle başlayın ve buradan ayarlama yapın.

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 ve BGE: Hangisini Seçmelisiniz?

Yönetilen bir API istediğinizde, İngilizce kurumsal verilerde en yüksek isabeti gerektiğinde ve GPU altyapısından kaçınmak istediğinizde Cohere Yeniden Sıralama'yı kullanın. Veri gizliliği için kendi sunucunuzda barındırmanız gerektiğinde, sorgu başına API maliyetinin sıfır olmasını istediğinizde, çok dilli desteğe ihtiyaç duyduğunuzda veya çevrimdışı çalışmak istediğinizde BGE Yeniden Sıralayıcı'yı kullanın. İkisi de çoğu kıyaslamada benzer NDCG puanlarına ulaşır; seçim esas olarak altyapı tercihleri ve maliyet modeliyle ilgilidir.

Çok Dilli İçeriği Yeniden Sıralama

Derleminiz veya kullanıcılarınız birden çok dile yayılıyorsa çok dilli bir çapraz kodlayıcı seçin. bge-reranker-v2-m3 100'den fazla dili destekler ve Cohere Yeniden Sıralama'nın da çok dilli bir model çeşidi vardır. Diller arası yeniden sıralama da desteklenir; örneğin İngilizce bir sorgunun Fransızca veya İspanyolca belgelerle eşleştirilmesi, bilgi tabanlarının birden çok dilde bulunduğu küresel kurumsal dağıtımlarda yararlıdır.

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

Yeniden Sıralama Sonuçlarını Önbelleğe Alma

Çapraz kodlayıcı çıkarımı, iki aşamalı işlem hattının en yavaş kısmıdır. Aynı (sorgu, belge) çiftlerinin sıkça tekrarlandığı uygulamalarda yeniden sıralama sonuçlarını önbelleğe almak, gereksiz çıkarımları ortadan kaldırabilir. (sorgu, document_id) çiftini bir önbellek anahtarı olarak özetleyin ve puanı Redis'te bir TTL ile saklayın. Kullanıcıların benzer soruları sıkça sorduğu müşteri destek uygulamalarında %30-50 önbellek isabet oranları yaygındır.

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

Hızlı Kontrol

Bu derste çapraz kodlayıcı yeniden sıralamasını anlayıp anlamadığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: Cohere Yeniden Sıralama, son teknoloji düzeyinde isabet sunan, bulutta barındırılan bir çapraz kodlayıcı API'si sağlar; BGE Yeniden Sıralayıcı, çok dilli içerik de dahil olmak üzere kendi sunucunuzda barındırılan dağıtımlar için açık kaynaklı bir alternatiftir; toplu işleme ise çok sayıda (sorgu, belge) çifti puanlarken işlem hacmini büyük ölçüde artırır. LangChain'in CrossEncoderReranker bileşeni her ikisini de ContextualCompressionRetriever örüntüsüne entegre eder. Sırada, getirilen parçalardaki gürültüyü azaltmak için bağlamsal sıkıştırmayı uygulayacağız.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması” dersi ücretsiz mi?

Evet — “Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.

“Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması” dersinde ne öğreneceğim?

Sorgu-belge çiftlerini puanlamak ve en üstteki k parçalarınızı gerçek ilgililiklerine göre yeniden sıralamak için Cohere'ın yeniden sıralama uç noktasını ve BGE-reranker modelini bütünleştirin. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İki Aşamalı Getirmenin İşe Yaramasının Nedeni
  2. Cohere ve BGE ile Çapraz Kodlayıcı Yeniden Sıralaması
  3. Bağlamsal Sıkıştırma ve İlgililik Filtreleme
  4. Yeniden Sıralamanın Etkisini Ölçme
← AI Engineering Academy Sayfasına Dön