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=[]):
|