Update app.py
Browse files
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.
|
|
|
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 |
-
|
|
|
|
|
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=[]):
|