End-to-end handwriting recognition + semantic grading using classical ML, neural OCR, and hybrid ensembles.
Student handwritten answer sheet
--oem 0Non-neural legacy engine. Grayscale → Binarize → Extract text
TF-IDF · Jaccard · Token Density · Structural
class_weight=balanced · L-BFGS · 3-way labels
correct / partially correct / incorrect + confidence
tfidf(t,d) = tf(t,d) · log(N/df(t))
J(A,B) = |A∩B| / |A∪B|
| Split | Accuracy | F1 Macro | Verdict |
|---|---|---|---|
| test_ua | 0.6241 | 0.5732 | Baseline |
| test_uq | 0.5280 | 0.4560 | Q-gap |
| test_ud | 0.5804 | 0.4974 | Domain drop |
trocr-base-handwrittenViT encoder (16×16 patches) + RoBERTa decoder (cross-attention). Replaces Tesseract.
p_hybrid = α·p_SVM + (1-α)·p_SBERT — calibrated α=0.4 on validation set
| Model | UA F1 | UQ F1 | UD F1 |
|---|---|---|---|
| A: SVM + BM25 | 0.5294 | 0.3772 | 0.2989 |
| B: SBERT Cosine | 0.3002 | 0.3617 | 0.3541 |
| C: Hybrid (α=0.4) ★ | 0.2763 | 0.3343 | 0.3411 |
K(x,z) = exp(-γ‖x-z‖²)
BM25(D,Q) = Σ IDF(qᵢ) · f(qᵢ,D)(k₁+1) / (f(qᵢ,D)+k₁(1-b+b·|D|/avgdl))
u = (1/T) Σ hₜ û = u/‖u‖₂
sim(s,r) = ûₛ · ûᵣ = cosine(s,r)
P(y=k|x) = exp(wₖᵀx) / Σⱼ exp(wⱼᵀx)
Tesseract OCR + TF-IDF + Logistic Regression · Training bug fixed · Ablation CSV generated
TrOCR + SVM+BM25 + SBERT + Hybrid Ensemble · Full ablation across UA/UQ/UD
Two-stage hybrid · Concept feedback · SHAP · Bias analysis · Conference report