Note que estou fazendo tudo em R.
O problema é o seguinte:
Basicamente, eu tenho uma lista de currículos (CVs). Alguns candidatos terão experiência profissional antes e outros não. O objetivo aqui é: com base no texto em seus currículos, quero classificá-los em diferentes setores de trabalho. Sou particular naqueles casos em que os candidatos não têm nenhuma experiência / são estudantes e quero fazer uma previsão para classificar em quais setores de trabalho esse candidato provavelmente pertencerá após a graduação.
Pergunta 1: Conheço algoritmos de aprendizado de máquina. No entanto, eu nunca fiz PNL antes. Me deparei com a alocação de Dirichlet latente na internet. No entanto, não tenho certeza se essa é a melhor abordagem para resolver meu problema.
Minha idéia original: fazer disso um problema de aprendizado supervisionado . Suponha que já tenhamos uma grande quantidade de dados rotulados, o que significa que rotulamos corretamente os setores de trabalho para uma lista de candidatos. Nós treinamos o modelo usando algoritmos ML (ou seja, vizinho mais próximo ...) e alimentamos os dados não rotulados , que são candidatos que não têm experiência profissional / são estudantes, e tentamos prever a que setor de trabalho eles pertencerão.
Atualizar pergunta 2: seria uma boa idéia criar um arquivo de texto extraindo tudo em um currículo e imprimi-los no arquivo de texto, para que cada currículo seja associado a um arquivo de texto que contenha cadeias não estruturadas e, em seguida, aplicou técnicas de mineração de texto aos arquivos de texto e transformou os dados em estrutura ou até para criar uma matriz de frequência de termos usados nos arquivos de texto? Por exemplo, o arquivo de texto pode ser algo como isto:
I deployed ML algorithm in this project and... Skills: Java, Python, c++ ...
Isto é o que eu quis dizer com 'não estruturado', ou seja, recolhendo tudo em uma única linha de string.
Esta abordagem está errada? Corrija-me se você acha que minha abordagem está errada.
Pergunta 3: A parte complicada é: como identificar e extrair as palavras-chave ? Usando o tm
pacote no R? em que algoritmo o tm
pacote se baseia? Devo usar algoritmos de PNL? Se sim, quais algoritmos devo analisar? Por favor, aponte-me para alguns bons recursos para analisar também.
Alguma idéia seria ótima.
fonte
Apenas extraia palavras - chave e treine um classificador nelas. Isso é tudo, sério.
A maior parte do texto nos currículos não está realmente relacionada a habilidades. Por exemplo, considere a frase "Sou experiente e altamente eficiente em Java". Aqui, apenas 1 em cada 7 palavras é um nome de habilidade, o restante é apenas um ruído que reduzirá a precisão da classificação.
A maioria dos currículos não é realmente estruturada. Ou estruturado muito livremente. Ou use nomes incomuns para seções. Ou formatos de arquivo que não preservam a estrutura quando traduzidos para o texto. Tenho experiência em extrair datas, horas, nomes, endereços e até pessoas com intenções de texto não estruturado, mas não uma lista de habilidades (ou universidade ou qualquer outra coisa), nem de perto.
Portanto, basta tokenizar (e possivelmente conter ) seus currículos, selecionar apenas palavras da lista predefinida (você pode usar o LinkedIn ou algo semelhante para obter essa lista), criar um vetor de recurso e experimentar alguns classificadores (por exemplo, SVM e Naive Bayes) .
(Observação: usei uma abordagem semelhante para classificar os perfis do LinkedIn em mais de 50 classes com precisão> 90%, por isso tenho certeza que até uma implementação ingênua funcionará bem.)
fonte
Este é um problema complicado. Existem muitas maneiras de lidar com isso. Eu acho que currículos podem ser tratados como documentos semiestruturados. Às vezes, é benéfico ter alguma estrutura mínima nos documentos. Acredito que, nos currículos, você veria alguns dados tabulares. Você pode tratá-los como pares de valor de atributo. Por exemplo, você obteria uma lista de termos para o atributo "Conjunto de habilidades".
A idéia principal é configurar manualmente uma lista de frases-chave como "habilidade", "educação", "publicação" etc. O próximo passo é extrair termos que pertencem a essas frases-chave, explorando a estrutura de alguma maneira (como como tabelas) ou utilizando a proximidade dos termos em torno dessas frases-chave, por exemplo, o fato de a palavra "Java" estar próxima do termo "habilidade" pode indicar que a pessoa é especialista em Java.
Depois de extrair essas informações, a próxima etapa pode ser criar um vetor de recurso para cada uma dessas frases-chave. Em seguida, você pode representar um documento como um vetor com campos diferentes (cada um para uma frase-chave). Por exemplo, considere os dois resumos a seguir representados com dois campos, a saber, projeto e educação .
Doc1: {projeto: (java, 3) (c, 4)}, {educação: (computador, 2), (física, 1)}
Doc2: {projeto: (java, 3) (python, 2)}, {educação: (matemática, 3), (computador, 2)}
No exemplo acima, mostro um termo com a frequência. Obviamente, ao extrair os termos, você precisa conter e remover palavras de parada. É claro, a partir dos exemplos, que a pessoa cujo currículo é Doc1 é mais habilidosa em C que a de D2. Em termos de implementação, é muito fácil representar documentos como vetores de campo no Lucene.
Agora, o próximo passo é recuperar uma lista classificada de currículos, de acordo com uma especificação do trabalho. De fato, isso é bastante direto se você representar consultas (especificações de trabalho) como vetores de campo. Você só precisa recuperar uma lista classificada de candidatos (currículos) usando o Lucene de uma coleção de currículos indexados.
fonte
Trabalho em um site de empregos on-line e criamos soluções para recomendar trabalhos com base em currículos. Nossa abordagem leva o cargo de uma pessoa (ou o cargo desejado, se for aluno e conhecido), juntamente com as habilidades que extraímos de seu currículo e sua localização (que é muito importante para a maioria das pessoas) e encontra correspondências com empregos com base nisso.
em termos de classificação de documentos, eu adotaria uma abordagem semelhante. Eu recomendaria computar uma matriz tf idf para cada currículo como um modelo padrão de pacote de palavras, extraindo apenas o cargo e as habilidades da pessoa (para a qual você precisará definir uma lista de habilidades a serem procuradas) e alimentá-la em um ML algoritmo. Eu recomendaria tentar knn e um SVM, este último funciona muito bem com dados de texto de alta dimensão. SVM lineares tendem a se sair melhor que não lineares (por exemplo, usando kernels RBf). Se você obtiver resultados razoáveis, eu brincaria com a extração de recursos usando um analisador de idioma natural \ chunker, e também algumas frases personalizadas, correspondidas por expressões regulares.
fonte