Skip to content

🚀 Getting Started with Rankify

🔥 Overview

Rankify is a powerful Python toolkit for Retrieval, Re-Ranking, and Retrieval-Augmented Generation (RAG). It integrates 10 retrieval methods (BM25, DPR, ANCE, BGE, ColBERT, Contriever, Online, HyDE), 23 state-of-the-art re-ranking models, and 7 RAG methods (Zero-Shot, Basic RAG, Chain-of-Thought, Self-Consistency, ReAct, FiD, In-Context RALM), enabling seamless experimentation across retrieval pipelines.


📚 Using Pre-Retrieved Datasets

Rankify includes pre-retrieved datasets from Hugging Face: 🔗 Hugging Face Dataset Repository

1️⃣ Load a Pre-Retrieved Dataset

from rankify.dataset.dataset import Dataset
dataset = Dataset(retriever="bm25", dataset_name="nq-dev", n_docs=100)
documents = dataset.download(force_download=False)

2️⃣ Available Retrieval Methods

  • bm25, dpr, ance, colbert, bge, contriever
  • Example:
dataset = Dataset(retriever="bge", dataset_name="nq-dev", n_docs=100)
documents = dataset.download(force_download=False)

🔍 Performing Retrieval

Rankify supports BM25, DPR, ANCE, ColBERT, BGE, and Contriever for retrieval.

1️⃣ Example: Retrieving Documents

from rankify.dataset.dataset import Document, Question
from rankify.retrievers.retriever import Retriever

documents = [Document(question=Question("Who wrote Hamlet?"))]

retriever = Retriever(method="bm25", n_docs=5, index_type="wiki")
retrieved_docs = retriever.retrieve(documents)

for doc in retrieved_docs:
    print(doc)

2️⃣ Using Different Retrieval Models

retriever = Retriever(method="colbert", model="colbert-ir/colbertv2.0", n_docs=5, index_type="wiki")
retriever = Retriever(method="dpr", model="dpr-multi", n_docs=5, index_type="msmarco")

📊 Running Re-Ranking

Rankify provides multiple re-ranking models.

1️⃣ Example: Using MonoT5 for Re-Ranking

from rankify.dataset.dataset import Document, Question, Context
from rankify.models.reranking import Reranking

question = Question("When did Thomas Edison invent the light bulb?")
contexts = [Context(text="Thomas Edison invented the light bulb in 1879.")]

document = Document(question=question, contexts=contexts)

reranker = Reranking(method="monot5", model_name="monot5-base-msmarco")
reranker.rank([document])

for context in document.reorder_contexts:
    print(context.text)

2️⃣ Other Available Re-Rankers

  • Cross-Encoders
  • MonoT5, MonoBERT, RankT5, ListT5
  • ColBERT Ranker
  • LLM-based Re-rankers (Vicuna, Zephyr, GPT)

🤖 Retrieval-Augmented Generation (RAG)

1️⃣ Example: Using GPT for RAG

from rankify.dataset.dataset import Document, Question, Context
from rankify.generator.generator import Generator

question = Question("What is the capital of France?")
contexts = [Context(text="The capital of France is Paris.")]

document = Document(question=question, contexts=contexts)

generator = Generator(method="in-context-ralm", model_name='meta-llama/Llama-3.1-8B')
generated_answers = generator.generate([document])

print(generated_answers)

📊 Evaluating Models

Rankify provides retrieval, re-ranking, and generation evaluation metrics.

1️⃣ Evaluate Retrieval Performance

from rankify.metrics.metrics import Metrics

metrics = Metrics(documents)
retrieval_results = metrics.calculate_retrieval_metrics(ks=[1, 5, 10], use_reordered=False)
print(retrieval_results)

2️⃣ Evaluate Re-Ranked Results

re_ranked_results = metrics.calculate_retrieval_metrics(ks=[1, 5, 10], use_reordered=True)
print(re_ranked_results)

3️⃣ Evaluate RAG Performance

generated_answers = generator.generate(documents)
generation_metrics = metrics.calculate_generation_metrics(generated_answers)
print(generation_metrics)