Update README.md
Browse files
README.md
CHANGED
|
@@ -32,83 +32,8 @@ A ranking system built purely on heuristic scoring rules tends to reward whateve
|
|
| 32 |
|
| 33 |
The pipeline is split into two phases. The offline phase has no time limit and produces a set of precomputed artifacts. The online phase is what actually runs during the competition's 300 second window, and only touches those artifacts plus the live candidate pool.
|
| 34 |
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
%% Define classes with light pastel fills, complementary borders, and dark text for contrast
|
| 38 |
-
classDef data fill:#e0f2fe,stroke:#0284c7,stroke-width:1px,color:#0f172a;
|
| 39 |
-
classDef llm fill:#f3e8ff,stroke:#7e22ce,stroke-width:1px,color:#0f172a;
|
| 40 |
-
classDef offline fill:#ffedd5,stroke:#c2410c,stroke-width:1px,color:#0f172a;
|
| 41 |
-
classDef online fill:#dcfce7,stroke:#15803d,stroke-width:1px,color:#0f172a;
|
| 42 |
-
|
| 43 |
-
candidates_jsonl["candidates.jsonl<br/>(100,000 records)"]:::data
|
| 44 |
-
submission_csv["submission.csv<br/>(100 ranked candidates)"]:::data
|
| 45 |
-
|
| 46 |
-
subgraph offline_phase [OFFLINE PHASE]
|
| 47 |
-
subgraph gemma3_annotation [GEMMA3 PAIRWISE ANNOTATION]
|
| 48 |
-
stratified_sample["Stratified Sample of<br/>500 Candidates"]:::llm
|
| 49 |
-
pairwise_comparisons["2,500 Pairwise Comparisons<br/>(Local Gemma3 LLM)"]:::llm
|
| 50 |
-
elo_ratings["Laplace-smoothed<br/>Elo Ratings"]:::llm
|
| 51 |
-
relevance_labels["Quartile Thresholding to<br/>Relevance Labels 0-3"]:::llm
|
| 52 |
-
|
| 53 |
-
stratified_sample --> pairwise_comparisons
|
| 54 |
-
pairwise_comparisons --> elo_ratings
|
| 55 |
-
elo_ratings --> relevance_labels
|
| 56 |
-
end
|
| 57 |
-
|
| 58 |
-
bm25_index_build["BM25 Index Build<br/>(NumPy CSR matrix)"]:::offline
|
| 59 |
-
static_feature_precompute["Static Feature Precompute<br/>(18 JD-independent features)"]:::offline
|
| 60 |
-
|
| 61 |
-
lightgbm_training["LIGHTGBM TRAINING<br/>Objective: lambdarank<br/>early stop on NDCG@5"]:::offline
|
| 62 |
-
|
| 63 |
-
bm25_index_build --> precomputed_artifacts_box
|
| 64 |
-
static_feature_precompute --> precomputed_artifacts_box
|
| 65 |
-
relevance_labels --> lightgbm_training
|
| 66 |
-
static_feature_precompute --> lightgbm_training
|
| 67 |
-
bm25_index_build --> lightgbm_training
|
| 68 |
-
|
| 69 |
-
lightgbm_training --> precomputed_artifacts_box
|
| 70 |
-
|
| 71 |
-
precomputed_artifacts_box["PRECOMPUTED ARTIFACTS<br/>lgbm_model.txt<br/>bm25_matrix.npz<br/>static_features.pkl"]:::data
|
| 72 |
-
end
|
| 73 |
-
|
| 74 |
-
subgraph online_ranking_phase [ONLINE RANKING PHASE]
|
| 75 |
-
stage_0["Stage 0: Load Precomputed Artifacts<br/>(BM25, LightGBM, static features)"]:::online
|
| 76 |
-
|
| 77 |
-
stage_1["Stage 1: Dual-pass BM25 Retrieval<br/>Pass A: JD skills on skills array<br/>Pass B: production keywords on career descriptions<br/>Narrow to ~8,500 candidates"]:::online
|
| 78 |
-
|
| 79 |
-
stage_2["Stage 2: Load Stage 1 Records<br/>(Byte-offset index, O(1))"]:::online
|
| 80 |
-
|
| 81 |
-
stage_2b["Stage 2b: Feature Engineering<br/>(22 features, adversarial detection,<br/>consistency score)"]:::online
|
| 82 |
-
|
| 83 |
-
stage_4["Stage 4: LightGBM Inference<br/>(final_score = raw_score * consistency_score)"]:::online
|
| 84 |
-
|
| 85 |
-
stage_5["Stage 5: Reasoning Compiler<br/>(Deterministic grammar, 4 templates,<br/>priority concerns, numeric audit)"]:::online
|
| 86 |
-
|
| 87 |
-
stage_6["Stage 6: Blocking Audits + CSV Write<br/>(Honeypot, diversity, monotonicity checks)"]:::online
|
| 88 |
-
|
| 89 |
-
stage_0 --> stage_1
|
| 90 |
-
stage_1 --> stage_2
|
| 91 |
-
stage_2 --> stage_2b
|
| 92 |
-
stage_2b --> stage_4
|
| 93 |
-
stage_4 --> stage_5
|
| 94 |
-
stage_5 --> stage_6
|
| 95 |
-
stage_6 --> submission_csv
|
| 96 |
-
end
|
| 97 |
-
|
| 98 |
-
candidates_jsonl --> offline_phase
|
| 99 |
-
candidates_jsonl --> stage_1
|
| 100 |
-
|
| 101 |
-
precomputed_artifacts_box --> stage_0
|
| 102 |
-
precomputed_artifacts_box -.-> stage_2
|
| 103 |
-
precomputed_artifacts_box -.-> stage_2b
|
| 104 |
-
precomputed_artifacts_box -.-> stage_4
|
| 105 |
-
|
| 106 |
-
%% Use transparent fills (none) so it inherits GitHub's native dark/light themes seamlessly
|
| 107 |
-
style offline_phase fill:none,stroke:#777,stroke-width:2px,stroke-dasharray: 5 5
|
| 108 |
-
style online_ranking_phase fill:none,stroke:#777,stroke-width:2px,stroke-dasharray: 5 5
|
| 109 |
-
style gemma3_annotation fill:none,stroke:#555,stroke-width:1px
|
| 110 |
-
|
| 111 |
-
```
|
| 112 |
---
|
| 113 |
|
| 114 |
## Quick Start
|
|
|
|
| 32 |
|
| 33 |
The pipeline is split into two phases. The offline phase has no time limit and produces a set of precomputed artifacts. The online phase is what actually runs during the competition's 300 second window, and only touches those artifacts plus the live candidate pool.
|
| 34 |
|
| 35 |
+

|
| 36 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
---
|
| 38 |
|
| 39 |
## Quick Start
|