Recruiting · Production

DPG Media ML platform: job classification, content-based ad targeting, and HR embeddings

The problem

DPG Media needed to serve relevant ads without user tracking, match job seekers to postings at scale across 13 online brands, and resolve failures in its HR-domain language model when encountering out-of-vocabulary words.

First attempt

The HR domain language model failed on out-of-vocabulary words — misspelled, archaic, or entirely novel job titles caused disproportionate errors that the model's existing fallback methods could not handle.

Workflow diagram · grounded in source
1
Job ad classification
ai_action
“classifying a job ad (is this a job posting for a data scientist, or is it for data engineers?)”
2
Information extraction from job ad
ai_action
“extracting information from them (Is this job remote? What skills are required?)”
3
Behavior-based job recommendations
ai_action
“recommendations (based on your behavior, we think you like this job!)”
4
Resume auto-parsing on upload
ai_action
“we want to also parse a resume automatically whenever you upload it to a job platform so you don't have to manually enter information on the next page”
5
Content classification for ads
ai_action
“now base the ads based on the content of the page. That way we still serve relevant ads, but without tracking”
6
OOV word detection, fallbacks fail
validation
“we were receiving a disproportionate number of errors when the model was asked for the vector of a word it had not been trained with and none of the fall-back methods worked”
7
Levenshtein distance correction
ai_action
“I corrected the misspellings by checking what word was closest in terms of Levenshtein Distance”
8
Manual synonym mapping
human_review
“I tried to match the "funny" new/old words to synonyms or a word or phrase that I felt covered the word well enough and simply added their vectors to the model”
Reported outcome

Out-of-vocabulary errors were resolved pragmatically: Levenshtein distance correction for misspellings and manual synonym mapping for novel terms, with corrected vectors added to the model and a full retrain avoided.

Reported metrics
Job postings in training corpusover 13 million
vocabulary size (Dutch and English)about 1 million words
Reported stack
TensorFlowHuggingfaceSagemakerAirflowAWSLambdaECSs3DynamoDBSnowflakeDockerdbtMLFlowPrometheusGrafanaDatabricksterraformSeldon Core
Source
https://mlops.community/blog/a-machine-learning-engineer-at-dpg-media
Read source ↗

Frequently asked questions

What did this team achieve with this AI workflow?

Out-of-vocabulary errors were resolved pragmatically: Levenshtein distance correction for misspellings and manual synonym mapping for novel terms, with corrected vectors added to the model and a full retrain avoided.

What tools did this team use?

TensorFlow, Huggingface, Sagemaker, Airflow, AWS, Lambda, ECS, s3, DynamoDB, Snowflake.

What results were reported?

Job postings in training corpus: over 13 million; vocabulary size (Dutch and English): about 1 million words (source-reported, not independently verified).

What failed first in this deployment?

The HR domain language model failed on out-of-vocabulary words — misspelled, archaic, or entirely novel job titles caused disproportionate errors that the model's existing fallback methods could not handle.

How is this recruiting AI workflow structured?

Job ad classification → Information extraction from job ad → Behavior-based job recommendations → Resume auto-parsing on upload → Content classification for ads → OOV word detection, fallbacks fail → Levenshtein distance correction → Manual synonym mapping.