skillsync-cli / model /inference /glove_inference.py
Mr-Haseeb786
Sanitized Production Build
56c7b6d
Raw
History Blame Contribute Delete
2.08 kB
import numpy as np
from gensim.models import KeyedVectors
from utils.text_processing import tokenize_text
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def load_model(model_path):
try:
model = KeyedVectors.load(model_path)
logger.info(f"Loaded GloVe model from {model_path}")
return model
except Exception as e:
logger.error(f"Error loading GloVe model: {e}")
return None
def average_embeddings(model, tokens):
valid_embeddings = [model[word] for word in tokens if word in model]
if valid_embeddings:
return np.mean(valid_embeddings, axis=0)
return None
def calculate_similarity(model, text1, text2):
try:
tokens1 = tokenize_text(text1)
tokens2 = tokenize_text(text2)
vec1 = average_embeddings(model, tokens1)
vec2 = average_embeddings(model, tokens2)
if vec1 is not None and vec2 is not None:
# Handle zero vectors to avoid division by zero
norm1 = np.linalg.norm(vec1)
norm2 = np.linalg.norm(vec2)
if norm1 == 0 or norm2 == 0:
return 0.0
similarity = np.dot(vec1, vec2) / (norm1 * norm2)
return max(0, min(1, similarity)) * 100 # Convert to percentage
return 0.0
except Exception as e:
logger.error(f"Similarity calculation error: {e}")
return 0.0
# ADD THIS FUNCTION TO FIX THE ERROR
def calculate_text_similarity(model, text1, text2):
"""Calculate similarity between two text strings"""
return calculate_similarity(model, text1, text2)
def get_job_embeddings(model, job_taxonomy):
embeddings = []
vector_size = model.vector_size
for job in job_taxonomy:
tokens = tokenize_text(job)
emb = average_embeddings(model, tokens)
if emb is None:
# Use zero vector if embedding can't be computed
emb = np.zeros(vector_size)
embeddings.append(emb)
return np.array(embeddings)