Machine Translation Evaluator and Training Tool

Note: This project was developed as an internal tool during my internship at Johnson Controls. In accordance with my non-disclosure agreement, source code, screenshots, and certain implementation details are omitted from this write-up.
Skills Gained
Natural Language Processing
The two primary goals for this project were to create a better way to evaluate the quality of translations, and to synthesize language data to support low-resource languages. Both of these are language intensive tasks that require not only the understanding of how Neural Networks interpret linguistic data, but also how we can use state of the art NLP approaches to “measure” meaning across languages. Two key skills I learned were how to prepare and clean data for training, and various approaches to language vectorization.
Data Challenges with Neural Networks
I initially began this project with the purpose of improving Machine Translation Engines for low-resource languages. This led to many weeks of reading academic and industry publications to understand the various approaches to this problem, some applied and many still theoretical. This is where I found my focus on high-quality data, and wanted to test the theory that if a model's output is good enough that it could be used to train future iterations of itself.
Deploying AI Tools
This project was entered into Johnson Control’s internal innovation competition, where I led a team of 4 to evaluate the business impact of the tool and demonstrate a prototype. We made it to the top 10% of ~1,000 teams, and we received positive feedback regarding our prototype. I wanted a tool that could actually be used live in a demo, so I learned how to deploy AI models using the Flask framework for Python web development. I also began the process of creating an Azure Function App to deploy the tool for internal use.
Overview
During my internship at Johnson Controls I was part of the Translation Center of Excellence, a small specialised team building custom Machine Translation (MT) engines for use across internal Business Units. I ideated and developed a suite of AI-powered tools designed to address two of the most significant open challenges in the MT field: evaluating translation quality, and building effective models for languages where training data is scarce. The result was a unified internal web application, built with Python and Flask, with initial deployment as an Azure Function App.
The Problems
Machine translation sits at the intersection of linguistics and machine learning, and two problems in particular are well-documented across both academic research and industry practice.
1. Translation Quality Evaluation
Assessing the quality of a machine-translated output is a genuinely hard problem. Traditional metrics like BLEU score have well-known limitations: they rely on surface-level comparisons to reference translations and often fail to capture meaning. For an enterprise deploying MT at scale, having a reliable and automated way to evaluate output quality is critical for maintaining trust in the system and knowing when a model needs improvement.
2. Low-Resource Languages
Building effective MT models requires large volumes of high-quality bilingual training data. For widely-spoken languages like Spanish or French, this data is abundant. But many of the languages relevant to a global company like Johnson Controls are low-resource — meaning parallel corpora are limited, making it difficult to train models that perform well. This is a known and active area of research with no simple solution.
What I Built
I designed and developed a tool with three core components, each targeting one of the above challenges, brought together in a single Flask web application.
Component 1 — Translation Quality Evaluator
To evaluate the semantic quality of a machine-translated sentence, I implemented a multilingual vectorization pipeline. The core idea is that a good translation should preserve the meaning of the source sentence, and with accurate quantification of language meaning can be measured geometrically. By embedding both the source and translated sentences into a shared high-dimensional semantic space using multilingual vectorization models, I could calculate the distance between them as a proxy for translation quality. A shorter distance indicates the sentences are semantically similar, suggesting a higher-quality translation.
To increase confidence in the scores, I used multiple vectorization techniques and cross-referenced their outputs against each other, allowing the tool to flag disagreements and provide a more robust quality signal. I also explored back-translation as a quality signal for languages that lacked strong multilingual embedding support — however, this approach was found to have limited practical use due to high computational cost and open questions around its reliability as an accuracy measure.
Component 2 — Training Data Quality Evaluator
The quality of a custom MT engine is only as good as the data it was trained on. To address this, I built a custom Neural Network using TensorFlow that assessed the quality of bilingual training data on a sentence-by-sentence basis. Rather than evaluating an entire corpus in aggregate, the model could flag individual sentence pairs that were likely to introduce noise into training — giving the team a targeted way to clean datasets before use.
Component 3 — Synthetic Training Data Generator
For low-resource languages where quality training data simply does not exist in sufficient quantity, I developed a solution using a customised GPT model to synthesise new training data. By generating plausible bilingual sentence pairs, the tool could augment an existing small dataset and help bootstrap model training in languages that would otherwise be out of reach.
Challenges
Evaluating translation quality is an unsolved problem. Even state-of-the-art metrics are contested in the research literature, and no single approach is universally reliable. A significant part of this project involved reviewing the academic and industry landscape to understand the trade-offs between different evaluation methods before deciding on a semantic similarity approach. Choosing to corroborate multiple vectorization techniques was a direct response to this uncertainty.
Back-translation, while theoretically appealing as a quality signal for low-resource languages, proved impractical at scale. The computational cost of translating output back into the source language for every sentence in a dataset was prohibitive, and the method's reliability as a proxy for translation quality is questionable — a translated-and-back-translated sentence may read naturally in the source language while still being a poor translation of the original meaning.
Key Takeaways
This project was my first experience building AI tooling in a professional enterprise context, and it shaped how I think about applied ML work. Research-ready ideas do not always translate cleanly into production-viable tools — constraints like computational cost, data availability, and organisational infrastructure all push back on what's theoretically possible. Learning to navigate those constraints, make defensible technical trade-offs, and deliver something genuinely useful within an internship timeline was as valuable as any individual technical skill I developed.
Tech Stack
- Language: Python
- Web Framework: Flask
- ML / DL: TensorFlow, multilingual sentence embedding models, GPT-based generation
- Deployment: Flask web app; Azure Function App