Feature engineering
Formatrice: Mously DIAW
Tech et Cie.
Généralités
L'ingénierie des données en machine learning (ML), feature engineering en anglais, est une composante essentielle du
processus de création de modèles prédictifs efficaces. Elle consiste à collecter, nettoyer, transformer et préparer les
données afin de les rendre appropriées à l'entraînement de modèles d'apprentissage automatique. C’est un processus itératif
et multidisciplinaire qui demande une compréhension approfondie des données et du domaine d’application.
Voici quelques étapes clés sur l'ingénierie des données dans le contexte du ML :
Data & Datasets
Ce que nous appelons des données, data en anglais, sont des observations de phénomènes du
monde réel.
La définition formelle des données serait une collection ou un ensemble de variables
qualitatives et/ou quantitatives contenant des valeurs basées sur des observations.
Les données sont essentielles pour l'analyse et l'apprentissage automatique.
Les données sont généralement mesurées et collectées à partir de diverses observations.
Sources multiples de données
Les données peuvent être structurées, avec des lignes et des colonnes précises indiquant
des observations et des attributs, ou non structurées, comme des données textuelles,
images, audio, ...
Un ensemble de données (dataset) peut être défini comme une collection de données
Des exemples d'ensembles de données, très populaires dans le domaine de l'apprentissage
automatique, sont disponibles dans le package scikit-learn pour permettre de démarrer
rapidement un modèle.
Caractéristiques fréquentes des données :
erronées - Les données erronées sont le résultat d'une erreur de mesure.
redondantes - Les données redondantes contiennent plusieurs aspects qui transmettent
exactement la même information.
manquante - l 'information n'est pas présente pour certains points de données
Types de données
1. Données structurées
2. Données non structurées
Texte: Chaînes de caractères (ex : "Bonjour", "123 rue de la Paix").
Images: Représentations visuelles (ex : photos, graphiques).
Sons: Enregistrements audio (ex : musique, voix)
Vidéos: Combinaisons d'images et de sons (ex : films, clips).
Qu'est-ce que le Feature Engineering ?
L'ingénierie des données consiste à extraire les caractéristiques des données brutes et à les transformer en formats adaptés au
modèle d'apprentissage automatique.
Il s'agit d'une étape cruciale dans le pipeline d'apprentissage automatique, car les bonnes variables peuvent faciliter la
modélisation et, par conséquent, permettre au modèle de produire des résultats de meilleure qualité.
Généralement, lors de la construction d'un pipeline ML, la majeure partie (80%) du temps est consacrée à l'ingénierie des
données (60%) et à la collecte des données (19%).
Feature engineering: Ce que les Data Scientists passent le plus de temps à faire
(source ici)
Qu'est-ce que le Feature Engineering ?
L’ingénierie des caractéristiques a principalement deux objectifs :
Préparer l’ensemble de données d’entrée approprié, compatible avec les exigences de l’algorithme d’apprentissage
automatique.
Améliorer les performances des modèles.
Prenons comme exemple les données suivantes appartenant à un restaurant pour mieux comprendre.
La première colonne représente des commandes faites dans un restaurant,
ces commandes sont référées à l’aide d'un identifiant unique. La deuxième
colonne représente l'heure de passage de chaque commande.
Supposons que l'on souhaite utiliser ces données pour avoir une idée sur la
rentabilité du restaurant et à quel point il est occupé.
Le problème ici, c'est que ces données dans leur forme actuelle ne donne aucune information pertinente. Il faut donc les
traiter et changer la façon dans laquelle elles sont présentées pour les rendre plus adaptées et exploitables.
Qu'est-ce que le Feature Engineering ?
Une méthode de Feature Engineering possible dans ce cas, est d'agréger le nombre de commandes sur une période de temps
spécifique (une demi-heure dans ce cas).
On remarque qu'on a obtenu une sorte de fréquence de commandes, ce qui nous permettra de tirer beaucoup plus
d'information de ces données, par exemple, durant quelle partie de la journée le restaurant en question est le plus occupé.
Il existe plusieurs autres techniques de Feature Engineering, chacune est adaptée à des situations bien précises. On peut
citer, par exemple, la sélection des données, le nettoyage des données, la normalisation ou la discrétisation, ...
Qu'est-ce que le Feature Engineering ?
Généralement, lors de la construction d'un pipeline ML, la majeure partie du temps est consacrée à l'ingénierie des données
et au nettoyage des données.
Voici un pipeline d’un modèle ML
Processus du feature engineering
La séquence des étapes généralement suivies dans le processus ML pour sélectionner, transformer ou supprimer les données est
la suivante :
Les variables sont d'abord élaborées et conçues, la
normalisation et la mise à l'échelle nécessaires sont
effectuées et, enfin, les variables les plus pertinentes
sont sélectionnées pour obtenir le jeu de données final.
“De bonnes variables donnent de bons modèles”
C'est un art et cela indique le processus d'utilisation
d'une combinaison de :
la connaissance du domaine,
de techniques artisanales,
de transformations mathématiques pour convertir les
Introduction au prétraitement des données données
Feature engineering
La séquence des étapes généralement suivies dans le processus ML pour transformer les données traitées en variables est la
suivante :
Mise à l’échelle des variables:
cela consiste à redimensionner
les variables pour avoir une
plage similaire, par exemple
entre 0 et 1, pour empêcher
certaines fonctionnalités d'en
dominer d'autres.
Collecte des données Elle consiste à éliminer ou
Exploration et analyse des supprimer ou combiner les
données attributs des données
Traitement des valeurs brutes redondantes ou
manquantes / aberrantes inutiles dans le cadre du
Nettoyage des données problème à résoudre
Encodage
Discrétisation
Quels sont les défis à relever en matière de feature engineering ?
L'ingénierie des variables nous aide à construire des modèles sur divers types de données en appliquant les transformations
nécessaires et nous permet de travailler même sur des données non structurées complexes. Par exemple, du texte, des images
et même des vidéos
Les techniques d'extraction des variables varient selon les types de données.
1. Données numériques
2. Données catégorielles
3. Données textuelles
4. Données temporelles
5. Données visuelles
Traitement des valeurs manquantes / aberrantes
Les valeurs aberrantes, également appelées outliers, sont des valeurs qui s'écartent significativement de la distribution normale des
données. A titre illustratif, des prix négatifs pour des biens.
il existe plusieurs méthodes pour les traiter :
Suppression: Les entrées contenant des valeurs aberrantes sont supprimées de la distribution. Toutefois, s'il existe des valeurs
aberrantes pour de nombreuses variables, cette stratégie peut entraîner l'omission d'une grande partie de la feuille de données.
Remplacement des valeurs: Les valeurs aberrantes peuvent également être traitées comme des valeurs manquantes et remplacées
par une imputation appropriée (moyenne, médiane, régression, KNN, iterative imputer, ...).
Imputation par des valeurs spécifiques: Utilisation d'une valeur arbitraire pour remplacer les valeurs aberrantes (par exemple,
‘inconnu’ pour une variable qualitative, fixer un seuil (capping) et les remplacer par cette valeur).
Choisir la meilleure méthode:
Dépend du type de données
Du pourcentage de valeurs manquantes
De l'objectif de l'analyse
Les valeurs aberrantes ne sont pas toujours nuisibles
Il est important de comparer les résultats obtenus avec différentes méthodes pour choisir celle qui est la plus appropriée.
Autres points importants:
Éviter de supprimer impérativement des observations contenant des valeurs manquantes / aberrantes.
Identifier la cause des valeurs manquantes
Vérifier si les valeurs manquantes sont aléatoires ou non
Documenter les méthodes de traitement utilisées
VARIABLES
QUANTITATIVES
Feature engineering
Variables numériques
Le feature engineering des variables numériques (exemple: age, salaire, poids) est un processus visant à créer de nouvelles
variables ou à transformer les variables existantes pour améliorer les performances des modèles d'apprentissage automatique.
Voici quelques techniques couramment utilisées dans l'ingénierie des fonctionnalités pour les variables numériques :
1. Traitement des valeurs manquantes / aberrantes
2. Normalisation/Standardisation: La normalisation met à l'échelle la variable afin qu'elle ait une moyenne nulle et une variance
unitaire. La standardisation met à l'échelle la variable afin qu'elle ait une plage de valeurs comprise entre 0 et 1.
3. Transformation logarithmique: Lorsque les données sont fortement asymétriques ou ont une distribution exponentielle, une
transformation logarithmique peut être utilisée pour les rendre plus symétriques et mieux adaptées aux modèles linéaires.
4. Réduction de dimension: Lorsque les données sont très dimensionnelles, des techniques de réduction de dimension telles que
l'analyse en composantes principales (PCA) peuvent être utilisées pour réduire le nombre de variables tout en préservant au
mieux l'information.
5. Dérivés et ratios:
a. Discrétisation: Cette technique consiste à diviser une variable numérique continue en intervalles ou en catégories discrètes.
Cela peut aider à capturer des relations non linéaires ou à réduire la sensibilité aux valeurs aberrantes.
b. Création de variables polynomiales: Il s'agit de créer des interactions entre les variables numériques existantes en élevant
ces variables à des puissances supérieures ou en multipliant différentes variables entre elles. Cela peut aider à capturer
des relations non linéaires entre les variables.
c. Création de nouvelles features: on peut calculer de nouvelles variables dérivées à partir des variables existantes. Par
exemple, si vous avez une variable "revenu" et une variable "âge", vous pouvez créer une nouvelle variable "revenu par an".
d. Ratios: on peut calculer des ratios entre deux variables existantes. Par exemple, si vous avez une variable "ventes" et une
variable "nombre de clients", vous pouvez créer une nouvelle variable "ventes par client".
VARIABLES
CATÉGORIELLES
Encodage des variables catégorielles
Label Encoding
Les variables qualitatives, également appelées variables catégorielles, représentent des attributs non numériques. Le feature
engineering pour ce type de variable est crucial pour les exploiter efficacement dans les modèles de machine learning. Voici
quelques techniques courantes:
Label Encoding
Cette méthode attribue des nombres entiers aux catégories de la variable catégorielle en fonction de leur ordre ou de
leur importance.
Par exemple, pour une variable catégorielle comme "taille" avec des catégories "petit", "moyen" et "grand"
"petit" peut être codé comme 1, "moyen" comme 2 et "grand" comme 3.
Cette méthode est appropriée pour les variables catégorielles ordinales, où il existe un ordre naturel entre les catégories.
Encodage des variables catégorielles
One-Hot Encoding
Elle crée une nouvelle variable binaire pour chaque catégorie. La valeur de la variable est 1 pour la catégorie correspondante et
0 pour les autres.
C'est une méthode simple est largement utilisée, mais elle peut entraîner une augmentation du nombre de dimensions si la
variable catégorielle a un grand nombre de catégories uniques. Elle ne capture pas explicitement les relations entre les
catégories (par exemple, la similarité entre "rouge" et "rose").
Encodage des variables catégorielles
Frequency Encoding
Cette méthode remplace chaque catégorie par sa fréquence d'occurrence dans l'ensemble de données.
Elle peut être utile lorsque la fréquence de chaque catégorie est informative pour la prédiction mais elle peut poser des
problèmes avec les classes minoritaires.
Encodage des variables catégorielles
Target Encoding
Le target encoding, également connu sous le nom d'encodage basé sur la cible ou mean encoding, est une méthode qui
consiste à remplacer chaque catégorie d'une variable catégorielle par la moyenne de la variable cible correspondante pour
cette catégorie.
Pour chaque catégorie,
calculer la moyenne de
la variable cible pour
chaque catégorie
Cette nouvelle caractéristique peut être plus corrélée à la cible. Cependant, il est important de prendre des précautions pour
éviter le surajustement, en particulier si certaines catégories ont un nombre limité d'observations. Les méthodes de
régularisation telles que la validation croisée peuvent être utilisées pour atténuer ce problème. De plus, il est recommandé de
réappliquer le target encoding à chaque pli lors de la validation croisée pour éviter le biais de fuite de données (data leakage).
DONNÉES
TEXTUELLES
Qu'est-ce que le NLP ?
Le NLP, Natural Language Processing en anglais ou
Traitement du Langage Naturel en français, est une
discipline qui porte essentiellement sur la
compréhension, la manipulation et la génération du
langage naturel par les machines. Ainsi, le NLP est
réellement à l’interface entre la science informatique
et la linguistique. Il porte donc sur la capacité de la
machine à interagir directement avec l’humain.
Le NLP est assez générique qui recouvre un champ
d’application très vaste. Voici les applications les plus
populaires :
NLP: définition des concepts
Avant d'expliquer la vectorisation, il est important de comprendre certains termes clés, à savoir
Document: un document représente une unité de données textuelles unique. Par exemple, un document peut être un article de
blog, un e-mail, un livre, une critique de produit, etc.
Corpus: Il s'agit d'une collection de tous les documents présents dans notre ensemble de données. Il peut s'agir d'un ensemble
de commentaires, de textes littéraires, de documents scientifiques, de pages web, de publications sur les réseaux sociaux, etc.
Token: chaque token ou feature (mot ou séquence de mots) dans le corpus est considéré comme une caractéristique. Dans un
corpus de texte, les features peuvent être les mots individuels (unigrammes), les séquences de mots (n-grams), les n-grams de
caractères, etc
Prétraitement des données textuelles
Les données textuelles nécessitent des techniques de prétraitement spéciales avant de pouvoir être utilisées par des modèles.
Le prétraitement du texte implique la suppression des caractères spéciaux et des mots vides, la radicalisation, la lemmatisation et la vectorisation.
Nettoyage du texte: il implique souvent la suppression de la ponctuation, des caractères spéciaux, des chiffres, des espaces supplémentaires,
etc. Cela peut améliorer la qualité des features extraites.
Tokenization: elle consiste à découper un texte en unités plus petites appelées tokens. Un token peut être un caractère, un mot, une phrase ou une
séquence de n mots (n-grams). Le choix du type de token dépend souvent de la tâche spécifique et des objectifs du traitement du texte.
Stopwords: les mots vides (stopwords) sont des mots courants qui n’ajoutent pas beaucoup de sens au texte, tels que « le » et « ma »
La racinisation (stemming) consiste à découper la fin des mots dans afin de ne conserver que la racine du mot, par exemple en convertissant «
énormément » en « énorm ».
La lemmatisation (lemmatization) est similaire à la radicalisation, mais elle réduit les mots à leur forme canonique (lemme), comme la
conversion de « mangeait » en « manger ».
La vectorisation consiste à transformer des données textuelles en vecteurs numériques pouvant être utilisés par des modèles d'apprentissage
automatique. Les approches courantessont: bag of words, TF-IDF (Term Frequency-Inverse Document Frequency), les embeddings (Word2Vec,
GloVe), les transformers (BERT, USE, ...) .
lemmatization
Techniques de vectorisation: frequency-based
Vectorisation des données textuelles
Généralités (BoW, TFIDF, etc)
La vectorisation est une étape cruciale en NLP pour transformer des données textuelles en données numériques exploitables par
les modèles d'apprentissage automatique. Elle permet de représenter le sens des mots et des phrases sous forme de vecteurs,
facilitant ainsi l'apprentissage et la comparaison.
Prétraitement des données textuelles
Bag-of-Words (BoW)
Principe: Crée un vecteur pour chaque mot du vocabulaire, indiquant sa présence ou son absence (en binaire ou fréquence)
dans le texte.
Avantages: Simple à implémenter et efficace pour les petits vocabulaires.
Inconvénients: Ne prend pas en compte l'ordre des mots, ne capture pas la sémantique des mots, dépendance au vocabulaire
(Les mots qui ne sont pas présents dans le corpus d’apprentissage ne sont pris en compte), sparsité des données (la plupart
des termes ne sont pas présents dans le vocabulaire global donc la majorité des valeurs sont nulles).
Matrice binaire: Il utilise la méthode One-hot
Matrice fréquence des mots (TF: Term-Frequency)
encoding pour générer le vecteur des caractéristiques.
La matrice de vectorisation des documents correspond aux dimensions suivantes: chaque ligne représente un document et chaque
colonne représente un mot du vocabulaire.
Avec sklearn, vous pouvez les calculer avec le module CountVectorizer.
Prétraitement des données textuelles
TF-IDF (Term Frequency - Inverse Document Frequency)
Principe: Pondère l'importance des mots dans un document en fonction de leur fréquence et de leur rareté dans l'ensemble
des documents.
Avantages: Plus précis que BOW et prend en compte la fréquence des mots.
Inconvénients: Sensible aux variations de la longueur des documents ainsi que les limitation du BoW
TF-IDF est le produit de la fréquence du terme (TF) et de la fréquence inverse du document (IDF). Il combine ces deux mesures
pour calculer l'importance d'un terme (t) dans un document (d) par rapport à l'ensemble du corpus.
Fréquence d’un terme i dans le document j
Nombre total de documents contenant le terme i
Fréquence d’un terme Importance d’un terme par
Nombre total de documents dans le corpus
dans un document rapport à l’ensemble du corpus
Il existe différentes variantes de la formule TF-IDF qui peuvent être utilisées, flexibilité dans la manière dont la pondération des
termes est calculée.
La matrice TF-IDF résultante est utilisée comme représentation vectorielle des documents dans le corpus, où chaque document
est représenté par un vecteur TF-IDF.
Embeddings (Word2Vec, GloVe, FastText, Doc2Vec, etc.)
Prétraitement des données textuelles
Word Embeddings (Word2Vec, GloVe, FastText, etc.)
Les embeddings de mots (ou word embeddings en anglais) sont des représentations vectorielles de mots apprises à partir de
grandes quantités de données textuelles non supervisées. Ces embeddings capturent les relations sémantiques et syntaxiques
entre les mots. Ils permettent de capturer les similarités et les relations entre les mots en les plaçant dans un espace vectoriel,
permettant aux machines de comprendre les nuances du langage.
Comparer aux méthodes de vectorisation basées sur la fréquence, ils ont considérablement amélioré les performances des
modèles de NLP en capturant des informations sémantiques et syntaxiques importantes à partir des données textuelles.
Prétraitement des données textuelles
Word2Vec
Principe: Utilise un réseau neuronal pour apprendre des représentations vectorielles des mots en tenant compte du contexte
dans lequel ils apparaissent.
Avantages: Capture les relations sémantiques entre les mots et produit des vecteurs plus précis que BOW et TF-IDF.
Inconvénients: Plus complexe à implémenter et nécessite un ensemble de données conséquent pour l'apprentissage.
Il existe deux architectures principales pour l'apprentissage de représentations de mots avec Word2Vec :
CBOW (Continuous Bag-of-Words) Skip-gram
L'objectif de CBOW est de prédire un mot cible à partir de À l'inverse de CBOW, le modèle Skip-gram utilise un mot en
son contexte, c'est-à-dire les mots environnants. Il utilise entrée pour prédire les mots du contexte. Il prédit les mots
les mots voisins comme entrée pour prédire le mot central. environnants à partir du mot central.
Prétraitement des données textuelles
Word2Vec
Le processus d'entraînement de Word2Vec consiste à
1. parcourir un corpus de texte
2. glisser une fenêtre sur chaque mot du texte pour extraire les contextes
3. utiliser ces paires de mots (contexte et mot cible) pour entraîner le modèle de Word2Vec.
Le modèle ajuste les embeddings de mots pour minimiser la différence entre les mots cibles réels et les mots prédits par le
modèle.
Word2Vec est entraîné de manière non supervisée à partir de données textuelles, ce qui signifie qu'il n'a pas besoin de labels pour
apprendre des représentations de mots utiles.
Les embeddings de mots générés par Word2Vec sont généralement de faible dimension, typiquement entre 100 et 300 dimensions.
Prétraitement des données textuelles
GloVe (Global Vectors for Word Representation):
Principe: Similaire à Word2Vec mais utilise une approche différente pour apprendre les représentations vectorielles des mots.
Avantages: Offre des performances comparables à Word2Vec et est plus efficace en termes de temps et de mémoire.
Inconvénients: Moins flexible que Word2Vec et ne prend pas en compte l'ordre des mots.
Elle a été développée par Jeffrey Pennington, Richard Socher et Christopher D. Manning à l'Université de Stanford en 2014.
Modèle basé sur les co-occurrences :
GloVe est basé sur la statistique des co-occurrences des mots dans le corpus. Il utilise une matrice de co-occurrences qui
enregistre le nombre de fois que deux mots apparaissent ensemble dans le même contexte.
Voici la matrice de cooccurrence pour le corpus contenant :
"J'aime l'apprentissage profond".
"J'aime le NLP."
"J'aime voler".
Prétraitement des données textuelles
FastText
Principe: Extension de Word2Vec qui prend en compte les sous-mots (subwords) et les n-grams de caractères pour apprendre
les représentations vectorielles des mots.
Avantages: Plus robuste que Word2Vec et capable de traiter des mots inconnus.
Inconvénients: Moins précis que Word2Vec pour les mots fréquents.
FastText est une méthode de représentation de mots développée par Facebook AI Research en 2016.
Gestion des sous-mots (subwords) :
Contrairement à Word2Vec et GloVe, qui considèrent chaque mot comme une unité atomique, FastText prend en compte la
structure morphologique des mots en décomposant les mots en sous-mots (subwords) ou en n-grams de caractères. Cela
permet à FastText de mieux représenter les mots rares ou les mots hors-vocabulaire en utilisant des informations de sous-
mots.
FastText utilise une architecture de modèle de sac de mots (CBOW) similaire à Word2Vec, mais traitent les mots comme des
unités indivisibles, FastText décompose les mots en n-grams de caractères (subwords).
FastText utilise une implémentation efficace de la descente de gradient hiérarchique pour l'entraînement, ce qui lui permet de
gérer efficacement de grands volumes de données
Prétraitement des données textuelles
Doc2Vec (Docuement vectors ou Paragraph Vectors)
Doc2Vec étend le concept de Word2Vec pour encoder des documents entiers en vecteurs de taille fixe. Alors que Word2Vec se
concentre sur la capture du sens des mots individuels, Doc2Vec vise à encoder le sens sémantique et le contexte d'un document
entier.
Chaque document est représenté par un vecteur dense dans un espace vectoriel continu. Ces vecteurs peuvent être utilisés pour
mesurer la similarité entre les documents, pour la classification de texte, etc.
Il existe deux variantes principales de Doc2Vec:
En utilisant Doc2Vec, il est possible de représenter chaque document sous forme d'un vecteur de dimension fixe, ce qui permet
de mesurer la similarité entre les documents, d'effectuer des regroupements de documents et d'autres tâches de NLP.
Transformers (BERT, GPT, etc.)
Prétraitement des données textuelles
Transformers (BERT, RoBERTa, GPT, T5, etc.)
Les modèles de transformation (transformers en anglais) tels que BERT (Bidirectional Encoder Representations from
Transformers) et GPT (Generative Pre-trained Transformer) utilisent des architectures de réseaux de neurones transformateurs
pour encoder des mots, des phrases ou des documents en vecteurs de contexte. Ces modèles ont considérablement amélioré les
performances dans de nombreuses tâches de NLP en surpassant les approches précédentes comme les réseaux de neurones
récurrents (RNN) et les LSTM (Long Short-Term Memory).
Ce type de modèle utilise un mécanisme d'attention qui permet au modèle de se concentrer sur les parties les plus pertinentes
de la séquence d'entrée lors du traitement et de la génération de la sortie.
Voici une liste des principaux modèles de transformers en NLP :
BERT
GPT Transformer-XL
développé par Google, a révolutionné
développé par OpenAI, capables de développé par Google, vise à
le domaine du NLP en permettant une
générer du texte de manière gérer les séquences longues
compréhension bidirectionnelle du
autonome
contexte des mots
Extensions gérées par Google: XLNet,
RoBERTa, ALBERT, ...
DistilBERT
T5 BART
développé par Hugging Face, est
Text-To-Text Transfer Transformer développé par Facebook, combine
une version allégée de BERT.
est développé par Google les avantages de GPT et BERT
Ressources
https://domino.ai/data-science-dictionary/feature-engineering
https://mylearningsinaiml.wordpress.com/ml-models/feature-engineering/what-it-is/
https://medium.com/nerd-for-tech/feature-engineering-techniques-for-machine-learning-
c4a35d43e167#:~:text=While%20working%20with%20data%20scientists,step%20for%20building%20accurate%20models.
https://www.researchgate.net/figure/What-data-scientists-spend-the-most-time-doing-7_fig2_335577003
https://www.forbes.com/sites/gilpress/2016/03/23/data-preparation-most-time-consuming-least-enjoyable-data-science-task-
survey-says/?sh=44f197146f63
https://www.geeksforgeeks.org/what-is-feature-engineering/
https://towardsdatascience.com/machine-learning-text-processing-1d5a2d638958
https://ayselaydin.medium.com/1-text-preprocessing-techniques-for-nlp-37544483c007
https://www.baeldung.com/cs/text-mining
https://www.linkedin.com/pulse/bow-vs-tf-idf-nlp-text-vectorization-hassan-badawy-msc/
https://datascientest.com/introduction-au-nlp-natural-language-processing
https://blent.ai/blog/a/word-embedding-nlp-
https://datascientest.com/nlp-word-embedding-word2vec