Notez que je fais tout en R.
Le problème est le suivant:
Fondamentalement, j'ai une liste de CV (CV). Certains candidats auront une expérience de travail avant et d'autres non. Le but ici est de: sur la base du texte de leur CV, je souhaite les classer dans différents secteurs d'emploi. Je suis particulièrement dans les cas où les candidats n'ont aucune expérience / sont étudiants, et je veux faire une prédiction pour classer les secteurs d'emploi auxquels ce candidat appartiendra le plus probablement après l'obtention du diplôme.
Question 1: Je connais les algorithmes d'apprentissage automatique. Cependant, je n'ai jamais fait de PNL auparavant. Je suis tombé sur l'allocation de Dirichlet latente sur Internet. Cependant, je ne sais pas si c'est la meilleure approche pour résoudre mon problème.
Mon idée originale: en faire un problème d'apprentissage supervisé . Supposons que nous ayons déjà une grande quantité de données étiquetées, ce qui signifie que nous avons correctement étiqueté les secteurs d'emploi pour une liste de candidats. Nous formons le modèle à l'aide d'algorithmes ML (c'est-à-dire le plus proche voisin ...) et alimentons ces données non étiquetées , qui sont des candidats qui n'ont aucune expérience de travail / sont des étudiants, et essayons de prédire à quel secteur d'emploi ils appartiendront.
Mettre à jour la question 2: Serait-ce une bonne idée de créer un fichier texte en extrayant tout dans un CV et d'imprimer ces données dans le fichier texte, afin que chaque CV soit associé à un fichier texte, qui contient des chaînes non structurées, puis nous appliqué des techniques d'exploration de texte aux fichiers texte et structuré les données ou même créé une matrice de fréquence des termes utilisés à partir des fichiers texte? Par exemple, le fichier texte peut ressembler à ceci:
I deployed ML algorithm in this project and... Skills: Java, Python, c++ ...
C'est ce que j'entendais par «non structuré», c'est-à-dire tout réduire en une seule chaîne de ligne.
Cette approche est-elle mauvaise? Veuillez me corriger si vous pensez que mon approche est fausse.
Question 3: La partie délicate est: comment identifier et extraire les mots clés ? Vous utilisez le tm
package dans R? sur quel algorithme le tm
package est-il basé? Dois-je utiliser des algorithmes NLP? Si oui, quels algorithmes dois-je étudier? Veuillez m'indiquer quelques bonnes ressources à consulter également.
Toutes les idées seraient géniales.
la source
Il suffit d'extraire des mots clés et de former un classificateur sur eux. C'est tout, vraiment.
La plupart du texte des CV n'est pas réellement lié aux compétences. Par exemple, considérez la phrase "Je suis expérimenté et très efficace en Java". Ici, seulement 1 mot sur 7 est un nom de compétence, le reste n'est qu'un bruit qui va réduire votre précision de classification.
La plupart des CV ne sont pas vraiment structurés. Ou structuré trop librement. Ou utilisez des noms inhabituels pour les sections. Ou des formats de fichier qui ne conservent pas la structure lorsqu'ils sont traduits en texte. J'ai de l'expérience dans l'extraction de dates, d'heures, de noms, d'adresses et même d'intentions de personnes à partir d'un texte non structuré, mais pas d'une liste de compétences (ou d'université ou autre), pas même de près.
Il suffit donc de tokeniser (et éventuellement de limiter ) vos CV, de sélectionner uniquement les mots de la liste prédéfinie (vous pouvez utiliser LinkedIn ou quelque chose de similaire pour récupérer cette liste), de créer un vecteur de fonctionnalités et d'essayer quelques classificateurs (par exemple, SVM et Naive Bayes) .
(Remarque: j'ai utilisé une approche similaire pour classer les profils LinkedIn dans plus de 50 classes avec une précision> 90%, donc je suis sûr que même une implémentation naïve fonctionnera bien.)
la source
C'est un problème délicat. Il existe de nombreuses façons de le gérer. Je suppose que les CV peuvent être traités comme des documents semi-structurés. Parfois, il est avantageux d'avoir une structure minimale dans les documents. Je crois que dans les CV, vous verrez des données tabulaires. Vous souhaiterez peut-être les traiter comme des paires de valeurs d'attribut. Par exemple, vous obtiendrez une liste de termes pour l'attribut "Ensemble de compétences".
L'idée clé est de configurer manuellement une liste de phrases clés telles que "compétence", "éducation", "publication", etc. L'étape suivante consiste à extraire les termes qui se rapportent à ces phrases clés, soit en exploitant la structure d'une manière sous forme de tableaux) ou en utilisant la proximité des termes autour de ces phrases clés, par exemple le fait que le mot "Java" soit à proximité du terme "compétence" pourrait indiquer que la personne est compétente en Java.
Une fois ces informations extraites, l'étape suivante peut consister à créer un vecteur d'entités pour chacune de ces phrases clés. Vous pouvez ensuite représenter un document comme un vecteur avec différents champs (un chacun pour une phrase clé). Par exemple, considérons les deux CV suivants représentés avec deux domaines, à savoir le projet et l' éducation .
Doc1: {projet: (java, 3) (c, 4)}, {éducation: (ordinateur, 2), (physique, 1)}
Doc2: {projet: (java, 3) (python, 2)}, {éducation: (mathématiques, 3), (ordinateur, 2)}
Dans l'exemple ci-dessus, je montre un terme avec la fréquence. Bien sûr, tout en extrayant les termes dont vous avez besoin pour endiguer et supprimer les mots vides. Il ressort clairement des exemples que la personne dont le curriculum vitae est Doc1 est plus compétente en C que celle de D2. En termes d'implémentation, il est très facile de représenter des documents comme vecteurs de champ dans Lucene.
Maintenant, l'étape suivante consiste à récupérer une liste classée de CV en fonction d'une spécification de travail. En fait, c'est assez simple si vous représentez également les requêtes (spécifications de travail) comme vecteurs de champ. Il vous suffit de récupérer une liste classée de candidats (CV) à l'aide de Lucene à partir d'une collection de CV indexés.
la source
Je travaille pour un site d'emplois en ligne et nous créons des solutions pour recommander des emplois en fonction des CV. Notre approche prend le titre d'emploi d'une personne (ou le titre d'emploi souhaité si un étudiant et connu), ainsi que les compétences que nous extrayons de leur curriculum vitae, et leur emplacement (ce qui est très important pour la plupart des gens) et trouver des correspondances avec des emplois basés sur cela.
en termes de classification des documents, j'adopterais une approche similaire. Je recommanderais de calculer une matrice tf idf pour chaque curriculum vitae en tant que modèle de sac de mots standard, en extrayant uniquement le titre du poste et les compétences de la personne (pour lesquelles vous devrez définir une liste de compétences à rechercher), et de l'intégrer dans un ML algorithme. Je recommanderais d'essayer knn et un SVM, ce dernier fonctionne très bien avec des données texte de haute dimension. Les SVM linéaires ont tendance à faire mieux que les non-linéaires (par exemple en utilisant des noyaux RBf). Si vous obtenez des résultats raisonnables, je jouerais alors avec l'extraction de fonctionnalités en utilisant un analyseur \ chunker en langage naturel, ainsi que des phrases construites sur mesure correspondant aux expressions rationnelles.
la source