
Identificando grandes talentos: de currículos a conjuntos de habilidades aplicando a PNL
Intro
O desafio de conectar talentos com oportunidades de emprego tem sido uma grande tarefa dos recrutadores há muito tempo. A busca sempre se baseia no orçamento, nas especificações do trabalho e no tempo, então sempre surge a dúvida: estamos obtendo a melhor combinação? ou um bom o suficiente? Os sistemas de recomendação são uma ferramenta poderosa para fornecer aos usuários sugestões personalizadas em tempo real. Você provavelmente os usa muito, ao pedir comida, escolher um programa para assistir ou comprar produtos e serviços on-line. Este post apresenta como a equipe de Marvik abordou a etapa de extração de habilidades em um aplicativo no qual queríamos saber como combinar os melhores perfis com vagas abertas, por meio de ML e toneladas (toneladas!) de dados. O projeto foi uma jornada incrível (às vezes uma montanha-russa) que exigiu muita inovação em termos de combinação de técnicas, algoritmos de ML e ferramentas adequadas para criar as combinações.

🔥 O desafio
Em nosso objetivo de gerar pares de ofertas de emprego - candidatos, enfrentamos vários desafios. Para começar, como qualquer projeto relacionado a dados, os dados em si. Embora pudéssemos acessar um grande volume de dados (milhares de gigas), eles podem não estar estruturados, ter extensões diferentes (ou seja, doc, docx ou pdf, entre outras) ou estar incompletos. Além disso, o desempenho era essencial (ninguém quer esperar para obter os resultados), portanto, aplique as melhores técnicas e práticas de desenvolvimento, como vapor, lematização, árvores de busca, com as ferramentas adequadas (índice invertido por exemplo), foi crucial em cada estágio.
Do texto para a representação vetorial
📄 Um pouco de aquecimento
O saco contínuo de palavras (CBOW) é uma técnica em que o objetivo é prever a palavra atual, considerando uma janela de palavras ao redor (antes e depois). Como alternativa, o skip gram contínuo tenta prever o posicionamento do contexto mencionado na palavra atual. Skill2Vec é uma técnica baseada em CBOW e C-Skip gram para obter habilidades a partir de documentos. Sua principal vantagem é o espaço vetorial gerado onde a relação entre as habilidades é representada. Além disso, o Doc2Vec tem uma usabilidade semelhante, onde as entradas de tokens são recebidas e um vetor único é obtido, com a vantagem da semelhança de distância vetorial quando as entradas têm significados semelhantes.
Chega de teoria: mãos à obra!
Para obter um vetor que descreva o perfil de um candidato e os principais requisitos de uma posição, combinamos skill2vec e doc2vec para serem usados como uma lista branca para extrair as habilidades mencionadas e criar o planta (vetor único), respectivamente.
🙋 Candidatos e oportunidades
O processo de extração de habilidades foi nossa primeira tarefa e a entrada envolvida (CV) não tinha um formato definido, como dissemos antes. Assim que o recebemos, extraímos o texto e obtivemos as habilidades do Skill2vec. O mesmo foi feito para a descrição do trabalho. Por exemplo, dado o seguinte extrato de currículo: “Atualmente estou trabalhando como engenheiro de software na company_name. trabalho baseado em ERP. Neste trabalho estou fazendo o módulo de RH. Basicamente fazendo esse trabalho usando postgresql, osslib, js e php. Além da minha profissão, concluí meu mestrado.“ Obtivemos esse conjunto de habilidades: postgresql, osslib, js, php. E, a partir da próxima descrição do trabalho: “Nessa função, você deve trabalhar em equipe com um olhar atento aos detalhes e às habilidades de resolução de problemas. Se você também tem experiência em estruturas ágeis e linguagens de codificação populares (por exemplo, JavaScript), gostaríamos de conhecê-lo. Esta posição exige:
- Trabalhe com desenvolvedores para criar algoritmos e fluxogramas
- Produza código limpo e eficiente com base nas especificações
- Integre componentes de software e programas de terceiros
- Experiência comprovada como desenvolvedor de software, engenheiro de software ou função similar
- Experiência com design e desenvolvimento de software em um ambiente orientado por testes
- Conhecimento de linguagens de codificação (por exemplo, C ++, Java, JavaScript) e frameworks/sistemas (por exemplo, AngularJS, Git)
- Experiência com bancos de dados e estruturas de mapeamento objeto-relacional (ORM) (por exemplo, Hibernate)
- Capacidade de aprender novos idiomas e tecnologias”
Extraímos: ágil, javascript, C ++, Java, AngularJS, Git, ORM, Hibernate. A seguir está o processo que usamos para extrair as habilidades:
- extrair texto
- divida-o por palavras (além disso, referenciado como token)
- remover palavras de parada
- lematizar
- vocabulário de comparação
Essas etapas também são replicadas com a descrição do trabalho como entrada.

Portanto, neste momento, tínhamos as habilidades como uma lista de tokens. Essa estrutura era nossa documento, usado para obter a representação vetorial. Ao contrário do Skill2Vec, que já estava treinado, tivemos que treinar o doc2vec sozinhos. Ajustamos o modelo, passando mais de um milhão de documentos como entradas, chegando a um resultado incrível. Uma das principais vantagens do doc2vec é a incorporação interna, portanto, as saídas são altamente precisas.
🔍 Verificando resultados
Nesse momento, estávamos entusiasmados com a exatidão de nosso resultado (recomendações), mas também precisávamos considerar a exigência de desempenho de nosso cliente. Por isso, combinamos duas técnicas extraordinárias para obter resultados: vizinhos mais próximos aproximados (ANN) e distância do motor de palavras (WMD). Com a ANN, obtemos (grosso modo) uma variedade de talentos que podem estar relacionados, mas esses resultados preliminares precisaram de um pouco de higienização e eliminação. Depois disso, aplicamos a distância do motor de palavras como um filtro nos documentos relacionados (vetores), para obter os melhores candidatos (mais próximos) para uma posição aberta.

Ok, e agora? Lições e conclusões
Para concluir, há alguns destaques e lições para compartilhar! Provavelmente, o básico era o antigo, mas confiável. dividir e conquistar, considerando que enfrentamos muitos obstáculos para construir o modelo. Da mesma forma, desde seu lançamento, o cliente vem servindo várias partidas e está muito feliz com o resultado. Além disso, estamos fazendo um brainstorming para aplicar essas técnicas ao aconselhamento de carreira para combinar planos de carreira com talentos, uma medida proativa de nossa parte. Antes de se despedir, não esqueça que você pode nos enviar um ping em marvik.ai para discutir ideias, projetos ou dúvidas que você possa ter.
