DeepEssay
✍️ Assess your IELTS essay and receive a grade using this application and some Machine Learning!
Install / Use
/learn @Logisx/DeepEssayREADME

📋 Table of Contents
- 📋 Table of Contents
- :rocket: Grade your IELTS essay with BERT
- :world_map: Roadmap
- ⚖️ License
- 🔗 Links
:rocket: Grade your IELTS essay with BERT
Welcome to the IELTS Essay Grading Web Application! This web app is designed to provide users with a convenient and efficient way to have their IELTS essays assessed and receive a predicted score using a Machine Learning model.

:star: Features
-
Submit Essays: Users can submit their IELTS essays directly through the web application. The process is user-friendly and straightforward.
-
Machine Learning Essay Grading: The heart of this application is a finely-tuned BERT (Bidirectional Encoder Representations from Transformers) model. This model analyzes and assesses the submitted essays, considering a variety of linguistic and structural aspects.
-
Predicted Score: After processing the essay, the application provides users with a predicted IELTS score. This score is an estimate of how the essay might be rated in the actual IELTS exam, helping users gauge their writing proficiency.
-
Warning functionality: The application includes a warning feature that checks the submitted text. It will display a warning if the essay is too short or if the text does not meet the minimum requirements. This ensures that users are provided with guidance on submitting valid essays.
<img src="https://github.com/Logisx/IELTS-Grading/blob/main/assets/Warnings_demo.gif?raw=true" width="400" alt="Warnings demo">
:bar_chart: Model choice
Detailed training overview with EDA and Feature engineering can be found in the notebook.
Dataset: IELTS Writing Scored Essays Dataset
After analysing different approaches I decided to continue with 3 models:
- BERT fine-tuned for a regression task
- BERT output concatenated with numerical features
- BERT output concatenated with numerical and binary features
The model structures and corresponding Mean Absolute Error (MAE) metrics are shown in the figures below:
<img src="https://github.com/Logisx/IELTS-Grading/blob/main/assets/models_mae.png?raw=true" width="400" alt="Models MAE">
Although more complex models produce better results, after testing, it was decided to use a text model for lower latency.
:toolbox: Tech Stack
- Framework: Flask
- NLP: TensorFlow, BERT, Hugging Face Transformers, Sklearn
- Deployment: Docker, Microsoft Azure
- Frontend: HTML, CSS, JavaScript
- Version Control: Git, GitHub
- Testing: REST client
:file_folder: Project structure
+---app
| | main.py
| | text_validation.py
| | __init__.py
| |
| +---ML
| | | pipeline.py
| | | __init__.py
| | |
| | \---models
| | +---training_bert_num
| | |
| | +---training_bert_num_bin
| | |
| | \---training_bert_text
| |
| +---static
| |
| \---templates
| index.html
| warning.html
|
+---assets
|
| .gitignore
| Dockerfile
| IELTS_Grading_with_BERT.ipynb
| LICENSE
| README.md
\ requirements.txt
:computer: Run Locally
- Clone the project
git clone https://github.com/Logisx/IELTS-Grading.git
- Go to the project directory
cd my-project
- Install dependencies
pip install -r requirements.txt
- Train a model in a notebook and save the weights to:
./app/ML/models/training_bert_text
- Start the server
python app/main.py
:world_map: Roadmap
- Testing features: Develop unit tests and integrations test.
- Data collection: Aggregate more data to improve accuracy.
- Educational insights feature: Along with the score, the application will offer insights and suggestions for improvement, making it a valuable educational tool for those looking to enhance their writing skills.
