Repository navigation
Expand file tree
/
Copy pathuntitled21.py
More file actions
88 lines (68 loc) · 2.79 KB
/
Copy pathuntitled21.py
File metadata and controls
88 lines (68 loc) · 2.79 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- coding: utf-8 -*-
"""Untitled21.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1nSmtke3dlVEzgG4zNR7dl3sBH55ziv4h
"""
# Retrieval and evaluation experiment
from sentence_transformers import SentenceTransformer
import chromadb
from transformers import pipeline
embedder = SentenceTransformer("all-MiniLM-L6-v2")
chroma_client = chromadb.Client()
collection = chroma_client.get_or_create_collection(name="rag_collection")
# إضافة مثال سؤال/إجابة
question = "ما هو الذكاء الاصطناعي؟"
answer = "الذكاء الاصطناعي هو مجال في علوم الحاسوب يهدف إلى تطوير أنظمة قادرة على محاكاة الذكاء البشري."
embedding = embedder.encode(question).tolist()
collection.add(
embeddings=[embedding],
documents=[answer],
metadatas=[{"question": question, "answer": answer}],
ids=["qa1"]
)
chatbot = pipeline("text-generation", model="microsoft/DialoGPT-medium")
user_query = input("أنت: ")
query_embedding = embedder.encode(user_query).tolist()
results = collection.query(
query_embeddings=[query_embedding],
n_results=1
)
retrieved_answer = results["documents"][0][0]
prompt = f"سؤال المستخدم: {user_query}\nإجابة مقترحة: {retrieved_answer}\nأجب بدقة وبأسلوب واضح."
response = chatbot(prompt, max_new_tokens=128)[0]['generated_text']
print("المساعد:", response)
def precision_at_k(retrieved, relevant, k):
retrieved_k = retrieved[:k]
relevant_count = sum([1 for doc in retrieved_k if doc in relevant])
return relevant_count / k
def recall_at_k(retrieved, relevant, k):
retrieved_k = retrieved[:k]
relevant_count = sum([1 for doc in retrieved_k if doc in relevant])
return relevant_count / len(relevant) if relevant else 0
retrieved_docs = ["doc1", "doc2", "doc3"]
relevant_docs = ["doc2", "doc3"]
precision = precision_at_k(retrieved_docs, relevant_docs, k=3)
recall = recall_at_k(retrieved_docs, relevant_docs, k=3)
print("Precision@3:", precision)
print("Recall@3:", recall)
import os
from getpass import getpass
os.environ["OPENAI_API_KEY"] = os.environ.get("OPENAI_API_KEY") or getpass("OPENAI_API_KEY: ")
from deepeval.metrics import ContextualPrecisionMetric, ContextualRecallMetric, ContextualRelevancyMetric, AnswerRelevancyMetric, FaithfulnessMetric
from deepeval.test_case import LLMTestCase
from deepeval import assert_test
test_case = LLMTestCase(
input=user_query,
actual_output=response,
retrieval_context=[retrieved_answer],
expected_output=answer
)
metrics = [
ContextualPrecisionMetric(),
ContextualRecallMetric(),
ContextualRelevancyMetric(),
AnswerRelevancyMetric(),
FaithfulnessMetric()
]
assert_test(test_case, metrics)