Paste your resume and a job description. Get a personalized, dependency-aware skill roadmap powered by Graph Neural Networks.
SkillGraph identifies the exact skills you need to bridge the gap between your current experience and a target role. It:
- Parses your resume and job description to extract skills using local semantic search
- Scores your mastery for each skill using a weighted formula (how often, how recently, how relevant)
- Identifies gaps - skills required by the JD that you haven't mastered yet
- Builds a learning path - ordered by a trained ML ranker, respecting prerequisite dependencies
- Maps curated resources - from a fixed 45-course catalog, zero hallucination
| Layer | Component | Function |
|---|---|---|
| 1 | all-MiniLM-L6-v2 (local) |
Semantic skill extraction from resume and JD text |
| 2 | Gemini 1.5 Flash (optional fallback) | Deep classification for sparse or low-confidence documents |
| 3 | NetworkX DAG | Skill gap identification - flags skills where mastery < 0.6 and JD requires them |
| 4 | Node2Vec GNN (trained) | Graph Neural Network that learns structural importance of each skill in the dependency graph |
| 5 | LightGBM LambdaRank (trained) | Ranks gap skills by learning priority using GNN scores, mastery, and JD weight |
| 6 | Greedy Frontier Traversal | Generates a prerequisite-safe path - never suggests a skill before its prerequisites |
| 7 | Course Catalog Lookup | Maps each path step to a curated resource (Coursera, official docs, etc.) |
| 8 | Deterministic Reasoning Trace | Plain-English explanation for every recommendation - rule-based, zero LLM |
- Learns a 64-dimensional embedding for each skill based on its position in the skill dependency graph
- Trained on O*NET-derived skill dependency graphs for Software Engineering and Data Science domains
- Output: a structural importance score per skill, used as a feature in the ranker
-
Ranks the learning path by priority - given your skill gaps, which should you learn first?
-
Trained on 500 synthetic candidate profiles generated from the graph algorithm
-
Features: JD importance, GNN score, mastery level, skill in-degree, skill out-degree
-
Validation results:
- NDCG@5: 0.7978 - the top 5 recommended skills are correctly prioritized ~80% of the time
- NDCG@10: 0.8486 - the top 10 recommendations are in the right order ~85% of the time
What is NDCG? NDCG (Normalized Discounted Cumulative Gain) is an industry-standard metric for measuring ranking quality. A score of 1.0 means perfect ordering. Scores of 0.80-0.85 indicate the model reliably surfaces the most impactful skills first.
- Used only as a fallback classifier when local semantic search returns sparse results
- Maps resume/JD text to a predefined skill list only - it cannot invent skill or course names
Mastery(skill) = 0.31 * frequency + 0.336 * recency + 0.354 * jd_match
Gap = skill required by JD AND Mastery(skill) < 0.6
Priority(skill) = LightGBM([jd_importance, gnn_score, mastery, in_degree, out_degree])
Path = greedy frontier traversal - always pick the highest-priority skill
whose prerequisites are all satisfied
| Dataset | Purpose |
|---|---|
| O*NET Occupational Database (SOC 15-1252.00 and 15-2051.00) | Skill taxonomy and dependency edges for SWE and Data Science domains |
| Kaggle Resume Dataset (2,400 resumes, 25 categories) | Validated skill list coverage against real-world resumes |
| Kaggle JD Dataset | Validated JD skill pattern extraction |
| Synthetic profiles (500) | Generated from graph algorithm; used to train the LightGBM LambdaRank model |
docker-compose up -dThen open:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000/docs
All dependencies (LightGBM OpenMP, Python, Node.js) are pre-configured inside Docker.
cd backend
pip install -r requirements.txt
uvicorn app.main:app --host 127.0.0.1 --port 8000 --reloadcd frontend
npm install
npm run devbash backend/training/run_all_training.shexport GEMINI_API_KEY=your_key
export SKILLGRAPH_ENABLE_GEMINI=1export DYLD_LIBRARY_PATH="/opt/homebrew/opt/libomp/lib:$DYLD_LIBRARY_PATH"All training artifacts are included in the repository:
| Artifact | Location |
|---|---|
| Training scripts (Node2Vec + LightGBM) | backend/training/ |
| Synthetic training data (500 profiles) | backend/training/synthetic_data.json |
| NDCG scores and feature importance report | backend/models/training_summary.md |
All course recommendations come from a fixed 45-course catalog via deterministic lookup. The LLM is used only as a classifier - it maps text to a predefined skill list and cannot generate course names, skill names, or any free-form content. If Gemini is disabled, the system falls back to local semantic search seamlessly.