Spaces:
Running
Running
| 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 | |
| } |