Text Ranking
sentence-transformers
Safetensors
xlm-roberta
Generated from Trainer
text-embeddings-inference
Instructions to use wealthcoders/bge-reranker-v2-m3 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use wealthcoders/bge-reranker-v2-m3 with sentence-transformers:
from sentence_transformers import CrossEncoder model = CrossEncoder("wealthcoders/bge-reranker-v2-m3") query = "Which planet is known as the Red Planet?" passages = [ "Venus is often called Earth's twin because of its similar size and proximity.", "Mars, known for its reddish appearance, is often referred to as the Red Planet.", "Jupiter, the largest planet in our solar system, has a prominent red spot.", "Saturn, famous for its rings, is sometimes mistaken for the Red Planet." ] scores = model.predict([(query, passage) for passage in passages]) print(scores) - Notebooks
- Google Colab
- Kaggle
File size: 2,017 Bytes
499de81 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | from typing import Dict, List, Any
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch.nn.functional as F
class EndpointHandler:
def __init__(self, path: str = "BAAI/bge-reranker-v2-m3"):
# Load tokenizer and model
self.tokenizer = AutoTokenizer.from_pretrained(path)
self.model = AutoModelForSequenceClassification.from_pretrained(path)
self.model.eval()
# Determine the computation device
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
self.model.to(self.device)
def __call__(self, data: Dict[str, Any]) -> List[Dict[str, Any]]:
"""
Expected input format:
{
"query": "Your query here",
"texts": ["Document 1", "Document 2", ...],
"normalize": true # Optional; defaults to False
}
"""
query = data.get("query")
texts = data.get("texts", [])
normalize = data.get("normalize", False)
if not query or not texts:
return [{"error": "Both 'query' and 'texts' fields are required."}]
# Prepare input pairs
pairs = [[query, text] for text in texts]
# Tokenize input pairs
inputs = self.tokenizer(
pairs,
padding=True,
truncation=True,
return_tensors="pt",
max_length=512
).to(self.device)
with torch.no_grad():
# Get model logits
outputs = self.model(**inputs)
scores = outputs.logits.view(-1)
# Apply sigmoid normalization if requested
if normalize:
scores = torch.sigmoid(scores)
# Prepare the response
results = [
{"index": idx, "score": score.item()}
for idx, score in enumerate(scores)
]
# Sort results by descending score
results.sort(key=lambda x: x["score"], reverse=True)
return results
|