AI-Powered Skills Extraction and Mapping for the LinkedIn Skills Graph

linkedin · Tech · 2023 · source Agentic: no · promotional bias: low · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Skills graph extraction and normalization

LinkedIn needed to extract implicit and explicit skills from profiles, resumes, job postings, courses, and feed content, then map them to a consistent Skills Graph so skills-first hiring, learning, search, and recommendations could stay accurate as work changes.

Constraints:

Architecture

LinkedIn built a multi-stage skills extraction and mapping stack. It first segments raw content into structured sections, then uses both a trie-based token tagger and a semantic two-tower Multilingual BERT model to identify candidate skills. The Skills Graph expands candidates via related parent, child, sibling, and group skills. A multitask cross-domain scorer combines contextual text encoding, contextual entity embeddings, manual co-occurrence features, and vertical-specific towers for jobs, profiles, feeds, and other sources. For production serving, LinkedIn distills larger models into smaller CPU-serving models, uses offline/Spark scoring for full reprocessing, and collects recruiter, job-seeker, and skill-assessment feedback to improve extraction.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  content-segmentation-parser["content-segmentation-parser"] --> token-skill-tagger["token-skill-tagger"]
  content-segmentation-parser --> semantic-skill-tagger["semantic-skill-tagger"]
  token-skill-tagger --> skills-graph-expander["skills-graph-expander"]
  semantic-skill-tagger --> skills-graph-expander
  skills-graph-expander --> multitask-skill-scorer["multitask-skill-scorer"]
  contextual-text-encoder["contextual-text-encoder"] --> multitask-skill-scorer
  contextual-entity-encoder["contextual-entity-encoder"] --> multitask-skill-scorer
  multitask-skill-scorer --> model-serving-layer["model-serving-layer"]
  model-serving-layer --> product-feedback-loops["product-feedback-loops"]
  product-feedback-loops --> model-serving-layer
  model-serving-layer --> downstream-skills-products["downstream-skills-products"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
content-segmentation-parser Parses raw job, resume, course, profile, and feed text into meaningful sections. token-skill-tagger, semantic-skill-tagger
token-skill-tagger Trie-based fast matcher over skill names from the taxonomy. content-segmentation-parser, skills-graph-expander
semantic-skill-tagger Two-tower Multilingual BERT model that maps contextual phrases to comparable skill embeddings. content-segmentation-parser, skills-graph-expander
skills-graph-expander Adds related parent, child, sibling, and same-group skills to candidate sets. token-skill-tagger, semantic-skill-tagger, multitask-skill-scorer
contextual-text-encoder Transformer encoder over mention phrases, surrounding context, titles, and recent experience. multitask-skill-scorer
contextual-entity-encoder Uses precomputed skill, title, industry, geography, and co-occurrence features. multitask-skill-scorer
multitask-skill-scorer Shared plus domain-specific model towers scoring content-skill relationships across verticals. contextual-text-encoder, contextual-entity-encoder, model-serving-layer
model-serving-layer Nearline, online, and offline serving with distilled models and Spark reprocessing. product-feedback-loops, downstream-skills-products
product-feedback-loops Recruiter edits, job-seeker top-skill feedback, and Skill Assessment signals used for model improvement. model-serving-layer
downstream-skills-products Jobs, courses, feed, Recruiter search, Job Search, JYMBII, and recommendation systems consuming skills. model-serving-layer

Data flow

Raw text from job postings, profiles, resumes, courses, or feed posts is segmented into meaningful parts such as qualifications, responsibilities, skills, or experience. Token and semantic taggers extract direct and inferred skill mentions, then normalize them to canonical taxonomy skills. The Skills Graph expands candidates with structurally related skills. A shared text/entity encoder and domain-specific towers score content-skill pairs for mention, required, core, importance, and relevance relationships. Online and nearline serving publish extracted skills to downstream products, while recruiter edits, seeker feedback, and assessments feed model iterations.

4 supporting quotes
“we first need to segment out large pieces of text (such as job descriptions and resumes) into meaningful parts.”article, stated
“The skill tagger can perform token-based skill matches and also perform semantic-based skill matches from short sentences/phrases.”article, stated
“The skill expansion relies on our Skills Graph to query for relevant skills in the same skill group”article, stated
“we build feedback loops directly into online Job Posting and member profiles to help with AI model iterations”article, stated

Why this architecture

LinkedIn combined symbolic and semantic approaches because exact skill taxonomy matching is fast but misses real-world phrasing, while semantic BERT models capture implicit mentions. Segmenting documents preserves section-level importance. Skill Graph expansion broadens candidates beyond direct mentions, and multitask domain towers let each product vertical model nuanced relationships without duplicating the shared contextual encoders. Distillation and hybrid offline/nearline serving were required to meet strict profile-edit latency on CPU infrastructure.

4 supporting quotes
“The benefit of this tagger is that it scales very well with large volumes of text inputs as it runs extremely fast.”article, stated
“One potential drawback is that it is dependent on the skills taxonomy to capture every different expression of a skill”article, stated
“Having separate model towers that each skill vertical independently owns allows each skill vertical to maintain flexibility”article, stated
“Serving the model in nearline while meeting latency requirements with the original 12-layer BERT model is complex.”article, stated

Models used: Multilingual BERT · Transformer · two-tower model · knowledge distillation · Samza-BEAM · Spark offline scoring · multitask learning · uncertainty weighting

Scale

Alternatives considered (roads not taken)

only extracting explicitly listed skills

Rejected because: Skills appear in summaries, experiences, resumes, job descriptions, courses, and transcripts rather than only dedicated fields.

“Sometimes they’ll include skills in their Summary and Experience sections, or in resumes.”article, stated
“only a subset of skills are tagged directly, with a number of relevant skills being mentioned solely in the description or in the course itself”article, stated

trie/token matching alone

Rejected because: Taxonomy lookup is fast but cannot capture every real-world expression of a skill.

“One potential drawback is that it is dependent on the skills taxonomy to capture every different expression of a skill in the real world.”article, stated

serving the full 12-layer BERT model online

Rejected because: Profile-edit throughput and under-100ms latency made full BERT serving too expensive/slow on the existing CPU serving stack.

“Serving a full 12-layer BERT model on a platform like LinkedIn, while maintaining latency standards, is a daunting task”article, stated

one model per relationship from scratch

Rejected because: Separate models for mention, required, core, and future relationships would be inefficient and not scale for better resolution.

“Developing a separate model to identify each relationship from scratch is inefficient.”article, stated
“It doesn’t scale well for further resolution improvement, so we leveraged the modeling workflow mentioned in the AI Model section and learned multiple content-skills relationships simultaneously through a multitask learning framework.”article, stated

Patterns

hybrid-search (retrieval)

LinkedIn combines trie/token skill matching with semantic two-tower BERT matching to cover both exact and implicit skills.

“The skill tagger can perform token-based skill matches and also perform semantic-based skill matches”article, stated

model-distillation (model-operations)

A larger teacher network trains a smaller student network for lower-latency online serving.

“Our goal is to transfer knowledge from a larger teacher network to a smaller student network”article, stated
“Knowledge Distillation reduces the model size by 80% without compromising performance”article, stated

data-quality-loop (quality)

Recruiter edits, seeker feedback, and Skill Assessment signals provide production feedback for model iterations.

“we build feedback loops directly into online Job Posting and member profiles to help with AI model iterations”article, stated

fine-tuning-adaptation (model-operations)

Models are fine-tuned for different content types because skills appear differently in resumes, profiles, and job descriptions.

“Skills are often represented differently in resumes, member profiles, or job descriptions, so we fine-tuned our models”article, stated

batch-offline-processing (operations)

LinkedIn uses Spark offline scoring for full data reprocessing while nearline processors handle low-latency profile edits.

“the team collaborated with the Waterloo and Samza-Beam teams to develop Spark offline scoring capabilities.”article, stated
“utilizing offline resources for reprocessing and nearline processors for nearline traffic.”article, stated

Tradeoffs

Use trie matching plus semantic matching.

Chose hybrid token/semantic skill tagging over only fast taxonomy lookup or only semantic inference.

Rationale: Trie matching is extremely fast at scale, while semantic BERT covers implicit wording the taxonomy may not enumerate.

“runs extremely fast.”article, stated
“To complement the trie-based skill tagger, we also developed a more semantic approach”article, stated

Use shared encoders with domain-specific towers.

Chose shared text/entity context plus vertical-owned towers over one universal scorer or fully separate models per vertical.

Rationale: Common context transfers across domains while vertical towers preserve flexibility for jobs, profiles, feeds, and other surfaces.

“The model towers are designed and developed independently, but they all share the same text and entity based contextual information”article, stated

Use offline resources for reprocessing and nearline processors for nearline traffic.

Chose hybrid offline/nearline serving over one serving path for every workload.

Rationale: Full reprocessing and profile-edit traffic have different latency/cost requirements.

“devised a groundbreaking hybrid solution by utilizing offline resources for reprocessing and nearline processors for nearline traffic.”article, stated

Gotchas (what bit them)

Skill mention location changes relevance.

Root cause: A skill in a qualifications section is usually more important than one buried in company description text.

Resolution: Segment raw text into meaningful sections before skill extraction and scoring.

“A skill tagged in the qualifications portion of a job posting is more likely to be important”article, stated
“with a defined structure in our AI model, we can better understand the listed skills.”article, stated

A skills graph becomes stale without continuous extraction.

Root cause: Work requirements and skill language change rapidly, especially during the generative AI boom.

Resolution: Continuously extract and map skills from platform content and product feedback.

“essential as the world of work and the skills powering it are rapidly changing.”article, stated
“Without a robust tech stack for mapping content to the Skills Graph, it would be just a static list that would go outdated”article, stated

Model size conflicted with nearline latency requirements.

Root cause: A full 12-layer BERT model is computationally demanding under 200 edits/second and 100ms message constraints.

Resolution: Use knowledge distillation to shrink the model and a hybrid offline/nearline serving approach.

“With approximately 200 global profile edits per second, each message must be processed in under 100 milliseconds.”article, stated
“Among various model compression techniques, we opted for Knowledge Distillation.”article, stated

Evaluation

LinkedIn evaluated the skills system with product feedback loops, offline evaluation, and A/B tests across job recommendations, job search, and job-member skills matching.

Metrics: +0.1391% member job applicants and offsite apply clickers · +0.4606% predicted confirmed hires for job recommendations · +0.1468% job sessions · +0.7577% PPC revenue · +0.2271% engagements · +0.87% qualified applications

“not only reflected in the offline evaluation, but also shown through A/B testing on the product job recommendation, job skills matching”article, stated
“Qualified Applications: +0.87%”article, stated

Outcomes

The source reports 41,000+ skills, about 200 profile edits/second under 100ms, 80% model-size reduction, and product lifts up to +0.7577% PPC revenue.

3 supporting quotes
“Skills show up in many types of content and need to be consumed by many systems”article, stated
“constantly update and evolve the Skills Graph to stay up to date on the always-changing skills landscape.”article, stated
“PPC revenue: +0.7577%”article, stated