NithyaAla commited on
Commit
5bd2b83
·
verified ·
1 Parent(s): 30b75d5

Update skill_extraction.py

Browse files
Files changed (1) hide show
  1. skill_extraction.py +9 -16
skill_extraction.py CHANGED
@@ -14,11 +14,11 @@ except OSError:
14
  # Embedding model
15
  model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
16
 
17
- # Load skills from JSON file
18
  with open("skills_vocab.json", "r", encoding="utf-8") as f:
19
  SKILL_VOCAB = json.load(f)["skills"]
20
 
21
- # Precompute embeddings once
22
  skill_embeddings = model.encode(SKILL_VOCAB, convert_to_numpy=True, normalize_embeddings=True)
23
 
24
  def extract_skills(text, threshold=0.50):
@@ -30,23 +30,16 @@ def extract_skills(text, threshold=0.50):
30
 
31
  sentence_embeddings = model.encode(sentences, convert_to_numpy=True, normalize_embeddings=True)
32
 
33
- skill_confidences = {}
34
 
 
35
  for j, skill_emb in enumerate(skill_embeddings):
36
- sims = np.dot(sentence_embeddings, skill_emb) # similarity to sentences
37
  max_sim = float(np.max(sims))
38
-
39
  if max_sim >= threshold:
40
- skill_confidences[SKILL_VOCAB[j]] = round(max_sim, 2)
41
-
42
- return sorted(skill_confidences.items(), key=lambda x: x[1], reverse=True)
43
 
 
 
44
 
45
- def get_skill_embedding(skill_name):
46
- """
47
- Return embedding for a skill stored in SKILL_VOCAB
48
- """
49
- if skill_name not in SKILL_VOCAB:
50
- return None
51
- idx = SKILL_VOCAB.index(skill_name)
52
- return skill_embeddings[idx]
 
14
  # Embedding model
15
  model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
16
 
17
+ # Load skills from JSON
18
  with open("skills_vocab.json", "r", encoding="utf-8") as f:
19
  SKILL_VOCAB = json.load(f)["skills"]
20
 
21
+ # Precompute skill embeddings
22
  skill_embeddings = model.encode(SKILL_VOCAB, convert_to_numpy=True, normalize_embeddings=True)
23
 
24
  def extract_skills(text, threshold=0.50):
 
30
 
31
  sentence_embeddings = model.encode(sentences, convert_to_numpy=True, normalize_embeddings=True)
32
 
33
+ extracted = []
34
 
35
+ # Iterate skill-by-skill
36
  for j, skill_emb in enumerate(skill_embeddings):
37
+ sims = np.dot(sentence_embeddings, skill_emb)
38
  max_sim = float(np.max(sims))
 
39
  if max_sim >= threshold:
40
+ best_sentence = sentences[int(np.argmax(sims))]
41
+ extracted.append((SKILL_VOCAB[j], round(max_sim, 2), best_sentence))
 
42
 
43
+ # Sort highest confidence first
44
+ return sorted(extracted, key=lambda x: x[1], reverse=True)
45