Automatisation du Recrutement
Automatisation du Recrutement
Encadré par:
Makrem JANNADI
Signature :
Encadrement académique
Zaineb LABIDI
Signature:
:
Dédicace
Merci.
”
- Amal
IV
Remerciements
Tout d’abord, Merci à Dieu tout-puissant d’avoir répondu à mes prières, de m’avoir soutenu
dans ce dur voyage, et de m’avoir guidé et béni pour réussir.
Chers Maman et Papa, merci pour vos innombrables sacrifices qui m’ont ouvert de nom-
breuses portes pour grandir et réussir, d’avoir suscité en moi la confiance et la passion pour
travailler dur et poursuivre mes rêves sans limites. J’espère que je vous rendrai aussi fiers que
vous me rendez fière.
Chères grand-mères, merci pour vos prières, le soutien le plus incroyable pour moi, dont
j’en ai encore besoin toute ma vie.
Chères sœurs, merci d’avoir toléré mon stress et mes tensions dans les moments difficiles,
d’avoir toujours écouté mes plaintes lorsque la vie me met le plus à l’épreuve, et d’avoir toujours
cru en moi et m’avoir encouragée à aller jusqu’au bout.
Chers superviseurs, M. Makrem JANNADI et Mme Zaineb LABIDI, merci pour votre
engagement tout au long de ce stage, pour la qualité de votre encadrement, pour votre rigueur
et disponibilité pour assurer l’avancement de mon projet, et pour toutes les petites et grandes
choses que vous m’avez apprises.
Ce stage n’aurait pas été réalisable sans votre soutien et vos précieux conseils.
Chers amis, merci de m’avoir toujours souhaité le meilleur, d’avoir cru en moi pendant mes
moments de faiblesse, et de m’avoir toujours poussé à donner le meilleur de moi-même.
V
Table des matières
Dédicace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV
Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V
1 CADRE GÉNÉRAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1 Présentation de l’organisme d’accueil . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Présentation générale . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Domaines d’activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Organisation de l’entreprise . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.4 Département d’accueil . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Présentation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Étude de l’existant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 Description de l’existant . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.2 Critique de l’existant . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Solution proposée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Méthodologie de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5.1 SEMMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.2 CRISP-DM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5.3 Choix de la méthodologie . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Spécification de besoins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6.1 Objectifs métiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6.2 Objectifs data science . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Fondement théorique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 Traitement du langage naturel (NLP) . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Cas concrets de l’utilisation de NLP . . . . . . . . . . . . . . . . . . . 13
2.1.2 Vectorisation du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2.1 Bag of words(BOW) . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2.2 TF-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2.3 Comparaison ente BOW et TF-IDF . . . . . . . . . . . . . . 15
2.2 Topic modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Latent Dirichlet Allocation (LDA) . . . . . . . . . . . . . . . . . . . . 16
2.2.1.1 Principe de LDA . . . . . . . . . . . . . . . . . . . . . . . . 17
VI
Table des matières
4 Modélisation et Évaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1 Clustering des profils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.1 Besoin du clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
VII
Table des matières
5 Réalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1 Environnement du travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1.1 Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1.2 Relation entre les technologies : FARM stack . . . . . . . . . . . . . . 66
5.1.3 Bibliothèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2 Déploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.1 Coté FastAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.2 Coté Front-end : React . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2.1 Page de Login . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2.2 Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2.3 Affichage de la liste des profils . . . . . . . . . . . . . . . . 71
5.2.2.4 Page profil détaillé . . . . . . . . . . . . . . . . . . . . . . . 72
5.2.2.5 Outil de rapprochement des compétences . . . . . . . . . . . 74
5.2.2.6 Correspondance offre d’emploi/profils . . . . . . . . . . . . 75
Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
VIII
Table des figures
IX
Table des figures
X
Liste des tableaux
XI
Introduction Générale
Introduction Générale
1
Chapitre 1
CADRE GÉNÉRAL
Plan
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1 Présentation de l’organisme d’accueil . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Présentation générale . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Domaines d’activité . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Organisation de l’entreprise . . . . . . . . . . . . . . . . . . . . . . 4
1.1.4 Département d’accueil . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Présentation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Étude de l’existant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 Description de l’existant . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.2 Critique de l’existant . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Solution proposée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Méthodologie de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5.1 SEMMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.2 CRISP-DM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5.3 Choix de la méthodologie . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Spécification de besoins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6.1 Objectifs métiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6.2 Objectifs data science . . . . . . . . . . . . . . . . . . . . . . . . . 10
2
Chapitre 1. CADRE GÉNÉRAL
Introduction
Ce chapitre introductif est consacré pour la présentation de l’organisme d’accueil, le cadre
général du projet, à savoir l’étude et la critique de l’existant, la présentation de la probléma-
tique ainsi que la solution proposée, et finalement nous relevons la méthodologie optée pour la
planification de ce projet.
Wevioo est un groupe de conseil et de services informatiques tunisien, fondé en 1998 par son
président Mehdi Tekaya. A sa création le groupe était sous le nom OXIA, et en 2016 son nom
a changé à Wevioo. Le groupe d’origine tunisienne s’est développé pour devenir un groupe
international, présent dans plus de 30 pays d’ Europe, d’ Amérique du Nord, d’ Afrique et
du Moyen-Orient, regroupant plus de 300 collaborateurs, répartis sur cinq bureaux à Tunis,
Alger, Paris, Dubai et Abidjan.
3
Chapitre 1. CADRE GÉNÉRAL
Ce projet à été effectué au sein du département ”Innovation” qui est une sous branche du
département Software Engineering.
Le département Innovation s’intéresse à la réalisation des solutions intelligentes et automa-
tisées en utilisant les technologies digitales les plus innovantes dont nous citons l’intelligence
artificielle, le deep learning ,et la robotique.
4
Chapitre 1. CADRE GÉNÉRAL
— Il commence par définir les exigences auxquelles les candidats doivent répondre afin de
correspondre au poste à pourvoir.
— Une fois les critères cibles fixés, le recruteur rédige l’offre d’embauche et la publie sur les
réseaux sociaux professionnels, essentiellement sur Linkedin afin d’attirer les candidats
intéressés par l’offre.
— A ce stade, les recruteur entame la phase de recherche et de collecte des profils qui peut
finir par des milliers de candidatures.
— Le recruteur doit examiner ces candidatures une par une, en établissant une analyse ap-
profondie sur les différentes sections de chaque cv, à savoir la section des compétences,
des expériences et de la formation.
5
Chapitre 1. CADRE GÉNÉRAL
— En se basant sur ces analyses, il est indispensable de passer par plusieurs séquences de tri
et de filtrage des profils, ne retenant que les candidats les plus susceptibles de répondre
aux attentes du poste.
— Enfin, vient l’étape finale qui consiste à contacter les candidats retenus à l’issue de la phase
de filtrage, dans le but de leur proposer le poste en question et de planifier un entretien en
vue de mieux évaluer leur savoir-faire.
Après avoir observé et critiqué ce qui existe, nous sommes convaincus que ce qui fonction-
nait auparavant ne fonctionne plus aujourd’hui. Nous croyons donc qu’il est temps de migrer
vers de nouvelles tendances.
Comme solution, nous proposons de raccourcir les pratiques traditionnelles de recrutement
en les remplaçant par un système plus ”efficace” et plus rapide. Nous proposons alors un système
automatisé basé sur l’intelligence artificielle qui nous permettra d’économiser le temps qui était
investi dans l’analyse individuelle.
Notre système mettra fin à l’ennui de se perdre dans l’accumulation de profils, car nous uti-
liserons des bases de données, alimentées par des mots-clés, contenant des milliers de candidats
pour les postes à pourvoir.
La gestion d’un projet de science des données peut être une tâche difficile, car ces projets
nécessitent de gérer à la fois des ressources de données dont la taille peut être énorme, ainsi que
des modèles mathématiques qui doivent être soigneusement choisis et appliqués. Par conséquent,
6
Chapitre 1. CADRE GÉNÉRAL
1.5.1 SEMMA
Il s’agit d’une méthode d’exploration des données qui peut être utilisée pour résoudre divers
problèmes commerciaux, tels que la détection des fraudes, la rétention et la rotation des clients.
Elle comporte cinq phases (Sample, Explore, Modify, Model, and Assess), d’où l’acronyme
SEMMA. La figure ci dessous illustre les différentes phases du cycle de vie d’un projet data
science suivant la méthodologie Semma.
7
Chapitre 1. CADRE GÉNÉRAL
4. Modéliser (Model) : Dans cette phase, plusieurs techniques de modélisation sont appli-
quées aux données préalablement nettoyées. Ensuite, nous effectuons des comparaisons
des performances entre chaque modèle par rapport aux résultats souhaités, pour finale-
ment décider le modèle le plus approprié. Dans cette étape, nous effectuons les opérations
mathématiques nécessaires qui permettent d’augmenter la précision et l’exactitude de nos
résultats.
5. Évaluer (Assess) : Il s’agit de la dernière phase. A cette étape, les performances du modèle
sont évaluées par rapport aux données de test afin de garantir la fiabilité et la pertinence
de l’étape de modélisation . Nous comparons les résultats de notre modèle avec les résul-
tats réels, et en analysant les limites de notre modèle, nous essayons de les corriger pour
l’améliorer.
1.5.2 CRISP-DM
CRISP-DM est une méthodologie inventée en 1996, décrivant l’ensemble d’étapes qui com-
posent le processus de développement d’un projet data mining. CRISP-DM se déroule sur
six phases itératives allant de la la compréhension du métier jusqu’au déploiement,que nous
expliquons dans cette section.
8
Chapitre 1. CADRE GÉNÉRAL
Le tableau 1.1 récapitule les méthodes de gestion d’un projet Data science citées ci-dessus.
9
Chapitre 1. CADRE GÉNÉRAL
Dans cette section, nous choisissons la méthodologie appropriée pour notre projet parmi les
deux définies précédemment. Commençons par comparer ces deux méthodologies
CRISP-DM possède deux étapes supplémentaires par rapport à SEMMA qui sont « la com-
préhension du problème » et « le déploiement ».
Les deux phases « Echantillonner les données » et « Explorer les données » du processus
SEMMA existent dans la phase « compréhension des données » du processus CRISP-DM. De
plus, CRISP-DM est la méthodologie la plus complète et documentée d’une part, et elle est la
plus utilisée dans les projets de data science d’autre part [19].
Nous avons donc choisi d’utiliser la méthodologie CRISP-DM pour la souplesse qu’elle
apporte au travail et pour l’organisation de ses étapes.
Les objectifs métiers sont définis comme les résultats mesurables qu’une organisation cherche
à atteindre. Par le biais de ce projet, Wevioo vise à accomplir les objectifs métiers suivants :
— Améliorer aux recruteurs la présentation, la recherche et la navigation entre les profils des
candidats.
— Améliorer la productivité des recruteurs à trouver plus rapidement les meilleurs candidats.
— Renforcer les équipes de l’entreprise en améliorant la qualité d’embauche.
— Améliorer l’expérience du recruteur ainsi que celle du candidat .
Les objectifs data science sont définis par une série de démarches ou de phases qu’un data
scientiste suit au cours de la réalisation du projet afin d’atteindre les objectifs métiers.
Pour ce projet, nous avons défini les objectifs suivants :
— La détection et l’extraction automatiques des compétences à partir d’un CV, en appliquant
les modèles de machine learning appropriés.
10
Chapitre 1. CADRE GÉNÉRAL
11
Chapitre 2
Fondement théorique
Plan
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 Traitement du langage naturel (NLP) . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Cas concrets de l’utilisation de NLP . . . . . . . . . . . . . . . . . 13
2.1.2 Vectorisation du texte . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2.1 Bag of words(BOW) . . . . . . . . . . . . . . . . . . . 13
2.1.2.2 TF-IDF . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.2.3 Comparaison ente BOW et TF-IDF . . . . . . . . . . . . 15
2.2 Topic modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Latent Dirichlet Allocation (LDA) . . . . . . . . . . . . . . . . . . 16
2.2.1.1 Principe de LDA . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1.2 Les paramètres de LDA . . . . . . . . . . . . . . . . . . 18
2.2.1.3 Algorithme LDA . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 Non-negative Matrix Factorization(NMF) . . . . . . . . . . . . . . 20
2.2.2.1 Principe de NMF . . . . . . . . . . . . . . . . . . . . . 20
2.2.2.2 Explication mathématique du NMF . . . . . . . . . . . . 21
2.2.2.3 Algorithme NMF . . . . . . . . . . . . . . . . . . . . . 22
2.2.3 Evaluation du topic modeling . . . . . . . . . . . . . . . . . . . . . 22
2.2.3.1 Score de cohérence . . . . . . . . . . . . . . . . . . . . 23
2.2.3.2 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.3.3 Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . 23
a- La segmentation . . . . . . . . . . . . . . . . . . . . . . 24
b- Le calcul de probabilité . . . . . . . . . . . . . . . . . . 25
c- La mesure de confirmation . . . . . . . . . . . . . . . . 25
c.1- Mesure de confirmation directe . . . . . . . . . . 25
c.2- Mesure de confirmation indirecte . . . . . . . . . 26
d- L’aggrégation . . . . . . . . . . . . . . . . . . . . . . . 26
e- score de cohérence final . . . . . . . . . . . . . . . . . . 27
12
Chapitre 2. Fondement théorique
Introduction
Ce chapitre est dédié aux explications théoriques et mathématiques des différents algo-
rithmes, modèles et concepts qui seront ultérieurement exploités tout au long de la réalisation
de ce projet.
Les algorithmes de machine learning opèrent sur un espace de données numériques . Afin
d’effectuer l’apprentissage automatique sur du texte, nous devons alors transformer nos docu-
ments en représentations numériques de manière à pouvoir y appliquer les modèles de machine
learning.
Représenter un texte brute sous format numérique, revient à le transformer sous forme de vec-
teur, d’où, ce processus est appelé vectorisation.
13
Chapitre 2. Fondement théorique
BOW peut être implémenté en python, en utilisant une fonction du module scikit-learn,
appelée CountVectorizer.
2.1.2.2 TF-IDF
m(i, j)
M( j)
avec m(i,j) le nombre d’occurences du mot i dans le document j, et M(j) le nombre total
des mots qui forment le document j.
• Inverse document frequency IDF(i) :
N
log( )
t f (i)
14
Chapitre 2. Fondement théorique
avec N est le nombre total des documents dans le corpus, et tf(i) est le nombre total des
documents où le mot i apparait.
Le role de ce terme est d’atténuer l’effet des mots qui apparaissent courremment dans
presque tous les documents.
• Term frequency - Inverse document frequency TF-IDF(i,j) :
N
T F − IDF(i, j) = T F(i, j) × IDF(i) = t f (i, j) × log( )
t f (i)
Plus la valeur de TF-IDF(i,j) est grande, plus le mot i est important par rapport au docu-
ment j, tandis que plus la valeur de TF-IDF(i,j) est petite, moins le mot i est important
par rapport au document j.
Pensons à un document qui mentionne le mot ”Python” avec une fréquence élevée.
TF-IDF examinera tous les autres documents du corpus.
Si le mot ”Python” apparaît dans de nombreux documents, il ne s’agit pas d’un terme très signi-
ficatif et sa pondération est plus faible dans le vecteur texte TF-IDF.
En revanche, s’il n’apparaît que dans quelques documents, il est considéré comme un terme dis-
tinctif. Dans ce cas, il contribue à caractériser le document au sein du corpus et reçoit donc une
valeur plus élevée dans le vecteur.
Ressemblances
Différences
• Le modèle Bag of Words s’interesse seulement au comptage des mots et néglige leurs
importances par rapport à chaque document, tandis que le modèle TF-IDF contient des
informations sur les mots les plus importants et les moins importants de chaque document
• Les vecteurs Bag of Words sont faciles à interpréter. Cependant, le TF-IDF est générale-
ment plus performant dans les modèles d’apprentissage automatique.
15
Chapitre 2. Fondement théorique
Johann Peter Gustav Lejeune Dirichlet était un mathématicien allemand des années 1800
qui a largement contribué au domaine des mathématiques modernes.
LDA est basé sur cette distribution probabiliste, ce qui explique la présence du terme Diri-
chlet dans son appellation.
16
Chapitre 2. Fondement théorique
En 2003, LDA a été publié pour la première fois en tant que modèle graphique pour la décou-
verte de thèmes par David Blei, Andrew Ng et Micheal l.Jordan. Il s’agit de nos jours de l’une
des méthodes de topic modeling les plus populaires. [5]
L’objectif de LDA est de trouver les sujets auxquels un document appartient, sur la base des
mots qu’il contient, telque les documents sont représentés comme des mélanges aléatoires sur
des sujets latents, où chaque sujet est caractérisé par une distribution sur les mots.
LDA repose sur les hypothèses fondamentales du topic modeling qui sont :
— L’hypothèse de distribution statistique
qui assume que les documents ayant des sujets similaires utilisent des groupes de mots
similaires. Ainsi,les sujets latents peuvent être trouvés en recherchant des groupes de mots
qui apparaissent fréquemment ensemble dans les documents du corpus.
— L’hypothèse de mélange statistique qui assume qu’un seul document est un mélange de
plusieurs topics.
Nous pouvons imaginer que tout document particulier aura une distribution de probabilité sur
un nombre donné de sujets latents.
Disons que nous décidons de composer cinq sujets latents à travers différents documents.
Nous optenons donc cette distribution de probabilité discrète sur les sujets pour chaque document
(Figure 2.2)
Figure 2.2. Distribution de probabilié discrète d’un document sur les topics
[6]
A partir de cette distribution, nous pouvons dire que le document 1 a la plus forte probabilité
d’appartenir au topic 5.
Malgré cette forte probabilité d’appartenance du premier document au cinquième sujet, Nous ne
disons pas de manière définitive que le document 1 appartient au sujet 5, mais nous le modélisons
comme ayant une distribution de probabilité sur une variété de topics latents.
17
Chapitre 2. Fondement théorique
Ensuite, si nous regardons les sujets eux-mêmes, ceux-ci seront simplement modélisés comme
une distribution de probabilité sur les mots.
Par exemple, nous pouvons définir le sujet 1 comme une probabilité d’appartenir à chacun des
mots suivants (Figure 2.3)
Figure 2.3. Distribution de probabilité discrète d’un topis sur les mots
[6]
Nous pouvons voir que des mots tels que ’python’ et ’NLP’ ont une probabilité plus élevée
d’appartenir au thème 5.
A partir de cette distribution, nous sommes en tant qu’humains capables de labéliser ces sujets
facilement.
Si nous devions obtenir cette sorte de distribution de probabilité à travers tout le vocabulaire
de tous les mots du corpus, ce que nous finirions par faire est de demander les 10 mots ayant la
plus forte probabilité d’appartenir à chaque thème(topic) et ensuite nous essaierions de labéliser
ce thème.
Dans le scénario ci-dessus (Figure 2.3), nous pourrions supposer que le thème 5 a un rapport
avec la science des données.
Dans cette section nous allons nous baser sur la représentation graphique du modèle LDA,
présentée dans la figure ci dessous (Figure 3.3)
• Le rectangle le plus grand, désigné par M, indique le nombre total de documents dans le
corpus.
• Le petit rectangle n indique le nombre de mots dans un document.
• Les cercles désignent les paramètres du modèle. L’endroit où se situent ces paramètres,
par rapport aux deux rectangles, indique s’ils s’appliquent au niveau du document, du mot
ou des tous les deux ensembles.
18
Chapitre 2. Fondement théorique
b- Paramètres
les deux paramètres alpha et bêta situés à l’extérieur des deux rectangles, sont appelés prieurs
de Dirichelet.
• Alpha (α )
alpha est la priorité de dirichelet sur la distribution des sujets par document.
— Une valeur élevée de alpha indique que chaque document est susceptible de contenir un
mélange de la plupart des sujets.
— Une valeur faible de alpha indique que chaque document est susceptible de ne contenir
que quelques sujets.
• Bêta(β )
Bêta est la priorité de Dirichelet sur la distribution des mots par sujet.
— Un bêta élevé indique que chaque sujet contiendra un mélange de la plupart des mots.
— Un bêta faible indique que chaque sujet peut contenir un mélange de seulement quelques
mots.
• Thêta(θ ) , z et w
19
Chapitre 2. Fondement théorique
Supposons que nous avons un corpus de documents et nous voulons que LDA apprenne la
représentation de K sujets dans chaque document, ainsi que la distribution des mots de chaque
sujet.
Étant donné une matrice de données A, non négative, à m lignes et n colonnes , NMF cherche
deux matrices :
20
Chapitre 2. Fondement théorique
La quantité k est fixée par l’utilisateur et doit être inférieure ou égale à la plus petite de m
et n.
• La matrice W est généralement appelée matrice de dictionnaire ou de base.
• La matrice H est connue comme matrice d’expansion ou de coefficients.
L’idée sous-jacente de cette terminologie est qu’une matrice de données A, peut être exprimée
en termes de sommation de k vecteurs de base (colonnes de W) multipliés par les coefficients
correspondants (colonnes de H).
Etant donné une matrice non négative A (n X m), nous voulons effectuer une factorisation,
pour approximer A avec une multiplication matricielle de W(n X k) et H(k ×m)
Nous allons donc approximer chaque objet (qui est une colonne de la matrice A) par une
combinaison linéaire de k dimensions réduites ou ”vecteurs de base” dans W.
A =W . H
La résolution de cette équiation, revient à résoudre un problème de minimisation de la fonction
objective : A - W.h =0
Ca revient à mimnimiser la norme de Forbenius ||A-WH||2 , par un processus de recherche
itératif approprié.
La solution de cette minimisation n’est pas unique. c’est-à-dire nous pouvons avoir plu-
sieures combinaisons de W et H qui satisfaient l’équation A = W.H
L’objectif est alors d’affiner W et H autant que possible, afin de minimiser la fonction objective.
L’approche commune consiste à itérer entre deux règles de mise à jour multiplicatives jus-
qu’à convergence. Nous expliquons cette approche dans la description de l’algorithme NMF.
21
Chapitre 2. Fondement théorique
22
Chapitre 2. Fondement théorique
La mesure de cohérence des sujets évalue chaque sujet en mesurant le degré de similarité
sémantique entre les mots à score élevé du sujet (les mots clés du sujet). Cette mesure permet
de distinguer les sujets qui sont sémantiquement interprétables, de ceux qui ne le sont pas.
Le premier point essentiel pour comprendre le fonctionnement du score de cohérence est de
se concentrer sur la cmpréhension du mot clé ”cohérence”.
Généralement, lorsque nous parlons de ‘cohérence, nous parlons d’une caractéristique de
coopération.
Des arguments sont dits cohérents s’ils se confirment entre eux.
Par exemple, un algorithme de modélisation de sujets peut distinguer les sujets suivants :
D’un point de vue humain, le premier sujet semble plus cohérent que le second. Le but de la
métrique score de cohérence, est de mesurer mathématiquement cette cohérence au sein des
sujets découverts par le modèle de topic modeling.
2.2.3.2 Principe
La métrique de cohérence d’un topic évalue à quel degré un topic est soutenu par un en-
semble de textes appellé corpus de référence. Elle utilise des statistiques et des probabilités
tirées du corpus de référence, en se concentrant particulièrement sur le contexte du mot, pour
donner un score de cohérence à un topic.
2.2.3.3 Pipeline
23
Chapitre 2. Fondement théorique
Comme indiqué dans la figure ci dessus, la mesure de la cohérence des sujets est un pipe-
line qui reçoit les sujets et le corpus de référence en entrée et produit une seule valeur réelle
représentant la ”cohérence globale des sujets”. Comprenons donc chacun de ses modules.
a- La segmentation
S = {(W ′ ,W ∗),W ′ ,W ∗ ⊆ W }
Où la deuxième partie de la paire notée par (W*)va être utilisée pour confirmer la première
partie (W’). Cela deviendra plus clair lorsque nous parlerons du calcul des probabilités et des
mesures de confirmation dans les sections suivantes, où ces paires seront utilisées.
Pour simplifier les choses, nous pouvons comprendre la segmentation comme l’étape où
nous choisissons comment nous allons ”mélanger” les mots d’un sujet afin l’évaluer ultérieu-
rement.
Il existe deux façons de ségmentations :
— Segmentation S-one-one : Cette segmentation dit que nous devons extraire à partir des
N mots clés, tous paires de mots possibles. Donc, si W = cats, chiens, jouets, nous aurons :
one (W ) = {(chat, chien), (chat, jouets), (chien, chat), (chien, jouets), ( jouets, chat), ( jouets, chien)}
Sone
24
Chapitre 2. Fondement théorique
— Segmentation S-one-all : Il s’agit de former des paires de chaque mot avec la liste de
tous mots restants. En l’appliquant à W, nous avons trouvé :
all (W ) = {({nl p}, { java, python}), ({ java}, {nl p, python}), ({python}, {nl p, java})}
Sone
Ainsi, en utilisant cette technique, le score de cohérence sera basé sur la relation entre un
seul mot clé et le reste des mots clés du même sujet.
b- Le calcul de probabilité
Comme mentionné précédemment, les mesures de cohérence utilisent des probabilités ti-
rées du corpus textuel. L’étape de calcul des probabilités définit comment ces probabilités sont
calculées.
A ce stade, nous nous intéressons à deux probabilités :
• P(w) : La probabilité d’occurrence du mot w, représente le nombre de documents dans
lesquels le mot w apparaît divisé par le nombre total des documents
• P(w1 et w2) : La probabilité d’occurrence des mots w1 et w2, représente le nombre de
documents dans lesquels les deux mots apparaissent ensemble, divisé par le total des do-
cuments.
c- La mesure de confirmation
′ p(w′ , w∗)
ScorePMI(w , w∗) = log( )
p(w∗).p(w′ )
• p(w*) est la probabilité d’apparition deu mot w*, indépendemment de w’ dans le topic
(sujet) en question.
• p(w’) est la probabilité d’apparition deu mot w’indépendemment de w*, dans le topic
(sujet) en question.
25
Chapitre 2. Fondement théorique
• p(w’,w*) est la probabilité conjointe d’apparition des deux motx w’ et w*, dans le même
topic (sujet) en question.
Ainsi, si les deux mots w’ et w* apparaissent fréquemment ensemble, le terme p(w’,w*) sera
elevé et sera toujours plus grand que p(w*) et plus grand que p(w’).
Ainsi, plus w* et w’ sont cohérents, plus le score PMI(w*,w’) sera élevé. .
Les mesures de confirmation indirectes ne calculent pas directement un score basé sur les
paires W’ et W* résultants de la segmentation s-one-one. Au lieu de cela, elle se base sur la seg-
mentation s-one-set. Nous proposons pour l’explication de la mesure de confirmation indirecte
l’exemple concret suivant :
Supposons que nous avons le vocabulaire W = {w1,w2,w3}
all (W ) = {(w1, {w2, w3}), (w2, {w1, w3}), (w3, {w1, w2})}
La segmentation Sone
Pour chacun des mots w1,w2 et w3 , nous calculons d’abord les mesures de confirmation
directe PMI c’est à dire :
— Pour w1 nous calculons : PMI(w1,w2), PMI(w1,w3)
Et nous créons un vecteur v(w1) = [ PMI(w1,w2), PMI(w1,w3) ]
— Pour w2 nous calculons : PMI(w2,w1) et PMI(w2,w3)
Et nous créons un vecteur v(w2) = [ NPMI(w2,w1) , NPMI(w2,w3) ]
— Pour w3 nous calculons : PMI(w3,w1) et PMI(w3,w2)
Et nous créons un vecteur v(w3) = [ PMI(w3,w1),PMI(w3,w2) ]
Après avoir construit les vecteurs, nous calulons pour chaque vecteur, sa similarité en cosinus
par rapport à la somme des autres vecteurs. par exemple pour le vecteur v(w1) nous calculons
cos- similarity ( v(w1) , v(w2)+v(w3) )
Une fois les mesures de confirmation calculées, nous pouvons passer à l’étape d’aggrégation.
d- L’aggrégation
26
Chapitre 2. Fondement théorique
Le score calculé à l’étape d’aggrégation désigne le score de cohérence d’un seul sujet.
Puisque nous avons beaucoup de sujets (ce qui est le plus habituel), le résultat final est juste
la moyenne de la cohérence des sujets individuels.
Nous effectuons donc tout le pipeline pour tous les sujets, puis nous faisons la moyenne du
score aggrégé de chaque sujet pour obtenir le score de cohérence final.
27
Chapitre 2. Fondement théorique
Afin de mettre tout en place, toutes les étapes du pipeline de calcul du score de cohérence
d’un sujet peuvent être résumées dans la figure ci-dessous
Figure 2.9. Un exemple détaillé du calcul d’un score de cohérence d’un sujet
[11]
28
Chapitre 3
Plan
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1 Nettoyage des données textuelles . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.1 Suppression des StopWords . . . . . . . . . . . . . . . . . . . . . . 30
3.1.2 Suppression des retours à la ligne et des tabulations . . . . . . . . . 30
3.1.3 Suppression des emojis . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.4 Traitement des ponctuations . . . . . . . . . . . . . . . . . . . . . 31
3.2 Rapprochement des données textuelles . . . . . . . . . . . . . . . . . . . . 31
3.2.1 Normalisation de la case et élimination des accents . . . . . . . . . 32
3.2.2 Traitement des versions . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.3 Traitement des abréviations . . . . . . . . . . . . . . . . . . . . . 33
3.2.3.1 Méthode1 : Expressions régulières (REGEX) . . . . . . 33
3.2.3.2 Méthode2 : Spacy Abbreviation Detector . . . . . . . . . 35
3.2.3.3 Choix de la méthode appropriée . . . . . . . . . . . . . . 35
3.2.4 Traduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 Ingénierie des caractéristiques (feature engineering) . . . . . . . . . . . . . 38
3.3.1 Création de caractéristiques . . . . . . . . . . . . . . . . . . . . . . 38
3.3.1.1 Years of study . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.1.2 Seniority . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.2 Transformation de caractéristiques . . . . . . . . . . . . . . . . . . 39
3.3.3 Extraction d’informations . . . . . . . . . . . . . . . . . . . . . . . 39
3.3.3.1 Modèle d Named entity recognition (NER) . . . . . . . . 39
3.3.3.2 Introduction au NER . . . . . . . . . . . . . . . . . . . 39
3.3.3.3 Nécessité d’un modèle NER personnalisé . . . . . . . . 40
3.3.3.4 Labélisation des données . . . . . . . . . . . . . . . . . 40
3.3.3.5 Entrainement du modèle NER . . . . . . . . . . . . . . . 41
3.3.3.6 Evaluation et Choix du modèle NER . . . . . . . . . . . 42
29
Chapitre 3. Pré-traitement des données
Introduction
Pour toute application d’apprentissage automatique, le pré-traitement des données est aussi
important que la construction du modèle.
Cette section présente notre méthode proposée pour nettoyer les données textuelles présentes
dans des profils, en mettant l’accent sur la réduction du vocabulaire.
Comme première étape de nettoyage, nous avons commencé par la suppression de ce que
l’on appelle les mots d’arrêt, ou stopwords en anglais. Cette opération est souvent la première
à effectuer dans le cadre d’un traitement de texte . Ces mots d’arrêt sont des mots très courants
dans la langue étudiée (” et ”, ” à ”, ” le ”..., en français), ou encore (”and”, ”then”, ”is”, ”a”,
”the”, ..., en anglais ) . Ces mots n’apportent aucune valeur informative pour la compréhension
du ” sens ” d’un document. Ils sont très fréquents et ralentissent notre travail : nous souhaitons
donc les supprimer.
La bibliothèque NLTK nous fournit des listes de mots d’arrêt dans plusieurs langues. Nous
avons donc eu recours aux listes de la langue française et anglaise, afin de supprimer tous les
mots d’arrêt présents dans les profils, que ce soit dans la section de compétences ou de descrip-
tion des expériences.
Plusieurs espaces ou sauts de ligne peuvent être incorporés dans le texte à des fins de forma-
tage, ainsi, lorsque nous récupérons les données à partir du site web, ces espaces, tabulations, et
retour à la ligne sont converties en caractères inutiles comme \n et \t , qui ne sont pas utiles pour
la modélisation. Par conséquent, ils peuvent être supprimés. Pour ce faire nous avons utilisé à
l’attribut .is_space de la bibliothèque SpaCy.
Sur les réseaux sociaux, les internautes utilisent souvent les émojis pour souligner leurs pro-
pos et exprimer leurs sentiments. Malgré l’aspect formel de Linkedin, il ne se distingue pas des
autres réseaux sociaux en termes d’utilisation des emojis. En effet, les utilisateurs de Linkedin
emploient ces icônes spéciales pour affiner et dynamiser leurs profils.
30
Chapitre 3. Pré-traitement des données
Bien qu’utiles pour certains modèles (par exemple, l’analyse des sentiments), les emojis ne
peuvent nous apporter aucune information intéressante dans notre cas d’utilisation. Nous avons
donc décidé de les supprimer.
Pour ce faire, nous avons utilisé le paquet unidecode, qui permet d’éliminer tous les tokens avec
un format autre que le format texte, y compris les emojis.
Dans la description des compétences, des certifications et des expériences, nous avons remar-
qué une présence excessive des caractères de ponctuation, utilisés pour séparer les compétences,
ou pour les organiser de manière ergonomique.
Souvent dans les modèles NLP, et particulièrement dans notre cas de figure la ponctuation a
peu d’importance.
Par exemple, si l’on souhaite classer nos profils selon leurs spécialités (Data Science, Dévelop-
pement web, Management…), il y a peu de chances que la ponctuation porte du signal.
un nettoyage possible serait donc d’ignorer les tokens qui sont des signes de ponctuation.
Mais il faut faire attention à ne pas appliquer cette suppressions de manière systématique.
En fait, plein de compétences peuvent inclure des signes de ponctuation dans leurs appellations,
comme les compétences ( c++ , c# , .Net , pl / sql…) La suppression de ces signes causera donc
la perte d’une information nécessaire et importante.
Par exemple, en éliminant les signes ’+’ et ’#’ , nous transformons les deux langages de pro-
grammation ’c++’ et ’c#’ en une autre compétence différente qui est le langage ’C’.
Pour résoudre ce problème, une des solution pourrait être de passer une liste statique de com-
pétences spéciales à ne pas manipuler lors de la suppression de caractères spéciaux. Mais nous
souhaitons automatiser le processus autant que possible, et éviter les interventions manuelles.
Nous proposons donc de ne pas éliminer les caractères spéciaux, mais plutôt de créer des es-
paces avant et après chacun de ces symboles, afin de les séparer du reste des syllabes, puis de
procéder à une étape d’extraction automatique des compétences, qui sera capable de distinguer
les compétences qui devraient normalement contenir certains caractères. Pour établir cette ex-
traction automatique, nous avons utilisé un modèle NER (Named entity Recognition), dont
nous parlerons en détails dans une section ultérieure ’3.3.3 Extraction d’informations, page
42’
31
Chapitre 3. Pré-traitement des données
Python est un langage sensible à la casse. De ce fait, si les mots ’java’ et ’JAVA’ sont présents
dans nos données, alors ces deux mots sont traités séparément. Aussi les mots ”Android” et
”Androïd” sont traités séparemment, à cause de l’accent ajouté. Une façon de normaliser encore
plus le vocabulaire est de normaliser la case, en éliminant les majiscules, et de normaliser les
lettres en éliminant les accents. Ces traitements nous permettent de gérer de petites différences
au niveau de l’orthographe.
Nous avons donc utilisé la méthode str.lower() pour de passer tout le texte en minuscule, et le
paquet unidecode qui permet d’éliminer facilement tous les accents.
Problématique
Une façon de détailler les compétences est d’inclure la version de la technologie, du langage
de programmation ou de la bibliothèque qu’on maîtrise. Cependant, cette information peut faire
exploser le nombre de compétences.
Prenons l’exemple de ’python’ : Le fait d’y inclure la version, nous pouvons obtenir la liste ci
dessous :
• python 3
• python 2
• python 3.9
• python 3.9.1
• python version3
• python V3
Et la liste s’allonge en fonction de toutes les versions dont python peut avoir . Cet exemple fait
donc un total d’au moins cinq compétences distinctes, pour décrire un seul élément. Imaginons
alors le nombre énorme qui sera généré pour toutes les compétences de la base si nous leur ajou-
tons les versions. Nous aurons une liste d’éléments qui sont non seulement difficiles à énumérer
et à classer en tant qu’humain, mais pour un algorithme d’apprentissage automatique, ces cinq
éléments sont des entités totalement différentes.
32
Chapitre 3. Pré-traitement des données
Contribution
La solution est alors de détecter et d’éliminer les versions, Pour cela nous avons utilisé des
expressions régulières en tenant compte des possibilités suivantes :
— une version peut être écrite à la fin de la chaîne de caractères, sous la forme d’un chiffre
ou un nombre, comme : (python3 )
— une version peut également inclure des sous-versions, en séparant les numéros par un
point comme (python 3.9) ou même une sous-sous-version comme (python 3.9.1)
— il est possible de combiner plusieures versions comme (python 2 et 3), (python2/3)
Une abréviation est définie comme la forme abrégée d’un mot, d’un nom propre , d’un lieu
ou d’une organisation. Les abréviations sont fréquemment utilisées à des fins pratiques telles
que le gain de place et la commodité. Notamment dans notre étude de cas, certains langages de
programmation, logiciels et technologies sont beaucoup plus connus par leurs abréviations, que
par leurs noms complets, à l’exemple de html, forme abrégée de hypertext markup language.
La correspondance entre une compétence et son abréviation est cruciale pour le processus
de la normalisation des compétences. En effet choisir soit la longue forme soit la forme abrégée
d’une compétence permet de diminuer le nombre de redondances.
Prenons l’exemple de ”feuilles de style en cascade” ou encore ”cascading style sheets” et
observons la liste des différentes possibilités de son écriture :
Sur la base de cet exemple, une seule compétence peut donc avoir au moins cinq façons
d’écriture, et notre objectif à ce stade est de les normaliser à une seule forme, qui est la forme
courte, soit ’css’ pour l’exemple précédent.
Dans cette section, nous expliquons notre approche pour la détection et la mise en corres-
pondance des abréviations avec leurs définitions.
33
Chapitre 3. Pré-traitement des données
Ces patterns nous ont facilité l’extraction des couples candidats <forme courte, forme
longue>
Pour ce faire, nous avons eu recours aux expressions regex (Expression régulières) pour
détecter les parenthèses, et extraire ce qu’elles contiennent, ainsi que la chaîne de caractères qui
les précède.
et en faisant correspondre la compétence à l’extérieur des parenthèses à celle à l’intérieur,
nous formons nos couples candidats <forme courte, forme longue>
A ce stade, nous passons à la deusième étape d’identification des abréviations, qui est l’iden-
tification de la forme courte correcte à partir des couples formés.
En effet, Etant donné que le ’regex’ forme les couples de façon systématique en cherchant
les parenthèses, des couples comme <python, programming language> ont été formés à partir
de la compétence python(programming language), alors qu’il ne s’agit pas d’un vrai couple
<forme courte, forme longue>. Le passage par une étape de vérification des couples est alors
une étape cruciale. Comme approche de vérification, nous avons implémenté une fonction qui
vérifie si en combinant les premières lettres de chaque mot à l’extérieur de la parenthèse, on
obtient exactement le mot à l’intérieur. Ce n’est que dans ce cas que nous pouvons confirmer
qu’il s’agit d’une abréviation. Par exemple, en appliquant cette fonction sur le couple <natural
language processing, nlp> nous obtenons comme chaine de vérification :
n + l + p = nl p
34
Chapitre 3. Pré-traitement des données
Entre les deux méthodes décrites dans cette section, nous avons choisi d’utiliser la méthode
proposée par spaCy abbreviation detector, car d’une part, elle présente un temps d’exécution
réduit par rapport au regex, et d’autre part, sa mise en œuvre est plus facile et plus sûre.
Les résultats de cette étape sont :
— un dictionnaire contenant 504 abréviations et leurs définitions.
— Les descriptions des compétences sont remplacées par leurs abréviations dans tous les
profils de la base.
35
Chapitre 3. Pré-traitement des données
3.2.4 Traduction
Problématique
Linkedin est une plateforme internationale et multi-langues qui n’exige pas à ses utilisateurs
l’emploi d’une langue particulière. c’est donc pourquoi nous trouvons la même compétence
décrite dans différentes langues ce qui augmente les réplications de la même compétence.
Prenons un exemple concret rencontré dans notre base
• Project management / Gestion de projet
• Data vizualization / Visualisation des données
• Machine learning / Apprantissage automatique
36
Chapitre 3. Pré-traitement des données
Dans le but de normalisation, il est donc important de choisir une langue unique pour décrire
nos compétences.
Contribution
Dans le but d’unifier la langue, nous avons choisi de traduire toutes les compétences en
anglais. Pour ce faire nous avons eu recours à l’api de traduction google translate [14].
Avantages de la bibliothèque :
— Utilise les mêmes serveurs que translate.google.com
— Inclut une détection automatique de la langue.
— Fiable
Inconvénients de la bibliothèque :
— Peut prendre un temps d’éxécution important dans le cas d’un grand nombre de données
— Peut être bloquée suite à un nombre excessif de requêtes.
Afin de réduire le temps d’exécution, et de prévenir le blocage de l’api, nous avons envi-
sagé de réduire la sollicitation de l’api à chaque fois que nous avons besoin de traduire des
compétences. Nous avons alors proposé l’idée d’appeler l’api une seule fois sur l’ensemble de
la liste des compétences uniques, nécessitant une traduction, et de stocker le résultat dans un
dictionnaire. Ce dictionnaire est désormais notre référentiel pour transformer les compétences
du français vers l’anglais, sans avoir besoin de repasser par l’api. Nous avons ainsi formé un
dictionnaires de traductions, contenant 571 compétences.
37
Chapitre 3. Pré-traitement des données
Cette nouvelle caractéristique va nous servir à calculer le nombre total d’années d’études
pour chaque profil.
En effet, Linkedin ne dispose pas d’un champ consacré pour saisir les années d’études, mais
donne à ses utilisateurs la main de saisir les différentes phases de leurs études et d’indiquer les
dates de début et de fin de chaque période d’études. Nous avons utilisé ces informations pour
générer une seule variable résumant le nombre total d’années scolaires.
3.3.1.2 Seniority
Comme dans le cas des années d’études, Linkedin ne prévoit pas un champ spécifique dédié
à la saisie du total des années d’expérience professionnelle. Comme cette information est très
importante dans le processus de décision d’un recrutement, il était nécessaire d’en générer une
variable. Pour cela nous avons récupéré les années de début et de fin de chaque expérience
professionnelle, pour en déduire la durée de chaque expérience et en les cumulant, nous avons
obtenu pour chaque profil un nombre total d’années d’expérience.
38
Chapitre 3. Pré-traitement des données
La transformation de caractéristiques est simplement une fonction qui transforme les ca-
ractéristiques d’une représentation à une autre. L’objectif ici est de tracer et de visualiser les
données.
Seniority category
La reconnaissance d’entités nommées, Named entity recofnition en anglais, est une tâche
standard de NLP qui permet d’identifier et de classer les informations clés dans un document
textuel. c’est-à-dire des entités dans un texte.
Une entité peut être un mot ou une série de mots qui se réfèrent systématiquement à la même
chose.
Chaque entité détectée est classée dans une catégorie prédéterminée. par défaut, le modèle
NER est pré entraîné pour reconnaître un ensemble d’entités nommées dont nous citons :
• Personne
• Lieu
39
Chapitre 3. Pré-traitement des données
• Date
• Organisation
Par exemple, un modèle NER peut détecter le mot ”Google” dans un texte et le classer
dans la catégorie ”Organization”
Spacy, intègre le modèle NER par défault dans son pipeline de traitement.
Si les entités nommées intégrées de spaCy ne sont pas suffisantes pour un besoin, Spacy
nous donne la main de créer nos propres classes personnalisées.
Bien que le pipeline NER intégré dans Spacy soit performant, il n’est pas toujours par-
faitement adapté à tous les textes. En effet, il arrive que la catégorie que nous souhaitons
extraire ne soit pas intégrée dans Spacy. Notamment dans notre cas, nous souhaitons ex-
traire l’entité ’SKILL’.
Nous avons donc affaire avec une entité nommée personnalisée ’SKILLS’, non reconnue
par le modèle NER pré entraîné de Spacy.
D’ou vient la nécessité de créer notre modèle NER personnalisé.
Pour Créer un un modèle NER personnalisé, il faut commencer par identifier la nouvelle
entité à créer et de générer notre ensemble de données d’entraînement.
Pour ce faire, nous devons identifier d’abord manuellement les sections importantes du
texte, en marquant le texte avec des étiquettes spécifiques. .
Dans le domaine de l’apprentissage automatique, un ensemble de données correctement
étiquetées que nous utilisons comme norme objective pour former et évaluer un modèle
donné est souvent appelé ”ground truth”.
La précision de notre modèle formé dépendra de la précision de notre ”ground truth”. Il
est donc essentiel de consacrer du temps et des ressources pour garantir un étiquetage très
précis des données.
Pour ce faire, nous avons utilisé l’outil d’étiquetage des données ”Label Studio” [15].
Les point forts de cet outils sont :
SpaCy accepte les données d’entraînement sous format d’une liste de tuples.
Chaque tuple doit contenir le texte et un dictionnaire.
Le dictionnaire doit contenir les indices de début et de fin de l’entité nommée dans le
texte, ainsi que la catégorie ou l’étiquette de l’entité nommée.
40
Chapitre 3. Pré-traitement des données
Il nous suffit de séléctionner les mots à considérer des entités, et label studio prend charge
de formatter les données sous le format souhaité
a- Nombre d’itérations
Pour former un modèle NER, le modèle doit être bouclé sur l’exemple pendant un nombre
suffisant d’itérations. Si nous l’entraînons pendant seulement 5 ou 6 itérations, il risque
de ne pas être efficace.
Avant chaque itération, nous avons mélangé les exemples de façon aléatoire à l’aide de
la fonction ”random.shuffle()” .Cela permet de nous nous assurer que le modèle ne fait
pas de généralisations basées sur l’ordre des exemples.
c- Batch
Les données d’apprentissage sont généralement transmises par lots connus en anglais par
”batchs”
Nous avons appelé la fonction minibatch() de SpaCy sur les données d’apprentissage qui
nous a retourné les données par lots. La fonction minibatch prend le paramètre ”size” pour
indiquer la taille du lot.
41
Chapitre 3. Pré-traitement des données
Pour chaque itération, le modèle NER est mis à jour par la commande nlp.update(). À
chaque mot, la fonction update() effectue une prédiction et consulte ensuite les annotations
pour vérifier si la prédiction est correcte. Si ce n’est pas le cas, les poids sont mis à jour
pour que l’action correcte ait un meilleur score la prochaine fois.
e- Réalisation du modèle
Enfin, tout l’entraînement est effectué dans le contexte du modèle NLP avec un pipeline
désactivé, pour éviter que les autres composants ne soient impliqués.
Afin de repèrer le modèle NER le plus performant, nous avons construit notre propre fonction
qui prend en paramètre les différentes combinaisons des hyperparamètres et renvoie le meilleur
modèle basé sur l’indice F1-score.
F1-score : C’est un score qui mesure la précision de prédiction d’un modèle sur un ensemble
de données. cette mesure est efficace pour l’évaluation des systèmes de classification dont les
classes sont déséquilibrées. Le score F1 est défini comme la moyenne harmonique de la précision
et du rappel du modèle.
La formule de l’indice F1-Score est la suivante :
2 precision × recall tp
F1 = = 2× =
1
recall × precision
1 precision + recall t p + 2 × ( f p + f n)
1
precision La précision est la fraction de vrais exemples positifs parmi les exemples
que le modèle a classés comme positifs. En d’autres termes, le nombre de
vrais positifs divisé par le nombre de faux positifs plus les vrais positifs.
recall recall est la fraction d’exemples classés comme positifs, parmi le
nombre total d’exemples positifs. En d’autres termes, le nombre de vrais
positifs divisé par le nombre de vrais positifs plus les faux négatifs.
tp Le nombre de vrais positifs classés par le modèle.
fn Le nombre de faux négatifs classés par le modèle.
fp Le nombre de faux positifs classés par le modèle.
Le tableau suivant présente les scores obtenus lors de la validation croisée (Cross valida-
tion) pour chaque combinaison des hyperparamètres en utilisant un échantillon de 300 individus
que nous avons annotés avec Label Studio.
42
Chapitre 3. Pré-traitement des données
43
Chapitre 3. Pré-traitement des données
Conclusion
Dans ce chapitre, nous avons réussi à extraire les compétences automatiquement à partir des
paragraphes descriptifs des expériences professionnelles, par le biais d’un modèle d’appren-
tissage supervisé Named entity recognition (NER). Nous avons aussi réussi à normaliser les
compétences, en diminuant le nombre de compétences uniques de 36000 à 2900.
La figure suivante montre un exemple de profil avant l’exécution du pipeline de prétraite-
ment.
Dans la figure suivante, nous montrons le résultat du pipeline de pré traitement, traduit par
la variable ”final skills”.
Les compétences ont été bien identifiées et normalisées. Par exemple la compétence ” in-
telligence artificielle” est transformée en ”ai”.
44
Chapitre 3. Pré-traitement des données
45
Chapitre 4
Modélisation et Évaluation
Plan
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1 Clustering des profils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.1 Besoin du clustering . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.2 Choix entre le ”Hard clustering” et le ”Soft clustering” . . . . . . . 48
4.1.3 Application du modèle LDA . . . . . . . . . . . . . . . . . . . . . 49
4.1.3.1 Création de la matrice Document-Mot . . . . . . . . . . 49
4.1.3.2 Construction d’un modèle LDA avec sklearn . . . . . . 49
4.1.3.3 Diagnostique de la performance du modèle . . . . . . . 50
Évaluation graphique . . . . . . . . . . . . . . . . . . . . 50
Score de cohérence . . . . . . . . . . . . . . . . . . . . . 52
4.1.3.4 Réglage des hyperparamètres . . . . . . . . . . . . . . . 52
4.1.3.5 Interprétation des résultats . . . . . . . . . . . . . . . . 54
4.1.4 Application du modèle NMF . . . . . . . . . . . . . . . . . . . . . 55
4.1.4.1 Création de la matrice Document-mot . . . . . . . . . . 55
4.1.4.2 Construction du modèle . . . . . . . . . . . . . . . . . . 55
4.1.4.3 Évaluation du modèle . . . . . . . . . . . . . . . . . . . 56
4.1.5 Comparaison et choix entre LDA et NMF . . . . . . . . . . . . . . 59
4.1.6 Distribution de documents sur les thèmes . . . . . . . . . . . . . . 59
4.2 Appariement d’offres d’emploi . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.1 Prétraitement de l’offre d’emploi . . . . . . . . . . . . . . . . . . . 60
4.2.2 Recommandation des profiles pour une offre de travail . . . . . . . 61
4.3 Rapprochement des profiles similaires . . . . . . . . . . . . . . . . . . . . . 61
4.3.1 Identification des caractéristiques de chaque profile . . . . . . . . . 61
4.3.2 Identification des profils similaires . . . . . . . . . . . . . . . . . . 62
46
Chapitre 4. Modélisation et Évaluation
Introduction
Au chapitre précédent, nous avons répondu au premier objectif de ce projet qui était le rap-
prochement des compétences.
Dans ce chapitre, nous nous intéressons à la mise en correspondance des profils similaires,
et à la recommandation de candidats appropriés pour une offre d’emploi.
Pour ce faire, nous avons d’abord établi un clustering des profils, pour ensuite appliquer
une distance adéquate permettant d’établir la recommandation des profils adéquat à une offre
d’embauche.
L’organisation des profils dans des groupes a pour but de nous aider à aboutir au traitement
ultérieur de rapprochement des profils similaires.
En effet, A ce stade nous avons affaire avec une liste de compétences pour chaque profil, et
il est difficile de décider quels profils sont similaires en analysant leurs compétences une à une.
Par contre, à travers le clustering, nous pouvons diminuer la d’intentionnalité des com-
pétences, et ainsi il sera plus facile de comprendre les patterns cachés dans chaque profil, de
choisir quelles compétences à mettre en valeur, et de comprendre ce qui définit une catégorie.
47
Chapitre 4. Modélisation et Évaluation
48
Chapitre 4. Modélisation et Évaluation
Comme premier algorithme de topic modeling, nous avons testé l’algorithme LDA (Latent
Dirichelet Allocation), en utilisant la bibliothèque Gensim.
L’algorithme LDA nécessite une matrice mots/document (document word matrix ) comme
entrée principale.
Pour en créer une, nous avons utilisé le module CountVectorizer de Scikit-learn, qui nous
a permis de modéliser la section textuelle ”compétences” de chaque profil par un vecteur
”Bag of words (BOW)” . L’ensemble de ces vecteurs résulte en la matrice de mots-document
souhaitée. A travers le paramètre min-df, nous avons configuré CountVectorizer pour qu’il
prenne en compte les mots qui sont apparus au moins 5 fois, question de garantir qu’il s’agit
vraiment d’une compétence et non pas d’un bruit maltraité dès la phase de nettoyage.
Une fois nos documents à modéliser sont sous la forme de matrice documents-termes, nous
devons maintenant configurer les paramètres du modèle, en particulier le nombre de sujets (K)
et les paramètres alpha et bêta.
Pour ce faire, nous avons suivi l’approche suivante : Nous avons commencé par choisir
les hyperparamètres de manière heuristique, puis nous les avons affiné avec des expériences
empiriques.
49
Chapitre 4. Modélisation et Évaluation
selon lequel certains sujets favoriseront certains mots. Avec une valeur bêta élevée,
les sujets sont supposés être composés de la plupart des mots du vocabulaire. Nous
avons commencé par initialiser bêta = 0.01.
Pour évaluer les résultats de notre modélisation thématique, nous nous appuyons sur le score
de cohérence pour ajuster nos hyperparamètres, afin d’obtenir la meilleure combinaison d’entre
eux, ce qui conduit à un meilleur résultat du modèle. Mais il est très important de tenir compte
de l’intuition et de la validation humaines, car nous ne sommes pas encore au point où la clas-
sification humaine a été dépassée par les algorithmes non supervisés. Nous allons donc vérifier
le score de cohérence, et en outre tracer des graphiques qui nous aident à voir et à inspecter
les distributions choisies par le modèle pour définir ce qu’est un sujet.
Évaluation graphique
Nous avons utilisé le paquet LDAViz qui est une fonction très intéressante pour analyser les
résultats de LDA. C’est un outil qui crée un widget html interactif, nous permettant de regarder
et d’inspecter non seulement les principaux mots associés à chaque document, mais aussi de
tracer la distance entre les sujets (topics), montrant à quel point les sujets se ressemblent, ainsi
que la taille de chaque sujet, c’est à dire le taux d’apparition de ce sujet dans tout le corpus. La
figure ci dessous présente le résultat de notre modèle LDA initial.
50
Chapitre 4. Modélisation et Évaluation
Nous pouvons voir que le modèle a créé 7 groupes différents, représentés par des cercles de
tailles différentes, et espacés de distances variées.
Plus le cercle est gros, plus le sujet est dominant dans le corpus (l’ensemble de tous les
profils).
Plus les cercles sont proches, plus leurs sujets sont semblables. C’est à dire pour un bon
modèle LDA, il vaut mieux avoir moins de cercles superposés, montrant que les sujets sont
plus faciles à identifier et à labéliser.
Exemple d’un bon topic :
Par exemple dans notre cas, le graphique montre que le topic 6 est très éloigné des autres topics.
nous nous attendons alors à ce que le modèle a très bien réussi à identifier et séparer ce topic
des autres.
Vérifions alors les mots les plus utilisés (les mots clés) dans ce topic à travers la figure suivante.
A droite, est affichée la liste des 30 mots qui caractérisent le plus le topic 6, à savoir [”win-
dows server”, ”cisco”, ”active directory”, ”vmware”, ”ip” , ”voip”, ”dns”, ”lan”, ”linux”,
”wan”, ...]
En se basant sur un jugement humain, nous pouvons facilement interpréter ce résultat et conclure
que le sujet est lié à l’administration des réseaux
51
Chapitre 4. Modélisation et Évaluation
A droite, est affichée la liste des 30 mots qui caractérisent le plus le le topic 2, à savoir
[”python”, ”data”, ”ai software development”, ”r”, ”sales” , ”project management”, ”ma-
nagement”, ”security”, ”design”, ...]
En se basant sur un jugement humain, il est difficile d’attribuer un label à ce topic. En effet, il
y a un mélange entre le ’data science’, le management et le ’software development’
Score de cohérence
A part la visualisation graphique des topics, nous avons calculé le score de cohérence, qui
nous a donné la valeur 0.225
Dans le but d’améliorer la qualité de notre modèle LDA, nous avons eu besoin de raffiner
les hyperparamètres initialement choisis par l’approche heuristique. Nous avons donc passé au
raffinement au moyen d’expériences empiriques.
52
Chapitre 4. Modélisation et Évaluation
Nous avons commencé par définir un lot de valeurs de alpha = [0,05, 0,1, 0,5, 0.01] ainsi
qu’un lot de valeurs de beta = [0,01, 0,05, 0,1, 0,5].
Pour le nombre de sujets nous avons défini les valeurs K =[5,6,7,8,9,10].
Nous avons ensuite entraîné les modèles de toutes les combinaisons possibles en faisant
varier alpha, beta et K,tout en calculant pour chaque modèle le score de cohérence.
Enfin nous avons choisi le triplet (alpha,beta,k) qui maximise le score de cohérence.
Le tableau suivant dénote le score de cohérence maximal pour chaque valeur distincte de
K (nombre de topics), obtenus en fonction des différentes combinaisons des hyperparamètres
alpha et bêta Les résultats montrent que le score de cohérence est maximisé pour un nombre
Nombre de topics 4 5 6 7 8 9
Score de cohérence maximal 0.62 0.57 0.54 0.43 0.32 0.34
Figure 4.6. Représentation graphique des résultats des combinaisons de modèles entrainés
53
Chapitre 4. Modélisation et Évaluation
Figure 4.7. Présentation graphique des Top-30 mots caractérisant le topic 2 après réglage des
paramètres
Dans cette section, nous analyserons le graphique de la distribution des compétences sur les
thèmes (Figure 4.6).
Cette étape est indispensable dans le topic modeling.
D’une part, pour un apprentissage non supervisé, le jugement humain n’est pas moins im-
portant que le calcul du score donné par le modèle.
D’autre part, comme le topic modeling se limite à regrouper les sujets, sans leur donner
d’étiquettes, c’est à nous de décider quelle étiquette donner à chaque sujet. Ce jugement est
basé sur l’ensemble des termes qui constituent les sujets.
Dans la figure précédente, nous pouvons voir que les cercles désignant les sujets sont bien
séparés, et qu’il n’y a pas de chevauchement entre eux, contrairement au premier modèle
entraîné avec un nombre de sujets égal à 7.
Par contre, en analysant les 30 premiers mots clés du thème 2, affichés à droite de la figure,
nous avons constaté une difficulté à étiqueter le thème 2. En effet, les compétences qui forment
54
Chapitre 4. Modélisation et Évaluation
ce sujet semblent être un mélange de deux spécialités différentes. Nous jugeons alors que ce
thème peut être un assemblage des deux spécialités suivantes :
Management Cloud
management security
project management linux
marketing windows
sales cisco
business telecommunications
strategic planning windows server
leadership maintenance
Pour conclure, Le score de cohérence s’est amélioré grâce au réglage des paramètres, et
nous avons obtenu des clusters plus au moins bien formés, mais le fait que nous avons encore une
incertitude par rapport à la labélisation de quelques thèmes, il sera bien d’essayer de modéliser
nos sujets par un autre modèle.
Nous allons donc appliquer dans la section suivante, une autre algorithme de topic mode-
ling qui est le NMF
Tout comme LDA, l’algorithme NMF nécessite une matrice mots/document, (document
word matrix ) comme entrée principale. Pour en créer une, nous avons utilisé le module TFIDF
de Scikit-learn, qui nous a permis de modéliser la section textuelle ”compétences” de chaque
profil par un vecteur tf-idf. Puisque ce vecteur calcule les poids des mots, ses valeurs sont donc
tous supérieurs ou égales à zéro. Il s’agit donc d’un vecteur non négatif. L’ensemble de ces
vecteurs résulte en la ‘matrice non négative de mots/document souhaitée.
Une fois la matrice document/mot calculée, elle fera objet de la matrice de base de l’algo-
rithme NMF. L’objectif de l’algorithme est de prendre cette matrice de base en entrée, et de la
factoriser en deux matrices non négatives W et H.
Pour ce faire, nous avons entraîné un ensemble de modèles NMF, à l’aide de la bibliothèque
Scikit-learn, et en passant au GridSearch un intervalle de nombre de topics allant de 4 à 9.
Le GridSearch s’occupera d’entraîner en tous six topics, en variant à chaque entraînement
le nombre de topics entre 4 et 9, et calcule pour chaque modèle le score de cohérence.
Notre but est de choisir le nombre de topics optimal, qui maximise le ‘score de cohérence.
55
Chapitre 4. Modélisation et Évaluation
Comme pour, LDA, pour évaluer notre modèle NMF, nous nous sommes basés sur le score
de cohérence, que nous visons à maximiser. Le tableau suivant montre le résultat de l’entraî-
nement des 6 modèles par GridSearch.
Les résultats indiquent que pour un nombre de topics égal à 6, le score de cohérence est
maximal, de valeur 0.74
Pour valider ce résultat, nous avons tracé le graphe suivant qui montre la variation du score
de cohérence en fonction du nombre des sujets (topics). Le graphe montre clairement que le
nombre de sujets égal à 6 correspond au meilleur score de cohérence de valeur 0.74.
56
Chapitre 4. Modélisation et Évaluation
Suite au résultat du GridSearch, nous avons retenu le modèle NMF qui crée 6 topics, et nous
avons réalisé le graphe suivant, qui affiche les 30 mots clés, les plus importants de chaque topic.
57
Chapitre 4. Modélisation et Évaluation
Pour pouvoir labéliser les topics, nous avons classé les mots clés de chaque topic, montrés
dans la figure précédente, dans un tableau.
Tableau 4.2. Les mots fréquents pour chaque topic (Méthode NMF)
Selon cette distribution des mots par topics, il est facile de faire un jugement humain pour
distinguer la spécialité cachée derrière chaque topic. Nous avons donc réussi à créer les spécia-
lités suivantes :
1. Full stack web development
2. Management and marketing
3. Spring
4. Data science
5. software development
6. Cloud
58
Chapitre 4. Modélisation et Évaluation
En comparant les deux modèles, nous pouvons dire que la cohérence des sujets générés par
le modèle NMF (Figure 4.7) est meilleure que celle générée par le modèle LDA (Figure 4.5)
De plus, les mots de chaque sujet (tableau 4.2 ) pour le modèle NMF sont plus significatifs que
ceux du modèle LDA. ( Figure 4.4 ). En fait, nous avons pu facilement étiqueter tous les sujets
générés par NMF, ce qui n’était pas le cas pour tous les sujets générés par LDA.
Le tableau suivant récapitule la comparaison entre les deux modèles de topic modeling LDA
et NMF.
Rappelons les deux principes du topic modeling, abordés dans dans la section ”Topic mo-
deling” du chapitre 2 ”Fondement théorique”
A ce stade, nous avons accompli la construction des thèmes, et nous passerons dans cette
section à l’affectation de chaque document aux thèmes appropriés, c’est à dire affecter à chaque
profil les spécialités qui lui correspondent.
Pour classer un document comme appartenant à des thèmes particuliers, une approche lo-
gique consiste à voir quels thèmes ont le plus grand impact sur ce document.
Dans la figure suivante, Figure 4.9, nous avons sur-ligné en vert tous les thèmes majeurs
d’un document.
59
Chapitre 4. Modélisation et Évaluation
Figure 4.10. Matrice de distribution des spécialités (topics) sur les profils (documents)
Il s’agit d’une approche très simple à mettre en oeuvre, mais qui est très puissante, pour une
recommandation : La similarité cosinus.
Mathématiquement, elle mesure le cosinus de l’angle entre deux vecteurs projetés dans un
espace multidimensionnel.
L’idée est de considérer le profil de chaque candidat comme un document et l’offre d’em-
ploi comme un second document. Nous calculons ensuite la similarité en cosinus de ces deux
documents pour classer les meilleurs candidats.
Dans les sections précédentes, nous nous sommes concentrés sur le prétraitement des profils.
Nous devons maintenant procéder de la même manière pour préparer le texte de l’offre d’emploi,
afin de pouvoir le comparer aux profils. Pour ce faire, nous avons appliqué les actions suivantes
dans l’ordre :
Après nettoyage, nous avons représenté chaque offre d’emploi par un vecteur tf-idf. Cette
représentation nous permet de mettre en évidence uniquement les compétences qui sont impor-
tantes pour l’offre.
60
Chapitre 4. Modélisation et Évaluation
Une fois le vecteur de l’offre, ainsi qu’aux vecteurs des profils calculés, nous avons calculé
la similarité en cosinus du vecteur tf-idf d’offre d’emploi avec chaque vecteur tf-id de la matrice
mot-document, qui a été déjà calculée dans les sections précédentes.
De cette façon, étant donné notre base de données de 20 000 profils, nous obtenons 20 000
valeurs de similarité en cosinus, chaque valeur nous informe du degré de ressemblance de
l’offre avec chaque profil.
Mathématiquement, elle mesure le cosinus de l’angle entre deux vecteurs projetés dans un
espace multidimensionnel. Rappelons la formule de calcul de similarité du cosinus :
Pour dégager la liste des profils qui correspondent le mieux à l’offre, il suffit de sélectionner
les profils dont les vecteurs tf-idf ont donné les plus grandes valeurs de similarité en cosinus
avec le vecteur représentant l’offre.
Dans cette section, notre but est d’identifier les profils les plus similaires à un profil donné,
sur la base de leurs attributs similaires, afin de pouvoir les recommander à l’agent RH cherchant
un certain profil, et ainsi lui donner plus de choix et de possibilités.
Pour identifier les profils similaires, nous nous sommes basés sur les caractéristiques sui-
vantes :
— Les spécialisations
— Les années d’ancienneté (Seniority)
61
Chapitre 4. Modélisation et Évaluation
Pour préparer nos documents au calcul de similarité, nous avons commencé par les repré-
senter sous format de vecteurs, dont les composantes sont les scores d’appartenances à chacune
des spécialités générés par l’algorithme NMF de topic modeling, ainsi que la composante de
seniority, qui calcule les années d’expérience de chaque profil.
Le tableau suivant illustre un exemple de vectorisation de trois profiles, en fonction des
caractéristiques choisies.
Figure 4.12. Caractéristiques choisies pour modéliser les profils sous forme vectorielle
Une fois tous les profils sont réduits à leurs représentations vectorielles, nous disposons
d’une matrices carré, qui combine les vecteurs de tous les profils.
Pour chaque vecteur, nous calculons sa similarité en cosinus avec le reste des vecteurs de la
matrice.
Les documents qui lui sont les plus similaires sont ceux qui ont la plus grande valeur de
similarité en cosinus.
62
Chapitre 5
Réalisation
Plan
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1 Environnement du travail . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1.1 Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.1.2 Relation entre les technologies : FARM stack . . . . . . . . . . . . 66
5.1.3 Bibliothèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2 Déploiement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.1 Coté FastAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.2 Coté Front-end : React . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2.1 Page de Login . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2.2 Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.2.3 Affichage de la liste des profils . . . . . . . . . . . . . . 71
5.2.2.4 Page profil détaillé . . . . . . . . . . . . . . . . . . . . 72
5.2.2.5 Outil de rapprochement des compétences . . . . . . . . . 74
5.2.2.6 Correspondance offre d’emploi/profils . . . . . . . . . . 75
63
Chapitre 5. Réalisation
Introduction
Dans ce chapitre, nous décrivons dans un premier temps l’environnement du travail, à savoir
les technologies et les bibliothèques utilisées tout au long de la réalisation du projet. Ensuite,
nous montrons des captures démonstratives du déploiement de la solution.
5.1.1 Technologies
Python
Python est un langage de programmation interprété, orienté objet, de haut niveau et muni
d’une sémantique dynamique. La syntaxe simple et facile à apprendre de Python privilégie la
lisibilité et réduit le coût de la maintenance des programmes. Python supporte les modules et
les paquets, ce qui encourage la modularité des programmes et la réutilisation du code. L’inter-
préteur Python est disponible gratuitement sous forme de source ou de binaire pour toutes les
principales plate-formes et peut être distribué librement.
React
React est une bibliothèque Javascript permettant de construire des interfaces utilisateur
rapides et interactives. Elle a été développée par Facebook en 2011, et c’est actuellement la
bibliothèque Javascript la plus populaire pour construire des interfaces utilisateur. Nous pou-
vons voir dans la figure ci-dessous, offerte par Google trends, que React domine l’espace des
bibliothèques et des cadres de construction d’interfaces utilisateur. Au cours du temps, React
domine angular et vue.
64
Chapitre 5. Réalisation
Au cœur de toute application React, sont les composants tel que un composant est essentiel-
lement un élément d’interface utilisateur. Ainsi, lorsque nous construisons des applications avec
React, nous construisons un ensemble de composants indépendants, isolés et réutilisables, puis
nous les rassemblons pour construire des interfaces utilisateur complexes. En termes de mise en
œuvre, un composant est typiquement implémenté comme une classe JavaScript.
MongoDB
MongoDB est un système de gestion de base de donnéesNO SQL (Not Only SQL).
La base de données MongoDB est orientée document. C’est à dire, les données sont organisés
en des collections de documents. Tel que, un document est simplement un fichier écrit au format
JSON, et converti pour être au format bson qui signifie JSON binaire, c’est-à-dire des zéros et
des uns que l’ordinateur peut compiler et comprendre.
FastAPI
FastAPI est un framework web Python, qui permet de créer rapidement des API de haute
performance.
Avant l’apparition de FastAPI, il y avait déjà plusieurs façons de créer des API avec Python.
En particulier avec Django Rest Framework et Flask. Alors pourquoi FastAPI ?
Nous énumérons ici les principaux avantages de FastAPI qui le distinguent et l’enrichissent
par rapport aux autres solutions (Django et Flask) :
• La rapidité : Ses performances sont bien meilleures que celles de Django et Flask.
• La rapidité de codage : FastAPI permet une Création des API 2 à 3 fois plus rapidement
que Django et Flask.
• La facilité de manipulation : Il est facile à apprendre et à manipuler, disposant d’une
documentation bien bien détaillée.
• La documentation automatique : FastAPI génère automatiquement la documentation au
format Swagger UI et ReDoc.
65
Chapitre 5. Réalisation
Ce que l’on entend par le mot stack, ou pile en français, c’est simplement un ensemble de
technologies que nous pouvons utiliser ensemble pour créer une application.
Le mot FARM est l’acronyme de FastApi, React et MongoDB, les quatre technologies clés
qui composent la pile.
Nous avons construit notre application en utilisant
• FastAPI comme serveur back-end.
• React comme client front-end.
• MongoDB comme serveur de base de données.
Le front-end (React) commence par envoyer des requêtes HTTP au back-end (FastAPI),
le back-end va récupérer toutes les données de la base de données dans MongoDB. MongoDB
va envoyer les données au serveur back-end (FastAPI) puis le serveur back-end utilisant la
technologie axios va envoyer sa réponse au front-end (React).
66
Chapitre 5. Réalisation
5.1.3 Bibliothèques
Cadre Nom
• Regex
• NLTK
Nettoyage des données
• SpaCy
• PyMongo
Gestionnaire de base de données
• SpaCy
• SpaCy NER
• SpaCy abbreciation detector
Normalisation de données
• Googletrans
• Regex
• Gensim
• Scikit-learn
Topic Modeling • GridSearch
• LDAviz
67
Chapitre 5. Réalisation
5.2 Déploiement
2. Clean_and_extract_all_skills
L’API exécute d’abord le pipeline complet de nettoyage des profils, elle prend comme
paramètre le booléen update. En définissant update à True, l’api exécute la fonction
de détection des abréviations et effectue une mise à jour du dictionnaire qui fait corres-
pondre les abréviations à leurs formes longues. En revanche, si update est définie à False,
l’api utilise directement le dictionnaire d’abréviations déjà créé et stocké sur disque. Gé-
néralement, nous aurons besoin de faire cette mise à jour lorsque nous aurons un grand
nombre de nouveaux profils, susceptibles de contenir de nouvelles abréviations non ad-
mises par notre dictionnaire, afin d’enrichir davantage la normalisation des compétences.
68
Chapitre 5. Réalisation
Ensuite, l’API utilise le modèle NER créé par la première API, pour extraire les compé-
tences de tous les profils.
Enfin, cette api prend en charge le calcul de l’ancienneté et des années d’études de chaque
profil, ainsi que l’attribution des profils aux spécialités adéquates.
La figure suivante montre l’interface de l’API :
3. Recommandation
Cette API prend en paramètre l’url d’un profil donné, puis calcule la distance cosinus
entre ce profil et tous les autres profils de la base de données, en prenant en compte son
ancienneté ainsi que les scores qui lui sont attribués dans chaque spécialité. Une fois tous
les calculs effectués, l’API retourne en sortie les profils les plus proches (similaires) du
profil d’entrée.
La figure suivante montre l’interface de l’API :
69
Chapitre 5. Réalisation
Une fois nos API sont implémentés par le serveur back-end FastAPI, il nous reste à créer
une interface client front-end basée sur le framework React, et qui fera simplement appels aux
API présentés dans la section précédente.
Nous offrons une application sécurisée par un Login basé sur la reconnaissance faciale.
5.2.2.2 Dashboard
Nous avons établi un tableau de bord interactif avec PowerBi, montré dans la Figure 5.8
qui inclut :
— Le nombre total des candidats seniors, Juniors et Confirmed.
— Une carte montrant la dispersion des profils de notre base de données dans le monde (la
carte montre que les données sont majoritairement répartis en Tunisie en première place
et en France en deuxième place.
— La distribution des spécialités sur les profils.
— La distribution des profils sur les entreprises.
70
Chapitre 5. Réalisation
Cette page expose le profils de la base de données avec une option de recherche par nom de
candidat ainsi que deux options de filtrage :
— Filtrage par experience (Filter by seniority)
— Filtrage par spécialité (Filter by specialities)
En cliquant sur l’image du profil souhaité nous nous dirigeons vers son profil détaillé.
71
Chapitre 5. Réalisation
— Toutes ses compétences extraites à partir des sections : compétences, descriptions des
expériences, et certifications.
— La liste des six profils qui lui sont les plus similaires.
En cliquant sur une des images de la liste des profils similiares, nous nous dirigeons vers
son profile détaillé.
Figure 5.10. Exemple d’un profil détaillé d’un senior en Data science
72
Chapitre 5. Réalisation
Figure 5.11. Exemple d’un profil détaillé d’un senior dévelopeur Spring
Figure 5.12. Exemple d’un profil détaillé d’un senior dévelopeur Web
73
Chapitre 5. Réalisation
A travers cette page, nous mettons en évidence les résultats de l’étape de rapprochement
des compétences en normalisant la langue, les versions, en mappant les abréviations à leurs
formes longues, etc.
La figure ci dessous montre à gauche, la liste initiale des compétences saisies par l’utilisateur.
En cliquant sur le bouton ”Normalize”, la liste des compétences normalisées s’affiche à
droite.
— Cet outil a réussi à mapper les versions longues à leurs abréviations, de façon automa-
tique et instantanée. Par exemple, la compétence ”Traitement du language naturel” est
transformée en ”NLP”
— L’outil est capable d’éliminer toute version exemple : ”python3.9/3.7/3.8 et 2” est trans-
formée en ”python”
— L’outil comprend la différence entre les ponctuations de séparation et celles incluses dans
l’appellation des compétences. Par exemple, le symbole ’/’ dans pl/sql n’a pas été sup-
primé.
74
Chapitre 5. Réalisation
Cette page permet la suggestion des profils adéquat à une offre d’embauche. A gauche, le
recruteur insère la description du poste à pourvoir. Puis, en cliquant sur le bouton ”Find”, la
liste des profils recommandés s’affiche à droite.
Figure 5.14. Démonstration de la recommandation des profils adéquats à une offre d’embauche
Afin de vérifier ce résultat, nous avons consulté le profil Linkedin du premier candidat re-
commandé pour l’offre de travail dans le domaine data science.
La figure ci dessous montre que la candidate suggérée s’agit bien de data scientist.
Ainsi, nous pouvons confirmer l’efficacité de cet outil d’appariement qui fonctionnait de
manière non supervisée.
75
Chapitre 5. Réalisation
Remarque :
Bien que le profil de la Figure 5.15 précise la spécialité du candidat, cette information est
réellement facultative, c’est-à-dire que d’autres profils peuvent ne pas la mentionner et peuvent
même indiquer d’autres informations dans cette section comme leur âge ou leur entreprise ac-
tuelle. Pour cette raison, nous n’avons pas pu utiliser cette information sur la spécialité et nous
avons eu recours à l’apprentissage non supervisé pour parvenir à déduire cette information cor-
rectement même si elle n’est pas indiqué directement sur le profil, et nous pouvons confirmer
l’efficacité de ce traitement en analysant le graphique circulaire de la Figure5.16 qui est le
résultat de cet apprentissage non supervisé sur la spécialité et qui indique qu’effectivement, le
profil de la même candidate ”Salwa maatoug” est un profil spécialisé en Data science (couleur
rose)
Figure 5.15. Page Linkedin du premier profil suggéré à l’offre de data scientist
76
Chapitre 5. Réalisation
Conclusion Générale
Les objectifs de ce stage au sein de WEVIOO ont été répartis en fonction de deux missions
principales.
La première mission s’agissait de réduire au maximum les redondances des compétences
tout en conservant le maximum d’information possible. La mise en œuvre de notre solution a
pu répondre à nos attentes tout d’abord du point de vue des performances obtenues, réduisant
les redondances à 90% et aussi du point de vue temps d’exécution.
La deuxième mission était la construction d’un système de recommandation qui sert à iden-
tifier les profils les plus adéquats à une offre d’embauche, et à trouver les profiles les plus simi-
laires à un profil donné. La mise en oeuvre de notre solution a pu répondre aux à notre objectif
qui est de faciliter les recherches de l’agent RH.
En ce qui concerne les différents modèles utilisés tout au long de ce projet , nous les avons
construits de manière à ce qu’ils puissent être réutilisés et améliorés, en fonction des change-
ments et de l’évolution des données et des besoins.
Ce stage a été globalement satisfaisant tant sur le plan professionnel que personnel. Il m’a
donné l’opportunité d’améliorer mes compétences en analyse de données textuelles et de me
familiariser avec les problèmes d’apprentissage non supervisé.
Bien que ce projet a répondu largement aux attentes sur lesquelles il a été fondé, il peut être
encore amélioré par :
— La détection des anomalies dans l’écriture des compétences, comme la détection des er-
reurs dans les frapes.
— Améliorer l’extraction des compétences en intégrant une fonctionnalité permettant de dif-
férencier automatiquement entre les hard skills et les soft skills.
— Travailler davantage sur le côté visuel de l’application
77
Bibliographie
[3] Cross industry standard process for data mining — wikipédia. https://fr.wikipedia.
org/wiki/Cross_Industry_Standard_Process_for_Data_Mining. (Accessed on
10/11/2022).
[6] (48) topic modelling | latent dirichlet allocation in python | lda in python - youtube. https:
//www.youtube.com/watch?v=be7Xd2Ntai8&t=117s. (Accessed on 10/11/2022).
78
[12] Github - allenai/scispacy : A full spacy pipeline and models for scientific/biomedical do-
cuments. https://github.com/allenai/scispacy. (Accessed on 10/18/2022).
[13] A simple algorithm for identifying abbreviation definitions in biomedical text - pubmed.
https://pubmed.ncbi.nlm.nih.gov/12603049/. (Accessed on 10/18/2022).
[15] Label studio – open source data labeling | label studio. https://labelstud.io/. (Ac-
cessed on 10/13/2022).
[18] Angular vs react vs vue : Stats about the battle of javascript tech-
nologies - agile actors #learning. https://learningactors.com/
angular-vs-react-vs-vue-stats-about-the-battle-of-javascript-technologies/.
(Accessed on 10/11/2022).