Knowledge Graph Embeddings for Occupational Mobility

Exploring O*NET's graph structure with TuckER to find related occupations

Matt Helm


The Problem

If you've ever looked into changing careers, you've probably run into a version of this question: which occupations match my current skills? One of the richest resources for answering it is O*NET, the Occupational Information Network. It describes 1,016 occupations through detailed profiles that include skills, knowledge areas, abilities, tasks, and work activities.

The standard approach to finding related occupations is straightforward: look at shared elements, and if two occupations have a lot of the same skills and knowledge areas, they're probably related. This works, as long as the data is available. However, could there be other ways to find occupations that are less obviously related?

O*NET publishes its data in RDF — a graph format — and that allows us to approach the problem from a different angle. Instead of comparing occupation profiles element by element, you can treat the entire dataset as a knowledge graph and look for patterns in its structure. This lets you identify related occupations even when they don't share many of the same skills, knowledge areas, or abilities.

Building the Graph

I extracted a subgraph from O*NET 30.3 — a network where occupations, skills, knowledge areas, abilities, tasks, and detailed work activities (DWAs) are all nodes, connected by typed edges. Here's what a single occupation looks like in that graph:

hasSkillhasKnowledgehasAbilityinJobZonehasRelatedOccupationGraphicDesignersCriticalThinkingActiveListeningComplex ProblemSolvingDesignCommunications& MediaFine ArtsOriginalityVisualizationFluency ofIdeasJob Zone 4ArtDirectorsMultimedia Artists& AnimatorsSkillKnowledgeAbilityJob ZoneOccupation
Excerpt of the Graphic Designers ego graph — 7 relation types connect occupations to skills, knowledge areas, abilities, tasks, DWAs, job zones, and other occupations. The full graph contains 21,900 entities.

Each occupation connects to its skills, knowledge areas, abilities, tasks, DWAs, job zone, and other related occupations. O*NET has a lot more information than what I've included here (work styles, interests, work context, education, wages, and more), but I kept the scope to the elements most directly tied to what a person does and knows in a role. I also filtered out low-importance elements using O*NET's own importance and level ratings, so the graph focuses on the strongest signals.

21,900
entities
7
relation types
923
occupations
78,282
training triples

Out of the 1,016 occupations in O*NET, 923 ended up in the graph. The 93 that didn't make it are mostly "All Other" residual categories and military specializations — occupations without detailed element profiles.

For finding related career paths, one can simply compare element profiles directly. You may have noticed in the visualization above that O*NET already catalogs related occupations, which they determine largely by doing such a comparison (although, it should be noted that they also rely on judgment from human experts). That works well, but it can only find occupations that look alike on paper or that consulting experts can identify. Two roles might be structurally related — playing similar roles in the broader occupational landscape — without sharing many of the same elements.

Since O*NET's data is already structured as a knowledge graph with typed relationships, there's another angle worth exploring: models that learn from the pattern of connections, not just which elements are shared. To that end, I used a model called TuckER, which learns a low-dimensional representation of every entity and relationship in the graph and then uses those representations to predict missing links.

What TuckER Finds

TuckER works by decomposing the full graph into a small core tensor and two embedding matrices — one for entities, one for relations — with far fewer dimensions than the original graph. This compression forces the model to learn the underlying patterns that connect occupations, skills, knowledge, and other elements, rather than memorizing individual links. It can then use those learned representations to score how likely any unobserved link is.

I trained the model on the O*NET knowledge graph and ranked all unobserved occupation pairs by predicted score, filtering out every pair that O*NET already lists as related. Here are a few examples of the top predictions that result:

FLS: Policeand DetectivesCustoms and BorderProtection OfficersFraud ExaminersSecurity ManagersManagementAnalystsHuman ResourcesSpecialistsForest FireInspectorsEnvironmentalCompliance InspectorsFire Inspectorsand Investigators
Click a node to see its O*NET profile

The strongest cluster is in law enforcement and public safety. Police supervisors get paired with customs officers, fraud examiners, security managers, and fire investigators — all roles that share investigative and supervisory patterns, even though O*NET doesn't list them as related. Management analysts linked to HR specialists and forest fire inspectors linked to environmental compliance inspectors also seem like plausible fits.

The results are mixed, though. Judges, magistrate judges, and magistrates are also in the same law enforcement cluster, linked to first-line supervisors of police and detectives. Clearly, structural similarity in the graph doesn't always translate to a practical career move.

Here's a table of the top 25 predictions found by TuckER, along with their Jaccard similarity:

Pairs are ranked by TuckER's raw link-prediction score. Jaccard similarity (0–1) measures the overlap in skills, knowledge, abilities, tasks, and DWAs between the two occupations.

#SourceTargetScoreJaccard
1First-Line Supervisors of Police and DetectivesCustoms and Border Protection Officers11.200.391
2First-Line Supervisors of Police and DetectivesFraud Examiners, Investigators and Analysts10.800.333
3First-Line Supervisors of Police and DetectivesJudges, Magistrate Judges, and Magistrates10.720.347
4First-Line Supervisors of Police and DetectivesAirfield Operations Specialists10.650.314
5First-Line Supervisors of Police and DetectivesSecurity Managers10.590.364
6First-Line Supervisors of Police and DetectivesFirst-Line Supervisors of Personal Service Workers10.370.301
7Compensation, Benefits, and Job Analysis SpecialistsTreasurers and Controllers10.300.321
8First-Line Supervisors of Police and DetectivesManagement Analysts10.230.397
9Management AnalystsHuman Resources Specialists10.220.338
10ConciergesCashiers10.220.050
11Railroad Conductors and YardmastersCommercial Pilots10.190.244
12Police and Sheriff's Patrol OfficersArbitrators, Mediators, and Conciliators10.180.215
13Management AnalystsClinical Data Managers10.170.384
14Legal Secretaries and Administrative AssistantsTitle Examiners, Abstractors, and Searchers10.170.286
15First-Line Supervisors of Security WorkersAirfield Operations Specialists10.160.333
16Forest Fire Inspectors and Prevention SpecialistsEnvironmental Compliance Inspectors10.150.277
17Dispatchers, Except Police, Fire, and AmbulanceAir Traffic Controllers10.070.263
18BailiffsCompliance Officers10.030.220
19First-Line Supervisors of Police and DetectivesGovernment Property Inspectors and Investigators10.030.368
20Dispatchers, Except Police, Fire, and AmbulanceFreight Forwarders10.020.273
21Dispatchers, Except Police, Fire, and AmbulanceAirfield Operations Specialists10.020.306
22Legal Secretaries and Administrative AssistantsStatistical Assistants10.020.263
23First-Line Supervisors of Police and DetectivesEligibility Interviewers, Government Programs10.010.297
24First-Line Supervisors of Police and DetectivesFire Inspectors and Investigators10.000.302
25Management AnalystsSecurities, Commodities, and Financial Services Sales Agents9.990.346

Why This Matters

Element-based similarity methods find occupations that look alike on paper — shared skills, shared knowledge, shared abilities. TuckER tries a different angle: learning from the pattern of connections rather than counting shared elements. When it works, it surfaces connections like fraud examiners and police supervisors that share investigative reasoning patterns a skills checklist might not capture. When it doesn't, you can end up with things like railroad conductors paired with commercial pilots — superficially similar in the graph but not in practice.

These predictions are hypotheses, not recommendations, and the mixed results suggest this approach works better as a starting point. The natural next step would be validation against real-world data. The Bureau of Labor Statistics publishes occupational transition data that could tell us whether these predicted paths correspond to career moves people actually make.

TuckER is also just one approach. Other knowledge graph embedding models — RotatE, TransR, ConvE — model relational patterns differently and might surface different connections. Graph neural network methods like R-GCN could go further by incorporating node features and multi-hop reasoning.


Technical Details

Model Architecture

TuckER uses Tucker decomposition to model relationships in a knowledge graph. For a given subject entity ss and relation rr, it scores all possible object entities:

score(s,r,)=(W×2r×1es)E\text{score}(s, r, \cdot) = \left( \mathcal{W} \times_2 \mathbf{r} \times_1 \mathbf{e}_s \right) \cdot \mathbf{E}^\top

where W\mathcal{W} is a learnable core tensor, es\mathbf{e}_s is the subject entity embedding, r\mathbf{r} is the relation embedding, and E\mathbf{E} is the full entity embedding matrix.

Hyperparameters

ParameterValue
Entity embedding dim200
Relation embedding dim30
Batch size128
Learning rate (initial)0.005
LR decay (per epoch)0.995
Label smoothing0.1
Dropout (input / hidden₁ / hidden₂)0.2 / 0.2 / 0.3
Loss functionSoftmax cross-entropy
OptimizerAdam
Max epochs500
Actual epochs (early stopping)237
Patience50

Training Curves

Training Loss

2.04.06.08.010.012.014.0160120179237EpochLoss

Validation MRR

0.00000.10000.20000.30000.4000160120179237EpochMRR

Test Set Evaluation

Filtered link prediction metrics with 95% bootstrap confidence intervals (n = 1,000 resamples).

37.1%
MRR
[35.8–38.4%]
19.5%
Hits@1
[17.9–20.9%]
45.9%
Hits@3
[44.0–47.8%]
71.9%
Hits@10
[70.1–73.6%]
13.7 mean rank out of 21,900 entities

A Note on the Loss Function

The original TuckER paper uses binary cross-entropy (BCE) loss. That didn't work here. With O*NET's extreme class imbalance — roughly 3 positive entities out of 21,900 per training example (0.014%) — BCE lets the model get away with predicting all-negative scores and still achieving near-zero loss. The model basically learns to say "nothing is related to anything," which isn't very useful.

Softmax cross-entropy fixes this by normalizing scores across all entities before computing the loss, which forces the model to actually rank positive entities above negatives. There's no trivial all-negative solution. Label smoothing (ε=0.1\varepsilon = 0.1) keeps the model from getting overconfident about its predictions.