Spaces:
Sleeping
Sleeping
mismatch deletion
Browse files- README.md +10 -1
- __pycache__/embedding_gen.cpython-312.pyc +0 -0
- app.py +34 -16
- config.yaml +2 -2
- data/tags-04-01-2025.jsonl +123 -0
- demo-app.py +6 -0
- demo.py +39 -0
- embedding_gen.py +40 -27
- filter-faults.py +33 -0
- job-postings/{03-01-2024 β 03-01-2025}/1.txt +0 -0
- job-postings/{03-01-2024 β 03-01-2025}/2.txt +0 -0
- job-postings/{03-01-2024 β 03-01-2025}/3.txt +0 -0
- job-postings/{04-01-2024 β 04-01-2025}/1.txt +0 -0
- job-postings/{04-01-2024 β 04-01-2025}/2.txt +0 -0
- job-postings/{04-01-2024 β 04-01-2025}/3.txt +0 -0
- llm-tagging.py +53 -7
- plots/03-01-2024_2D_projection.png +0 -0
- plots/03-01-2024_3D_clustering.html +0 -0
- plots/03-01-2024_3D_projection.html +0 -0
- requirements.txt +3 -1
- tag-posting.py +6 -1
- tags/{03-01-2024 β 03-01-2025}/1.txt +0 -0
- tags/{03-01-2024 β 03-01-2025}/2.txt +0 -0
- tags/{03-01-2024 β 03-01-2025}/3.txt +0 -0
- tags/{04-01-2024 β 04-01-2025}/1.txt +0 -0
- tags/{04-01-2024 β 04-01-2025}/2.txt +0 -0
- tags/{04-01-2024 β 04-01-2025}/3.txt +0 -0
- train.py +9 -1
- vectorstore/03-01-2024_embeddings.npy +0 -0
- vectorstore/03-01-2024_metadata.pkl +0 -0
README.md
CHANGED
@@ -31,7 +31,7 @@ Save all skills. Make a comprehensive overview by:
|
|
31 |
1. Embed skills to a vector with an embedding model
|
32 |
2. Perform clustering with HDBSCAN
|
33 |
2. Visualize clustering with dimensionality reduction (UMAP)
|
34 |
-
|
35 |
Inspiration: [link](https://dylancastillo.co/posts/clustering-documents-with-openai-langchain-hdbscan.html)
|
36 |
|
37 |
|
@@ -46,3 +46,12 @@ You should define your own project by writing at most one page description of th
|
|
46 |
### What to deliver
|
47 |
You should deliver your project as a stand alone serverless ML system. You should submit a URL for your service, a zip file containing your code, and a short report (two to three pages) about what you have done, the dataset, your method, your results, and how to run the code. I encourage you to have the README.md for your project in your Github report as the report for your project.
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
1. Embed skills to a vector with an embedding model
|
32 |
2. Perform clustering with HDBSCAN
|
33 |
2. Visualize clustering with dimensionality reduction (UMAP)
|
34 |
+
|
35 |
Inspiration: [link](https://dylancastillo.co/posts/clustering-documents-with-openai-langchain-hdbscan.html)
|
36 |
|
37 |
|
|
|
46 |
### What to deliver
|
47 |
You should deliver your project as a stand alone serverless ML system. You should submit a URL for your service, a zip file containing your code, and a short report (two to three pages) about what you have done, the dataset, your method, your results, and how to run the code. I encourage you to have the README.md for your project in your Github report as the report for your project.
|
48 |
|
49 |
+
|
50 |
+
|
51 |
+
|
52 |
+
|
53 |
+
1. Scraping
|
54 |
+
2. Tagging of JP
|
55 |
+
- tag date
|
56 |
+
3. Training
|
57 |
+
4. Visualisation
|
__pycache__/embedding_gen.cpython-312.pyc
ADDED
Binary file (6.41 kB). View file
|
|
app.py
CHANGED
@@ -1,14 +1,16 @@
|
|
1 |
import gradio as gr
|
2 |
from transformers import pipeline
|
|
|
|
|
|
|
3 |
|
4 |
token_skill_classifier = pipeline(model="jjzha/jobbert_skill_extraction", aggregation_strategy="first")
|
5 |
-
token_knowledge_classifier = pipeline(model="
|
6 |
|
7 |
|
8 |
examples = [
|
9 |
-
"
|
10 |
-
"
|
11 |
-
"Experience with Unreal and/or Unity and/or native IOS/Android 3D development and/or Web based 3D engines",
|
12 |
]
|
13 |
|
14 |
|
@@ -29,11 +31,7 @@ def aggregate_span(results):
|
|
29 |
return new_results
|
30 |
|
31 |
def ner(text):
|
32 |
-
|
33 |
-
for result in output_skills:
|
34 |
-
if result.get("entity_group"):
|
35 |
-
result["entity"] = "Skill"
|
36 |
-
del result["entity_group"]
|
37 |
|
38 |
output_knowledge = token_knowledge_classifier(text)
|
39 |
for result in output_knowledge:
|
@@ -41,17 +39,37 @@ def ner(text):
|
|
41 |
result["entity"] = "Knowledge"
|
42 |
del result["entity_group"]
|
43 |
|
44 |
-
if len(output_skills) > 0:
|
45 |
-
output_skills = aggregate_span(output_skills)
|
46 |
if len(output_knowledge) > 0:
|
47 |
output_knowledge = aggregate_span(output_knowledge)
|
48 |
|
49 |
-
return {"text": text, "entities":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
examples=examples)
|
56 |
|
57 |
demo.launch()
|
|
|
1 |
import gradio as gr
|
2 |
from transformers import pipeline
|
3 |
+
from embedding_gen import load_skills_from_date, visualize3D
|
4 |
+
import numpy as np
|
5 |
+
import pickle
|
6 |
|
7 |
token_skill_classifier = pipeline(model="jjzha/jobbert_skill_extraction", aggregation_strategy="first")
|
8 |
+
token_knowledge_classifier = pipeline(model="Robzy/jobbert_knowledge_extraction", aggregation_strategy="first")
|
9 |
|
10 |
|
11 |
examples = [
|
12 |
+
"High proficiency in Python and AI/ML frameworks, i.e. Pytorch.",
|
13 |
+
"Experience with Unreal and/or Unity and/or native IOS/Android 3D development",
|
|
|
14 |
]
|
15 |
|
16 |
|
|
|
31 |
return new_results
|
32 |
|
33 |
def ner(text):
|
34 |
+
|
|
|
|
|
|
|
|
|
35 |
|
36 |
output_knowledge = token_knowledge_classifier(text)
|
37 |
for result in output_knowledge:
|
|
|
39 |
result["entity"] = "Knowledge"
|
40 |
del result["entity_group"]
|
41 |
|
|
|
|
|
42 |
if len(output_knowledge) > 0:
|
43 |
output_knowledge = aggregate_span(output_knowledge)
|
44 |
|
45 |
+
return {"text": text, "entities": output_knowledge}
|
46 |
+
|
47 |
+
|
48 |
+
import plotly.express as px
|
49 |
+
import numpy as np
|
50 |
+
|
51 |
+
specific_date = "03-01-2024" # Example date folder to process
|
52 |
+
skills = load_skills_from_date('./tags', specific_date)
|
53 |
+
embeddings = np.load(f"./vectorstore/{specific_date}_embeddings.npy")
|
54 |
+
with open(f"./vectorstore/{specific_date}_metadata.pkl", "rb") as f:
|
55 |
+
metadata = pickle.load(f)
|
56 |
+
labels, skills = metadata["labels"], metadata["skills"]
|
57 |
+
fig = visualize3D(embeddings, labels, skills, n_clusters=5, output_folder="./plots", date=specific_date)
|
58 |
+
fig.update_layout(
|
59 |
+
height=900
|
60 |
+
)
|
61 |
|
62 |
+
with gr.Blocks() as demo:
|
63 |
+
|
64 |
+
gr.Interface(fn=ner,
|
65 |
+
inputs=gr.Textbox(placeholder="Enter sentence here..."),
|
66 |
+
outputs=["highlight"],
|
67 |
+
examples=examples,
|
68 |
+
title="In-demand skills in machine learning (ML) industry"
|
69 |
+
)
|
70 |
|
71 |
+
# gr.Markdown("Embedding visualisation of sought skills in ML job posting in Stockholm, Sweden on LinkedIn")
|
72 |
+
gr.Plot(fig)
|
73 |
+
|
|
|
74 |
|
75 |
demo.launch()
|
config.yaml
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
training:
|
2 |
-
epochs:
|
3 |
-
batch_size:
|
4 |
learning_rate: 0.00005
|
|
|
1 |
training:
|
2 |
+
epochs: 2
|
3 |
+
batch_size: 32
|
4 |
learning_rate: 0.00005
|
data/tags-04-01-2025.jsonl
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{"tokens": ["About", "the", "job"], "tags_knowledge": ["O", "O", "O"]}
|
2 |
+
{"tokens": ["R", "##ill", "##ion", "is", "seeking", "a", "skilled", "AI", "Engineer", "to", "join", "our", "innovative", "Data", "/", "AI", "team", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "B", "O", "B", "O", "O"]}
|
3 |
+
{"tokens": ["In", "this", "role", ",", "you", "\u2019", "ll", "be", "pivotal", "in", "developing", "machine", "learning", "models", "that", "drive", "AI", "-", "powered", "AP", "(", "A", "##cco", "##unts", "Pay", "##able", ")", "automation", "and", "enhance", "our", "products", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "B", "O", "O", "B", "O", "O", "B", "O", "B", "I", "I", "I", "I", "O", "B", "O", "O", "O", "O", "O"]}
|
4 |
+
{"tokens": ["Together", ",", "we", "collaborate", "across", "the", "entire", "product", "life", "##cycle", "\u2014", "from", "brains", "##tor", "##ming", "and", "design", "to", "implementation", "\u2014", "unlock", "##ing", "AI", "\u2019", "s", "potential", "in", "AP", "automation", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "O", "O", "O", "O", "O", "O", "B", "O", "B", "O", "O", "O", "B", "O", "O", "O", "O", "B", "B", "O"]}
|
5 |
+
{"tokens": ["If", "you", "\u2019", "re", "an", "experienced", "AI", "/", "M", "##L", "developer", "who", "th", "##rive", "##s", "in", "a", "dynamic", "environment", ",", "we", "\u2019", "d", "love", "to", "have", "you", "on", "board", "!"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "B", "O", "B", "I", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
6 |
+
{"tokens": ["Re", "##sp", "##ons", "##ibi", "##lities", ":"], "tags_knowledge": ["O", "O", "O", "O", "O", "O"]}
|
7 |
+
{"tokens": ["The", "AI", "Engineer", "plays", "a", "key", "role", "in", "developing", "and", "implementing", "AI", "technologies", "into", "our", "Sa", "##a", "##S", "products", ",", "with", "a", "focus", "on", "technical", "execution", "rather", "than", "leadership", "."], "tags_knowledge": ["O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "B", "I", "I", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O"]}
|
8 |
+
{"tokens": ["This", "role", "is", "critical", "in", "building", ",", "integrating", ",", "and", "op", "##ti", "##mizing", "AI", "/", "M", "##L", "solutions", "to", "meet", "product", "goals", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "B", "I", "O", "O", "O", "O", "O", "O"]}
|
9 |
+
{"tokens": ["Dev", "##elo", "##p", "and", "implement", "s", "##cal", "##able", "AI", "/", "M", "##L", "models", "that", "support", "product", "objectives", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "B", "I", "O", "O", "O", "O", "O", "O"]}
|
10 |
+
{"tokens": ["Col", "##la", "##bor", "##ate", "closely", "with", "product", ",", "engineering", ",", "and", "data", "teams", "to", "integrate", "AI", "features", "into", "our", "products", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "B", "O", "O", "O", "B", "O", "O", "O", "O", "O"]}
|
11 |
+
{"tokens": ["Stay", "up", "-", "to", "-", "date", "with", "emerging", "AI", "technologies", "and", "contribute", "to", "experimentation", "and", "innovation", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "O", "O", "O", "O"]}
|
12 |
+
{"tokens": ["B", "##uild", "and", "maintain", "effective", "AI", "/", "M", "##L", "pipeline", "##s", "and", "deployment", "infrastructure", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "B", "O", "B", "I", "O", "O", "O", "O", "O", "O"]}
|
13 |
+
{"tokens": ["What", "You", "'", "ll", "Bring", ":"], "tags_knowledge": ["O", "O", "O", "O", "O", "O"]}
|
14 |
+
{"tokens": ["2", "+", "years", "hands", "-", "on", "experience", "with", "putting", "self", "-", "developed", "machine", "learning", "solutions", "into", "a", "production", "environment", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "O", "O", "O"]}
|
15 |
+
{"tokens": ["High", "pro", "##ficiency", "in", "Python", "and", "AI", "/", "M", "##L", "framework", "##s", ",", "i", ".", "e", ".", "P", "##yt", "##or", "##ch", "."], "tags_knowledge": ["O", "O", "O", "O", "B", "O", "B", "O", "B", "I", "O", "O", "O", "O", "O", "O", "O", "B", "I", "I", "I", "O"]}
|
16 |
+
{"tokens": ["A", "curious", "minds", "##et", "with", "strong", "collaboration", "skills", "who", "is", "comfortable", "in", "environments", "without", "clear", "-", "cut", "processes", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
17 |
+
{"tokens": ["Master", "'", "s", "degree", "in", "engineering", "or", "similar", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "B", "O", "O", "O"]}
|
18 |
+
{"tokens": ["Bonus", "skills", ":"], "tags_knowledge": ["O", "O", "O"]}
|
19 |
+
{"tokens": ["Cloud", "Op", "##s", "and", "I", "##a", "##C", "tools", "such", "as", "Terra", "##form", "."], "tags_knowledge": ["B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "O"]}
|
20 |
+
{"tokens": ["M", "##L", "##O", "##ps", "best", "practices", "and", "tools", "like", "Data", "##bri", "##cks", "."], "tags_knowledge": ["B", "I", "I", "I", "O", "O", "O", "O", "O", "B", "I", "I", "O"]}
|
21 |
+
{"tokens": ["Knowledge", "of", "working", "with", "visually", "rich", "documents", "(", "V", "##RD", "##s", ")", "and", "genera", "##tive", "AI", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O"]}
|
22 |
+
{"tokens": ["Experience", "working", "with", "RA", "##G", ",", "LL", "##M", "evaluation", ",", "API", "-", "driven", "micro", "##ser", "##vice", "##s", ",", "cache", "management", "and", "production", "-", "level", "software", "."], "tags_knowledge": ["O", "O", "O", "B", "I", "O", "B", "I", "O", "O", "B", "O", "O", "B", "I", "I", "I", "O", "B", "O", "O", "O", "O", "O", "O", "O"]}
|
23 |
+
{"tokens": ["What", "we", "offer", ":"], "tags_knowledge": ["O", "O", "O", "O"]}
|
24 |
+
{"tokens": ["Op", "##port", "##unity", "to", "work", "in", "a", "dynamic", "growth", "company"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
25 |
+
{"tokens": ["Talent", "##ed", "colleagues", "ready", "to", "support", "the", "success", "in", "your", "career", "path"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
26 |
+
{"tokens": ["Social", "events", "with", "your", "colleagues", "(", "breakfast", ",", "candy", "-", "time", ",", "after", "##work", "etc", ".", ")"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
27 |
+
{"tokens": ["A", "collection", "of", "different", "benefits", ",", "including", "a", "generous", "pension", "and", "insurance", "package"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
28 |
+
{"tokens": ["Hybrid", "working", "model", ",", "2", "days", "per", "week", "in", "the", "office"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
29 |
+
{"tokens": ["Come", "and", "enjoy", "our", "beautiful", "office", "in", "central", "Stockholm", "(", "on", "the", "14th", "floor", ",", "with", "amazing", "views", ")"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
30 |
+
{"tokens": ["The", "recruitment", "process", ":"], "tags_knowledge": ["O", "O", "O", "O"]}
|
31 |
+
{"tokens": ["We", "review", "applications", "and", "invite", "for", "interviews", "continuously", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
32 |
+
{"tokens": ["A", "background", "check", "will", "be", "conducted", "on", "final", "candidates", ",", "pre", "-", "employment", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
33 |
+
{"tokens": ["About", "R", "##ill", "##ion", ":"], "tags_knowledge": ["O", "O", "O", "O", "O"]}
|
34 |
+
{"tokens": ["We", "are", "a", "global", "company", "founded", "in", "Sweden", "with", "30", "years", "\u2019", "experience", "in", "the", "AP", "Auto", "##mation", "industry", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "I", "O", "O"]}
|
35 |
+
{"tokens": ["By", "removing", "the", "manual", "steps", "of", "in", "##vo", "##ice", "handling", ",", "we", "enable", "finance", "teams", "to", "save", "time", "and", "effort", ",", "reducing", "the", "possibility", "of", "human", "error", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
36 |
+
{"tokens": ["Because", "we", "\u2019", "re", "AP", "professionals", "ourselves", ",", "we", "understand", "how", "to", "give", "our", "customers", "everything", "they", "need", ",", "and", "nothing", "they", "don", "\u2019", "t", "."], "tags_knowledge": ["O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
37 |
+
{"tokens": ["Together", "with", "our", "owners", "at", "Alto", "##r", ",", "we", "##\u00b4", "##re", "on", "a", "journey", "to", "expand", "in", "our", "home", "markets", ",", "while", "entering", "new", "territories", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
38 |
+
{"tokens": ["To", "complete", "our", "mission", ",", "we", "need", "more", "talented", "people", "!"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
39 |
+
{"tokens": ["R", "##ill", "##ion", "is", "an", "equal", "opportunity", "employer", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
40 |
+
{"tokens": ["About", "the", "job"], "tags_knowledge": ["O", "O", "O"]}
|
41 |
+
{"tokens": ["Job", "Des", "##cription"], "tags_knowledge": ["O", "O", "O"]}
|
42 |
+
{"tokens": ["We", "are", "on", "the", "journey", "to", "transform", "our", "digital", "capabilities", ",", "bringing", "core", "business", "processes", ",", "people", ",", "data", "&", "technology", "together", "-", "an", "enable", "##r", "for", "I", "##KE", "##A", "to", "become", "an", "even", "better", "home", "fur", "##nish", "##ing", "retailer", "in", "the", "future", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "B", "B", "B", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
43 |
+
{"tokens": ["If", "that", "sounds", "like", "you", ",", "come", "and", "join", "us", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
44 |
+
{"tokens": ["Together", "we", "can", "do", "great", "things", "!"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O"]}
|
45 |
+
{"tokens": ["Do", "you", "want", "to", "be", "part", "of", "making", "it", "happen", "?"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
46 |
+
{"tokens": ["Then", "keep", "on", "reading", "."], "tags_knowledge": ["O", "O", "O", "O", "O"]}
|
47 |
+
{"tokens": ["The", "Team"], "tags_knowledge": ["O", "O"]}
|
48 |
+
{"tokens": ["The", "Spa", "##tial", "Computing", "Team", "drives", "the", "digital", "innovation", "work", "in", "the", "spatial", "computing", "area", "for", "all", "I", "##KE", "##A", "companies", "."], "tags_knowledge": ["O", "B", "I", "B", "I", "O", "O", "B", "B", "O", "O", "O", "B", "B", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
49 |
+
{"tokens": ["We", "are", "looking", "for", "a", "Research", "Engineer", "with", "knowledge", "of", "Spa", "##tial", "Computing", "/", "X", "##R", "Development", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "B", "O", "B", "I", "B", "O"]}
|
50 |
+
{"tokens": ["In", "this", "position", "you", "will", "use", "your", "technical", "expertise", "to", "find", ",", "explore", ",", "evaluate", "and", "transfer", "innovation", "insights", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O"]}
|
51 |
+
{"tokens": ["You", "are", "someone", "with", "an", "innovative", "mind", "and", "lateral", "thinking", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
52 |
+
{"tokens": ["Someone", "who", "thinks", "virtual", "worlds", "are", "cool", "but", "helping", "real", "people", "is", "even", "better", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
53 |
+
{"tokens": ["You", "know", "why", "robots", "and", "pie", "go", "well", "together", "and", "why", "point", "clouds", "on", "a", "sunny", "day", "don", "'", "t", "matter", "at", "all", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
54 |
+
{"tokens": ["Your", "Main", "Re", "##sp", "##ons", "##ibi", "##lities", "Will", "Be", "To"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
55 |
+
{"tokens": ["Ex", "##p", "##lore", "and", "evaluate", "new", "technology", "and", "its", "possibility", "to", "improve", "I", "##KE", "##A", "customer", "and", "co", "-", "worker", "experience"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
56 |
+
{"tokens": ["Dev", "##elo", "##p", "real", "-", "time", "3D", "applications", "to", "serve", "as", "inspiring", "proof", "of", "concepts"], "tags_knowledge": ["O", "O", "O", "B", "I", "I", "B", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
57 |
+
{"tokens": ["Col", "##la", "##bor", "##ate", "with", "external", "experts", "and", "inn", "##ova", "##tors", "in", "exploration", "##s", "of", "technical", "solutions"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "B", "O"]}
|
58 |
+
{"tokens": ["Col", "##lect", "and", "share", "expertise", "with", "I", "##KE", "##A", "stakeholders"], "tags_knowledge": ["O", "O", "O", "O", "B", "O", "O", "O", "O", "O"]}
|
59 |
+
{"tokens": ["About", "You"], "tags_knowledge": ["O", "O"]}
|
60 |
+
{"tokens": ["The", "person", "we", "'", "re", "looking", "for", "is", "someone", "passionate", "about", "the", "future", "of", "3D", "graphics", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "B", "O"]}
|
61 |
+
{"tokens": ["A", "person", "who", "wants", "to", "use", "game", "engine", "for", "more", "than", "just", "for", "games", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "O", "O", "O", "O"]}
|
62 |
+
{"tokens": ["Someone", "who", "likes", "the", "idea", "of", "conceptual", "##izing", "the", "u", "##topia", "##n", "future", "of", "the", "digital", "-", "human", "interfaces", ",", "to", "interact", "with", "people", "in", "a", "more", "natural", "way", "than", "ever", "before", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "B", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
63 |
+
{"tokens": ["Someone", "who", "thinks", "Swedish", "meat", "##balls", "have", "the", "potential", "to", "taste", "even", "better", "in", "mixed", "reality", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O"]}
|
64 |
+
{"tokens": ["We", "'", "re", "looking", "for", "a", "person", "who", "can", "break", "down", "high", "-", "level", "concepts", "like", "these", "and", "explore", "them", "single", "##hand", "##edly", "or", "as", "part", "of", "a", "team", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
65 |
+
{"tokens": ["To", "be", "successful", "in", "this", "role", ",", "the", "following", "knowledge", ",", "skills", "and", "experiences", "would", "be", "valuable", ":"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
66 |
+
{"tokens": ["Understanding", "of", "graphics", "pipeline", "##s", "related", "to", "real", "-", "time", "3D", "environments", "."], "tags_knowledge": ["O", "O", "B", "B", "O", "O", "O", "B", "I", "I", "B", "B", "O"]}
|
67 |
+
{"tokens": ["Passion", "for", "how", "sound", "and", "audio", "design", "and", "ha", "##ptic", "##s", "can", "be", "used", "to", "el", "##eva", "##te", "im", "##mers", "##ive", "experiences"], "tags_knowledge": ["O", "O", "O", "B", "O", "B", "B", "O", "B", "I", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B"]}
|
68 |
+
{"tokens": ["Experience", "with", "Un", "##real", "and", "/", "or", "Unity", "and", "/", "or", "native", "I", "##OS", "/", "Android", "3D", "development", "and", "/", "or", "Web", "based", "3D", "engines"], "tags_knowledge": ["O", "O", "B", "I", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "B", "O", "B", "B"]}
|
69 |
+
{"tokens": ["Experience", "with", "mobile", "application", "development", "and", "deployment", "."], "tags_knowledge": ["O", "O", "B", "B", "B", "O", "B", "O"]}
|
70 |
+
{"tokens": ["Programming", "skills", "building", "applications", "communicating", "with", "back", "-", "ends", "and", "building", "applications", "of", "interactive", "worlds", "using", "game", "engines", "and", "3D", "Graphic", "##s", "."], "tags_knowledge": ["B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "B", "B", "B", "O"]}
|
71 |
+
{"tokens": ["Good", "knowledge", "of", "at", "least", "2", "different", "core", "programming", "languages", "such", "as", "C", ",", "C", "#", ",", "Python", ",", "C", "+", "+", "or", "Java", "##Script"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "B", "O", "B", "I", "O", "B", "O", "B", "I", "O", "B", "B", "I"]}
|
72 |
+
{"tokens": ["You", "'", "ll", "have", "a", "passion", "for", "sharing", "the", "knowledge", "you", "'", "ve", "acquired", ",", "with", "the", "ability", "to", "communicate", "with", "both", "technical", "and", "non", "-", "technical", "stakeholders", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "B", "O"]}
|
73 |
+
{"tokens": ["A", "##bility", "to", "formula", "##te", "new", "ideas", "surrounding", "technological", "innovations", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O"]}
|
74 |
+
{"tokens": ["A", "##bility", "to", "discuss", "problems", "with", "program", "code", "examples", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "B", "B", "O", "O"]}
|
75 |
+
{"tokens": ["Strong", "collaboration", "skills", ",", "with", "experience", "developing", "solutions", "alongside", "other", "teammates", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
76 |
+
{"tokens": ["Additional", "Information"], "tags_knowledge": ["O", "O"]}
|
77 |
+
{"tokens": ["This", "role", "is", "full", "-", "time", "(", "40", "hours", "per", "week", ")", "and", "based", "in", "\u00c4", "##lm", "##hul", "##t", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
78 |
+
{"tokens": ["This", "role", "sits", "in", "the", "Range", "Operations", "and", "reports", "to", "Innovation", "Manager", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "B", "B", "O"]}
|
79 |
+
{"tokens": ["At", "I", "##KE", "##A", ",", "we", "are", "looking", "for", "people", "who", "believe", "everyone", "deserves", "a", "seat", "at", "the", "table", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
80 |
+
{"tokens": ["You", "\u2019", "re", "welcome", "no", "matter", "where", "you", "come", "from", ",", "what", "you", "believe", ",", "and", "what", "you", "look", "like", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
81 |
+
{"tokens": ["We", "don", "\u2019", "t", "even", "care", "how", "you", "have", "furnished", "your", "home", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
82 |
+
{"tokens": ["We", "\u2019", "re", "interested", "in", "you", "simply", "because", "you", "\u2019", "re", "you", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
83 |
+
{"tokens": ["Even", "if", "your", "experience", "doesn", "\u2019", "t", "al", "##ign", "perfectly", "with", "every", "qualification", "in", "the", "job", "description", ",", "we", "encourage", "you", "to", "apply", "anyway", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
84 |
+
{"tokens": ["We", "believe", "that", "people", "\u2019", "s", "different", "perspectives", ",", "backgrounds", ",", "and", "personalities", "make", "us", "better", "at", "understanding", "our", "customers", "dreams", "and", "needs", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
85 |
+
{"tokens": ["At", "I", "##KE", "##A", ",", "we", "\u2019", "re", "all", "on", "the", "same", "project", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
86 |
+
{"tokens": ["If", "you", "have", "a", "special", "need", "that", "requires", "accommodation", "in", "the", "recruitment", "process", ",", "just", "let", "us", "know", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
87 |
+
{"tokens": ["Please", "note", "that", "due", "to", "the", "upcoming", "holiday", "season", "in", "December", ",", "our", "recruitment", "process", "may", "take", "a", "bit", "longer", "than", "usual", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
88 |
+
{"tokens": ["We", "will", "do", "our", "best", "to", "keep", "all", "candidates", "updated", "on", "their", "status", "before", "any", "breaks", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
89 |
+
{"tokens": ["Thank", "you", "for", "your", "patience", "during", "this", "time", "!"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
90 |
+
{"tokens": ["Interest", "##ed", "?"], "tags_knowledge": ["O", "O", "O"]}
|
91 |
+
{"tokens": ["Sub", "##mit", "your", "C", "##V", "and", "let", "us", "know", "why", "you", "would", "be", "a", "good", "fit", "for", "this", "role", ",", "in", "English", ",", "by", "7th", "of", "January", "202", "##5", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
92 |
+
{"tokens": ["About", "the", "job"], "tags_knowledge": ["O", "O", "O"]}
|
93 |
+
{"tokens": ["Defence", "projects", ",", "unlocked", "."], "tags_knowledge": ["B", "B", "O", "O", "O"]}
|
94 |
+
{"tokens": ["At", "Defence", "."], "tags_knowledge": ["O", "B", "O"]}
|
95 |
+
{"tokens": ["Works", ",", "we", "match", "you", "with", "the", "industry", "'", "s", "top", "R", "&", "D", "projects", "and", "help", "you", "deliver", "impact", "for", "a", "safer", "tomorrow", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "B", "I", "I", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
96 |
+
{"tokens": ["With", "Defence", "."], "tags_knowledge": ["O", "B", "O"]}
|
97 |
+
{"tokens": ["Works", ",", "you", "will", "get", "access", "to", "interesting", "projects", "without", "consuming", "time", "on", "sales", "and", "project", "hunting", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "B", "O", "O"]}
|
98 |
+
{"tokens": ["Our", "platform", "allows", "us", "to", "keep", "our", "organization", "structure", "thin", ",", "which", "means", "less", "internal", "costs", ",", "more", "value", "to", "customers", ",", "and", "higher", "rates", "for", "you", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
99 |
+
{"tokens": ["As", "an", "Art", "##ific", "##ial", "Intelligence", "Engineer", "you", "will", "join", "our", "trusted", "network", "to", "work", "on", "cutting", "-", "edge", "R", "&", "D", "projects", "in", "the", "defense", "sector", ",", "contributing", "to", "innovative", "solutions", "that", "enhance", "safety", "and", "security", "for", "a", "safer", "tomorrow", "."], "tags_knowledge": ["O", "O", "B", "I", "I", "I", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "I", "B", "O", "O", "B", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
100 |
+
{"tokens": ["You", "will", "bring", "deep", "expertise", "in", "machine", "learning", "and", "artificial", "intelligence", ",", "ideal", "##ly", "with", "prior", "experience", "in", "developing", "autonomous", "products", ",", "radar", "systems", ",", "or", "applications", "that", "heavily", "leverage", "AI", "capabilities", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "B", "I", "O", "B", "I", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O"]}
|
101 |
+
{"tokens": ["The", "ideal", "candidate", "will", "have", "a", "proven", "track", "record", "of", "building", "secure", ",", "high", "-", "performing", "solutions", "designed", "to", "meet", "the", "defense", "industry", "'", "s", "rigorous", "standards", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "O", "O", "O", "O", "O"]}
|
102 |
+
{"tokens": ["Your", "presence", "can", "be", "in", "Northern", "Europe", "(", "Finland", ",", "Sweden", ",", "Norway", ",", "Denmark", ")", ",", "United", "Kingdom", ",", "or", "Germany", "and", "you", "are", "eligible", "to", "pass", "security", "-", "clearance", "before", "starting", "on", "a", "project", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
103 |
+
{"tokens": ["Please", "notice", "that", "consultant", "##s", "might", "need", "to", "pass", "security", "clearance", "before", "starting", "on", "a", "project", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
104 |
+
{"tokens": ["Re", "##sp", "##ons", "##ibi", "##lities", ":"], "tags_knowledge": ["O", "O", "O", "O", "O", "O"]}
|
105 |
+
{"tokens": ["Design", ",", "implement", ",", "and", "op", "##ti", "##mize", "AI", "models", "and", "algorithms", "for", "defense", "sector", "applications", ",", "including", "autonomous", "systems", ",", "radar", "##s", ",", "and", "AI", "-", "driven", "decision", "-", "making", "tools", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "B", "B", "O", "O", "O", "B", "O", "O", "B", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O"]}
|
106 |
+
{"tokens": ["Dev", "##elo", "##p", "secure", ",", "high", "-", "performance", "software", "solutions", "tailored", "to", "meet", "the", "string", "##ent", "requirements", "of", "defense", "industry", "projects", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "B", "B", "O"]}
|
107 |
+
{"tokens": ["I", "##dent", "##ify", "and", "address", "v", "##ul", "##ner", "##abi", "##lities", "in", "AI", "systems", ",", "ensuring", "robust", "c", "##y", "##bers", "##ec", "##urity", "measures", "are", "integrated", "throughout", "the", "development", "life", "##cycle", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
108 |
+
{"tokens": ["Col", "##la", "##bor", "##ate", "with", "cross", "-", "functional", "teams", "to", "al", "##ign", "AI", "capabilities", "with", "overall", "system", "architecture", "##s", ",", "ensuring", "sea", "##m", "##less", "integration", "and", "performance", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
109 |
+
{"tokens": ["Con", "##duct", "rigorous", "testing", ",", "valid", "##ation", ",", "and", "documentation", "of", "AI", "solutions", "to", "ensure", "reliability", ",", "s", "##cal", "##ability", ",", "and", "compliance", "with", "industry", "standards", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
110 |
+
{"tokens": ["Qualification", "##s", ":"], "tags_knowledge": ["O", "O", "O"]}
|
111 |
+
{"tokens": ["Master", "'", "s", "or", "Ph", ".", "D", ".", "in", "Computer", "Science", ",", "Machine", "Learning", ",", "or", "related", "field"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "O", "B", "I", "O", "O", "O", "O"]}
|
112 |
+
{"tokens": ["Strong", "skills", "in", "Pat", "##tern", "Re", "##cognition", ",", "N", "##eur", "##al", "Networks", ",", "and", "Al", "##gor", "##ith", "##ms", "."], "tags_knowledge": ["O", "O", "O", "B", "I", "I", "I", "O", "B", "I", "I", "I", "O", "O", "B", "I", "I", "I", "O"]}
|
113 |
+
{"tokens": ["Experience", "from", "developing", "products", "which", "rely", "on", "AI", "/", "M", "##L", "capabilities", "such", "as", "autonomous", "systems", ",", "radar", "technologies", ",", "or", "other", "AI", "-", "re", "##lian", "##t", "defense", "applications", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "B", "O", "B", "I", "O", "O", "O", "B", "O", "O", "B", "O", "O", "O", "O", "B", "O", "O", "O", "O", "B", "O", "O"]}
|
114 |
+
{"tokens": ["F", "##ami", "##lia", "##rity", "with", "secure", "system", "design", ",", "c", "##y", "##bers", "##ec", "##urity", "principles", ",", "and", "compliance", "with", "defense", "-", "specific", "regulations", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "O", "O", "O", "O"]}
|
115 |
+
{"tokens": ["Additional", "Re", "##quire", "##ments", ":"], "tags_knowledge": ["O", "O", "O", "O", "O"]}
|
116 |
+
{"tokens": ["Security", "certification", "##s", "or", "training", "(", "e", ".", "g", ".", ",", "C", "##IS", "##SP", ",", "CE", "##H", ")", "are", "highly", "desirable", "."], "tags_knowledge": ["B", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B", "I", "I", "O", "B", "I", "O", "O", "O", "O", "O"]}
|
117 |
+
{"tokens": ["Next", "steps", ":"], "tags_knowledge": ["O", "O", "O"]}
|
118 |
+
{"tokens": ["Press", "\"", "A", "##pp", "##ly", "\""], "tags_knowledge": ["O", "O", "O", "O", "O", "O"]}
|
119 |
+
{"tokens": ["Sub", "##mit", "your", "resume", "on", "Has", "##hl", "##ist", "platform", "(", "takes", "5", "minutes", ")", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "B", "I", "I", "O", "O", "O", "O", "O", "O", "O"]}
|
120 |
+
{"tokens": ["Has", "##hl", "##ist", "is", "our", "parental", "company", "which", "infrastructure", "we", "are", "utilizing", "to", "manage", "the", "profiles"], "tags_knowledge": ["B", "I", "I", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
121 |
+
{"tokens": ["We", "will", "review", "your", "profile", "and", "if", "your", "profile", "matches", "our", "criteria"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
122 |
+
{"tokens": ["We", "call", "you", "and", "make", "sure", "that", "your", "expectations", "and", "career", "ambitions", "are", "aligned", "with", "our", "offer", "."], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
123 |
+
{"tokens": ["You", "will", "get", "accepted", "to", "our", "trusted", "network", "of", "partners", "and", "our", "clients", "and", "receive", "offers", "from", "different", "clients", "who", "are", "looking", "for", "your", "expertise"], "tags_knowledge": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
|
demo-app.py
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import plotly.express as px
|
2 |
+
import numpy as np
|
3 |
+
|
4 |
+
X = np.random.randint(0, 10, (10, 3))
|
5 |
+
fig = px.scatter_3d(x=X[:,0], y=X[:, 1], z=X[:, 2])
|
6 |
+
fig.show()
|
demo.py
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import plotly.graph_objects as go
|
3 |
+
import numpy as np
|
4 |
+
|
5 |
+
# Function to create a 3D plot
|
6 |
+
def create_3d_plot(x_range, y_range):
|
7 |
+
# Generate 3D data
|
8 |
+
x = np.linspace(-x_range, x_range, 100)
|
9 |
+
y = np.linspace(-y_range, y_range, 100)
|
10 |
+
x, y = np.meshgrid(x, y)
|
11 |
+
z = np.sin(np.sqrt(x**2 + y**2))
|
12 |
+
|
13 |
+
# Create a 3D surface plot
|
14 |
+
fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
|
15 |
+
fig.update_layout(
|
16 |
+
scene=dict(
|
17 |
+
xaxis_title='X Axis',
|
18 |
+
yaxis_title='Y Axis',
|
19 |
+
zaxis_title='Z Axis'
|
20 |
+
),
|
21 |
+
margin=dict(l=0, r=0, b=0, t=0),
|
22 |
+
height=1000
|
23 |
+
)
|
24 |
+
return fig
|
25 |
+
|
26 |
+
# Gradio interface
|
27 |
+
with gr.Blocks() as demo:
|
28 |
+
gr.Markdown("## Interactive 3D Plot with Gradio and Plotly")
|
29 |
+
with gr.Row():
|
30 |
+
x_slider = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="X Range")
|
31 |
+
y_slider = gr.Slider(minimum=1, maximum=10, step=1, value=5, label="Y Range")
|
32 |
+
plot_output = gr.Plot(label="3D Surface Plot")
|
33 |
+
|
34 |
+
# Update the plot on slider change
|
35 |
+
x_slider.change(create_3d_plot, inputs=[x_slider, y_slider], outputs=plot_output)
|
36 |
+
y_slider.change(create_3d_plot, inputs=[x_slider, y_slider], outputs=plot_output)
|
37 |
+
|
38 |
+
# Launch the app
|
39 |
+
demo.launch()
|
embedding_gen.py
CHANGED
@@ -4,6 +4,8 @@ import numpy as np
|
|
4 |
import umap
|
5 |
import matplotlib.pyplot as plt
|
6 |
import plotly.express as px
|
|
|
|
|
7 |
|
8 |
# Step 1: Load skills from all files in a specific date folder
|
9 |
def load_skills_from_date(base_folder, date):
|
@@ -65,9 +67,7 @@ def visualize_embeddings_3d(reduced_embeddings, skills, output_folder, date):
|
|
65 |
|
66 |
fig.show()
|
67 |
|
68 |
-
def
|
69 |
-
kmeans = KMeans(n_clusters=n_clusters, random_state=42)
|
70 |
-
labels = kmeans.fit_predict(reduced_embeddings)
|
71 |
|
72 |
fig = px.scatter_3d(
|
73 |
x=reduced_embeddings[:, 0],
|
@@ -84,30 +84,43 @@ def perform_kmeans_and_visualize(reduced_embeddings, skills, n_clusters, output_
|
|
84 |
fig.write_html(plot_path)
|
85 |
print(f"3D clustered plot saved at {plot_path}")
|
86 |
|
87 |
-
fig.show()
|
|
|
88 |
|
89 |
-
|
90 |
-
base_folder = "./tags"
|
91 |
-
output_folder = "./plots"
|
92 |
-
specific_date = "03-01-2024" # Example date folder to process
|
93 |
|
94 |
-
#
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
#
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
-
|
113 |
-
|
|
|
4 |
import umap
|
5 |
import matplotlib.pyplot as plt
|
6 |
import plotly.express as px
|
7 |
+
from sklearn.cluster import KMeans
|
8 |
+
import pickle
|
9 |
|
10 |
# Step 1: Load skills from all files in a specific date folder
|
11 |
def load_skills_from_date(base_folder, date):
|
|
|
67 |
|
68 |
fig.show()
|
69 |
|
70 |
+
def visualize3D(reduced_embeddings, labels, skills, n_clusters, output_folder, date):
|
|
|
|
|
71 |
|
72 |
fig = px.scatter_3d(
|
73 |
x=reduced_embeddings[:, 0],
|
|
|
84 |
fig.write_html(plot_path)
|
85 |
print(f"3D clustered plot saved at {plot_path}")
|
86 |
|
87 |
+
# fig.show()
|
88 |
+
return fig
|
89 |
|
90 |
+
if __name__ == "__main__":
|
|
|
|
|
|
|
91 |
|
92 |
+
# Main execution
|
93 |
+
base_folder = "./tags"
|
94 |
+
output_folder = "./plots"
|
95 |
+
vector_store = "./vectorstore"
|
96 |
+
specific_date = "03-01-2024" # Example date folder to process
|
97 |
+
n_clusters = 5
|
98 |
+
|
99 |
+
# Load skills from the specified date folder
|
100 |
+
skills = load_skills_from_date(base_folder, specific_date)
|
101 |
+
if not skills:
|
102 |
+
print(f"No skills found for the date: {specific_date}")
|
103 |
+
else:
|
104 |
+
print(f"Loaded {len(skills)} unique skills for the date: {specific_date}")
|
105 |
+
|
106 |
+
# Generate embeddings
|
107 |
+
embeddings = generate_embeddings(skills)
|
108 |
+
|
109 |
+
# Reduce dimensions to 2D and visualize
|
110 |
+
# reduced_embeddings_2d = reduce_dimensions(embeddings, n_components=2)
|
111 |
+
# visualize_embeddings_2d(reduced_embeddings_2d, skills, output_folder, specific_date)
|
112 |
+
|
113 |
+
# Reduce dimensions to 3D, cluster, and visualize
|
114 |
+
reduced_embeddings_3d = reduce_dimensions(embeddings, n_components=3)
|
115 |
+
kmeans = KMeans(n_clusters=n_clusters, random_state=42)
|
116 |
+
labels = kmeans.fit_predict(reduced_embeddings_3d)
|
117 |
+
visualize3D(reduced_embeddings_3d, labels, skills, n_clusters, output_folder, specific_date)
|
118 |
+
|
119 |
+
# Save the reduced embeddings and metadata
|
120 |
+
np.save(os.path.join(vector_store, f"{specific_date}_embeddings.npy"), reduced_embeddings_3d)
|
121 |
+
with open(os.path.join(vector_store, f"{specific_date}_metadata.pkl"), 'wb') as f:
|
122 |
+
pickle.dump({'labels': labels, 'skills': skills}, f)
|
123 |
+
|
124 |
|
125 |
+
# Perform KMeans clustering and visualize in 3D
|
126 |
+
# perform_kmeans_and_visualize(reduced_embeddings_3d, skills, n_clusters, output_folder, specific_date)
|
filter-faults.py
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
|
3 |
+
def count_mismatch(file_path):
|
4 |
+
|
5 |
+
count_mismatch = 0
|
6 |
+
with open(file_path, 'r') as file:
|
7 |
+
for line_number, line in enumerate(file, start=1):
|
8 |
+
data = json.loads(line)
|
9 |
+
tokens, tags = data['tokens'], data['tags_knowledge']
|
10 |
+
if len(tokens) != len(tags):
|
11 |
+
count_mismatch += 1
|
12 |
+
|
13 |
+
return count_mismatch
|
14 |
+
|
15 |
+
def delete_mismatched_lines(file_path):
|
16 |
+
with open(file_path, 'r') as file:
|
17 |
+
lines = file.readlines()
|
18 |
+
|
19 |
+
with open(file_path, 'w') as file:
|
20 |
+
for line in lines:
|
21 |
+
data = json.loads(line)
|
22 |
+
tokens, tags = data['tokens'], data['tags_knowledge']
|
23 |
+
if len(tokens) == len(tags):
|
24 |
+
file.write(line)
|
25 |
+
|
26 |
+
|
27 |
+
if __name__ == "__main__":
|
28 |
+
file_path = 'data/tags-04-01-2025.jsonl'
|
29 |
+
count = count_mismatch(file_path)
|
30 |
+
|
31 |
+
if count > 0:
|
32 |
+
delete_mismatched_lines(file_path)
|
33 |
+
print(f"Deleted {count} mismatched lines.")
|
job-postings/{03-01-2024 β 03-01-2025}/1.txt
RENAMED
File without changes
|
job-postings/{03-01-2024 β 03-01-2025}/2.txt
RENAMED
File without changes
|
job-postings/{03-01-2024 β 03-01-2025}/3.txt
RENAMED
File without changes
|
job-postings/{04-01-2024 β 04-01-2025}/1.txt
RENAMED
File without changes
|
job-postings/{04-01-2024 β 04-01-2025}/2.txt
RENAMED
File without changes
|
job-postings/{04-01-2024 β 04-01-2025}/3.txt
RENAMED
File without changes
|
llm-tagging.py
CHANGED
@@ -16,6 +16,10 @@ from tabulate import tabulate
|
|
16 |
import spacy
|
17 |
import re
|
18 |
import json
|
|
|
|
|
|
|
|
|
19 |
|
20 |
load_dotenv(".env")
|
21 |
nlp = spacy.load("en_core_web_sm")
|
@@ -29,8 +33,9 @@ def split_text_recursively(text):
|
|
29 |
|
30 |
def tokenize_to_sent(path):
|
31 |
|
32 |
-
|
33 |
|
|
|
34 |
with open(path, 'r') as file:
|
35 |
text = file.read()
|
36 |
|
@@ -47,6 +52,8 @@ def tokenize_to_sent(path):
|
|
47 |
doc = nlp(line)
|
48 |
for sent in doc.sents:
|
49 |
sents.append(sent.text)
|
|
|
|
|
50 |
|
51 |
return sents
|
52 |
|
@@ -92,14 +99,23 @@ prompt = PromptTemplate(
|
|
92 |
"knowledge_definition": knowledge_definition},
|
93 |
)
|
94 |
|
95 |
-
def extract_tags(
|
|
|
|
|
|
|
|
|
|
|
96 |
|
97 |
if tokenize:
|
98 |
-
tokens = [tokenizer.tokenize(t) for t in
|
99 |
|
100 |
prompt_and_model = prompt | model
|
101 |
output = prompt_and_model.invoke({"input": tokens})
|
102 |
output = parser.invoke(output)
|
|
|
|
|
|
|
|
|
103 |
return tokens, output
|
104 |
|
105 |
|
@@ -111,13 +127,43 @@ def tag_posting(job_path, output_path):
|
|
111 |
# LLM-based tag extraction
|
112 |
tokens, output = extract_tags(sents, tokenize=True)
|
113 |
|
114 |
-
with open(
|
115 |
for entry in output['results']:
|
116 |
json.dump(entry, file)
|
117 |
file.write("\n")
|
118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
if __name__ == "__main__":
|
120 |
|
121 |
-
|
122 |
-
output_path = './data/data.json'
|
123 |
-
tag_posting(job_path, output_path)
|
|
|
16 |
import spacy
|
17 |
import re
|
18 |
import json
|
19 |
+
from datetime import datetime
|
20 |
+
from tqdm import tqdm
|
21 |
+
import time
|
22 |
+
|
23 |
|
24 |
load_dotenv(".env")
|
25 |
nlp = spacy.load("en_core_web_sm")
|
|
|
33 |
|
34 |
def tokenize_to_sent(path):
|
35 |
|
36 |
+
print(f"Tokenizing {path} to sentences...")
|
37 |
|
38 |
+
# Read the file
|
39 |
with open(path, 'r') as file:
|
40 |
text = file.read()
|
41 |
|
|
|
52 |
doc = nlp(line)
|
53 |
for sent in doc.sents:
|
54 |
sents.append(sent.text)
|
55 |
+
|
56 |
+
print(f"Tokenization completed. {len(sents)} sentences found.")
|
57 |
|
58 |
return sents
|
59 |
|
|
|
99 |
"knowledge_definition": knowledge_definition},
|
100 |
)
|
101 |
|
102 |
+
def extract_tags(sents: str, tokenize = True) -> Results:
|
103 |
+
|
104 |
+
print("Extracting tags...")
|
105 |
+
print(f"Tokenizing {len(sents)} sentences...")
|
106 |
+
|
107 |
+
start_time = time.time()
|
108 |
|
109 |
if tokenize:
|
110 |
+
tokens = [tokenizer.tokenize(t) for t in sents]
|
111 |
|
112 |
prompt_and_model = prompt | model
|
113 |
output = prompt_and_model.invoke({"input": tokens})
|
114 |
output = parser.invoke(output)
|
115 |
+
|
116 |
+
time_taken = time.time() - start_time
|
117 |
+
print(f"Tags extracted in {time_taken} seconds.")
|
118 |
+
|
119 |
return tokens, output
|
120 |
|
121 |
|
|
|
127 |
# LLM-based tag extraction
|
128 |
tokens, output = extract_tags(sents, tokenize=True)
|
129 |
|
130 |
+
with open(output_path, "w") as file:
|
131 |
for entry in output['results']:
|
132 |
json.dump(entry, file)
|
133 |
file.write("\n")
|
134 |
|
135 |
+
def tag_all_today():
|
136 |
+
|
137 |
+
date = datetime.today().strftime('%d-%m-%Y')
|
138 |
+
date = "04-01-2025"
|
139 |
+
|
140 |
+
jobs = os.listdir(f'./job-postings/{date}')
|
141 |
+
output_path = f'./data/tags-{date}.jsonl'
|
142 |
+
count = 0
|
143 |
+
|
144 |
+
for job in tqdm(jobs, desc="Tagging job postings"):
|
145 |
+
|
146 |
+
job_path = f'./job-postings/{date}/{job}'
|
147 |
+
|
148 |
+
# Reading & sentence tokenization
|
149 |
+
sents = tokenize_to_sent(job_path)
|
150 |
+
|
151 |
+
# LLM-based tag extraction
|
152 |
+
tokens, output = extract_tags(sents, tokenize=True)
|
153 |
+
|
154 |
+
with open(output_path, "a") as file:
|
155 |
+
for entry in output['results']:
|
156 |
+
json.dump(entry, file)
|
157 |
+
file.write("\n")
|
158 |
+
|
159 |
+
count += 1
|
160 |
+
if count > 2:
|
161 |
+
break
|
162 |
+
|
163 |
+
|
164 |
+
print(f"Tagging completed. Output saved to {output_path}")
|
165 |
+
|
166 |
+
|
167 |
if __name__ == "__main__":
|
168 |
|
169 |
+
tag_all_today()
|
|
|
|
plots/03-01-2024_2D_projection.png
ADDED
![]() |
plots/03-01-2024_3D_clustering.html
ADDED
The diff for this file is too large to render.
See raw diff
|
|
plots/03-01-2024_3D_projection.html
ADDED
The diff for this file is too large to render.
See raw diff
|
|
requirements.txt
CHANGED
@@ -6,4 +6,6 @@ idna
|
|
6 |
langchain_openai
|
7 |
python-dotenv
|
8 |
torch
|
9 |
-
spacy
|
|
|
|
|
|
6 |
langchain_openai
|
7 |
python-dotenv
|
8 |
torch
|
9 |
+
spacy
|
10 |
+
umap-learn
|
11 |
+
plotly
|
tag-posting.py
CHANGED
@@ -215,6 +215,10 @@ def backfill():
|
|
215 |
|
216 |
print(f"Saved skills to: {tag_path}")
|
217 |
|
|
|
|
|
|
|
|
|
218 |
if __name__ == '__main__':
|
219 |
|
220 |
# Backfill
|
@@ -224,4 +228,5 @@ if __name__ == '__main__':
|
|
224 |
# path = './job-postings/03-01-2024/2.txt'
|
225 |
# sents = parse_post(path)
|
226 |
# skills = extract_skills(sents)
|
227 |
-
# skills_save('./tags/03-01-2024/2.txt',skills)
|
|
|
|
215 |
|
216 |
print(f"Saved skills to: {tag_path}")
|
217 |
|
218 |
+
def tag_date():
|
219 |
+
|
220 |
+
pass
|
221 |
+
|
222 |
if __name__ == '__main__':
|
223 |
|
224 |
# Backfill
|
|
|
228 |
# path = './job-postings/03-01-2024/2.txt'
|
229 |
# sents = parse_post(path)
|
230 |
# skills = extract_skills(sents)
|
231 |
+
# skills_save('./tags/03-01-2024/2.txt',skills)RAPID_API_KEY : 60a10b11e6msh821d32f6e1e955ep15b5b1jsnf61a46680409
|
232 |
+
1
|
tags/{03-01-2024 β 03-01-2025}/1.txt
RENAMED
File without changes
|
tags/{03-01-2024 β 03-01-2025}/2.txt
RENAMED
File without changes
|
tags/{03-01-2024 β 03-01-2025}/3.txt
RENAMED
File without changes
|
tags/{04-01-2024 β 04-01-2025}/1.txt
RENAMED
File without changes
|
tags/{04-01-2024 β 04-01-2025}/2.txt
RENAMED
File without changes
|
tags/{04-01-2024 β 04-01-2025}/3.txt
RENAMED
File without changes
|
train.py
CHANGED
@@ -157,6 +157,14 @@ def train(json_path: str):
|
|
157 |
# Log the artifact to W&B
|
158 |
wandb.log_artifact(artifact)
|
159 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
if __name__ == "__main__":
|
161 |
|
162 |
-
|
|
|
157 |
# Log the artifact to W&B
|
158 |
wandb.log_artifact(artifact)
|
159 |
|
160 |
+
def train_today():
|
161 |
+
|
162 |
+
date = datetime.today().strftime('%d-%m-%Y')
|
163 |
+
date = "04-01-2025"
|
164 |
+
json_path = os.path.join(os.getcwd(),f'data/tags-{date}.jsonl')
|
165 |
+
print(f"Training on {json_path}")
|
166 |
+
train(json_path=json_path)
|
167 |
+
|
168 |
if __name__ == "__main__":
|
169 |
|
170 |
+
train_today()
|
vectorstore/03-01-2024_embeddings.npy
ADDED
Binary file (860 Bytes). View file
|
|
vectorstore/03-01-2024_metadata.pkl
ADDED
Binary file (1.28 kB). View file
|
|