Usando Deep Learning para extrair informação de Currículos em Português

Source: Deep Learning on Medium


Go to the profile of Denis Araujo

A contratação de profissionais é um processo importante para as empresas atualmente, demandando soluções ágeis e confiáveis. O uso da Internet para agilizar o fluxo de informações do processo de contratação é fato consumado.

Embora tenhamos recursos alternativos, como formulários eletrônicos e redes sociais focadas na exposição de informações dos profissionais, é ainda bastante comum reunir as informações pessoais dos candidatos em um documento tradicionalmente chamado de Curriculum Vitæ (CV).

O desenvolvimento de sistemas que extraiam automática e eficientemente as informações armazenadas em CV resultaria em grandes benefícios para o processo de contratação. Além da obtenção automática dos dados, seria possível também, por exemplo, elaborar o perfil profissional dos candidatos a partir dos dados extraídos e rapidamente verificar o seu nível de aderência à vaga.

Contudo, a extração automática de informações a partir de CV é ainda um grande desafio, principalmente devido à inexistência de um padrão para a confecção destes documentos, os quais podem ser elaborado em diferentes estilos e formatos de escrita. Decorre principalmente daí uma dificuldade considerável para os sistemas de Extração de Informação (EI) coletarem automaticamente os dados do CV.

Tradicionalmente, métodos baseados no casamento de palavras chaves eram os mais utilizados. Com a possibilidade de processamento de texto baseados em algoritmos de Aprendizagem de Máquina, novas abordagens para EI de CV foram desenvolvidas, baseadas em algoritmos mais inteligentes e autônomos, como o Support Vector Machine, Clusterização textual, Latent Dirichlet Allocation, entre outros.

Mais recentemente, diversos estudos e experimentos explorando a possibilidade do uso de algoritmos de redes neurais de aprendizagem profunda (Deep Learning) para classificação de palavras pela predição de etiquetas (tags) para segmentos de texto.

Neste artigo vamos apresentar um experimento que realizamos para extrair informações a partir de CV utilizando Deep Learning para a classificação de texto. Nosso objetivo é extrair informações automaticamente do CV do candidato, tais como suas habilidades técnicas, sua experiência profissional, formação educacional, etc.

Em nossa abordagem tratamos o desafio de extrair informações como um problema de Reconhecimento de Entidades Mencionadas (NER — Named Entity Recognition), fazendo uso de uma Rede Neural Recorrente (RNN — Recurrent Neural Network) para o reconhecimento de referências à cidades, empresas, pessoas, endereços, etc.

Extraindo informações dos Currículos

O experimento que estamos relatando neste artigo foi realizado sobre currículos reais recebidos do decorrer do último semestre de 2018, enviados por candidatos a vagas nas áreas de análise, desenvolvimento e design de sistemas.

Para realizar o reconhecimento das entidades referenciadas no CV utilizamos o sistema chamado NeuroNER. O sistema NeuroNER implementa uma RNN de até três camadas para o processamento de textos: (1) camada Long-Short Term Memory (LSTM) com token-embedding otimizado para carácter; (2) camada bidirectional LSTM (biLSTM) de predição de label; e (3) camada de otimização de sequência de label via Conditional Randon Field (CRF). A Figura 1 apresenta uma visão esquematizada da arquitetura geral da rede neural do sistema NeuroNER.

Figura 1: Arquitetura geral da rede neural recursiva do sistema NeuroNER (fonte: adaptado pelo autor a partir de How does the NeuroNER engine work?)

A arquitetura em três camadas do NeuroNER utiliza biLSTM-LSTM-CRF para o reconhecimento de entidades, sendo possível ativar ou desativar as camadas LSTM (embedding de carácteres) ou CRF (otimização de sequência de labels) via arquivo de configuração.

O método de aprendizagem dos modelos utilizados pelo NeuroNER é o supervisionado, ou seja, o sistema aprende a reconhecer as entidades de um documento de texto através de exemplos que lhe são apresentados na etapa de treinamento da rede. Estes exemplos são arquivos textos contendo anotações, tal como apresentado na Figura 2.

Figura 2: Tela contendo trecho de um currículo com texto anotado (algumas informações foram omitidas para preservar a privacidade do candidato). As anotações são apresentadas destacando-se no texto o trecho e a respectiva classe a qual ele pertence. O trecho de texto “Rua: Noruega” no exemplo apresentado pertence à classe “Nome da rua”, o trecho “MS” pertence à classe “UF” e assim por diante.

Anotamos manualmente um total de 224 documentos texto para a realização do experimento de avaliação do NeuroNER como ferramenta de extração de informações. Este currículos foram selecionados aleatoriamente a partir de um conjunto de documentos enviados entre janeiro e junho de 2018 ao nosso Departamento de Pessoal .

Para a anotação dos currículos utilizamos o sistema de anotação BRAT, uma aplicação web que pode ser utilizada para inserir anotações semânticas diretamente em documentos de texto. Os currículos foram anotados em relação a um conjunto de 18 diferentes classes. Na Tabela 1 estão listadas estas classes e a respectiva quantidade de trechos (instâncias) de cada classe.

Tabela 1: Classes utilizadas para anotação dos currículos e respectivas quantidades.

Após a anotação dos currículos, passamos para a próxima etapa do experimento: rodar o sistema NeuroNER para avaliar o seu desempenho na extração de informações. Embora a instalação do sistema NeuroNER seja bastante simples (como pode ser visto no arquivo README do projeto), nós optamos por utilizar o container Docker gerado a partir do Dockerfile disponibilizado em https://github.com/mcavdar/NeuroNER-docker.

Assim, obtivemos um sistema NeuroNER pronto para processar documentos em inglês. Como nosso objetivo é verificar o desempenho do sistema para extrair dados de currículos escritos em Português, foi necessário realizar algumas configurações adicionais.

Para a adaptação do NeuroNER ao português utilizamos como guia os passos descritos na issue 30 do projeto NeuroNER, sendo este processo composto basicamente por dois passos:

  1. Instalação do suporte ao português do toquenizador: o NeuroNER instalado pelo dockerfile vem configurado para utilizar um toquenizador para a língua inglesa da biblioteca spaCy. Para instalar o suporte à língua portuguesa no spaCy é necessário entrar no container Docker do NeuroNER, rodar o comando “python -m spacy.pt.download” e configurar no arquivo /NeuroNER-master/src/parameters.ini a opção spacylanguage=pt.
  2. Fornecer os vetores de word embeddings para Português: os vetores de word embeddings configurados por padrão no container Docker do NeuroNER são para a língua inglesa. É preciso utilizar vetores gerados para a língua portuguesa. Nós baixamos o arquivo com os vetores do tipo GloVe de 100 dimensões disponibilizados pelo NILC e atualizamos a opção token_pretrained_embedding_filepath do arquivo de configuração “/NeuroNER-master/src/parameters.ini”.

A partir dos procedimentos detalhados acima, obtivemos o suporte à língua portuguesa no NeuroNER, viabilizando assim o início do experimento. Para a etapa de treinamento e avaliação, seguimos o procedimento padrão usual de dividir os currículos anotados em dois conjuntos de dados contendo 75% para treinamento (170 documentos) e 25% (54 documentos) para avaliação do desempenho.

O experimento foi realizado em um computador com CPU i7 Quad core Intel Core com 16 GB de memória RAM. O processo de treinamento da rede neural do sistema NeuroNER estabilizou e encerrou-se no 39o ciclo (época), levando aproximadamente 122 minutos para concluir.

O sistema NeuroNER apresenta uma grande quantidade de informações referentes ao desempenho do modelo no decorrer do processo de treinamento. Selecionamos para este artigo dois gráficos que fornecem uma visão mais geral do processo, apresentando a acurácia (Figura 3) e o escore F1 (Figura 4), duas métricas usualmente utilizadas para a avaliação de sistemas de classificação de dados.

Fonte: gráfico gerado pelo sistema NeuroNER para o experimento.

Figura 3: Acurácia do sistema NeuroNER no decorrer do processo de treinamento.

Fonte: gráfico gerado pelo sistema NeuroNER para o experimento.

Figura 4: Escore F1 do sistema NeuroNER no decorrer do treinamento.

A partir dos gráficos apresentados nas Figuras 3 e 4 podemos verificar algumas informações importantes sobre o processo de aprendizagem do NeuroNER. Podemos ver, por exemplo, que ambas as métricas demonstram que a curva de aprendizagem do sistema rapidamente estabiliza, obtendo resultados já bastante satisfatórios entre 15 e 30 ciclos de treinamentos (épocas).

O rápido crescimento e estabilização da curva aprendizagem nos informam que o modelo está identificando as características mais importantes (features) do texto para o reconhecimento das entidades mencionadas e, por consequência, identificando eficientemente as informações importantes do documento.

Podemos observar também que obtivemos uma acurácia (Figura 3) bastante satisfatória no processo de validação do NeuroNER (88.4), embora a métrica escore F1 (Figura 4) tenha ficado abaixo do desejado (55.62). O bom resultado na acurácia indica que no geral o modelo frequentemente classificou os dados de forma correta (ou seja, conforme as anotações feitas nos currículos), mas o desempenho no escore F1 indica que a qualidade geral do modelo precisa de ajustes.

Em nossa análise, concluímos que o desempenho obtido no experimento é resultado direto da configuração padrão do sistema NeuroNER. Vamos agora trabalhar na melhoria do desempenho geral do sistema, seja pela análise mais profunda dos dados utilizados (currículos anotados), seja pela revisão dos processos realizados para preparação dos dados, seja pela otimização dos hiper parâmetros das redes neurais (LSTM e biLSTM) que compõem o sistema.

Por fim, é importante salientar que nosso principal objetivo com a realização deste experimento foi avaliar preliminarmente a viabilidade de uso de Deep Learning para extração de dados a partir de currículos. Neste sentido, apesar da necessidade de ajustes para melhora do desempenho geral, o experimento cumpriu plenamente com os nossos objetivos, permitindo-nos verificar que as redes neurais Deep Learning são efetivamente uma ferramenta para extrair dados de currículos elaborados em português.

Referências

DERNONCOURT, F.; LEE, J. Y.; SZOLOVITS, P. NeuroNER: an easy-to-use program for named-entity recognition based on neural networks. arXiv preprint arXiv:1705.05487, 2017.

MIKOLOV, T. et al. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, 2013.

PENNINGTON, J.; SOCHER, R.; MANNING, C. Glove: Global vectors for word representation. Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). Anais, 2014