This is the frontend repository.
YouTube showcase video: https://www.youtube.com/watch?v=1WJTXIwgV34
Screenshots:
Live hosted website: http://quick-grader-v2.herokuapp.com/ (old version, not up to date with the repository)
The backend repository (containing the Django code): https://github.com/shubhamdhingra38/Quick-Grader-Backend
Backend: Django
+ Django Rest Framework
+ Machine Learning stuff
Frontend: ReactJS
+ Material-UI
Database: sqlite3
I tried to cluster text using traditional natural language processing techniques (such as TF-IDF), then assigning the same score to every point in the cluster as the score of centroid of the cluster.
I looked at Kappa scores for different combination of preprocessing techniques and algorithms used for clustering. Then I tried using word embeddings, followed by Universal Sentence Encoder which transforms the entire sentence into a vector as compared to word embeddings which give vectors only word by word. The performance of Universal Sentence Encoder was found to be the best (other related stuff like BERT gave similar score).
Dataset used: https://www.kaggle.com/c/asap-sas
It has two human scorers, with their Kappa score being ~ 0.9
Using the dataset, on an average a Kappa score of ~ 0.5
can be achieved (averaged over the 10 essays in the dataset). For this, the teacher only needs to grade 20%
of the total responses. A further improvement to this score can be by allowing teachers to observe word clouds and using topic modelling for each cluster, to improve any outlier cluster gradings. Different clustering techniques can also be looked at.
There is a tradeoff here in the number of clusters vs. the human effort required. More are the number of cluster, better is the homogeneity of the data points, but so is an increased effort in grading the centroids of these clusters.
You can find the Kaggle notebook with the research in Backend repository.
You must have python3, pip and npm for this.
Frontend:
git clone https://github.com/shubhamdhingra38/Quick-Grader/
cd Quick-Grader
npm install
npm start
Backend:
git clone https://github.com/shubhamdhingra38/Quick-Grader-Backend/
cd Quick-Grader-Backend
pip install -r requirements.txt
- Download Universal Sentence Encoder (https://tfhub.dev/google/universal-sentence-encoder/4) and extract it in the project root directory in a folder
universal-sentence-encoder-v4
(you can also change the code so it downloads this model for you automatically, checkml/views.py
) python3 manage.py runserver
The frontend runs on a different port as backend but they can communicate, makes sure to change CORS setting in settings.py
if you run on non-default ports (other than 3000 or 8000).