Building and Deploying Large Language Models for Skills Extraction at Scale
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: Large-scale skills extraction
LinkedIn needed to extract and map skills from unstructured platform content into the Skills Graph with enough accuracy, latency, and scale to power jobs, learning, feed, and skills-first hiring experiences.
Constraints:
- Skills can be explicitly listed or embedded in job postings, profiles, resumes, courses, and feed posts.
- Nearline member-profile updates require processing around 200 edits per second under 100 milliseconds.
- A full 12-layer BERT model was too large for the CPU serving constraints.
- The Skills Graph must stay current as skills change.
Architecture
LinkedIn built a multi-stage skill extraction and mapping workflow. It combines trie-based skill tagging, a semantic two-tower model using Multilingual BERT encoders, skill expansion through Skills Graph relationships, multitask cross-domain scoring, and knowledge distillation that shrinks the model by 80% for CPU nearline serving without compromising performance.
Diagram confidence: explicit (topology described by the source).
flowchart LR raw-content[Raw Content] --> trie-skill-tagger[Trie Skill Tagger] raw-content --> semantic-skill-tagger[Semantic Skill Tagger] trie-skill-tagger --> skill-expansion[Skill Expansion] semantic-skill-tagger --> skill-expansion[Skill Expansion] skills-graph[Skills Graph] --> skill-expansion[Skill Expansion] skill-expansion --> cross-domain-scoring[Cross-Domain Scoring] cross-domain-scoring --> nearline-serving[Nearline Serving] nearline-serving --> product-experiences[Product Experiences]
Components
| Component | Role | Interacts with |
|---|---|---|
Raw Content |
Job postings, profiles, resumes, courses, and feed posts. | Trie Skill Tagger, Semantic Skill Tagger |
Trie Skill Tagger |
Lexical skill matching stage. | Skill Expansion |
Semantic Skill Tagger |
Two-tower Multilingual BERT semantic matching model. | Skill Expansion |
Skill Expansion |
Expands tags using parent, child, sibling, and skill-group relationships. | Skills Graph, Cross-Domain Scoring |
Skills Graph |
LinkedIn's structured repository of more than 41,000 skills. | Skill Expansion |
Cross-Domain Scoring |
Scores skill relevance across LinkedIn surfaces. | Nearline Serving |
Nearline Serving |
Latency-constrained processing for profile and content updates. | Product Experiences |
Product Experiences |
Jobs, search, learning, and hiring features powered by skills. | Nearline Serving |
Data flow
Raw text from job postings and other content is first tagged with explicit skills, semantically embedded through a two-tower BERT model, expanded via Skills Graph relationships, scored across domains, and served in nearline systems under strict latency requirements.
Why this architecture
LinkedIn combined lexical and semantic stages because explicit skill mentions and contextual skill meaning both matter. Knowledge distillation was required because serving a full BERT model under 100 milliseconds at profile-edit volume was too costly.
Models used: Multilingual BERT · two-tower model · knowledge-distilled student model
Scale
- The Skills Graph contains more than 41,000 skills.“In previous blog posts, we shared how we built the skills taxonomy behind our Skills Graph from the more than 41,000 skills across our platform.”article, stated
- Nearline profile updates run at approximately 200 global profile edits per second.“skills feature requires nearline inference when a member profile is created or updated. With approximately 200 global profile edits per second, each message must be processed in under 100 milliseconds. Serving a full 12-layer BERT model on a platform like LinkedIn, while maintaining latency”article, stated
- Each nearline message must be processed in under 100 milliseconds.“member profile is created or updated. With approximately 200 global profile edits per second, each message must be processed in under 100 milliseconds. Serving a full 12-layer BERT model on a platform like LinkedIn, while maintaining latency standards, is a daunting task even for industry leaders”article, stated
- Knowledge distillation reduced model size by 80%.“For online serving, Knowledge Distillation reduces the model size by 80% without compromising performance, given the existing Samza-BEAM CPU serving constraints.”article, stated
Alternatives considered (roads not taken)
Use only explicit profile/job skill fields.
Rejected because: Skills embedded in courses, resumes, and feed posts are more complex but important.
Use only trie-based lexical matching.
Rejected because: LinkedIn added semantic matching to capture contextual skill mentions.
Serve the full 12-layer BERT model.
Rejected because: Latency and CPU-serving requirements made the full model too complex.
Patterns
retrieval-ranking (skills graph)
Skill candidates are expanded and scored for relevance across LinkedIn surfaces.
model-distillation (serving optimization)
A student model replicates the teacher while reducing size and inference cost.
latency-optimization (nearline serving)
Model compression supports under-100ms nearline processing.
data-quality-loop (skills graph)
The Skills Graph is continuously updated as the skills landscape changes.
Tradeoffs
Matching strategy
Chose Trie plus semantic two-tower model over Only lexical skill matching.
Rationale: Lexical tags are precise, while semantic encoders capture contextual skill mentions.
Serving model
Chose Knowledge-distilled student over Full 12-layer BERT.
Rationale: The student met latency and CPU constraints without compromising performance.
Skill expansion
Chose Graph relationship expansion over Only directly tagged skills.
Rationale: Parent, child, sibling, and group relationships improve match coverage.
Gotchas (what bit them)
Skill extraction from embedded content is harder than explicit fields.
Root cause: Skills appear implicitly in courses, resumes, and feed text.
Resolution: Combine lexical tagging with semantic two-tower modeling.
Full BERT is too heavy for nearline latency at LinkedIn scale.
Root cause: A 12-layer BERT model has large parameter count and CPU serving cost.
Resolution: Apply knowledge distillation to shrink the model by 80%.
Evaluation
LinkedIn evaluates the pipeline through latency constraints, model compression performance, nearline serving feasibility, and downstream product metrics across job recommendations, search, and qualified applications.
Metrics: Latency under 100ms · Profile edits per second · Model size reduction · Applicants · Confirmed hires · Qualified applications
Outcomes
- Knowledge distillation reduced model size by 80% without compromising performance.
- The skills pipeline powers recommendations, search, learning, and skills-first hiring.
- LinkedIn reported gains in confirmed hires, qualified applications, and job-search metrics.
The source reports 41,000-plus skills, 200 profile edits per second, under-100ms processing, 80% model-size reduction, +0.4606% predicted confirmed hires, and +0.87% qualified applications.