Création d'un modèle de classification pour filtrer les spams - 6.3

Composants Talend Guide de référence

EnrichVersion
6.3
EnrichProdName
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Data Integration
Talend Data Management Platform
Talend Data Services Platform
Talend ESB
Talend MDM Platform
Talend Open Studio for Big Data
Talend Open Studio for Data Integration
Talend Open Studio for Data Quality
Talend Open Studio for ESB
Talend Open Studio for MDM
Talend Real-Time Big Data Platform
task
Création et développement
Gouvernance de données
Qualité et préparation de données
EnrichPlatform
Studio Talend

Dans ce scénario, vous allez créer des Jobs Spark Batch. Les composants clés sont à utiliser comme suit :

  • tModelEncoder : plusieurs composants tModelEncoder sont utilisés pour transformer des messages texte (SMS) en ensemble de caractéristiques.

  • tRandomForestModel : il analyse les caractéristiques entrantes depuis le tModelEncoder afin de construire un modèle de classification comprenant à quoi ressemblent un message indésirable et un message normal.

  • tClassify : dans un nouveau Job, il applique ce modèle de classification afin de traiter un nouvel ensemble de SMS pour classer les messages indésirables et les messages normaux. Dans ce scénario, les résultats de cette classification sont utilisés pour évaluer la précision du modèle, puisque la classification des messages traités par le tClassify est déjà connue et explicitement marquée.

  • Un composant de configuration comme le tHDFSConfiguration est utilisé dans chaque Job : ce composant est utilisé pour se connecter au système de fichiers auquel les fichiers .jar dépendants du Job seront transférés durant l'exécution du Job.

    Ce composant de configuration du système de fichiers est requis, sauf si vous exécutez votre Job en mode Local.

Prérequis :

  • Deux ensembles de messages texte SMS : l'un est utilisé pour apprendre des modèles de classification et l'autre est utilisé pour évaluer les modèles créés. Vous pouvez télécharger l'ensemble train (apprentissage) depuis trainingSet.zip et l'ensemble test depuis testSet.zip.

    Talend a créé ces deux ensembles à partir de l'ensemble de données téléchargeable depuis https://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection, en utilisant le Job dataSet_preparation pour ajouter trois colonnes de caractéristiques (nombre de symboles monétaires, nombre de valeurs et nombre de points d'exclamation) à l'ensemble de données brutes et diviser proportionnellement l'ensemble de données.

    Un exemple de message indésirable se présente comme suit :

    Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's

    Un exemple de message normal se présente comme suit :

    Ahhh. Work. I vaguely remember that! What does it feel like? Lol

    Notez que les nouvelles caractéristiques ajoutées à l'ensemble de données brutes sont le résultat de l'observation des messages indésirables utilisés spécifiquement dans ce scénario (ces messages indésirables contiennent souvent des prix et/ou des points d'exclamation) et ne peuvent être généralisés pour les messages indésirables que vous souhaitez analyser. De plus, l'ensemble de données a été divisé aléatoirement en deux ensembles de données et utilisé tel quel. Cependant, dans un cas d'utilisation réelle, vous pouvez continuer à pré-traiter ces données de différentes méthodes, comme en équilibrant les ensembles de données afin de mieux apprendre votre modèle de classification.

  • Les deux ensembles doivent être stockés sur la machine où le Job sera exécuté, par exemple dans le système HDFS de votre cluster YARN si vous utilisez le mode Yarn client de Spark pour exécuter des Jobs Spark Talend et que vous avez les droits et permissions appropriés, en lecture et écriture de données dans ce système.

    Dans ce scénario, le client Spark Yarn client est utilisé et les ensembles de données sont stockés dans la système HDFS associé.

  • Le cluster Spark à utiliser doit avoir été configuré correctement et être en cours d'exécution.

Création d'un modèle de classification à l'aide de Random Forest

Relier les composants
  1. Dans la perspective Integration du Studio, créez un Job vide Spark Batch, nommé rf_model_creation par exemple, depuis le nœud Job Designs de la vue Repository.

    Pour plus d'informations concernant la création d'un Job Spark Batch, consultez le Guide de prise en main du Studio.

  2. Dans l'espace de modélisation graphique, saisissez le nom du composant à utiliser et sélectionnez ce composant dans la liste qui s'affiche. Dans ce scénario, les composants sont les suivants : un tHDFSConfiguration, un tFileInputDelimited, un tRandomForestModel et quatre tModelEncoder.

    Il est recommandé de renommer les quatre composants tModelEncoder différemment afin de reconnaître d'un coup d'œil quelle tâche est effectuée par quel composant. Dans ce scénario, ils sont nommés, respectivement Tokenize, tf, tf_idf et features_assembler.

  3. Connectez tous les composants à l'aide de liens Row > Main, sauf le tHDFSConfiguration, comme dans la capture d'écran précédente.

Configurer la connexion au système de fichiers à utiliser par Spark
  1. Double-cliquez sur le tHDFSConfiguration pour ouvrir sa vue Component. Notez que le tHDFSConfiguration est utilisé car le mode Spark Yarn client est utilisé pour exécuter des Jobs Spark dans ce scénario.

    Spark utilise ce composant pour se connecter au système HDFS auquel sont transférés les fichiers .jar dépendants du Job.

  2. Dans la zone Version, sélectionnez la distribution Hadoop et la version à laquelle vous connecter.

  3. Dans le champ NameNode URI, saisissez l'emplacement de la machine hébergeant le service NameNode du cluster.

  4. Dans le champ Username, saisissez les informations d'authentification utilisée pour vous connecter au système HDFS à utiliser. Notez que le nom d'utilisateur doit être le même que celui saisi dans l'onglet Spark configuration.

Charger l'ensemble de données d'apprentissage dans le Job
  1. Double-cliquez sur le tFileInputDelimited pour ouvrir sa vue Component.

  2. Cochez la case Define a storage configuration component et sélectionnez le composant tHDFSConfiguration à utiliser.

    Le tFileInputDelimited utilise cette configuration pour accéder à l'ensemble d'apprentissage à utiliser.

  3. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir l'éditeur de schéma.

  4. Cliquez cinq fois sur le bouton [+] pour ajouter cinq lignes et, dans la colonne Column, renommez-les, respectivement label, sms_contents, num_currency, num_numeric et num_exclamation.

    Les colonnes label et sms_contents contiennent les données brutes composées de messages texte SMS dans la colonne sms_contents et les libellés indiquant si un message est indésirable dans la colonne label.

    Les autres colonnes sont utilisées pour contenir les caractéristiques ajoutées aux ensembles de données brutes, comme expliqué précédemment dans le scénario. Les caractéristiques sont respectivement le nombre de symboles monétaires, le nombre de valeurs numériques et le nombre de points d'exclamation trouvés dans chaque SMS.

  5. Dans la colonne Type, sélectionnez Integer pour les colonnes num_currency, num_numeric et num_exclamation.

  6. Cliquez sur OK pour valider vos modifications.

  7. Dans le champ Folder/File, saisissez le répertoire dans lequel l'ensemble d'apprentissage à utiliser est stocké.

  8. Dans le champ Field separator, saisissez \t, séparateur utilisé par les ensembles de données que vous pouvez télécharger et utiliser dans ce scénario.

Transformer des SMS en vecteurs de caractéristiques à l'aide du tModelEncoder

Cette étape implémente le processus de traitement des caractéristiques.

Transformer des messages en mots

  1. Double-cliquez sur le tModelEncoder nommé Tokenize pour ouvrir sa vue Component. Ce composant transforme les SMS en mots.

  2. Cliquez sur le bouton Sync columns afin de récupérer le schéma du composant précédent.

  3. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir l'éditeur du schéma.

  4. Du côté de la sortie, cliquez sur le bouton [+] pour ajouter une ligne et, dans la colonne Column, renommez-la sms_tokenizer_words. Cette colonne est utilisée pour contenir les messages transformés.

  5. Dans la colonne Type, sélectionnez Object pour la ligne sms_tokenizer_words.

  6. Cliquez sur OK pour valider ces modifications.

  7. Dans la table Transformations, ajoutez une ligne en cliquant sur le bouton [+] et en procédant comme suit :

    • Dans la colonne Input column, sélectionnez la colonne fournissant les données à transformer en caractéristiques. Dans ce scénario, sélectionnez sms_contents.

    • Dans la colonne Output column, sélectionnez la colonne contenant les caractéristiques. Dans ce scénario, sélectionnez sms_tokenizer_words.

    • Dans la colonne Transformation, sélectionnez l'algorithme à utiliser pour la transformation. Dans ce scénario, sélectionnez Regex tokenizer.

    • Dans la colonne Parameters, saisissez les paramètres que vous souhaitez personnaliser pour les utiliser dans l'algorithme sélectionné. Dans ce scénario, saisissez pattern=\\W;minTokenLength=3.

    En utilisant cette transformation, le tModelEncoder sépare chaque message d'entrée par des espaces blancs, sélectionne uniquement les mots contenant au moins trois lettres et écrit le résultat de la transformation dans la colonne sms_tokenizer_words. Les symboles monétaires, les valeurs numériques, les signes de ponctuation et les mots comme a, an ou to sont exclus de cette colonne.

Calculer le poids d'un mot dans chaque message

  1. Double-cliquez sur le tModelEncoder nommé tf pour ouvrir sa vue Component.

  2. Répétez les opérations décrites précédemment dans la configuration du tModelEncoder nommé Tokenizer pour ajouter la colonne sms_tf_vect de type Vector dans le schéma de sortie et définissez la transformation comme dans l'image ci-dessus.

    Dans cette transformation, le tModelEncoder utilise HashingTF pour convertir les SMS transformés en vecteurs de caractéristiques de longueur fixe (15 dans ce scénario) afin de refléter l'importance d'un mot dans chaque SMS.

Réduire le poids des mots sans importance dans chaque message

  1. Double-cliquez sur le composant tModelEncoder nommé tf_idf pour ouvrir sa vue Component. Dans ce processus, le tModelEncoder réduit le poids des mots apparaissant très souvent mais dans de trop nombreux messages, car un mot de ce genre n'apporte généralement pas d'information utile lors d'une analyse de texte, comme le mot the.

  2. Répétez les opérations précédemment décrites durant la configuration du tModelEncoder nommé Tokenizer pour ajouter la colonne sms_tf_idf_vect de type Vector au schéma de sortie et définir la transformation comme affiché dans l'image ci-dessus.