Garvitj commited on
Commit
81e1762
·
verified ·
1 Parent(s): c188244

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -12
app.py CHANGED
@@ -17,7 +17,6 @@ sentence_model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
17
  # Initialize Groq client
18
  client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
19
 
20
-
21
  # System prompt for Groq
22
  system_prompt = {
23
  "role": "system",
@@ -56,7 +55,6 @@ def extract_text_from_image(filepath: str, languages: List[str]):
56
  lang_str = '+'.join(languages) # Join languages for Tesseract
57
  return pytesseract.image_to_string(image=image, lang=lang_str)
58
 
59
-
60
  # Assign badges based on the grade
61
  def assign_badge(grade):
62
  if grade == 5:
@@ -68,7 +66,6 @@ def assign_badge(grade):
68
  else:
69
  return "Keep Improving Badge 💪"
70
 
71
-
72
  # Categorize feedback into clarity, completeness, and accuracy
73
  def detailed_feedback(similarity_score):
74
  if similarity_score >= 0.9:
@@ -93,8 +90,6 @@ def get_grade(similarity_score):
93
  else:
94
  return 1
95
 
96
-
97
-
98
  # Function to get BERT embeddings
99
  def get_bert_embedding(text):
100
  inputs = tokenizer(text, return_tensors='pt', truncation=True, padding=True)
@@ -116,13 +111,16 @@ def calculate_sentence_similarity(text1, text2):
116
 
117
  # Function to compare logic of student and teacher answers
118
  def compare_answers(student_answer, teacher_answer):
 
119
  bert_similarity = calculate_cosine_similarity(get_bert_embedding(student_answer), get_bert_embedding(teacher_answer))
 
 
120
  sentence_similarity = calculate_sentence_similarity(student_answer, teacher_answer)
121
- # Combine scores with weights to emphasize one method over another if needed
122
- final_similarity = (0.5 * bert_similarity + 0.5 * sentence_similarity)
123
  return final_similarity
124
 
125
- # Function to extract keywords from the model answer (simple keyword extraction)
126
  def extract_keywords(text):
127
  # Split text into words and count them
128
  return set(text.lower().split())
@@ -132,12 +130,16 @@ def check_keywords(student_answer, model_answer):
132
  student_keywords = extract_keywords(student_answer)
133
  teacher_keywords = extract_keywords(model_answer)
134
  keyword_overlap = len(student_keywords.intersection(teacher_keywords))
135
- return keyword_overlap / len(teacher_keywords) # Ratio of matching keywords
136
 
137
  # Function to evaluate student's answer by comparing it to a model answer
138
  def evaluate_answer(image, languages, model_answer):
139
  student_answer = extract_text_from_image(image, languages)
 
 
140
  semantic_similarity = compare_answers(student_answer, model_answer)
 
 
141
  keyword_similarity = check_keywords(student_answer, model_answer)
142
 
143
  # Combine semantic similarity with keyword presence check
@@ -149,9 +151,6 @@ def evaluate_answer(image, languages, model_answer):
149
  prompt = f"The student got grade: {grade} when the student's answer is: {student_answer} and the teacher's answer is: {model_answer}. Justify the grade given to the student."
150
  return grade, combined_similarity * 100, feedback, badge, detailed_feedback_msg, prompt
151
 
152
- # The rest of your existing code...
153
-
154
-
155
  # Main interface function for Gradio
156
  async def gradio_interface(image, languages: List[str], model_answer="The process of photosynthesis helps plants produce glucose using sunlight.", prompt="", history=[]):
157
  grade, similarity_score, feedback, badge, detailed_feedback_msg, prompt = evaluate_answer(image, languages, model_answer)
 
17
  # Initialize Groq client
18
  client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
19
 
 
20
  # System prompt for Groq
21
  system_prompt = {
22
  "role": "system",
 
55
  lang_str = '+'.join(languages) # Join languages for Tesseract
56
  return pytesseract.image_to_string(image=image, lang=lang_str)
57
 
 
58
  # Assign badges based on the grade
59
  def assign_badge(grade):
60
  if grade == 5:
 
66
  else:
67
  return "Keep Improving Badge 💪"
68
 
 
69
  # Categorize feedback into clarity, completeness, and accuracy
70
  def detailed_feedback(similarity_score):
71
  if similarity_score >= 0.9:
 
90
  else:
91
  return 1
92
 
 
 
93
  # Function to get BERT embeddings
94
  def get_bert_embedding(text):
95
  inputs = tokenizer(text, return_tensors='pt', truncation=True, padding=True)
 
111
 
112
  # Function to compare logic of student and teacher answers
113
  def compare_answers(student_answer, teacher_answer):
114
+ # Use primarily BERT similarity, and sentence embeddings as a secondary method
115
  bert_similarity = calculate_cosine_similarity(get_bert_embedding(student_answer), get_bert_embedding(teacher_answer))
116
+
117
+ # Adjust weight: give more emphasis to BERT
118
  sentence_similarity = calculate_sentence_similarity(student_answer, teacher_answer)
119
+
120
+ final_similarity = (0.7 * bert_similarity + 0.3 * sentence_similarity)
121
  return final_similarity
122
 
123
+ # Function to extract keywords from the model answer
124
  def extract_keywords(text):
125
  # Split text into words and count them
126
  return set(text.lower().split())
 
130
  student_keywords = extract_keywords(student_answer)
131
  teacher_keywords = extract_keywords(model_answer)
132
  keyword_overlap = len(student_keywords.intersection(teacher_keywords))
133
+ return keyword_overlap / (len(teacher_keywords) if len(teacher_keywords) > 0 else 1) # Ratio of matching keywords
134
 
135
  # Function to evaluate student's answer by comparing it to a model answer
136
  def evaluate_answer(image, languages, model_answer):
137
  student_answer = extract_text_from_image(image, languages)
138
+
139
+ # Calculate semantic similarity primarily with BERT
140
  semantic_similarity = compare_answers(student_answer, model_answer)
141
+
142
+ # Include keyword similarity
143
  keyword_similarity = check_keywords(student_answer, model_answer)
144
 
145
  # Combine semantic similarity with keyword presence check
 
151
  prompt = f"The student got grade: {grade} when the student's answer is: {student_answer} and the teacher's answer is: {model_answer}. Justify the grade given to the student."
152
  return grade, combined_similarity * 100, feedback, badge, detailed_feedback_msg, prompt
153
 
 
 
 
154
  # Main interface function for Gradio
155
  async def gradio_interface(image, languages: List[str], model_answer="The process of photosynthesis helps plants produce glucose using sunlight.", prompt="", history=[]):
156
  grade, similarity_score, feedback, badge, detailed_feedback_msg, prompt = evaluate_answer(image, languages, model_answer)