Garvitj commited on
Commit
75bf678
·
verified ·
1 Parent(s): 7450487

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -2
app.py CHANGED
@@ -116,21 +116,28 @@ def detect_grammar_errors(text):
116
 
117
  def penalize_for_grammar(student_answer):
118
  grammar_errors = detect_grammar_errors(student_answer)
 
119
 
120
  # Apply a penalty based on the number of grammar errors (max 50% penalty)
121
  penalty = max(0.3, 1 - 0.1 * grammar_errors)
 
122
  return penalty
123
 
124
  def compare_answers(student_answer, teacher_answer):
125
  bert_similarity = calculate_cosine_similarity(get_bert_embedding(student_answer), get_bert_embedding(teacher_answer))
 
 
126
  sentence_similarity = calculate_sentence_similarity(student_answer, teacher_answer)
 
127
 
128
  # Use a higher weight for BERT similarity
129
- semantic_similarity = (0.50 * bert_similarity + 0.50 * sentence_similarity)
 
130
 
131
  # Apply grammar penalty
132
  grammar_penalty = penalize_for_grammar(student_answer)
133
  final_similarity = semantic_similarity * grammar_penalty
 
134
 
135
  return final_similarity
136
 
@@ -141,10 +148,13 @@ def check_keywords(student_answer, model_answer):
141
  student_keywords = extract_keywords(student_answer)
142
  teacher_keywords = extract_keywords(model_answer)
143
  keyword_overlap = len(student_keywords.intersection(teacher_keywords))
144
- return keyword_overlap / (len(teacher_keywords) if len(teacher_keywords) > 0 else 1)
 
 
145
 
146
  def evaluate_answer(image, languages, model_answer):
147
  student_answer = extract_text_from_image(image, languages)
 
148
 
149
  # Calculate semantic similarity
150
  semantic_similarity = compare_answers(student_answer, model_answer)
@@ -154,11 +164,15 @@ def evaluate_answer(image, languages, model_answer):
154
 
155
  # Adjust the weight of keyword similarity
156
  combined_similarity = (0.9 * semantic_similarity + 0.1 * keyword_similarity)
 
 
157
  grade = get_grade(combined_similarity)
158
  feedback = f"Student's answer: {student_answer}\nTeacher's answer: {model_answer}"
159
  badge = assign_badge(grade)
160
  detailed_feedback_msg = detailed_feedback(combined_similarity)
 
161
  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."
 
162
  return grade, combined_similarity * 100, feedback, badge, detailed_feedback_msg, prompt
163
 
164
  async def gradio_interface(image, languages: List[str], model_answer="The process of photosynthesis helps plants produce glucose using sunlight.", prompt="", history=[]):
 
116
 
117
  def penalize_for_grammar(student_answer):
118
  grammar_errors = detect_grammar_errors(student_answer)
119
+ print(f"Grammar errors detected: {grammar_errors}")
120
 
121
  # Apply a penalty based on the number of grammar errors (max 50% penalty)
122
  penalty = max(0.3, 1 - 0.1 * grammar_errors)
123
+ print(f"Grammar penalty applied: {penalty}")
124
  return penalty
125
 
126
  def compare_answers(student_answer, teacher_answer):
127
  bert_similarity = calculate_cosine_similarity(get_bert_embedding(student_answer), get_bert_embedding(teacher_answer))
128
+ print(f"BERT similarity: {bert_similarity}")
129
+
130
  sentence_similarity = calculate_sentence_similarity(student_answer, teacher_answer)
131
+ print(f"Sentence similarity: {sentence_similarity}")
132
 
133
  # Use a higher weight for BERT similarity
134
+ semantic_similarity = (0.80 * bert_similarity + 0.20 * sentence_similarity)
135
+ print(f"Semantic similarity: {semantic_similarity}")
136
 
137
  # Apply grammar penalty
138
  grammar_penalty = penalize_for_grammar(student_answer)
139
  final_similarity = semantic_similarity * grammar_penalty
140
+ print(f"Final similarity (after grammar penalty): {final_similarity}")
141
 
142
  return final_similarity
143
 
 
148
  student_keywords = extract_keywords(student_answer)
149
  teacher_keywords = extract_keywords(model_answer)
150
  keyword_overlap = len(student_keywords.intersection(teacher_keywords))
151
+ keyword_similarity = keyword_overlap / (len(teacher_keywords) if len(teacher_keywords) > 0 else 1)
152
+ print(f"Keyword similarity: {keyword_similarity}")
153
+ return keyword_similarity
154
 
155
  def evaluate_answer(image, languages, model_answer):
156
  student_answer = extract_text_from_image(image, languages)
157
+ print(f"Extracted student answer: {student_answer}")
158
 
159
  # Calculate semantic similarity
160
  semantic_similarity = compare_answers(student_answer, model_answer)
 
164
 
165
  # Adjust the weight of keyword similarity
166
  combined_similarity = (0.9 * semantic_similarity + 0.1 * keyword_similarity)
167
+ print(f"Combined similarity score: {combined_similarity}")
168
+
169
  grade = get_grade(combined_similarity)
170
  feedback = f"Student's answer: {student_answer}\nTeacher's answer: {model_answer}"
171
  badge = assign_badge(grade)
172
  detailed_feedback_msg = detailed_feedback(combined_similarity)
173
+
174
  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."
175
+
176
  return grade, combined_similarity * 100, feedback, badge, detailed_feedback_msg, prompt
177
 
178
  async def gradio_interface(image, languages: List[str], model_answer="The process of photosynthesis helps plants produce glucose using sunlight.", prompt="", history=[]):