Technical Whitepaper: Using AI for a Skills Based Job Board
Contact Info
Jake Dibattista CEO Jake@youniapp.xyz
George Paragioudakis CTO George@youniapp.xyz
Twitter and Medium: @Younixyz
Website: Younied.com
Key Terms
Rich Skill Descriptors: Rich Skill Descriptors (RSDs) are machine-readable, searchable data that include the context behind a skill, giving users a common definition for a particular skill and help to make it understandable and transferable across the learning-earning landscape.
Large Language Model: A language model is a probability distribution over sequences of words. Given any sequence of words of length m, a language model assigns a probability P to the whole sequence.
OpenAI: OpenAI conducts AI research with the declared intention of developing “safe and beneficial” artificial general intelligence, which it defines as “highly autonomous systems that outperform humans at most economically valuable work”.
Prompts: An AI Prompt is any form of text, question, information, or coding that communicates to AI what response you’re looking for.
Fine tuning: A feature of OpenAI which allows for a product to have constant context for its request to the LLM. For example, you could fine tune a model to understand what a rich skill descriptor is for your product so that every time you ask it to create or retrieve an RSD for you it is only using your examples and method of doing so instead of what it would use when the general public asks for an RSD. Once a model has been fine-tuned, you won’t need to provide examples in the prompt anymore.
Function calling: A feature of OpenAI which allows for a product to call (make a request) to the LLM and receive answers structured in a non chat based way. This for example allowed for us to receive data from ChatGPT in the form of a structured JSON as opposed to raw text based answers.
AI For Skills Management
One of the reasons Youni is excited for LLMs (large language models) for skills based hiring is its ability to contextualize large amounts of data into common language. Often recruits feel deterred from applying to jobs they may otherwise be qualified for, or unaware of how to get the skills needed for the jobs they really want. This leads to poor outcomes as students invest in programs that are not setup for their success, or worse give up attempting to learn and upskill all together. At Youni we are leveraging OpenAIs LLM in order to read unemployed job seekers resumes, match them to RSDs, and recommend them to classes and jobs based on their career goals.
Here’s how it works:
On Younied.com a user can create an account and write their past experiences or resume into an open text box. When they have entered their experiences they can hit search and call the following the prompt:
Prompt: Please identify the Rich Skill Descriptors described in this text. In addition to identifying the skills, also include linguistic variations of the skills (for example, if graphic design is a skill then you should also include terms like graphic designer or visual design). You must return at least 3 results. This is the text to search: {resume}
Once the resume is read and the skills are identified we must match them to RSDs in our library. To do this we leverage the function call API of OpenAI.
These functions are found in the file openai.server.ts
function_call(text: string)
Uses the OpenAI API to extract skills from a string value. The Completions API call uses the gpt-3.5-turbo-0613 model. This model supports ChatGPT’s function call feature, allowing us to access data not typically available to GPT. In this case a function to query our database library of Rich Skill Descriptors (RSDs) is passed to GPT so that we can match RSDs to the input text.
Parameters:
text: string — The text which you would like to extract skills from.
get_rsd(skills: string)
Intended to be passed to ChatGPT as a function call, this function accepts a string of comma separated skills which it will then use to search our database for similar RSDs. The search returns any item with a keyword that matches any of the skills passed. The function uses Prisma ORM to query the database.
Parameters:
skills: string — A string of comma separated skills which will be used to query the database.
Once completed, a user is returned a list of RSDs which they can accept or deny to add them to their Youni profile. This tool leverages OpenAI to match common language experiences and jobs into an RSD format which can be used across the site, as well as helps us store the data in a commonly acceptable format.
AI For Job Posts
What makes a good job post? At Youni we set out to rethink how jobs get posted online with a simple goal in mind, optimize for skills based hiring. Often employers and recruiters are busy and rely on automated tools to post job openings across 100s of job boards in search of the perfect candidate. At Youni we think this is an outdated methodology, so we set out to build a tool which not only allows employers to more quickly find the talent they need, but also to inform talent and teachers about what to learn and teach.
Here’s how it works:
On Younied.com employers can create an upgraded account for access to creating classes, jobs, and RSDs. In our first iteration of the product we wanted to create a job board which helped employers get their jobs into the language of skills based hiring. On Younied.com an upgrade user can create a job simply by entering a string of text about the employee or job they are looking for. Once the text is entered the following prompt is triggered:
Prompt: “After this message I will provide a block of text in quotes. This block of text is an employer’s description of a job posting that they want to create as well as a description of their ideal candidate. From the block of text, I want you to provide me these things:\n1. The title for the job\n2. The salary\n3. The job location (city, country, state, etc.)\n4. The qualifications for the job\n5. The responsibilities for the job\n6. Whether the job is full time, part time, or an internship\nAfter you get this information, I want you to think of 3 skills that would allow the person applying to this job to excel and do very well at the job. Your response should be a JSON object and only a JSON object. The fields of the JSON object should be title, location, qualifications, responsibilities, salary, and jobType along with an array with the 3 skills you thought of. Each element of the ‘skills’ array should be a json object with a name of the skill and a description. Make sure the salary is an integer and not text.“;
Once the prompt is run a job post is created, with relevant fields available for edit. Under a job post a hiring user can view associated skills, searching our library of RSDs to add them to the post.
If an employer cannot find an RSD they are looking for and add it to their job they can add a new RSD to our library. Again leveraging OpenAI we allow users to generate RSDs that do not have a match in our database by describing the skill in an open text box and then calling the following prompt:
Prompt: The provided block of text will describe a workplace skill that the user wants to turn into a Rich Skill Descriptor.The main parts of a Rich Skill Descriptor are the name and a description of the skill.Based on the text provided, generate 3 different Rich Skill Descriptors with their names and descriptions. When generating the names and descriptions, ensure that they are linguistic variations of the skill being described in the text (for example, if the text describes a skill called graphic design then the names generated might include graphic designer or visual design). You must return 3 results. Make sure that the names of the Rich Skill Descriptors are capitalized and the descriptions have proper grammar.
The user is then returned a list of RSDs which they can accept to add to our database as well as the users jobs and classes.
Next Steps
Currently our product faces two major limitations. First the data captured in our application is still contained within the Youni server. We believe in user centric, decentralized building and are actively working with the Learning Economy on an implementation of their LearnCard student wallet in order to support the industry standard JSON-LD format for credential and LER data.
Second, we lack the ability to understand how resume data can best be utilized for jobs and classes on our platform. While we have begun to implement code which will match an employee to a job based on RSD compatibility (IE your resume has 4 RSDs of the 6 needed for this job) there is still much to be done. How can we recommend the classes that fill in the gaps for applicants and understand the RSDs which are in highest demand in real time to best inform our community of teachers. Adding this layer of analytics to our platform is a major goal for 2023 and is part of our commitment to the Job For the Future (JFF) Education Quality Outcomes Standards (EQOS) initiative.
We believe we can further enhance our model as we continue to utilize the APIs made available by OpenAI. One new feature known as “fine tuning” will be particularly useful for a company such as ours which has a unique use case and dataset to reference instead of the vast array of data currently being queried on a ChatGPT call. By fine tuning the model to our products library and context of skills we can provide better results to employers and employees looking to save time on resume building and hiring, while still following industry best practices.
Lastly, we need to move beyond the whiteboard and start getting real user feedback on our product. Once we finalize the UI, we intend to actively outreach to students, career counselors, and employers who are interested in participating in our initial pilot. If you are interested or know someone who may be interested, do not hesitate to reach out to the contact information listed at the top.
Partners of Note
Learning Economy
BAST.AI
Education Design Lab
Research Bookmark
OpenAI