Development of an AI System for Semantic Matching of Candidates and Vacancies

Keyword-based selection misses strong candidates and produces dozens of redundant profiles. We develop semantic matching systems turnkey: semantic comparison of resumes and vacancies reduces time-to-hire by a factor. Let's discuss your task and come back with an estimate and plan.
Frequently Asked Questions

Why semantic candidate matching breaks at scale

As long as the flow of applications is measured in dozens per week, word-match matching yields acceptable results: the recruiter reviews the list in full and catches what was missed by eye.

At a flow of thousands of resumes, this manual cushion disappears — the filter starts rejecting people not by qualification but by wording, and the loss of suitable candidates becomes systemic rather than random.

The mechanics of loss are predictable. Synonyms in job titles (“test engineer” and “quality specialist,” “product manager” and “product owner”) do not overlap by words, although they describe the same role.

The same with experience: “migrated the monolith to services” and “split the system into independent modules” are different strings, one essence.

The second layer is the migration of meaning. Key requirements increasingly end up in the cover letter or project descriptions rather than in the title and skills list on which the results were built. Semantic resume search must read the document as a whole, not weigh individual fields.

Industry measurements confirm the scale: according to LinkedIn and specialized recruitment research, a noticeable share of relevant applications is filtered out at the first pass — before a human ever sees the resume.

The cost of error is not only a prolonged vacancy: trust in the results falls, recruiters return to manual sifting, and it does not scale with the flow.

We break down how this is addressed: how semantic candidate matching is built, where rules are complemented by vector representations of text, and by which metrics it is clear that application relevance has stopped depending on wording.

What the transition from keywords to vector search delivers

Keywords look for substring matches; vector search looks for closeness of meaning. An application “analyst, integrations, banking domain” matches the vacancy “requirements specialist at a bank,” although there are almost no shared words. Exact matches are not lost: they remain in the results but stop being the only criterion.

Share of relevant profiles in the shortlist

Ranking by semantic closeness changes the quality of the shortlist nonlinearly: what previously lay on the second or third page of results rises to the top.

The first twenty profiles absorb almost everything that previously had to be selected from among a hundred applications — the share of relevant applications grows without edits to the vacancy text.

The industry standard has moved in the same direction: LinkedIn builds resume-to-vacancy matching by meaning, not by strings.

Speed of reaching the final list

Screening stops being manual rejection: the relevance threshold is configured for the role, and noise is filtered out before a human sees the profile.

The speed of closing a vacancy grows primarily here — the final list is assembled in one session instead of several days of correspondence. Matching accuracy is confirmed by an evaluation log: it shows why a profile made the top and which feature raised it there.

Deployment options: on-premises, cloud, hybrid

Deployment methods differ not by hardware but by where the model lives relative to personal data. A steady flow of applications and sharp peaks require different elasticity, and isolation requirements often outweigh operational convenience.

Option When it fits Limitations
On-premises environment Resumes must not leave the perimeter; load is predictable New models are rolled out on a planned basis; capacity sits idle between peaks
Cloud setup Fast start is needed; application volume jumps severalfold Personal data leaves the perimeter — anonymization and access control are required
Hybrid architecture Data stays inside while compute scales Two perimeters: synchronization of reference data and access differentiation

Limitations of the on-premises environment

Full control is more expensive to operate: updating the model becomes a planned procedure with validation against historical data rather than a nightly deployment.

Capacity is reserved for peak load, so between hiring waves some resources sit idle, and growth in flow requires expanding the fleet rather than changing a setting.

When the hybrid setup is justified

Personal data remains inside the perimeter, while anonymized vector representations of profiles go outside — they are used to calculate candidate-vacancy closeness.

The setup is justified when hiring comes in waves: heavy compute scales in the cloud, while the resume archive and access are controlled inside. The downside is synchronization of the two perimeters and role differentiation: without this, isolation becomes a formality.

How implementation of a matching system is built in stages

The order of stages follows one logic: each subsequent step relies on the result of the previous one. A skipped or formally closed stage is immediately visible — the model confidently returns irrelevant pairs, and the recruiter stops trusting the results.

  1. Audit of current selection. We analyze how profiles are compared today, which features influence the decision, and record the metric by which we will accept the work.
  2. Data labeling. We clean duplicates, bring vacancy descriptions and resumes to a comparable form, and label candidate-vacancy pairs on a relevance scale.
  3. Model configuration. We train semantic matching on labeled pairs, separately testing similar professions, rare specializations, and incomplete profiles.
  4. Quality validation. We calculate hits in the top positions of the results, analyze errors by category, and if necessary return to labeling.
  5. Integration. We connect ranking to the customer's system of record, configure the cutoff threshold, and explain recommendations.
  6. Launch support. For the first weeks, we monitor how the results perform on the live flow and adjust the threshold.

Quality acceptance on a holdout set

We validate on pairs the model did not see during training: we look at the share of relevant profiles in the top part of the list, the share of obviously unsuitable candidates filtered out, and the stability of the result across slices by profession and region.

The decision is made according to pre-agreed thresholds, not by the feeling that “it looks reasonable.”

Handover of the solution and team training

We hand over configurations, the labeling scheme, the retraining procedure, and a set of regression test queries.

The customer's team learns to read the reasons for recommendations and flag erroneous pairs — these flags become material for the next retraining, already without our involvement.

The set of settings and documentation that remains with you

We hand over not only a working service but the entire set with which your team can support and develop it without us. Below is what goes to you along with access to the environment.

What is included in the set

  • System documentation: architecture, external integrations, extension points, known limitations.
  • Access rules: roles, service accounts, logging of access to personal data.
  • Support instructions: diagnosing quality degradation, rolling back the index version, incident analysis.
  • Configurations and weights: what can be used to change matching behavior without code changes.
  • Decision log: why the thresholds were chosen and how they were calibrated on your data.
  • Data flow diagram and the regulation for updating profile representations — below.

Data flow diagram

It shows the path from resume and vacancy to the ranked list: normalization, feature extraction, representation construction, comparison, post-filters. The places where personal data is stored and anonymized are marked separately.

Regulation for updating profile representations

It describes how often and by what trigger representations are recalculated: when a profile changes, on a schedule, after a model update. It includes the quality validation procedure and the conditions for rolling back to the previous version.

Project case study: how matching accuracy grew

The customer is the retail chain MarketLine: a flow of 900–1200 resumes per week for 60–80 open positions, with candidates arriving with incomparable job titles and experience descriptions.

Recruiters manually matched profiles against vacancy requirements, and search was by keywords. The task was formulated as follows: rank the flow, not filter it.

What it was before

The share of relevant candidates in the top ten results was about 40%: fewer than half of those recommended reached a call. For one closed position, on average more than 90 profiles were reviewed.

Lexical search lost a quarter of suitable people: “sales consultant” and “sales floor specialist” were considered different professions, and different spellings of the same specialization produced duplicates.

What changed after

Profiles and vacancy descriptions were converted into vector representations, and a hybrid result set was built on top: exact term matches plus semantic closeness, with re-ranking on top by experience, region, schedule, and job transition history.

Recruiter marks “shortlist” and “miss” were fed into regular relabeling, so ranking relies on which experience phrasings actually predict hiring.

Matching accuracy of profiles in the top ten grew to 78%, and synonym recall increased by about a quarter. Time to a ready shortlist dropped from three days to a few hours, and the share of search queries the recruiter corrected manually fell from 35% to 8%.

“Previously we argued about who reads resumes better. Now we argue about vacancy requirements — the recommendations come relevant and explainable,” says the head of the recruitment function.

How vector search differs from keyword search

Keywords compare tokens: whether a word in the resume matches a word in the vacancy description, plus Boolean conditions and rule-based selection. Vector search compares meaning: both texts are reduced to a vector, and closeness is calculated as the distance between them. The fork is simple — rules look for a feature, the vector looks for semantic closeness.

String search fails on synonyms: “managed eight engineers” and “development manager” are different documents to it.

The vector brings such pairs closer, but it does not guarantee mandatory requirements: it will return a similar candidate without the required clearance because it does not treat this condition as a hard exclusion.

Comparison by applicability:

Approach How it works Where it loses
Keywords and rules Token matching, Boolean conditions, experience thresholds Synonyms, paraphrases, adjacent experience
Vector search Closeness of meaning vectors No guarantees on mandatory requirements
Hybrid search Filters cut off, the vector ranks the remainder Two layers: more complex setup and monitoring

Rules are not an outdated layer but a quality contract. We hold mandatory conditions as filters before ranking, and the vector sorts those who have already passed the check, so the results contain no candidates violating requirements.

We calibrate the closeness threshold on labeled vacancy-candidate pairs; otherwise the results are either filled with just anything or empty.

We calculate metrics separately: for filters, the share that passed mandatory conditions; for the vector, the share relevant in the top ten. If the recruiter consistently rejects the top cards, the reason is the threshold or the vacancy description.

Technical concerns worth resolving before start

Concerns about such a project are usually the same: whether there is enough internal data, whether it can be kept inside the perimeter, what to do with rare specializations, and how to make sure the model actually matches better than the current ranking. Below are short answers to each point.

We do not have a huge application history — will the model have enough data?

For training, we need not a mountain of resumes but labeled candidate-vacancy pairs with an outcome: invitation, rejection, hire.

Several thousand such pairs already provide stable configuration; after that, volume is increased by labeling disputed cases that the model flags itself. We describe data labeling for training as a separate artifact — rules, field schema, and the procedure for replenishing them.

Can everything be kept in a closed perimeter?

Yes. Training and matching run inside your infrastructure; neither resumes nor model weights leave. Updates are delivered as ready artifacts and applied on your side — the closed perimeter remains even after handover.

What about rare specializations?

There are few examples for them, so the model relies on a skill hierarchy and synonym dictionaries, not only on frequency in history.

For narrow areas, the similarity threshold is raised, and the top of the results goes to manual review — this way a rare vacancy is not lost among mass ones.

How will you prove that matching has improved?

Matching quality is evaluated on a holdout set and a blind comparison with the current ranking: we look at the share of relevant profiles at the top of the results, recall on suitable candidates, and how often the recruiter opens a card from the top ten. We record the result in a before-and-after report.

What about model support after handover?

Model support includes monitoring drift between training and current data, a regression test set with every update, and planned retraining when the market or requirements change. Your engineers receive documentation and participate in updates together with us.

Let’s discuss the matching task and come back with an assessment

The conversation starts not with a presentation but with a breakdown of the matching task: which roles you close, how many resumes and applications pass through the funnel, and at which stage strong candidates are lost.

Based on the conversation, we record what we consider a good match — the system is later measured by these criteria, not by recruiters’ subjective impressions.

What happens after you reach out:

  • We break down the matching task and current process: resume sources, selection stages, who makes the final decision on a candidate.
  • We review the data: whether there is an application history and “fit / no fit” labeling, and how complete and consistent it is.
  • We assess the quality of vacancy and resume texts — this determines whether additional labeling and a job title synonym dictionary are needed.
  • We check how semantic candidate matching integrates into your systems: data exchange, access differentiation, manual review of disputed matches.
  • We agree on a pilot run on limited data: one or two vacancy groups, real resumes, an accuracy measurement on your labeling.
  • We come back with an assessment and work plan: stages, what is required on your side, and by what result we consider the task solved.
  • We record response times at each stage and a rollback point — if quality turns out lower than expected, selection continues to work as before.

Describe the matching task in a format convenient for you — we will come back with an assessment and work plan where every step has a deadline and a measurable result.

AI Development Areas

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1393
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1368
  • B2B Advance company logo design
    B2B Advance company logo design
    815
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1139
  • AIDER company logo development
    AIDER company logo development
    1057
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1152