👋 Hi, I’m Changyong Hyun

GitHub · LinkedIn

🚀 AI/ML Engineer | LLM Evaluation & Agentic Systems | MSc @ Télécom SudParis (IP Paris)

🇫🇷 Paris / Europe · 🔬 6 months evaluating LLM agents for CAD · ⚡ PyTorch · LangGraph · MLflow

LinkedIn Email GitHub Website


🎯 About Me

MSc Data Science, Télécom SudParis (2026) · Open to LLM / ML Engineer roles in Paris and Europe

AI/ML engineer with an MSc in Data Science & Network Intelligence from Télécom SudParis (Institut Polytechnique de Paris), graduated October 2026, with six months of industry experience at MECAGENT in Paris, evaluating LLM agents that turn engineering drawings into 3D CAD models.

I build LLM and multi-agent systems, and I specialise in the part most teams skip: deciding whether the thing actually works. The hard problem is rarely generation — it’s that the metric you grade outputs with is usually blind to some of the ways they can be wrong. On the system I worked on, the headline 3D-similarity score passed rotated parts and imitated sheet-metal folds as if they were correct. So most of my work became evaluation design: build the instrument first, then let it decide what to change.

Core Expertise:

Key Achievements:


📈 Contribution Activity

GitHub Streak


💼 Industry Experience

🔧 AI Engineer Intern — MECAGENT, Paris, France (May – Oct 2026)

The work: LLM agents that turn 2D engineering drawings into 3D CAD models. My part: evaluation of the drawing-reading stage and of the agents’ outputs, plus a C# toolkit the agent could call.

Tech Stack: Python · C# · SolidWorks API · LangChain / LangGraph · MLflow · Arize Phoenix · vision-language models · AWS Bedrock · pytest

The company’s internal results are covered by a confidentiality agreement, so this describes method and ownership rather than internal figures. Happy to go deeper on the engineering in conversation.


🤖 1. Synthetic-Instruction-Tuner — Zero-Cost LLM Fine-Tuning (Nov 2025 – Jan 2026)

LoRA reached 5.5× lower validation loss than Prompt Tuning on identical data — no seed dataset, no paid API, no human labelling at any stage

Challenge: Fine-tune an instruction-following model without API costs or human annotation — and build it so each method’s contribution is separately measured rather than asserted as a stack.

My Solution — a 6-stage pipeline, every stage’s output committed:

  1. Magpie Prompting (synthetic data generation):
    • Template-only prompting with Llama-3.1-8B-Instruct in 4-bit
    • Generated 1,500 instruction-response pairs with no seed dataset — the chat template alone elicits the instructions
    • Checkpointed every 100 samples to survive Colab disconnects
  2. Quality Filtering — six interpretable rule-based checks (length, language, repetition, format, toxicity, content quality), weighted to a single score:
    • 1,258 of 1,500 passed (83.9%), mean quality score 0.88; top 1,000 kept, split 900/100
    • Dominant failure was phrase repetition (156 of 242), not toxicity (5) — the useful finding, since it says what synthetic data actually gets wrong
  3. Preference-Pair Generation:
    • 600 chosen/rejected pairs via multi-temperature sampling, scored by a reward model (OpenAssistant DeBERTa-v3)
    • Every pair clears a 0.5 margin gate (mean margin 1.78, min 0.53)
  4. LoRA Fine-Tuning — 12,156,928 trainable parameters (0.67% of base), r=8, alpha=16, all seven linear projections, on Llama-3.2-3B in 4-bit
  5. Prompt Tuning (head-to-head control, same data and hardware) — 20 virtual tokens, 61,440 parameters: a 198× smaller adapter budget
  6. DPO Alignment — beta=0.1, single epoch on the 540/60 preference split, frozen SFT model as reference

Results — measured, from committed training configs:

Method Trainable params Val loss Peak VRAM Wall time
LoRA SFT (r=8) 12,156,928 (0.67%) 0.54 5.3 GB 8.2 min
Prompt Tuning (20 tokens) 61,440 (0.003%) 2.98 5.9 GB 18.8 min
DPO (on top of SFT) 12,156,928 (0.67%) 0.55 4.7 GB 2.2 min

Tech Stack: Hugging Face PEFT, LoRA, DPO, TRL, 4-bit Quantisation, Magpie Prompting, Llama-3.1-8B / Llama-3.2-3B

Deliverables: 10 notebooks covering the full pipeline · 3 trained variants (LoRA / Prompt Tuning / DPO, adapters committed) · raw, filtered and preference datasets · 7 evaluation figures · a claim-by-claim data-provenance table

What I’d point an interviewer at: the repo’s corrections log. An earlier version of it quoted MMLU/HellaSwag/ARC/TruthfulQA scores; a source audit found they were hardcoded demo values that no notebook ever produced, so they were removed and the removal documented. The numbers above are the ones that survived.

GitHub Hugging Face


📐 2. text2cad-verifier — Does LLM-Written CAD Code Run, and Is the Part the Right Size? (Oct 2026)

151 Text2CAD-Bench prompts, two verifiers, one repair round — failures went from 7 to 1 (procedure prompts) and 11 to 1 (geometric prompts), against a repeat-run noise of 2 run failures and 1 size mismatch

Challenge: The benchmark’s ground-truth geometry is not public, so there is nothing to compare a generated part against — and “the code ran” says nothing about whether the part is right.

My Solution:

Results (model claude-opus-5-5, 151 prompts per run, 2026-10-08):

Run Programs that fail to run or give no valid solid Size mismatches (of parts with an agreed size that ran)
Generation, procedure prompts 4 3 of 117
Same prompts again (noise) 6 2 of 114
Generation, geometric prompts 3 8 of 117
After one repair round, procedure 1 0 of 119
After one repair round, geometric 1 0 of 119

Tech Stack: Python, CadQuery (OpenCascade), Anthropic Message Batches API, FastAPI, pytest, GitHub Pages

GitHub


🔎 3. rag-golden-eval — RAG Built Eval-First (Oct 2026)

A frozen 140-question golden set before the pipeline — BM25 reached GAA 0.721 (mean of three identical runs, noise band 0.014); adding a cross-encoder reranker dropped it to 0.593

Challenge: When the retriever changes, did the answers get better, and by more than run-to-run noise? Most RAG demos never measure this.

My Solution:

Results (judge claude-opus-5-5, rubric v1, N = 140):

Rung recall@5 GAA vs BM25 mean
R0 closed book - 0.150 -0.571
R1 BM25 (3 runs) 0.765 0.714 / 0.721 / 0.729  
R2 dense 0.689 0.679 -0.043
R3 hybrid 0.731 0.721 +0.000 (within noise)
R4 hybrid + rerank 0.588 0.593 -0.129

Tech Stack: Python, bm25s, sentence-transformers, Qdrant (local mode), bge-small-en-v1.5, ms-marco MiniLM cross-encoder, Anthropic Message Batches API, pymupdf

GitHub Results


📡 4. Paper Radar — Weekly Literature Tracker (public since Oct 2026)

Matches new arXiv papers and Semantic Scholar citations to a ledger of open problems on a schedule; by default no LLM runs in the weekly job

Challenge: Follow new research for a short list of open problems every week without reading the whole feed, and without any problem text leaving the machine.

My Solution:

What broke along the way:

Tech Stack: Python, GitHub Actions, MCP (official Python SDK), arXiv, Semantic Scholar

Scope, stated honestly: I built it to track the open problems I work on; the public repository runs on a demo ledger of public questions.

GitHub


🏅 5. SemEval 2026 Task 2 — Emotion Prediction (Oct 2025 – Jan 2026)

Validation mean Pearson r 0.6554 — international NLP competition; the competition metric (CCC) was not measured

Challenge: Predict emotional response (valence and arousal) from temporal sequences of a user’s posts, where any single post carries little signal without the user’s history.

My Solution:

Results — measured on the validation split:

Model Mean Pearson r Valence r Arousal r  
seed777 0.6554 0.7593 0.5516 Best single model
arousal_specialist (seed 1111) 0.6512 0.7192 not quoted An arousal input contains the target
seed42 0.5053 0.6532 0.3574 Dropped from the pool

On the submitted ensemble — stated precisely: the final submission weighted the two best models by their validation score (seed777 50.16% + arousal_specialist 49.84%). Its combined score was a projection — the weighted average of the two measured models plus an assumed ensemble boost — and was never re-scored on held-out data. So the number I quote is the measured 0.6554, not the projected ensemble figure. Being able to tell those two apart is the point.

Tech Stack: PyTorch 2.0+, Hugging Face Transformers, RoBERTa, BiLSTM, WandB, Mixed Precision Training

Deliverables: Joint slide deck (my part: subtask 2a) · technical report · fully reproducible pipeline (preprocessing, training, evaluation, prediction) · Codabench submission

GitHub


🔍 6. QoE Prediction — the Leakage Analysis That Changed the Answer (Oct – Dec 2025)

33.3-point gap — where the real result is the integrity work Télécom SudParis (IP Paris) MSc coursework · supervised project

Challenge: Predict user-perceived mobile-streaming quality (MOS 1–5) from 1,543 sessions. The obvious model looked excellent. It wasn’t.

Data: the PoQeMoN crowdsourcing dataset (LiSSi laboratory, Paris Est Créteil University) — 181 testers rating video sessions over four live French mobile networks on nine Android devices, with VLC-side metrics logged alongside each rating.

My Solution:

Results:

Tech Stack: scikit-learn (Logistic Regression, Decision Tree, Random Forest, Gradient Boosting), Pandas, class-balanced evaluation, stratified splitting

Why it matters: This is the project I bring up when someone asks how I know a metric is trustworthy. The headline number went down and the work got better.

GitHub


🌍 7. DEFT — Defense Export Market Analysis (Sep – Dec 2024)

102,188 records, 170 countries scored — multi-source ETL and feasibility scoring

Challenge: Combine economic, political and conflict indicators into a usable market-feasibility view, when the three source databases disagree about what a country is even called.

My Solution:

Results:

Tech Stack: Python, Pandas, NumPy, scikit-learn, statsmodels, Leaflet, Chart.js, DataTables, REST APIs (World Bank, SIPRI, UCDP, WGI)

Impact: A strategic screening tool for defense-industry market entry — and a quantified statement of where indicator-based screening stops working.

GitHub


📈 8. Agricultural Price Forecasting (Nov – Dec 2024)

65,120 daily price rows · 17 commodities · 52-week horizon — price forecasting for military food procurement

Challenge: Forecast Korean agricultural retail prices far enough ahead to change purchasing decisions, across commodities whose seasonality has almost nothing in common. 7-person team, 8 weeks.

My Solution — two model families, trained separately and compared, not blended:

Results:

Tech Stack: Python, TensorFlow/Keras, statsmodels (SARIMAX), Flask, Power BI, Pandas, Time Series Analysis

Note on scope: an earlier version of the project README quoted test MAPE, R² and accuracy percentages whose evaluation runs were not preserved. The repository now reports only what can be re-derived from committed notebook outputs and data files — which is what the numbers above are.

GitHub


📺 9. YouTube Analytics — Korean Content Strategy (Jul – Sep 2024)

2,125 videos — statistical analysis across 15 channels and 3 categories

Challenge: Turn channel performance data into recommendations a creator could act on.

My Solution:

Results:

Tech Stack: Python, Pandas, Matplotlib, Seaborn, Word Clouds, descriptive statistics

Note on scope: the repository documents its own verified headline (2,125 videos / 15 channels / 3 categories) and explicitly lists the earlier unverifiable figures that were removed.

GitHub


🏡 10. Korean Real Estate — Market Analysis (Jul – Sep 2024)

Geospatial price modelling across Korean regions

Challenge: Assemble a picture of the Seoul market that holds together — listings, macro indicators and city open data all come from different places, in different shapes, with Korean column names that don’t match across sources.

My Solution — collection and integration, which is where the actual work was:

Results:

Tech Stack: Python, Pandas, Requests, Folium, Matplotlib, openpyxl

Scope, stated honestly: this is a data collection, integration and visualisation project — there is no regression or forecasting model in it, and the repository says so rather than implying one. It is here because the collection and reconciliation work is real and the migration finding stands on its own.

GitHub


🎬 11. Movie Trip — Full-Stack Travel Platform (Dec 2025)

Next.js 14 + TypeScript — film locations, route planning and reviews

Challenge: Build a complete product, not a notebook — authentication, persistence, state management and maps, deployed as one application.

My Solution:

Tech Stack: Next.js 14, TypeScript, Prisma, PostgreSQL, Recoil, JWT

Why it’s here: it is the project that proves I can ship a working system end to end, not only analyse data.

GitHub


🏢 12. Insurance SOA — Multi-Protocol Service Architecture (Dec 2025 – Jan 2026)

4 protocols, one gateway — REST · SOAP · gRPC · GraphQL Télécom SudParis (IP Paris) MSc coursework · service-oriented architecture module

Challenge: Serve insurance claim processing to client types that each speak a different protocol, without maintaining four separate backends.

My Solution:

Results:

Tech Stack: Java 11, Apache Maven, REST (Jersey), SOAP (JAX-WS), gRPC, GraphQL, Tomcat

Architecture Pattern: Service-oriented architecture with gateway orchestration

GitHub


🧰 More public tools (Oct 2026)

Project What it does Tests
claim-gate A Claude Code Stop hook that blocks a reply claiming “done”, a count, an absence or “all/every” without the evidence behind it 17 tests
job-posting-checker Reads a job posting and answers, with the sentence behind each answer, whether French is required, whether the role is open to someone in France, the contract, the salary against a floor and the years asked; plus a careers-API fetcher · live demo 520 labelled cases
korean-ai-tell Flags “AI tells” in Korean (and English) text with a rule id and a fix hint; CLI, library, pre-commit hook and a Claude Code skill. On PyPI: pip install korean-ai-tell · live demo 13 tests
kmmlu-lighteval Adds the Korean benchmark KMMLU to Hugging Face lighteval and checks it question by question against lm-evaluation-harness: on 5 of 45 subjects with one small model on CPU, 700 of 700 same prompt, tokens and prediction. Proposed upstream as lighteval#1424, then opened as pull request #1425 (open) parity table + 3 tests

🛠️ Technical Skills

🔬 LLM Evaluation & Experimentation (my differentiator)

Evaluation design (MECAGENT internship)

Experiment discipline (MECAGENT internship, QoE project)

Observability (MECAGENT internship)

MLflow Python

🤖 LLM & NLP (Production Experience)

LLM Fine-tuning (Synthetic-Instruction-Tuner)

Transformers (SemEval 2026 — modular training/prediction pipeline)

Agentic Systems (MECAGENT internship)

NLP (across projects)

PyTorch Transformers LangChain WandB

📊 Machine Learning & Data Science

ML Algorithms (QoE Prediction — 4 classifiers, both feature sets each)

Time Series (Agri Forecasting — 16 per-commodity models)

Data Engineering (DEFT — 102,188 records)

scikit-learn Pandas NumPy TensorFlow

💻 Programming & Databases

Primary Languages

Web Development

Databases

Python C# Java TypeScript SQL PostgreSQL Next.js Oracle

🚀 MLOps & Production

Experiment Tracking

Cloud & Serving

Testing

Docker AWS Linux Git FastAPI Streamlit

📊 Visualisation & BI

Business Intelligence (Hanwha Aerospace)

Python Visualisation (all projects)

Power BI Tableau


🎓 Education

MSc, Data Science & Network Intelligence

Télécom SudParis — Institut Polytechnique de Paris, France · 2025–2026

Specialisation: Large language models, NLP, deep learning, data engineering

Relevant coursework: Deep Learning & Neural Networks · Natural Language Processing · Big Data Analytics · Statistical Modeling & Time Series · Database Systems

Undergraduate

Tech University of Korea — Siheung, South Korea

Changwon National University — Changwon, South Korea


🏆 Achievements

🥇 Awards

📈 Technical Highlights


💼 What I Bring

✅ I measure before I claim

Every number in this profile names what it was measured on. When my own improvement didn’t beat the baseline, I reported it at the same length as a win. When my hand-written reference labels turned out to be wrong and three models were right, I checked the labels against the geometry from then on and wrote up why.

✅ I build the instrument first

On the internship system, the drawing-reading stage had no measurement at all, so I built one: a rubric anchored on reference parts a CAD expert built by hand, and a scorer that reproduces every number from saved artefacts with zero model calls.

✅ I ship inside a team’s process

Pull requests, code review, trace-referenced technical reports, and adversarial verification of my own claims before they leave my desk — six months of it inside a startup’s engineering team.

✅ I work across the stack

Shipped projects spanning LLM fine-tuning, NLP research, multi-agent systems, time series, data engineering and full-stack web — in Python, C#, Java and TypeScript.

✅ I communicate in two languages and three registers

Korean (native), English (C1), learning French (A2) — and the register that matters most: explaining a technical result to someone who has to make a decision with it.


📫 Let’s Connect

MSc Data Science, Télécom SudParis (2026). Open to LLM Engineer / ML Engineer / AI Engineer roles in Paris and Europe — open to hybrid or remote.

🎯 What I’m Looking For

📧 Contact

LinkedIn Email GitHub


Profile Views GitHub Followers

⚡ “Build the measurement first.”

Paris / Europe · Remote-friendly