Skip to content
NNadeem Shabir
Back

Project

ResearchGPT

Retrieval over research papers, with the choices decided by measurement

Answers a question from the paper text and cites the passage. Retrieval weights, fusion, and reranking were chosen from a SciFact evaluation, not left at the first setting.

  • SciFact eval
  • hybrid search
  • ChromaDB
  • FastAPI
  • React

Evaluation

BEIR SciFact. 300 expert labelled queries over 5,183 scientific abstracts. No hand written or model written labels.

ConfigurationRecall@5Recall@10MRRnDCG@10p95
BM25 only0.69690.75980.59370.630198 ms
Dense only (MiniLM)0.73460.78330.60120.642240 ms
Hybrid 0.7 / 0.30.75230.81100.65120.6873179 ms
Hybrid RRF (k=60)0.71410.79240.62220.6599178 ms
Hybrid 0.7 / 0.3 plus rerank0.74160.82720.66290.69484,998 ms
Hybrid 0.5 / 0.5 (shipped)0.75050.82020.66320.6972179 ms
01

What the table changed

The shipped setting is equal weight hybrid search: 0.5 semantic and 0.5 BM25. The earlier 0.7 / 0.3 split scored lower on nDCG@10. nDCG@10 at 0.5 / 0.5 is 0.6972, above the published ColBERTv2 number of 0.693, on CPU.

A cross encoder reranker was measured and turned off. It cost about 28 times the latency for a small nDCG gain, and Recall@5 dropped. Reciprocal rank fusion also scored below weighted fusion, by 3.8 recall points.

Hybrid search beat BM25 and dense retrieval on every metric in the table. Recall@5 is 5.5 points above BM25 and 1.8 above dense retrieval.

02

Generation scores that were withdrawn

RAGAS was run (faithfulness 0.8650, answer relevancy 0.8026 on 43 questions) and then not quoted. Calibrating the LLM judge against 23 hand graded answers gave Cohen's kappa of -0.195, worse than chance. The judge scored 0.781 on answers a person called supported and 0.783 on ones a person rejected.

What is kept is what the code counts, not what a model judge says.

  • Unanswerable questions declined: 23 of 23.
  • Citation rate for the deterministic citer: 1.0000, with 0 fabricated citations.
  • Citation coverage, meaning the right sources were named: 0.9225.
  • Median latency per question: 2.7 seconds.
03

How an answer is built

  • PDFs are chunked on section boundaries, then indexed in ChromaDB and in BM25.
  • A question runs both searches. The scores are fused with the tuned weights. The reranker stays off.
  • Citations are attached in code, by matching each paragraph to the chunks it came from. The model does not write the sources.
  • If nothing relevant is indexed, the system says so instead of answering from memory.