AI-Ranked Candidate Shortlist
DeepScreen's shortlisting engine follows the retrieve-then-rerank paradigm: cheap vector search builds a broad candidate pool, expensive cross-encoding narrows to the most relevant candidates, and BM25 lexical scoring catches exact matches that dense embeddings miss. The cheapest operation always runs first.
Shortlisting Stages
| Stage | Model | Pool | Weight |
|---|---|---|---|
1 Vector Retrieval | all-mpnet-base-v2 ONNX INT8 | All → 2K | 0.20 |
2 Cross-Encoder Re-ranking | ms-marco-MiniLM-L12-v2 ONNX INT8 | 2K → K | 0.65 |
3 BM25 Lexical Scoring | BM25 (raw_full_text) | K → K | 0.15 |
Stage Details
Stage 1: Vector Retrieval
All → 2KFour parallel Qdrant gRPC searches across Skills, Projects, Experience, and Summary collections. COSINE distance metric with HNSW parameters: m=16, ef_construct=200, ef=128. The has_id() filter ensures only candidates who passed screening enter the pool. Recall@10 = 0.93 at this stage means we retain 93% of truly relevant candidates while discarding 98% of the total pool.
Stage 2: Cross-Encoder Re-ranking
2K → KThe cross-encoder processes all four field pairs (resume section × job description) in a single batched session.run(). Input tensor is shaped [4 × max_len] enabling parallel attention across all fields. This is ~3x faster than sequential processing. INT8 quantization reduces the model from 134MB to 34MB with negligible accuracy loss.
Stage 3: BM25 Lexical Scoring
K → KClassical BM25 with k₁=1.2, b=0.75 runs against the raw full-text of resumes. This recovers exact matches for version numbers, certification codes, tool names, and specific methodologies that dense embeddings tend to smooth over. A candidate mentioning 'CKAD' exactly matches a job requiring 'CKAD' — no semantic approximation.
Score Blend
score(u) = 0.65 · c_n(u) + 0.20 · v_n(u) + 0.15 · b_n(u)All scores min-max normalised within top-K pool. Neutral 0.5 when all candidates are tied.
Section-Wise vs Whole-Document
| Metric | Whole-Doc | Section-Wise | Gain |
|---|---|---|---|
Precision@5 | 0.72 | 0.81 | +12.5% |
Precision@10 | 0.68 | 0.76 | +11.4% |
Recall@10 | 0.74 | 0.83 | +12.2% |
NDCG@10 | 0.71 | 0.79 | +11.3% |
MRR | 0.76 | 0.84 | +10.5% |
Internal benchmark on 500 candidates, 50 job descriptions.