I.A. no RH: recuperação de informação e processamento de linguagem natural

Tempo de leitura: 14 minutos

Tornar mais ágil o processo de candidatura a uma vaga de emprego estimula o potencial candidato a completar todas as etapas do processo, informando os dados necessários em cada uma delas. Para abordar essa questão, o time de Data Science e Inteligência Artificial da Sólides desenvolveu um algoritmo de recuperação de informação para extrair dados relevantes diretamente a partir dos textos dos currículos.

Recuperar automaticamente informações em conteúdos textuais implica em lidar com dados não estruturados, ou seja, que não contêm em sua estrutura original referências claras a respeito das relações que as entidades, termos ou conceitos contidos em seu conjunto estabelecem entre si para produzir significado. 

Trata-se de um cenário bastante diferente daquele no qual lidamos com dados estruturados como em bancos de dados. Sendo assim, para que se possa então recuperar informações que sejam relevantes para um dado problema, área de interesse ou domínio do conhecimento é necessário encontrar meios de descobrir estas relações, em seus aspectos sintáticos e semânticos. Há diferentes formas não triviais de realizar estes processos complexos e este artigo apresenta uma breve discussão sobre algumas delas.

Motivação para elaboração do algoritmo

Geralmente, longos formulários com dados pessoais, de experiência profissional e formação educacional consomem grande parte do tempo despendido, sendo que muitos candidatos já têm um currículo preenchido e formatado em papel, arquivo eletrônico, ou em uma rede social profissional como o LinkedIn. 

https://drive.google.com/file/d/1N-Hh7HWo8yWcyp0VtLm5Yk1qenYYebi-/view?usp=sharing

Permitir que este candidato forneça seu currículo ao sistema computacional, por meio do qual pretende se candidatar a uma vaga, e procurar extrair automaticamente deste documento a maior quantidade de dados possível torna esta etapa mais ágil, cuja percepção se traduz em uma experiência melhor para o candidato em seu primeiro contato com a empresa.

Diante deste contexto algumas perguntas interessantes podem ser feitas, considerando o processamento de linguagem natural: 

  • Quais são as informações relevantes em um currículo? 
  • Como localizar estas informações no documento? 
  • Como relacioná-las? 
  • Como lidar com sinônimos e homônimos? 
  • Como lidar com a redundância e a repetição? 
  • Como passar a reconhecer elementos ainda não conhecidos pela equipe que desenvolve o sistema? 

Uma solução inicial e mais simples seria predeterminar seções específicas do currículo e a ordem em que se espera que ocorram. Em seguida, armazenar uma lista de termos elencados como relevantes e percorrer todo o documento comparando cada termo com diversos termos esperados para cada seção do documento, na ordem definida, assim como todo o texto de cada seção. 

Pois bem, ao se pensar no custo computacional percebe-se facilmente a ineficiência deste processo, principalmente se esta lista de termos estiver armazenada em um banco de dados. Além disso, é fácil perceber que se o documento em análise estiver organizado de forma diferente da esperada, o processo será pouco eficaz na correta recuperação das informações. 

Agora pensemos, por exemplo, em nomes, datas e descrições. Se neste processo de busca linear um dado termo é encontrado como equivalente a um nome próprio que se tenha armazenado, será este o nome de uma pessoa, de uma rua, de uma instituição, de uma empresa ou de uma cidade? Será um sobrenome? O mesmo vale para uma data, que pode ser a data de nascimento do candidato, a data de entrada ou saída de um emprego ou data de início de um curso ou sua formatura. 

Poderíamos tratar aqui de diversas outras questões como estas, mas já é possível perceber que não serão resolvidas com um processo de comparação termo a termo isoladamente. Ou seja, temos aqui um problema ortográfico, sintático e semântico, pois nome próprio se escreve com letras maiúsculas e são substantivos, enquanto datas têm diferentes formatos e conceitos inter-relacionados, como o nome de uma faculdade associado à descrição de um curso, implicam em um problema semântico. 

Além do mais, considerar uma organização prévia muito rígida para as seções de um currículo exigiria que o candidato conhecesse o processo definido pelo sistema e ainda modificasse seu documento para atendê-lo, fato que, se fosse possível, introduziria um esforço que contraria o objetivo próprio do processo automatizado.

A recuperação de informação na prática por meio do algoritmo de processamento de linguagem natural da Sólides

Há muitas questões complexas a serem abordadas quando se fala de recuperação de informação em dados textuais, pois estamos tratando aqui de uma área de pesquisa da Ciência da Computação, denominada Processamento de Linguagem Natural, que compreende uma vasta gama de aplicações. Em momento oportuno poderemos apresentar uma discussão mais abrangente. Por hora, voltemos ao nosso estudo de caso.

O projeto desenvolvido pela Sólides tinha como objetivo elaborar e implementar um algoritmo capaz de recuperar de forma automática dados de currículos de candidatos, em uma grande variedade de formatos de arquivo, independente da formatação do documento e da ordem na qual as informações são apresentadas. Incluindo currículos apresentados como imagens fotográficas ou digitalizados por meio de um scanner.

O algoritmo utiliza uma base de conhecimento de domínio, anotação automática de metadados, autômatos finitos com regras de inferência, análise sintática e análise semântica para processar os textos extraídos dos documentos em formatos de arquivos PDF, DOC, DOCX, RTF, TXT, XML e HTML. Para documentos apresentados em formatos de imagem JPG, JPEG ou PNG, um passo anterior aplica visão computacional, por meio de redes neurais convolutivas, para extração do texto e subsequente submissão ao processo de recuperação de informações. 

Contempla ainda diferentes etapas, que vão desde o pré-processamento dos documentos até a estruturação final das informações extraídas. A seguir são apresentadas e descritas cada uma destas etapas. 

Criação do corpus de documentos

Quando um arquivo é submetido ao processo de recuperação de informação, o primeiro passo consiste em verificar se o mesmo se trata de um arquivo texto, de uma imagem ou de um PDF cujo conteúdo consista na verdade em imagens do documento original geradas por um scanner. 

Em todos os casos, cada arquivo recebe um identificador único e é armazenado em um corpus de documentos, para que possam ser processados. Arquivos texto são diretamente armazenados no corpus após receberem o identificador. 

No caso de imagens, primeiro é realizada a extração de seu conteúdo textual, que em seguida é convertido em arquivo texto e então armazenado no corpus. No terceiro caso, o arquivo em PDF é processado para extrair as imagens escaneadas de cada página do documento, para que  estas imagens sejam então concatenadas na ordem em que são extraídas, gerando um único arquivo. Este arquivo resultante é então tratado da mesmo forma que os arquivos originalmente submetidos como imagens. 

Pipeline de processamento

Uma vez que se tenha documentos armazenados no corpus, para cada um deles é iniciado um pipeline de processamento de linguagem natural no qual cada etapa produz a saída necessária para a etapa seguinte, até que o texto bruto inicial esteja estruturado em entidades e conceitos devidamente classificados e relacionados entre si. 

Ao longo deste pipeline uma série de anotações de metadados são automaticamente inseridas com o objetivo descrever os diferentes elementos contidos no texto por meio de informações posicionais, sintáticas e semânticas geradas em cada etapa. 

Pré-processamento

A primeira etapa consiste na remoção de marcações que não sejam marcações padrão de formatação e estruturação do texto, além de informações inseridas por softwares de autoria e ferramentas de edição e que não produzem significado algum para o conteúdo do texto em si. 

Anotação automática de metadados

A segunda etapa consiste em identificar e anotar cada símbolo contido no texto como sendo números, pontuação ou palavras. A terceira etapa consiste em identificar elementos compostos por números ou letras mas que que trazem em si um significado semântico, como telefones, datas, CEPs, endereços de email e URLs. 

A etapa seguinte realiza a identificação e anotação das posições de início e fim das sentenças contidas no texto, permitindo que estas sentenças sejam sintaticamente analisadas na quarta etapa. 

A análise sintática de cada sentença tem como objetivo identificar e anotar a classe gramatical de cada um de seus termos, classificando-os como substantivos comuns, substantivos próprios, substantivos compostos — incluindo o gênero —, além de adjetivos, verbos dentre outras. Estas etapas de identificação de sentenças e análise sintática são fundamentais para a etapa de correlação e análise semântica. 

Para realização de cada uma destas quatro etapas são utilizados autômatos finitos e diversos conjuntos de regras de inferência, o que confere ao algoritmo a capacidade de identificar elementos de acordo com uma determinada linguagem, formalmente descrita por uma gramática, com grande eficiência computacional. 

Base de conhecimento

Nessa etapa, os termos identificados no texto como substantivos são submetidos a um processo de alinhamento com os termos contidos em uma base de conhecimento de domínio, composta por um léxico e um descritor taxonômico que estrutura seus dicionários de termos.  

Esta base de conhecimento contém diversos nomes de empresas, instituições, cursos, ruas, cidades, estados, países, títulos, cargos, habilidades técnicas e comportamentais, além de palavras-chave que consistem em informações relevantes ao conteúdo de um currículo.

Assim, o principal objetivo desta etapa é associar aos elementos anotados como substantivos na etapa anterior o termo correspondente da base de conhecimento e identificar sua classe de acordo com a descritor taxonômico, também por meio da inserção de uma anotação de metadado, cumprindo o primeiro passo para que as informações relevantes comecem a ser estruturadas e correlacionadas. 

Além dos metadados inseridos em cada uma das etapas anteriores, uma marcação posicional de início e fim é gerada para cada elemento do texto, sejam eles símbolos, números, palavras ou sentenças, recebendo cada anotação um identificador numérico. 

Dessa forma é possível identificar, por exemplo, que uma palavra contida em um dado intervalo de início e fim está também contida em uma sentença, uma vez que o indicador de início da sentença será sempre menor que o da palavra nela contida enquanto o indicador de fim será sempre maior. 

Como se pode observar, ao final dessa etapa, têm-se um grafo que descreve toda a estrutura do texto, interligando seus elementos, com aqueles que consistem em substantivos estando associados ao termo correspondente da base de conhecimento e devidamente classificados.

Correlações 

A sexta etapa, por sua vez, consiste em percorrer o grafo de anotações geradas para o documento, utilizando as anotações de metadados associadas a cada elemento de modo a identificar o nome do candidato, seu endereço, telefone, email, endereço do perfil no LinkedIn, resumo, experiências profissionais, formação, idiomas e habilidades. 

Para cada conjunto destes, cada informação é individualmente identificada, de modo que uma experiência profissional, por exemplo, tenha apontada a empresa a ela associada, as datas de início e fim e a descrição das atividades realizadas pelo candidato. O mesmo é feito para a formação, enquanto as habilidades são discriminadas como técnicas ou comportamentais. 

Porém, este processo não é trivial como possa parecer. Aqui é necessário lidar com o problema de correlação entre os elementos e da presença de homônimos. Por exemplo, ao se encontrar uma data é necessário identificar a que ela se refere e se faz parte da descrição de um intervalo de tempo, como o início e fim de uma experiência profissional e, neste caso, se ela consiste na data inicial ou final, caso haja uma data final e não uma indicação de algo ainda em curso. 

Outro exemplo interessante consiste em saber se um nome de uma empresa se encontra no título de uma experiência profissional ou se foi inserido como citação na descrição das atividades realizadas pelo candidato na ocupação de seu cargo em outra empresa, que por fim seria a empresa à qual se refere a experiência. 

Mais um caso complexo consiste em saber se um dado nome é o nome do candidato, de uma pessoa à qual se refere, de uma empresa ou instituição, de uma rua, cidade, Estado ou mesmo país, uma vez que para estas entidades é comum a ocorrência dos homônimos. 

Por fim, cada informação obtida na sexta etapa é armazenada em uma estrutura de dados própria para organização dos dados relevantes ao currículo. Uma vez concluído o processamento de todo o grafo de anotações de metadados e finalizada a análise de todo o texto, a estrutura de dados contendo estas informações é convertida para o formato JSON, que pode ser interpretado por um framework baseado em JavaScript e exibido em formulário na interface do usuário. 

Esta última etapa é importante para que o usuário possa conferir e corrigir os dados retornados, assim como informar aqueles que não foram automaticamente extraídos. 

Os experimentos já realizados

O algoritmo anteriormente descrito foi implementado e testado sobre um repositório de 82 currículos com variadas formatações, indo desde o melhor caso, no qual as informações estão claramente organizadas e objetivamente descritas, até o pior caso, no qual têm-se muitos textos colunares, com informações dispersas, repetitivas e apresentadas de forma pouco clara e objetiva. 

Para testar a eficiência do algoritmo foram realizados os seguintes testes automatizados de carga: processamento sequencial de todos os documentos do repositório e processamento de 10 sequências de 10 requisições simultâneas sobre documentos aleatórios. Em ambos os casos o tempo médio de processamento foi de 1 segundo por documento, em um modesto computador com um processador Intel Core I5 8ª Geração e 8GB de memória RAM.

Com relação à eficácia do algoritmo em seu processo de recuperação de informações, observa-se uma variação da acurácia média de 30% a 95% para o pior e melhor caso. Em todos casos obteve-se um recall alto, sendo que nos piores casos a precisão foi prejudicada.

Durante os testes, o algoritmo se comportou como esperado e passará a ser utilizado em produção nas próximas versões dos sistema de recrutamento e seleção da Sólides.

Uma vez que depende da qualidade e enriquecimento de sua base de conhecimento, assim como do refinamento de suas regras de inferência, um processo de retroalimentação a partir dos dados corrigidos ou novos dados informados na interface do usuário contribuirá para a melhoria de sua acurácia. 

A recuperação de informações de dados textuais por meio de processamento de linguagem natural tem diversas aplicações, seja na extração de informações estruturadas, seja em sistemas de recomendação, na gestão de documentos, no comércio eletrônico, no marketing, entre tantas outras.

Você quer entender mais sobre a inteligência artificial no RH? Faça o download gratuito do nosso e-book!

Esse conteúdo foi desenvolvido por Daniel E. Neves.
Cientista de Dados Sênior. Data Science Team – Sólides.

0 0 vote
Article Rating


Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments