# Retrieval Metrics: Recall@k और MRR — Retrieval-Augmented Generation (RAG)

Source: https://www.geekswithgeeks.com/hi/rag/e-retrieval

> Score करें कि सही chunks मिलते हैं और कितने ऊपर rank होते हैं।

## पहले golden set बनाएँ

50 से 200 असली सवालों का **golden set** बनाएँ, हर एक के साथ वे chunk(s) या दस्तावेज़ जिनमें उत्तर है। फिर **Recall@k** (शीर्ष k में मिले प्रासंगिक chunks का अंश), **Precision@k**, **MRR** (mean reciprocal rank: पहले प्रासंगिक परिणाम की rank से 1 भाग देने का औसत) और श्रेणीबद्ध प्रासंगिकता के लिए **nDCG** निकालें। RAG के लिए Recall@k मुख्य संख्या है, क्योंकि generator वह प्रमाण उपयोग नहीं कर सकता जो उसे मिला ही नहीं। Chunking, embeddings, filters या rerankers के हर बदलाव के बाद set दोबारा चलाएँ।

## हर चरण को मापें

Retrieval और generation अलग तरह से विफल होते हैं, इसलिए अलग से score करें।

![तीन दृश्य: retrieval, उत्तर, विफलताएँ।](assets/figures/rag/section-6-map.svg) — चित्र 6.1 — Retrieval, उत्तर और विफलताएँ।

## Recall@k और MRR, चलाकर

मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। तीन सवालों में सही chunk किसी में भी पहला नहीं (recall@1 = 0), प्रासंगिक chunks के आधे शीर्ष 3 में मिले (recall@3 = 0.5), और MRR 0.278 है।

```python
def recall_at_k(retrieved, relevant, k):
    return len(set(retrieved[:k]) & set(relevant)) / len(relevant)

def mrr(retrieved, relevant):
    for i, d in enumerate(retrieved, start=1):
        if d in relevant:
            return 1 / i
    return 0.0

cases = [
    (["d3", "d1", "d9"], ["d1"]),
    (["d2", "d4", "d5"], ["d5", "d7"]),
    (["d8", "d6", "d0"], ["d1"]),
]
for k in (1, 3):
    r = sum(recall_at_k(ret, rel, k) for ret, rel in cases) / len(cases)
    print("recall@%d" % k, round(r, 3))
print("MRR", round(sum(mrr(ret, rel) for ret, rel in cases) / len(cases), 3))

```

Output:

```
recall@1 0.0
recall@3 0.5
MRR 0.278
```

**Quiz:** RAG के लिए Recall@k इतना अहम क्यों है?

- [ ] यह उत्तरों से असंबंधित है
- [ ] यह font गुणवत्ता मापता है
- [ ] यह LLM को बदलता है
- [x] Generator वह प्रमाण उपयोग नहीं कर सकता जो retrieve ही नहीं हुआ

*Answer:* Generator वह प्रमाण उपयोग नहीं कर सकता जो retrieve ही नहीं हुआ. छूटा प्रमाण किसी भी उत्तर की गुणवत्ता की सीमा तय करता है।
