File size: 1,137 Bytes
3b92dff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

model = None

def evaluate_context_relevance(question: str, retrieved_contexts: list) -> dict:
    global model
    if model is None:
        model = SentenceTransformer("all-MiniLM-L6-v2")

    if not retrieved_contexts:
        return {
            "scores": [],
            "average_score": 0.0,
            "verdict": "No Context Retrieved"
        }

    question_embedding = model.encode([question])

    scores = []
    for chunk in retrieved_contexts:
        chunk_embedding = model.encode([chunk])
        score = cosine_similarity(question_embedding, chunk_embedding)[0][0]
        scores.append(round(float(score), 4))

    average_score = round(float(np.mean(scores)), 4)

    if average_score >= 0.6:
        verdict = "Highly Relevant Context"
    elif average_score >= 0.4:
        verdict = "Partially Relevant Context"
    else:
        verdict = "Irrelevant Context Retrieved"

    return {
        "scores": scores,
        "average_score": average_score,
        "verdict": verdict
    }