This project is an activity of the Specialization in Artificial Intelligence at PECE-Poli, Natural Language Processing course.
The main objective of this project is to create a model using NLP which will be capable of receiving a job description and to predict what title this professional is most likely to be according to LinkedIn.
The project was developed in three phases:
- LinkedIn Data Scraping to create the dataset;
- Development of a Deep Learning model for multiclass classification;
- Development of a web app using Streamlit in order to facilitate the interaction with the model.
The dataset used to train the model was build using web scraping with Selenium, the scraping script is available in the scraper/scraper.py
file.
The scraping process was to search for jobs with the titles of Data Scientist, Data Analyst and Data Engineer (a thousand of each), and to gatter the job description as given by the hiring company.
The dataset will not be available in this repo, due to the fact that no scraping authorization was made neither to LinkedIn nor to the individual companies.
The model was created using Tensorflow and NLP methods learned during the course.
For a hyperparameter tuning process please refer to tuning-process-report.html
, which is a sample of the entire parameter search. The complete report was over 400MB and will not be uploaded here.
The best model architecture found was:
- 8 hidden layers with 8 neurons each;
- batch_size=64;
- trained for 20 epochs;
- SGD opt.
Best model diagram, 86.85% accuracy in the test set.
Tuning report of the best model
To see the model in action with Streamlit, use
$ git clone https://github.com/brunorosilva/nlp-classificacao-de-vagas.git
$ cd nlp-classificacao-de-vagas
~/nlp-classificacao-de-vagas $ pip install -r requirements.txt
and then
~/nlp-classificacao-de-vagas $ streamlit run dashboard.py
In the dashboard you'll be able to choose among simple examples, examples taken from LinkedIn which were not in the traning nor in the test set or even trying a manual input.
The webapp is extremely simple and it works as a POC, just choose among the options and the dashboard will create a bar plot showing the estimated probability among the three possible job titles.
Este projeto é uma atividade da Especialização em Inteligência Artificial da PECE-Poli, disciplina de Processamento de Linguagem Natural.
O objetivo deste projeto é a criação de um modelo usando NLP capaz de receber uma descrição de vaga e retornar ao usuário qual é a visão do mercado sobre o título que este funcionário mais se adequa.
A motivação deste projeto é como um possível auxílio para construção de equipes de dados por funcionários de RH. O usuário coloca como input do modelo a descrição do funcionário que ele está procurando e o modelo retorna qual título este funcionário mais se adequa em uma equipe de dados, classificando a vaga entre Data Scientist, Data Analyst ou Data Engineer.
O projeto foi desenvolvido a partir de três etapas:
- Data Scraping do Linkedin para a criação do dataset;
- Criação de um modelo de Deep Learning para classificação multi-classes;
- Criação de um webapp para a interação mais fluida com o modelo usando Streamlit.
O Dataset foi criado utilizando Selenium a partir de um script de scraping disponível no arquivo scraper/scraper.py
.
O processo consistiu em pesquisar por vagas de Data Scientist, Data Analyst e Data Engineer (mil de cada título, um título por vez), e buscar a descrição de cada vaga conforme fornecido pela empresa contratante.
O Dataset será disponibilizado somente para o avaliador do projeto, uma vez que não foram solicitadas as autorizações do Linkedin para a realização do scraping e tampouco das empresas envolvidas.
O modelo foi criado utilizando Tensorflow Keras e outros métodos abordados durante o curso.
Para o tuning de hiperparâmetros foi desenvolvido um método personalizado de gridsearch com a criação de um relatório interativo para a obtenção de um modelo com a melhor arquitetura encontrada. O arquivo com todos os testes realizados (mais de 400MB) pode ser solicitado caso necessário, mas um exemplo pequeno deste relatório está disponível no arquivo tuning-process-report.html.
A melhor arquitetura de modelo encontrada foi com os seguintes hiperparâmetros:
- 8 camadas ocultas, com 8 neurônios cada;
- função de ativação tanh;
- batch_size=64;
- 20 épocas de treinamento;
- função de custo SGD.
Diagrama do modelo escolhido, com exatidão de 86.85% na base de validação.
Recorte do relatório de tuning com o modelo vencedor.
Para a interação mais fluida com o modelo foi criado um webapp usando Streamlit e para acessá-lo basta instalar as bibliotecas necessárias
com Git
$ git clone https://github.com/brunorosilva/nlp-classificacao-de-vagas.git
$ cd nlp-classificacao-de-vagas
~/nlp-classificacao-de-vagas $ pip install -r requirements.txt
e usar o comando
~/nlp-classificacao-de-vagas $ streamlit run dashboard.py
onde o usuário pode escolher entre exemplos simples, exemplos tirados do Linkedin que não estão na base de treino nem de teste ou um input manual.
O webapp é extremamente simples e serve como prova de conceito, basta escolher entre as opções e o dashboard criará um gráfico de barras mostrando a probabilidade estimada pelo modelo entre os três títulos possíveis.