Downloads · 30 days
0
mithinsagar/exai-resumeintel-models
exai-resumeintel-models is a sentence similarity model from mithinsagar. Use it when you need a score for how close two texts are. It is set up for sentence-transformers. The card lists the license as mit.
Precomputed model artifacts for EXAI-ResumeIntel, an explainable artificial intelligence framework for automated resume analysis using Shapley values, LIME, and a hierarchical domain skill ontology.
Downloads · 30 days
0
Access
Public
Updated Aug 7, 2026
Repo size
6.1 GB
Likes
0
Public
Click a slice to open those files.
.memmap5 GB · 82%
From the Hugging Face model README
Precomputed model artifacts for EXAI-ResumeIntel, an explainable artificial intelligence framework for automated resume analysis using Shapley values, LIME, and a hierarchical domain skill ontology.
Author: Mithin Sagar S · github.com/mithinsagar Institution: Vellore Institute of Technology (VIT), Vellore, Tamil Nadu, India Code repository: github.com/mithinsagar/EXAI-ResumeIntel Companion datasets: mithinsagar/exai-resumeintel-data
This repository hosts the large binary artifacts required to run EXAI-ResumeIntel without recomputing embeddings from scratch. Encoding over one million job postings with a transformer model is expensive; these files let anyone clone the code repository and have a working system in minutes.
| File | Size | Description |
|---|---|---|
job_df.pkl | 1.12 GB | Pickled pandas DataFrame of job postings with a Role column |
job_embeddings.memmap | 4.96 GB | Memory-mapped float32 SBERT embedding matrix aligned row-wise with job_df.pkl |
job_df.pklA pickled pandas.DataFrame containing the job postings corpus. The Role column is used for exact and fuzzy role lookup during matching. Row order is significant: row i of this DataFrame corresponds to row i of the embedding matrix.
job_embeddings.memmapA raw float32 array of shape (n_jobs, 768) written in C order, containing sentence embeddings produced by sentence-transformers/all-mpnet-base-v2. Stored as a memory-map so that similarity search can stream over the corpus in chunks without loading roughly 5 GB into RAM.
Shape is inferred at load time from the file size and the DataFrame row count, falling back to a dimensionality of 768 when the division is not exact.
hf download mithinsagar/exai-resumeintel-models \
--repo-type model --local-dir models
import numpy as np
import pandas as pd
from huggingface_hub import hf_hub_download
df_path = hf_hub_download(
repo_id="mithinsagar/exai-resumeintel-models",
filename="job_df.pkl",
)
mm_path = hf_hub_download(
repo_id="mithinsagar/exai-resumeintel-models",
filename="job_embeddings.memmap",
)
job_df = pd.read_pickle(df_path)
n_rows = len(job_df)
dim = 768
job_embeddings = np.memmap(
mm_path, dtype=np.float32, mode="r", shape=(n_rows, dim), order="C"
)
print(f"{n_rows:,} job postings, {dim}-dimensional embeddings")
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2")
resume_vec = model.encode([resume_text], convert_to_numpy=True)[0]
def chunked_cosine(query, matrix, chunk_size=1024):
sims = np.empty(matrix.shape[0], dtype=np.float32)
q_norm = np.linalg.norm(query) + 1e-8
for start in range(0, matrix.shape[0], chunk_size):
end = min(start + chunk_size, matrix.shape[0])
batch = np.array(matrix[start:end], copy=False)
sims[start:end] = (batch @ query) / (
np.linalg.norm(batch, axis=1) * q_norm + 1e-8
)
return sims
similarities = chunked_cosine(resume_vec, job_embeddings)
git clone https://github.com/mithinsagar/EXAI-ResumeIntel.git
cd EXAI-ResumeIntel
pip install -r requirements.txt
bash scripts/download_data.sh # fetches this repo and the dataset repo
streamlit run app/main.py
Embeddings were produced with sentence-transformers/all-mpnet-base-v2, a 768-dimensional sentence encoder. No fine-tuning was applied; these are frozen inference-time embeddings of the job posting corpus.
Note that the EXAI research pipeline described in the accompanying paper uses a separate, from-scratch TF-IDF plus Truncated SVD engine (150 dimensions, 27.8% explained variance) rather than SBERT. The SBERT artifacts here power the interactive application layer, which performs large-scale semantic retrieval across the full job corpus. Both paths are documented in the code repository.
from sentence_transformers import SentenceTransformer
import numpy as np, pandas as pd
df = pd.read_csv("data/raw/jobs_dataset_with_features.csv")
model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2")
embeddings = model.encode(
df["Features"].fillna("").tolist(),
batch_size=64,
convert_to_numpy=True,
show_progress_bar=True,
).astype(np.float32)
embeddings.tofile("models/job_embeddings.memmap")
df.to_pickle("models/job_df.pkl")
This takes several hours on GPU and considerably longer on CPU, which is why the precomputed artifacts are published here.
These artifacts support reproducible research in explainable resume screening and semantic job matching. They are intended for research, education, and demonstration.
Embeddings inherit the semantic biases of both the underlying all-mpnet-base-v2 model and the job posting corpus. Similarity scores between a resume and a role reflect linguistic proximity, not candidate suitability, and must not be treated as a hiring decision.
Any real-world deployment should include bias auditing across protected attributes, mandatory human review of adverse outcomes, and compliance with applicable employment and algorithmic transparency law. The EXAI framework provides Shapley, LIME, and counterfactual explanations precisely so that these decisions remain auditable.
@software{sagar2026exai,
author = {Mithin Sagar S},
title = {{EXAI-ResumeIntel: An Explainable Artificial Intelligence
Framework for Automated Resume Analysis Using Shapley
Values, LIME, and Domain Skill Ontology}},
year = {2026},
publisher = {GitHub},
url = {https://github.com/mithinsagar/EXAI-ResumeIntel}
}
MIT