In recent years, the advancement of Large Language Models (LLMs) has established a new and improved approach for converting natural language (NL) questions into Structured Query Language (SQL) statements (text-to-SQL). In this study, I researched the task of text-to-SQL for the IUPHAR/BPS Guide to Pharmacology database (GtoPdb) . The motivation for my research was to improve the GtoPdb as a teaching resource, allowing staff and students to query the database through NL requests, making the GtoPdb more accessible for all users (students and researchers). To conduct my research, I was given a small dataset of NL-SQL pairs suitable for use on the GtoPdb. I investigated several in-context learning methods found in relevant text-to-SQL literature. Through the combination of the best zero-shot methods explored on the training set I constructed an effective zero-shot text-to-SQL pipeline. Using this pipeline, I integrated several few-shot learning strategies to help pick NL-SQL examples, from the training set, when evaluating the held-out set. In addition, I designed an evaluation metric, Partial Execution Accuracy (PEX), to better assess the accuracy of generated SQL queries. I discovered that choosing random few-shot examples, from the training set, had a significant impact on the accuracy of generated SQL queries (increasing from 3.33% to 16.67%). Moreover, I was able to show that choosing relevant few-shot examples, based on their similarity to a given NL question, resulted in a further increase in accuracy (reaching 30%).
The universal adoption of large language models (LLMs) has made it very difficult to distinguish between human text and text generated by artificial intelligence (AI). While existing AI detection tools claim high accuracy, their methodologies are often opaque, raising concerns around their implementation. This study explores the effectiveness of machine learning-based approaches for AI text detection, with a focus on function words as features. We evaluate multiple classification models (extreme gradient boosting, support vector classifier, k-nearest neighbours, and random forest) and assess their ability to classify AI text. Through hyperparameter tuning with Bayesian optimisation, we significantly improve model performance, achieving accuracy levels exceeding 99%. Additionally, we investigate the detection of AI content when embedded within human text by generating our own AI text. To detect this embedded AI text, we adopt several sliding window approaches. Our results show that we can reach up to 97% precision when detecting different word counts of embedded AI text. This research contributes to the field of AI text detection by presenting an evaluation of machine learning classifiers when using function words as features for AI text detection.
The Informatics Large Practical (ILP) was a 20-credit, taken in third year of the University of Edinburgh’s Informatics programme. It was built around an individual software engineering project, centred on a fictional "PizzaDronz" drone delivery service. My task was to design and implement a Java 18 application, using Maven, that planned and executed pizza deliveries within the University’s Central Area. The application retrieved live data — orders, menus, restaurants, and no-fly zones — from a REST API in JSON format, validated orders, respected strict movement constraints for the drone, and generated specific JSON/GeoJSON output files. The work was split into two pieces of coursework: CW1 (25%) involved setting up the project, building some core components, and writing a design and planning essay, while CW2 (75%) was the complete implementation accompanied by a short report. Assessment balanced coding (55–60%, mostly auto-marked) with essay writing (40–45%). Alongside programming, the course developed my skills in requirements gathering, UML design, testing, and modern Java features such as streams and lambdas. My programming implementation received full marks (100%) and can be seen here.
A personal portfolio website built with vanilla HTML, CSS, and JavaScript, hosted on GitHub Pages. Features dynamic header and footer injection, a responsive design with light and dark mode support, entrance animations, and a clean card-based layout.