★graduating Dec 2026 · open to SDE, MLE, DS and RS roles

PhD Candidate in Computer Science, UT Arlington

I build machine learning systems for medical imaging and healthcare AI, and the software around them: PyTorch pipelines for large-scale brain MRI, multimodal LLM post-training, agent-based clinical tools and speech systems.

  • Research. First-author ISBI 2026 orals on cortical folding networks (Gyral-Sulcal-Net; Deep-GyralNet, 96.4 F1 and 237 s → 14 s per subject); co-author at NeurIPS, AAAI and MICCAI and of RadQNLI, a 9,838-pair radiology NLI benchmark (IEEE Transactions on Big Data, co-first). 1,000+ citations, h-index 11.
  • LLMs and agents. CPT → SFT → RL post-training of Qwen2.5-VL-32B with Megatron-LM, verl and vLLM, lifting image-based math accuracy by up to 20%; a LangGraph five-agent clinical decision-support system with GraphRAG retrieval, PHI de-identification and ICD-10 coding.
  • Engineering. Full-stack SDE intern at GyriQAI (2025–2026): LLM-powered automation across 5 platforms and 20+ fault-tolerant data pipelines on AWS Lambda and Docker, covered by 160+ pytest tests.
  • Speech. Preference alignment for flow-matching TTS, vLLM vs TensorRT-LLM on a TTS backbone, open-weight TTS/ASR serving on AWS, and local ASR with speaker separation (entries below).

Open to full-time software engineer, machine learning engineer, data scientist and research scientist roles from January 2027; based in Dallas–Fort Worth, open to on-site, hybrid or remote. Papers with figures and summaries are on publications; CV, résumé and email on contact.

personal project Python

Local Speaker Lab

Local speech experiments with reproducible inputs and scoring. One workflow transcribes mixed Chinese–English clips with no, a correct or an unrelated glossary; on 200 frozen ASCEND clips (600 CPU runs) the correct glossary did not recover missed terms, and the small drop in error rate was within noise. The other separates two overlapping speakers, matches them, transcribes with Qwen and writes meeting notes with Ollama.

Python

vLLM vs TensorRT-LLM on a TTS model's LLM backbone

Reproducible H100 benchmark of eager PyTorch, vLLM 0.17.1 and TensorRT-LLM on the autoregressive backbone of a multi-stage TTS model. vLLM reaches about 453 tok/s against 213 for TensorRT-LLM and 21 for eager, but the LLM is only about 21% of end-to-end latency; the flow-matching stage takes about 68%, which these engines do not cover.

personal project Python

Anota

A keyboard-first, self-hosted workbench for translation quality assessment and speech transcription review. Blind golden sets, append-only audit trails, an LLM judge that must be calibrated before use, and content-hashed exports are part of the data model.

personal project Python

Kokoro + Whisper on AWS Fargate

Open-weight TTS and ASR run as a production-style AWS service: Kokoro-82M text-to-speech on ECS Fargate (Graviton), a CPU Whisper transcription endpoint, infrastructure in AWS CDK, keyless OIDC CI/CD, and a GPU LoRA fine-tuning track.

Python

When Likelihood Disagrees with Quality

A diagnosis of Direct Preference Optimization on a continuous-latent flow-matching TTS model. The automatic-metric reward consistently prefers the candidate the model finds less likely, so standard DPO pushes the model the wrong way and quality degrades. Shown with a held-out benchmark, a training-free mechanistic probe and a cross-architecture replication, followed by the alignment routes that do work.

personal project JavaScript

AI Medical Interpreter

Real-time Chinese–English interpretation for medical phone calls, built on Twilio Media Streams and the OpenAI Realtime API, with a live web dashboard and auto-generated SOAP notes. First-token latency is about 400–800 ms end to end.

personal project TypeScript

Qiorazen

A wellness web app built around a 27-question Traditional Chinese Medicine constitution screening, scored with the GB/T 46939-2025 standard. Users ask follow-up questions; AI drafts diet, exercise and lifestyle guidance, and a Wellness Advisor reviews every answer before it is shown. Emergency symptoms block the form and point to 911 / 988.

Live at qiorazen.com.

Python

DensityMap-GyralNet

Extracts the gyral net — the network of gyral crests whose three-way junctions are 3-hinge gyri — from cortical surfaces. Reads VTK surface meshes with sulcal depth (or gradient-density maps, the “DensityMap” variant), isolates and thins gyral regions, grows a skeleton tree per region and repairs missing crest links along shortest paths; run on HCP surfaces.

Python★ 1

Open-LLM De-identification

Can open 7B LLMs strip protected health information from clinical notes, zero-shot? Runs LLaMA 1 and 2, Falcon-7B and Flan-T5 on the 514-note n2c2 2014 test set under explicit, implicit and ask-then-delete prompts. A re-read of the 2023 runs shows the rewrite scores sit at the floor of an untouched note (0.597), because the scripts saved the prompt with the output; asking Flan-T5 for the PHI and deleting its answers gave the one real gain (0.737). A synthetic worked example shows every step without the restricted data.

Jupyter

RadQNLI: radiology NLI for LLMs

Can one generic LLM read radiology reports as well as models fine-tuned on the task? Builds RadQNLI from RadQA’s MIMIC-III reports by pairing each clinician question with every report sentence and keeping the negatives that share words with the question (ROUGE-1 ≥ 0.2): 9,838 pairs, rebuilt exactly by the repository’s scripts. ChatGPT with three examples drops from 0.81 to 0.62 accuracy as the test negatives share more words with the question, but random negatives of the same count drop almost as far (0.83 to 0.64): most of the decline follows the rising share of entailment pairs. In the paper GPT-4 reaches 0.842 accuracy, against 0.847 for BERT-family models fine-tuned on all the training data. RadQA needs PhysioNet credentialing; a synthetic example shows every step.

course project Jupyter

Public Space Tracking

Course 640 final project: detects people in street video with a Faster R-CNN model from the TF2 Detection Zoo, links each centroid to its nearest neighbour five frames later and marks links that enter or leave hand-drawn regions. Outputs are annotated videos and a centroid-dot heatmap; in/out totals are not computed.

course project Jupyter

Heart Disease Prediction

Course 603 term project: five scikit-learn classifiers on the UCI Cleveland heart-disease data (303 patients, one-hot encoded, one 80/20 split). SVM and random forest reach ROC AUC 0.97 on the 61 held-out patients, ahead of logistic regression (0.96), decision tree (0.95) and k-NN (0.89); the scaler is fitted before the split, so test statistics leak into the scaling.

course project Jupyter

Spectator Sport

DATA 641 team project (three people) on news coverage of Russia’s invasion of Ukraine: 2,921 liveuamap posts serve as references, each turned into a dated Google query, giving 6,347 articles from 902 domains (Selenium and newspaper3k). Two LDA comparisons follow: per-outlet topic models of the references each outlet covered, compared by Jaccard distance, and the bigram partners of shared topic words in pairs of articles. Contribution: the proposal, zero-shot NLI tests with XLM-RoBERTa, LDA experiments on reference titles and an articles-per-outlet filter. No bias score or classifier is computed; conclusions are read from the plots.

course project Jupyter★ 2

Policy Changes Prediction

DATA605 (big data systems) project: finds the days national COVID-19 policy levels change in the OxCGRT tracker and lines them up with a 20-day average of CDC case counts. Read off the plot, policy changes trailed case waves by about a month; no predictive model is trained yet.

course project JavaScript★ 47

Movie Recommendation System

Django movie site with user-based (Pearson) and item-based collaborative filtering and a most-viewed fallback, plus search, rating, favourites, an admin back end and review word clouds. Movie data is crawled from Douban; the bundled ratings are 2,200 random ones from 400 seeded accounts.

course project Jupyter

Covid Policy Effectiveness

DATA 602 team project (four people): joins 1,788 US state COVID-19 policy changes from OxCGRT to a per-state profile (census, vaccination, case peaks, hospital beds, party control) and to the CDC case trend on the day of each change, then fits decision trees, kernel ridge and k-means. Contribution: a Selenium scraper for data.census.gov state profiles, the obesity and fire-department data, and the clustering notebook. Bachelor’s-degree share tracks mid-August 2021 vaccination (r = 0.67 across 49 states). The trend targets end on the change day, so the models describe the run-up to each policy rather than its effect, and the clustering notebook fits both of its k-means runs on the demographic table.