nVoq Experience
-
Senior Software Engineer & Technical Lead - Developer Tooling (2023-2025)
I developed a Python package to consolidate a variety of nVoq's language and acoustic modeling tools. The package exposed a Python API over high-performance C++ code (using pybind11) for compiling text corpora, pronunciation lexicons, and text-processing grammars into finite-state transducer models. These tools enabled nVoq's data scientists and linguists to more efficiently make improvements to our speech recognition models without requiring low-level C++ and Bash expertise on their part.
Alongside this work, I architected the migration of our model build systems from on-prem, persistent servers to containerized infrastructure in AWS using Docker, GitLab CI/CD, and Jenkins. This migration improved build reliability by ~4x and decreased model compilation times by ~80%.
During this period, I maintained the company's production Thrax grammars used for low-latency text normalization and speech output formatting. I built a lexer and syntax highlighting VS Code extension for the grammar DSL, and enhanced its compiler's import system to allow for better organization and code reuse in the grammar files.
As Technical Lead, I owned the technical direction of the team's modeling infrastructure, mentored and trained four engineers, conducted code reviews, and coordinated work across the linguistics, server, and product teams. By this point I had become nVoq's subject-matter expert on hybrid speech recognition systems, and I wrote extensive API documentation and interactive Jupyter notebooks to improve developer productivity and streamline onboarding.
-
Senior Software Engineer - High-Performance Servers (2021-2023)
I designed, built, and maintained a multi-threaded WebSocket server written in Java. The server was built over a C++ core using the JNI, exposing a real-time GStreamer audio engine and memory-intensive model runtime written with Kaldi and OpenFst. This server achieved a ~20x increase in concurrent request capacity compared to the legacy system, while maintaining an identical memory footprint.
After the initial buildout, I debugged complex thread contention, memory leaks, and performance bottlenecks using valgrind, gdb, and JProfiler. I helped design several supporting servicesâincluding HTTP routing, database integration, and an audio proxy that enabled mobile dictationâand worked with DevOps to ensure smooth deployments, maximize uptime, and optimize load balancing.
-
Software Engineer - Systems and Automation (2018-2020)
For my first full-time role at nVoq, I built and deployed Jenkins projects for automating acoustic and language model builds and accuracy tests, allowing for rapid experimentation with Kaldi neural network architectures. I also experimented with a variety of new datasets for improving accuracy of accented speakers and users in noisy environments. I was able to reduce errors in these circumstances by ~40%.
During this time, I also developed NLP prototypes with Kaldi and Python's NLTK for corpus cleanup, text normalization, and parts-of-speech rescoring to improve recognition accuracy further. I also helped maintain the legacy speech recognition server, applying bug fixes and occasional new features, and managing deployments with Chef.
-
Contractor - Machine Learning & Computer Vision (2016-2017)
In my first role at nVoq, I implemented a neural network to classify spectrograms of human speech into sequences of phonemes, then augmented this baseline architecture as a ladder autoencoder to allow for semi-supervised training. The architecture was based on a recently published research paper. I also compared various loss functions to maximize accuracy of the trained model. The project was used as my Master's project requirement as well.
Prior to this, I prototyped a desktop automation program using OpenCV to recognize text, textboxes, radio buttons, and other standard desktop application components.