Software Engineer | Generative AI and NLP | Research Author | Problem Solver
“The human body is like an ocean — it should remain calm within, regardless of the turbulence in the outside world.”
I am Ginni Garg, a passionate software professional with 4+ years of experience in the IT industry. I graduated from NIT Kurukshetra, securing a position among the Top 5 students of my department. Over the years, I’ve had the opportunity to work with reputed organizations including Arcesium, Otipy, SirionLabs, and C-DOT, where I contributed to building scalable backend systems and solving complex engineering challenges. With strong proficiency in software backend development, my current interests are focused on Generative AI, NLP, and cutting-edge applications of Large Language Models (LLMs). I enjoy bridging the gap between traditional backend engineering and modern AI-driven systems to deliver impactful solutions.
| Grade | Institute | Duration | CGPA/% |
|---|---|---|---|
| B.Tech CSE | NIT Kurukshetra | 2016-2020 | 9.65 |
| 12th | D.A.V. Public School | 2014-2015 | 91 |
| 10th | D.A.V. Public School | 2012-2013 | 10 |
Fine-tuned the MPNet Base v2 transformer model for a high-accuracy Name Similarity task to solve real-world name matching challenges such as token shuffling, spacing inconsistencies, honorific prefixes, and partial name variations. Expanded the dataset from 60K to 80K+ records through targeted augmentation applied to matched-name pairs (label = 1), including space removal (e.g., “RAHUL SHARMA” → “RAHULSHARMA”), token shuffling ("RAHUL KUMAR SHARMA" → "SHARMA RAHUL KUMAR"), middle-name dropping ("RAHUL KUMAR SHARMA" → "RAHUL SHARMA"), and random concatenation strategies ("RAHUL KUMAR SHARMA" → "RAHULKUMAR SHARMA") to improve model robustness. Implemented intelligent preprocessing by normalizing case, trimming whitespace, and removing prefixes such as mr, mrs, late, sh, lt, ensuring consistency across training and inference pipelines. Designed a dual-embedding strategy where two vectors were generated per name—(1) preprocessed original name and (2) preprocessed concatenated name—to handle structural name variations. Experimented with multiple similarity aggregation strategies and finalized a hybrid scoring formula:
Similarity Score = max(V1, V2, mean(V1, V2)), which outperformed individual and mean-based approaches. Optimized contrastive loss by auto-computing the margin (0.62) from training/validation distributions instead of using a fixed heuristic margin (0.5), improving class separation. Achieved outstanding performance with AUC: 0.9991, Accuracy: 99%, and optimal threshold 0.8383, demonstrating production-grade reliability for large-scale identity matching systems such as TSP-based embedding pipelines.
Tech: mpnet-base-v2, Fine-Tune, Augmentation, Preprocessing, AUC-ROC, Recall/Precision, Hyper-parameter Tuning (Margin) for Contrastive Loss, Google Collab (T4)
Developed a Semantic Search Engine to get best n=5 matching issues for user search from Github huggingface DataSets repo using FAISS index, further In-context learning is used to have question answering system over n matching issues for particular user search using T-5 model. App is deployed over Hugging Face Spaces. Further preprocessed data of github hugging_face dataset repo is pushed to huggingface hub.
Tech: Gradio, DataSets, Cosine Similarity, Cls_Pool (model: sentence-transformers/multi-qa-mpnet-base-dot-v1), Hugging Face Hub, T-5 for QA, FAISS.
Designed a Fast Tokenizer over WikiText dataset of batch size 1000 as Generator, further various tokenization steps such as Normalization (NFD, Lowercase, StripAccents), Pre-tokenization (Whitespace and Punctuation), Model and Trainer (BPE, WordPiece, Unigram), Post Processing ([CLS], [SEP]), Wrapped Tokenzier using PreTrainedTokenizerFast. End to End build Wrapped Tokenizer is further pushed to hub over huggingface models.
Tech: Transformers, WordPiece, WikiText Dataset, Python, HuggingFace hub.
Developed a English to French Translator by fine-tuning existing model MarianMT by using KDE4 en-to-fr dataset. Fine Tuning using Trainer API, invovles 3 epochs, sacrebleu evaluation metric, split into train and validation in 9:1 with seed 20. Sacrebleu score improved from 38 to 52 approx 14% improvement due to fine-tuning. Further app deployed over huggingface spaces.
Tech: Gradio, Transformers, KDE4 dataset, Sacrebleu Metric, Model : Helsinki-NLP/opus-mt-en-fr, data_collator (Dynamic Padding)
Developed end-to-end LLM application to Detoxify Dialogue Summarization using RLHF, which involves using LoRA PEFT Flan-T5 as base model, further Value Head for PPO added additional parameters 768 + 1 (Bias). Facebook Roberta hate speech detection model is used as Reward Model. KL Divergence is used between ref_model and ppo_model to have additional reward. Comparative study of detoxification between ref_model to ppo_model is done by measuring reward score respectively.
Tech: Dataset : knkarthick/dialogsum, LoRA PEFT Flan-T5, Facebook Roberta Hate Speech as Reward Model, KL Divergence, PPO, Amazon SageMaker AI
Developed end to end AI powered Semantic Search engine using RAG for Fashion Store. RAG system involves FAQ’s, and Product information (Technical or Creative accordingly choose Temperature and top_p model params), Cls_pool (model: sentence-transformers/multi-qa-mpnet-base-dot-v1) as Semantic Embedding in Weaviate Db (Hybrid Search using weight, Semantic Search and Keyword Search), Flan-T5 for QA after semantic search , Phoenix and Open-Telemetry for observation and evaluation of project.
Tech: Gradio, Cls_pool (model: sentence-transformers/multi-qa-mpnet-base-dot-v1) as Semantic Embedding in Weaviate Db, Flan-T5, Phoenix and Open-Telemetry
Architected a Naive Bayes classifier from scratch for spam email classification using Bayesian probability theory. Applied feature independence assumptions while implementing conditional probability distributions for word occurrences. Integrated Laplace smoothing to ensure all vocabulary elements appear in both spam and non-spam training sets, eliminating P(word|class)=0 scenarios. Enhanced numerical stability through logarithmic transformation of probability scores, preventing misclassification due to floating-point underflow. Delivered a robust classification system achieving 98% accuracy on testing datasets
Tech: Python, Bayesian Probability, Increasing Function (Log)
Developed FakeFinder, an end-to-end deep learning system to distinguish AI-generated images from real images using flexible convolutional neural networks (CNNs) and automated hyperparameter optimization.
nn.Sequential, enabling flexible adjustment of network depth, filter sizes,
kernel dimensions, and regularization parameters without hard-coding model structures.
| number | acc | batch | dropout_rate | fc_size | k_s_l0 | k_s_l1 | k_s_l2 | lr | n_f_l0 | n_f_l1 | n_f_l2 | n_layers | resolution |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 15 | 0.732 | 16 | 0.170192 | 384 | 5 | 3 | NaN | 0.000732 | 32 | 24 | NaN | 2 | 16 |
| 9 | 0.715 | 8 | 0.200294 | 384 | 5 | 3 | NaN | 0.001072 | 24 | 16 | NaN | 2 | 16 |
| 6 | 0.715 | 16 | 0.134501 | 384 | 3 | 3 | 3 | 0.000135 | 64 | 56 | 16 | 3 | 16 |
| 16 | 0.692 | 16 | 0.151364 | 256 | 5 | 3 | NaN | 0.000109 | 32 | 40 | NaN | 2 | 16 |
| 1 | 0.690 | 16 | 0.395933 | 128 | 3 | 5 | NaN | 0.001220 | 56 | 16 | NaN | 2 | 32 |
Developed a deep learning–based image classification system to distinguish AI-generated images from real images using a subset of the AI-Generated Images vs Real Images dataset. Implemented an end-to-end training and evaluation pipeline using PyTorch, including dataset loading, image preprocessing, data augmentation, and efficient batching through DataLoaders.
Fine-tuned a pre-trained MobileNetV3-Large model by freezing its feature extraction layers and replacing the final classifier head to adapt the network for binary classification. Applied transfer learning techniques to significantly improve model performance with minimal training.
Achieved 82% test accuracy with just one training epoch using MobileNetV3-Large, outperforming a CNN model trained from scratch, which achieved ~72% accuracy after three epochs, demonstrating the effectiveness of transfer learning for limited-data scenarios.
Tech: PyTorch, MobileNetV3-Large, Transfer Learning, Image Classification, Data Augmentation, CNNs
Built an image classification model to distinguish Normal, Bacterial Pneumonia, and Viral Pneumonia using the Chest X-Ray dataset. Implemented a clean training pipeline with PyTorch Lightning, including a LightningDataModule for preprocessing and a LightningModule encapsulating ResNet18 (fine-tuned on the classifier head and last two conv layers), loss, Accuracy metrics, and Adam optimizer. Configured a Lightning Trainer with EarlyStopping (callback), ModelCheckpoint, and LR scheduling (ReduceLROnPlateau) to automate training. Achieved ~90% test accuracy with limited epochs.
Tech: PyTorch Lightning, ResNet18 (partial fine-tuning), AdamW, ReduceLROnPlateau, EarlyStopping
Developed an application enabling registration of new users using facial images and subsequent identification/authentication based on stored faces. Implemented embedding generation using ArcFace, producing 512-dimensional vectors for each registered face. Used Weaviate DB with HNSW (Hierarchical Navigable Small World) graphs to efficiently index and search embeddings using cosine similarity. Authentication logic: if cosine similarity > 60%, the input face is considered a match. Built a user-friendly Gradio interface for image input, registration, and real-time identification. Applied transfer learning for feature extraction, ensuring high accuracy with minimal data. Optimized workflow for fast search and retrieval of embeddings, supporting scalable face-based authentication.
Tech: Python, ArcFace, Gradio, Weaviate, Transfer Learning
Developed a deep learning–based visual search system that retrieves visually similar fashion items. Trained a MobileNetV2 classifier on the clothing-dataset-small (7 apparel classes) using Cross-Entropy Loss, then leveraged the trained backbone in a Siamese Network for metric learning with TripletMarginLoss. Images were resized to 64×64, producing 276-dimensional embeddings optimized with AdamW. The system performs cosine similarity search to return the top-5 nearest items, enabling accurate and efficient visual product discovery. The approach fully utilizes class labels for initial supervised training before embedding-based similarity learning.
Tech: Python, MobileNetV2, Siamese Network, CrossEntropyLoss, TripletMargin Loss, AdamW, Cosine Similarity, DataSet : clothing-dataset-small
Optimized a ResNet-18 image classification model for CPU-only edge devices used in smart city street-cleaning vehicles. Applied pruning, INT8 dynamic quantization, and quantization-aware training (QAT) to meet strict latency and storage constraints. Reduced model size from ~512 MB to <150 MB and CPU inference latency from ~900 ms to <50 ms per image. Maintained >95% classification accuracy across clean, litter, and recycle categories. Enabled real-time, GPU-free deployment on low-resource embedded hardware. Tech: PyTorch, ResNet, Model Pruning, INT8 Quantization, QAT, Edge AI
Main objective of this project is to take satellite/Hyperspectral images of any area and then perform
classification into different classes like – crop classification using Hybrid MLP-SVM Classifier.
Tech: Python, MLP, SVM, Hyperspectral Images, Feature Extraction
Main objective of this project is to take MRI Images of brain, which are further segmented and classifier using ensemble classifier. Various technologies are used like Otsu’s method is used for segmentation, feature extraction is done using PCA+SWT+GLCM, then segmentation is done using KNN+DT+RF ensemble classifier.
Tech: PCA, SWT, GLCM, KNN, Decision Tree, Random Forest, Machine Learning
Research project based on Real Time plant leaf disease identification and classification using various techniques like ANN, K-means segmentation.
Tech: Machine Learning, Image Processing, K-means, Neural Network
Email: gargginni01@gmail.com
1. Frequency based Vectors: TF-IDF, BM25 etc, for each sentence one Frequency vector, we donot call it embedding vector as no semantic meaning.
Size of Vector is V : Vocabulary Size and Sparse, we cannot compress to small dimension D becoz it donot contain any semantic information.
Remove Stopword/lemmitization because they are noise as embedding depend upon frequency of token
2. Static Embeddings (Semantic but not contextual): Word2Vec, Glove etc, for each token one embedding vector. (Single One Co-occurance Matrix for entire training corpus)
As each token represents static embedding, donot have context from other tokens of sentence, so to get Sentence Static Embedding we apply Pooling (Mean/Max/Sum) etc over all computed token embeddings of sentence.
Drawback: Its same for every token irrespective of words-context how and where it is used.
Size of Co-occurance Matrix is V*V : Size of Vocabulary, these sparse vectors are convert for each token from V size to D, Dense Vectors which are used as inputs to MLP.
3. Contextual Embeddings (Semantic and Contextual): RNN/LSTM, for each token one embedding vector. Not use positional encoding because its sequential so now the positions of tokens. (hidden layer provide contextual embedding)
Drawback: Not scalable, sequential, slow to train
4. Contextual Embedding using Attention (Semantic and Contextual):4.Transformers (Scalable, Parallel not Sequential). We stop generating next token when we reached
Static Embedding Matrix (E) : E(token_id): Lookup is fast as indexing is fast for integers over string. Token IDs exist only for speed, batching, and GPU efficiency
KV Cache: We cache K,V values for all the previous tokens, then just compute K,V values for new token at a time and reuse cached K,V values for previous token then we apply attention formula. (Speed Up)
Dimension of Static Embedding : V * d_model
Dimension of Positional Embedding : Context_Window * d_model
Static Embedding + Positional Embedding + Segment Embedding == new embedding vector + Attention == Contextual Embedding
Encoder Only (Bidirectional)
1. Sees left and right context.
2. BERT does not do next-token prediction.
3. Predict token : use that token’s embedding.
4. Predict sentence : use [CLS] embedding.
5. Middle token see more context then last token.
Decorder Only (Unidirectional : left to right) / autoregressive
1. The last token embedding has seen all previous tokens, last token itself summary token.
2. Attention mask is left-to-right.
3. No [cls] and [sep] tokens at start and end.
a) "I love machine learning"
b) ['I', 'Ġlove', 'Ġmachine', 'Ġlearning']
c) G’ means space before the word
d) [40, 1842, 4570, 4673]
Contextual Embedding single token is sufficent to sentence summary classification.
Static Embedding Pool of all token embeddings is required to get sentence summary classification.
5. In both Pruning and Quantization we donot change Bias. Pruning focus on weights only, while Quantization focus on weights + Activations both.
Pruning can be done both during inference or at fine-tune/training as well.
Unstructured Pruning: Removes individual weights to zero, makes matrix sparse, matrix shape remain same, so computation remains same, donot give real speedup, reserach purpose used, accuracy is more, at each layer applied.
Structured Pruning: Removes whole neurons / filters / channels, actual speed up, size shrink for effective pruned model, accuracy is less, at each layer applied.
Global Pruning (Prefered One): Unstructured Pruning, applied across multiple layers of model.
Quantization: Quantization Scaling Factors
Static Quantization (Post Training Method): weights (pre-compute) + activations (pre-compute) use Caliber over test_loader, Need of QuantStub and deQuantStub, Ex Computer Vision
Dynamic Quantization (Post Training Method): weights(pre-compute) + activations (dynamic-compute), Ex NLP, LLM
QAT: Quantization Aware Training, form of Static Quantization fuse_model (Conv+BN+ReLU, Conv+BN, Conv+ReLU, Linear+ReLU), Need of QuantStub and deQuantStub
6. Five types of model: Regression, Classification, Embedding, Segmentation.
6.1) Regression: Mean Squared Error Loss Function
6.2) Classification: CrossEntropyLoss
6.3) Embedding (Margin Based): TripletMarginLoss, Contrastive Loss, (Softmax with Additive Angular Margin + CrossEntropy : ArcFace)
6.4) Segmentation: Soft Dice Loss, U-Net, only Convolution Layers
6.5) Medical Prognosis: (Label : Time, Event)
a) Linear Regression (beta@X.T)
b) Negative partial log-likelihood (-log(L(beta))), here L(beta) is likelihood, only events used.
c) Newton–Raphson (second-order optimization)
d) Hazard Ratio, Survival Time, Survival Probability
e) event = death, censored = alive, till study duration
f) c-index, concordant pairs, permissible pairs, risk tie
7. We can use ROC (Receiver Operating Characteristic) to have graph between True Positive Rate, False Positive Rate, then we find closet point to (0,1), so we get threshold beyond which 1 else 0 for output class.
(threshold, (False Positive Rate, True Positive Rate)), this is how we can choose threshold, AUC is area under curve of ROC.
8. Imputations is way to fill missing data say features (Age, BP), BP is missing, how we can fill ??
a) Mean of all BP, and fill all empty BP rows.
b) Regression Imputation, BP = 10*Age + 20 (Linear Regression Model).
c) Drop rows with missing data - Bad idea - donot use it.