|
from sentence_transformers import SentenceTransformer |
|
from sklearn.metrics.pairwise import cosine_similarity |
|
import numpy as np |
|
import pandas as pd |
|
import pickle |
|
st = SentenceTransformer('all-mpnet-base-v2') |
|
filename = 'svc.pkl' |
|
|
|
with open(filename, 'rb') as file: |
|
model = pickle.load(file) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def predict(cv, job): |
|
diffYoe = cv['yoe'] - job['minYoE'] |
|
results = {} |
|
role_req_exp = cosine_similarity(st.encode(cv['experiences']).reshape(1,-1), st.encode(job['role']+'\n'+job['jobDesc']).reshape(1,-1))[0][0] if cv['experiences'] != '[]' else 0 |
|
role_pos = cosine_similarity(st.encode(cv['positions']).reshape(1,-1), st.encode(job['role']).reshape(1,-1))[0][0] if cv['positions'] != '[]' else 0 |
|
major_similarity = cosine_similarity(st.encode(cv['userMajors']).reshape(1,-1), st.encode(job['majors']).reshape(1,-1))[0][0] if cv['userMajors'] != '[]' else 0 |
|
skill_similarity = cosine_similarity(st.encode(cv['skills']).reshape(1,-1), st.encode(job['skills']).reshape(1,-1))[0][0] if cv['skills'] != '[]' else 0 |
|
score_yoe = 0.5 if diffYoe == -1 else (0 if diffYoe < 0 else 1) |
|
score = 0.35 * role_req_exp + 0.1 * role_pos + 0.15 * major_similarity + 0.3* score_yoe + 0.1 * skill_similarity |
|
data = [{ |
|
'role_req-exp': role_req_exp, |
|
'role_pos': role_pos, |
|
'major_similarity': major_similarity, |
|
'skill_similarity': skill_similarity, |
|
'score': score |
|
}] |
|
X = pd.DataFrame.from_dict(data) |
|
res = model.predict(X) |
|
results['score'] = model.predict_proba(X)[:, 1] |
|
results['is_accepted'] = res[0] |
|
return results |