Theoretical Physicist | Associate Director Data Science
AI-powered introduction generator for scientific papers

Live demonstration of the Scientific Literature RAG system generating introductions with semantic search and citation extraction.
A production-ready RAG system that automatically generates well-structured, literature-informed introductions for scientific papers. The system indexes research papers and leverages LLMs to synthesize relevant literature into comprehensive introductions with properly formatted citations.
Key Features:
Performance:
Technologies: Python 3.11+, GPU, LLM, ChromaDB, SPECTER2, RAG, Dash
Status: Production Ready | Apache 2.0 License
→ View on GitHub
Real-time multilingual processing pipeline

Detailed architecture of the Transformer model showing encoder-decoder structure with multi-head attention mechanisms.
A comprehensive end-to-end system integrating speech recognition, sentiment analysis, and neural machine translation. Built with from-scratch Transformer implementation demonstrating deep understanding of attention mechanisms and encoder-decoder architectures.
Key Features:
Performance Metrics:
Architecture Highlights:
Technologies: Python 3.11+, Transformer, Bidirection LSTM, TensorFlow, Keras, Vosk, Dash, Optuna
Status: Research/Educational | Apache 2.0 License
→ View on GitHub
→ View Transformer Model on HuggingFace
→ Try Interactive Demo on HuggingFace Spaces
→ View on Kaggle
GPU-accelerated molecular dynamics simulation

Performance comparison across CPU and GPU implementations showing up to 27× speedup on Apple Silicon.

Simulation of 1000 active Brownian particles under 3D cylindrical confinement, demonstrating collective motion and particle-particle interactions with Lennard-Jones repulsion.
A high-performance C++ simulation framework for modeling active Brownian particles (ABPs) under cylindrical confinement in 3D space. Implements Euler-Maruyama algorithm for Langevin dynamics with dual CPU/GPU implementations.
Key Features:
Performance Benchmarks (Apple M2, 1000 timesteps):
| Particles | CPU (1 thread) | CPU (OpenMP 6) | GPU (Metal) | GPU vs 1 CPU | GPU vs OpenMP |
|---|---|---|---|---|---|
| 100 | 0.026s | 0.103s | 0.096s | 0.3× | 0.9× |
| 200 | 0.075s | 0.125s | 0.115s | 0.7× | 1.1× |
| 500 | 0.401s | 0.269s | 0.225s | 1.8× | 1.2× |
| 1,000 | 1.514s | 0.747s | 0.445s | 3.4× | 1.7× |
| 2,000 | 5.638s | 2.389s | 0.601s | 9.4× | 4.0× |
| 5,000 | 34.393s | 13.903s | 1.262s | 27.3× | 11.0× |
Physical Model:
Technologies: C++17, OpenMP, Metal GPU
Status: Research-Grade | Apache 2.0 License
→ View on GitHub
Production ML pipeline achieving Kaggle top 5%

Interactive dashboard for real-time personality classification with model explainability and performance metrics.
A production-ready machine learning pipeline for personality classification using ensemble learning, achieving top 5% (200/4,329) in the Kaggle Personality Classification Competition. Features modular architecture, automated hyperparameter optimization, and interactive visualization.
Key Features:
Ensemble Architecture:
| Stack | Focus | Algorithms | Special Features |
|---|---|---|---|
| A | Traditional ML (Narrow) | RF, LR, XGBoost, LightGBM, CatBoost | Stable baseline |
| B | Traditional ML (Wide) | Same as A | Extended search space |
| C | Gradient Boosting | XGBoost, CatBoost | Tree specialists |
| D | Sklearn Ensemble | Extra Trees, Hist GB, SVM, Gaussian NB | Diverse mix |
| E | Neural Networks | MLPClassifier, Deep architectures | Non-linear patterns |
| F | Noise-Robust | Same as A + label noise | Improved generalization |
Competition Results:
Technologies: Python 3.11+, scikit-learn, XGBoost, LightGBM, CatBoost, Optuna, Dash, Plotly
Status: Production Ready | Apache 2.0 License
→ View on GitHub
Unsupervised anomaly detection for industrial machine audio

Upload a .wav recording to the Gradio app and get a verdict (normal/anomalous), the pooled Mahalanobis anomaly score, and its percentile against the calibration distribution of normal clips.

Per-machine-ID mean AUC-ROC for all detector families across fan, pump, and valve, averaged over 3 seeds with ±1 std error bars. The embedding model dominates on valve and fan; the Dense AE leads on pump.

ROC curves on valve comparing oracle per-ID scoring against ArcFace pooled Mahalanobis scoring. The curves overlap: the deployment constraint of knowing the machine ID is removed without meaningful loss in detection performance.
Unsupervised anomaly detection on industrial machine audio, benchmarked on the MIMII pump dataset and DCASE 2020 Task 2 (fan, pump, valve at 0 dB SNR). Three detector families are compared in increasing order of sophistication: a Dense Autoencoder, a Transformer-VAE scored by ELBO and KL divergence, and an ArcFace-trained embedding model scored by Mahalanobis distance to the stationary distribution of normal embeddings. The deployed valve model requires no known machine ID at inference and reaches 0.947 AUC.
Key Features:
iaad score, iaad ensemble, iaad evaluate commands, plus AnomalyDetector / EnsembleDetector classesResults (per-machine-ID mean AUC-ROC, chance = 0.500):
| Detector | Fan | Pump | Valve |
|---|---|---|---|
| Dense AE | 0.501 | 0.671 | 0.632 |
| Transformer-VAE (recon) | 0.501 | 0.667 | 0.591 |
| Transformer-VAE (KL) | 0.491 | 0.631 | 0.439 |
| EMB per-ID (oracle) | 0.714 | 0.645 | 0.966 |
| EMB pooled Mahalanobis (deployed) | 0.730 | 0.738 | 0.947 |
Datasets:
Technologies: Python 3.11+, TensorFlow, Keras, Transformer, ArcFace, Gradio, HuggingFace Hub
Status: Production Ready | Apache 2.0 License
→ View on GitHub
→ Read the Blog Post
→ View Model on HuggingFace
→ View on Kaggle: MIMII Pump Baseline
→ View on Kaggle: DCASE 2020 Benchmark
Two from-scratch transformers that turn a raw meeting transcript into notes

The Dash app: Model 2 restores punctuation and casing in a voice note, then Model 1 turns a raw speech-to-text transcript into decisions, action items (with owners) and key points, with the importance score of every sentence.
From a raw transcript to meeting notes: punctuation restoration (Model 2), sentence splitting, sentence scoring (Model 1) and fixed selection rules.
Two small transformer models built entirely from scratch with Keras 3 on the JAX backend: own WordPiece tokenizer, own architectures, no pretrained weights. Model 2 (7.3M parameters) restores punctuation and casing in lowercase speech-to-text output. Model 1 (20.9M parameters) reads a whole meeting and picks the sentences that matter, sorting them into decisions, action items with owner and deadline, and key points. Model 1 is trained on a gold-labelled meeting corpus I built for this project, with real AMI meetings as the headline test set. Both models are published on Hugging Face.
Model 1 is hierarchical: a sentence encoder (pretrained by masked-language modelling) reads each sentence on its own, then a meeting encoder lets the sentences attend to each other before the per-sentence heads.
Model 2 is a token-classification transformer: a 4-block pre-LayerNorm encoder reads a window of lowercase words and predicts one casing label and one punctuation label per word, without ever adding, removing or correcting words.
Key Features:
modeling.py, so the models run with only keras, jax and tokenizersResults (Model 1, test set, importance F1, mean ± std over 3 seeds):
| System | Params | Pretrained | AMI (real meetings) | Synthetic meetings |
|---|---|---|---|---|
| Lead-k (first sentences) | – | – | 0.319 | 0.337 |
| Qwen3-0.6B (prompted) | 600M | yes | 0.318 | 0.403 |
| DistilBERT (fine-tuned) | 66M | yes | 0.580 | 0.870 |
| RoBERTa-Large (fine-tuned) | 355M | yes | 0.634 | 0.903 |
| Ours + distillation (E4) | 20.9M | no | 0.567 ± 0.006 | 0.884 ± 0.006 |
| Ours, gold labels only (released) | 20.9M | no | 0.578 ± 0.006 | 0.878 ± 0.013 |
Key Findings:
Technologies: Python 3.11+, Keras 3, JAX, Transformer (from scratch), WordPiece tokenizer, Dash, Docker, Hugging Face Hub
Status: Production Ready | Code: MIT License · Models: CC BY-NC-SA 4.0
→ View on GitHub
→ View Meeting Notes Model on HuggingFace
→ View Punctuation & Casing Model on HuggingFace
→ View Dataset on HuggingFace
→ View Dataset on Kaggle
All public projects available on GitHub