Context: A problem that I noticed in my time learning and teaching A-Level Maths is that maintaining an up to date database of past paper questions for each topic is incredibly difficult - more than 100 A-Level Math papers are released each year across exam boards, making it a very time consuming task.
Idea: Build a classification model using a trained BERT (Bidirectional Encoder Representations from Transformers) LLM that is able to read a A-Level question paper from a pdf and classify each question as belonging to one of 14 topics. This would allow us to generate a database of questions bigger than any other available resource, in just minutes.
A robust question classifier could be used for so much more than gathering questions by topic. For example, the tool could be extended to automatically generate tests on a given set of topics, which would save teachers a lot of time.Â
Challenges:
Building a function which is able to identify each question in the paper and disregard any other data.
Gathering a large database of questions to train the BERT model with.
Training the BERT model to recognise mathematical statements (BERT is not great at math, generally speaking).
This is a fun project that I'm still working on, but you can view an early version of the classifier here.
When I first started learning about machine learning through the Mathematics of ML course at Imperial, I found the concept of a neural network fascinating. However, using specialised packages such as PyTorch or Tensorflow made the construction of the network seem somewhat magical, and I felt like I didn't really understand what I was doing. In an effort to correct this I decided it would be a good idea (for my understanding, and also my programming skills) to build a network using only NumPy.
The project served its purpose; I learned a lot about NumPy and how we can use vectorised approaches to write more efficient code. It also gave me a much better understanding of neural network architecture by the end, and in particular the backpropagation (in my opinion the trickiest part of the architecture to understand) stage.
You can view my implementation here.