|
from sentence_transformers import SentenceTransformer
|
|
from sklearn.metrics.pairwise import cosine_similarity
|
|
import numpy as np
|
|
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.minimumYoe
|
|
results = {}
|
|
role_req_exp = cosine_similarity(st.encode(cv['experiences']), st.encode(job['role']+' '+job['jobDesc']))
|
|
role_pos = cosine_similarity(st.encode(cv['positions']), st.encode(job['role']))
|
|
major_similarity = cosine_similarity(st.encode(cv['userMajors']), st.encode(job['majors']))
|
|
skill_similarity = cosine_similarity(st.encode(cv['skills']), st.encode(job['skills']))
|
|
score_yoe = 0.5 if diffYoe == -1 else (1 if diffYoe > 0 else 0)
|
|
score = 0.35 * role_req_exp + 0.1 * role_pos + 0.15 * major_similarity + 0.3* score_yoe + 0.1 * skill_similarity
|
|
X = np.array([role_req_exp, role_pos, major_similarity, skill_similarity, score]).reshape(1, -1)
|
|
res = model.predict(X)
|
|
results['score'] = model.predict(X)[:, 1]
|
|
results['is_accepted'] = np.argmax(res)
|
|
return results |