maayan890/miluim-career-bridge
Miluim Career Bridge - Dataset Synthetic Hebrew-context job-ad pairs translating Israeli reserve-service (miluim) experience into civilian job language, across 8 categories. Generated with Qwen/Qwen2.5-1.5B-Instruct (see notebooks/01_generation.ipynb for the full pipeline). ⚠️ Note: the Hub split shown above (train) is a technical wrapper around the single parquet file. The dataset's actual train/test division is the split column inside the data (9536 train / 1000 test) - filter… See the full description on the dataset page: https://huggingface.co/datasets/maayan890/miluim-career-bridge.
Miluim Career Bridge - Dataset
Synthetic Hebrew-context job-ad pairs translating Israeli reserve-service (miluim) experience into civilian job language, across 8 categories. Generated with Qwen/Qwen2.5-1.5B-Instruct (see notebooks/01_generation.ipynb for the full pipeline).
⚠️ Note: the Hub split shown above (train) is a technical wrapper around the single parquet file. The dataset's actual train/test division is the `split` column inside the data (9536 train / 1000 test) - filter on that column, not on the Hub split.
Numbers
Categories
- Operations & Logistics
- Team Leadership
- Technical & Maintenance
- Communications & IT
- Training & Instruction
- Administration & HR
- Security & Risk Management
- Medical & Emergency Response
Schema
Rejection funnel
EDA findings
Full analysis in notebooks/02_eda.ipynb. Headlines:
- Length bounds - 0 out-of-bounds rows in the final dataset on any of the three validated fields (servicerole, jobtitle, job_ad); the generation-time validator already enforces this, this is an independent recheck.
- Vocabulary split (service register vs. civilian register) - mean word-overlap between
service_roleandjob_adis 0.251 (0 = fully disjoint vocab, 1 = identical). 0 military-term leaks into jobad, 0 civilian-term leaks into servicerole - both zero on the full dataset. - Category balance - ranges from 884 (Medical & Emergency Response) to 1555 (Technical & Maintenance) rows. The gap traces to acceptance rate, not to sampling: categories are requested round-robin (equal attempts each), but rows whose natural vocabulary sits closer to
FORBIDDEN_TERMSget rejected more often - e.g. medical/emergency phrasing more easily reads as injury-adjacent than logistics or IT phrasing does. - Known check-ordering caveat -
validate()in 01 checks word-count bounds before term-violation checks, so a record failing both gets logged only astoo_short_*. 153 of 928 (16.5%)too_short_*rejections would also have failed a term check - underestimates true term-violation rejections by that amount in the funnel above. Does not affect any row in the accepted dataset.
Usage
import pandas as pd
df = pd.read_parquet("hf://datasets/maayan890/miluim-career-bridge/data/dataset.parquet")
train, test = df[df.split == "train"], df[df.split == "test"]