TensorFlow.js: Réentraîner un modèle de détection des spams dans les commentaires pour traiter les cas spéciaux

1. Avant de commencer

Cet atelier de programmation s'appuie sur le résultat final de l'atelier de programmation précédent de cette série pour détecter les spams dans les commentaires à l'aide de TensorFlow.js.

Dans le dernier atelier de programmation, vous avez créé une page Web entièrement fonctionnelle pour un blog vidéo fictif. Vous avez pu filtrer les commentaires contenant du spam avant qu'ils ne soient envoyés au serveur pour leur stockage, ou à d'autres clients connectés, à l'aide d'un modèle pré-entraîné de détection du spam fourni par TensorFlow.js dans le navigateur.

Le résultat final de cet atelier de programmation est illustré ci-dessous:

EE0f13398ea4e91e.gif

Bien que cela ait bien fonctionné, certains cas spéciaux n'ont pas pu être détectés. Vous pouvez réentraîner le modèle pour tenir compte des situations qu'il n'a pas pu gérer.

Cet atelier de programmation porte sur l'utilisation du traitement du langage naturel (l'art de comprendre le langage humain avec un ordinateur) et vous montre comment modifier une application Web que vous avez créée (nous vous recommandons vivement de le faire).suivre les ateliers de programmation dans l'ordre ), pour résoudre le problème réel du spam dans les commentaires. De nombreux développeurs Web rencontreront probablement ce problème lorsqu'ils travailleront sur l'une des applications Web les plus populaires au monde.

Dans cet atelier de programmation, vous allez aller plus loin en réentraînant votre modèle de ML pour tenir compte des changements du contenu des messages de spam, qui peuvent évoluer au fil du temps, en fonction des tendances actuelles ou des sujets de discussion populaires. Vous pourrez ainsi actualiser le modèle et tenir compte ces changements.

Prérequis

  • Vous avez terminé le premier atelier de programmation de cette série.
  • Connaissances de base des technologies Web, y compris HTML, CSS et JavaScript

Objectifs de l'atelier

Vous allez réutiliser le site Web créé précédemment pour un blog vidéo fictif avec une section de commentaires en temps réel et le mettre à jour pour charger une version personnalisée du modèle de détection de spam en utilisant TensorFlow.js. Ainsi, il sera plus performant en cas d'échec sur les sites. dans le menu déroulant ; Bien sûr, en tant que développeurs et ingénieurs Web, vous pouvez changer cette expérience utilisateur utilisable sur tous les sites Web sur lesquels vous travaillez : vous pourrez l'adapter à n'importe quel cas d'utilisation client (blog, forum, etc.). du CMS, comme Drupal.

C'est parti !

Points abordés

Vous découvrirez comment :

  • Identifier les cas limites pour lesquels le modèle pré-entraîné a échoué
  • Réentraînez le modèle de classification du spam qui a été créé à l'aide de Model Maker.
  • Exportez ce modèle Python au format TensorFlow.js pour l'utiliser dans les navigateurs.
  • Mettez à jour le modèle hébergé et son dictionnaire avec le modèle entraîné, puis vérifiez les résultats.

Dans cet atelier, nous partons du principe que vous connaissez les langages HTML5, CSS et JavaScript. Vous allez également exécuter du code Python via un notebook "co lab" pour réentraîner le modèle créé à l'aide de Model Maker, mais vous n'avez pas besoin de vous familiariser avec Python pour le faire.

2. Configurer le code

Vous utiliserez de nouveau Glitch.com pour héberger et modifier l'application Web. Si vous n'avez pas encore suivi l'atelier de programmation préalable, vous pouvez cloner le résultat final ici comme point de départ. Si vous avez des questions sur le fonctionnement du code, nous vous recommandons vivement de suivre l'atelier de programmation précédent qui a montré comment faire de cette application Web opérationnelle avant de continuer.

Dans Glitch, cliquez sur le bouton Remix this (Remixer) pour dupliquer le groupe et créer un ensemble de fichiers modifiables.

3. Découvrir des cas spéciaux dans la solution précédente

Si vous ouvrez le site Web que vous venez de cloner et que vous essayez de saisir des commentaires, vous remarquerez qu'il fonctionne souvent bien comme prévu, bloquant les commentaires qui semblent être du spam comme prévu et autorisez les réponses légitimes.

Toutefois, si vous êtes un peu créatif et utilisez des expressions pour rompre le modèle, vous réussirez probablement à un moment donné. Après quelques essais et erreurs, vous pouvez créer manuellement des exemples semblables à ceux présentés ci-dessous. Essayez de les coller dans l'application Web existante. Consultez la console, puis vérifiez les probabilités qui s'affichent si le commentaire est du spam:

Commentaires légitimes publiés sans problème (vrais négatifs) :

  1. "Waouh, j'adore cette vidéo et le travail accompli." Spam probable: 47,91854%
  2. " Ces démos sont très appréciées ! Vous avez d'autres informations ?" Spam probable: 47,15898%
  3. "Quel site Web puis-je consulter pour en savoir plus ?" Spam probable: 15,32495%

C'est très intéressant. Toutes les probabilités ci-dessus sont relativement faibles et réussissent à atteindre la valeur par défaut de SPAM_THRESHOLD de 75% de probabilité minimale avant d'entreprendre des actions (définies dans le code script.js de l'atelier de programmation précédent).

Essayons maintenant d'ajouter des commentaires plus marqué qui sont marqués comme spam, même s'ils ne sont pas...

Commentaires légitimes marqués comme spam (faux positifs):

  1. "Est-ce que quelqu'un peut associer le site Web du masque qu'il porte ?" Spam probable: 98,46466%
  2. "Puis-je acheter ce titre sur Spotify ? N'hésitez pas à me le faire savoir." Spam probable: 94,40953%
  3. "Puis-je me contacter pour savoir comment télécharger TensorFlow.js ?" Spam probable: 83.20084%

Problème Il semble que ces commentaires légitimes soient marqués comme spam alors qu'ils devraient être autorisés. Comment résoudre ce problème ?

Une option simple consiste à augmenter la confiance à SPAM_THRESHOLD de plus de 98,5 %. Dans ce cas, ces commentaires sont classés à tort. En gardant cela à l'esprit, poursuivons avec les autres résultats suivants...

Commentaires marqués comme spam (vrais positifs):

  1. "C'est cool, mais consultez les liens de téléchargement de mon site Web qui sont de meilleure qualité !" Spam probable: 99,77873%
  2. "Je sais que certaines personnes peuvent vous faire part de médicaments. Consultez mon fichier pr0file pour en savoir plus." Spam potentiel: 98.46955%
  3. "Consultez mon profil pour télécharger encore plus de vidéos incroyables ! http://example.com" Probabilité de spam: 96.26383%

Bien. Cela fonctionne comme prévu avec notre seuil initial de 75 %, mais étant donné que, lors de l'étape précédente, vous aviez remplacé SPAM_THRESHOLD par plus de 98,5 %, cela signifie que deux exemples ici seraient appliqués. Le seuil peut donc être atteint. est trop élevé. Peut-être est-il préférable d'utiliser 96 %, Mais dans ce cas, l'un des commentaires de la section précédente (faux positifs) est marqué comme spam alors qu'il était légitime, avec un score de 98,46466%.

Dans ce cas, il est probablement préférable d'intercepter tous les commentaires comportant du spam et de réentraîner les erreurs ci-dessus. En définissant le seuil sur 96 %, tous les vrais positifs sont toujours capturés et vous éliminez deux des faux positifs ci-dessus. Il n'y a pas de mal à changer un seul numéro.

Continuons...

Commentaires autorisés à publier du spam (faux négatifs):

  1. "Regardez mon profil pour télécharger des vidéos encore plus passionnantes ! Spam probable: 7,54926%
  2. Obtenez une remise sur nos cours de sport : pr0file! Spam probable: 17,49849%
  3. "Bon stock GOOG vient d'être optimisé ! Attendez trop tard !" Spam probable: 20,42894%

Vous ne pouvez rien faire en modifiant simplement la valeur SPAM_THRESHOLD pour ces commentaires. Si le seuil de spam passe de 96% à 9 %, les commentaires réels seront marqués comme spam. L'un d'entre eux est associé à une note de 58 %, même s'il est légitime. La seule façon de gérer les commentaires de ce type est de réentraîner le modèle avec ces cas spéciaux dans les données d'entraînement de sorte qu'il apprenne que la quantité de spam n'est pas vérifiée.

Actuellement, la seule option disponible pour le moment consiste à réentraîner le modèle. Vous avez également vu comment affiner le seuil en fonction duquel vous décidez d'appeler des éléments indésirables, afin d'améliorer les performances. En tant qu'homme, 75% semble assez confiant, mais pour ce modèle, il fallait augmenter de près de 81,5% pour être plus efficace avec des exemples d'entrées.

Il n'existe pas de valeur magique adaptée aux différents modèles. Cette valeur de seuil doit être définie par modèle après avoir testé des données réelles pour identifier ce qui fonctionne bien.

Dans certains cas, un faux positif (ou négatif) peut avoir de graves conséquences (par exemple, dans le secteur médical). Vous pouvez alors définir un seuil très élevé et demander un examen plus manuel pour celles qui n'atteignent pas ce seuil. En tant que développeur, vous devez effectuer des tests.

4. Réenregistrer le modèle de détection des spams dans les commentaires

Dans la section précédente, vous avez identifié un certain nombre de cas limites qui ont échoué pour le modèle. La seule option consistait à réentraîner le modèle pour tenir compte de ces situations. Dans un système de production, vous pourrez les trouver au fil du temps, lorsque les internautes signalent manuellement un commentaire comme spam et que les commentaires signalés passent en revue les commentaires signalés, et que certains d'entre eux ne sont pas des spams et peuvent marquer ces commentaires à des fins de réentraînement. Nous supposons que vous avez rassemblé un grand nombre de nouvelles données pour ces cas spéciaux. Pour de meilleurs résultats, vous devriez voir quelques variantes de ces nouvelles phrases si possible. Nous allons maintenant vous montrer comment réentraîner le modèle en tenant compte de ces cas particuliers.

Résumé du modèle prédéfini

Le modèle prédéfini que vous avez utilisé est un modèle créé par un tiers qui utilise Model Maker, un modèle de représentation vectorielle continue de mots.

Comme le modèle a été créé avec Model Maker, vous devez passer rapidement à Python pour le réentraîner, puis l'exporter au format TensorFlow.js afin de l'utiliser dans le navigateur. Heureusement, Model Maker facilite l'utilisation de ses modèles. Cela devrait être facile à suivre. Nous vous guiderons tout au long du processus. Si vous n'avez jamais utilisé Python pour le moment, ne vous inquiétez pas.

Colab

Comme vous n'êtes pas trop préoccupé par cet atelier de programmation et ne souhaitez pas configurer un serveur Linux avec tous les utilitaires Python installés, vous pouvez simplement exécuter du code via le navigateur Web à l'aide d'un "notebook Colab". Ces notebooks peuvent se connecter à un backend, c'est-à-dire un serveur sur lequel des éléments sont préinstallés, puis exécuter du code arbitraire dans le navigateur Web et afficher les résultats. Cela est très utile pour le prototypage rapide ou pour des tutoriels de ce type.

Rendez-vous simplement sur colab.research.google.com. Un écran de bienvenue s'affichera, comme illustré ci-dessous:

B2df89c1f7b38cc9.png

Cliquez sur le bouton New Notebook (Nouveau notebook) en bas à droite de la fenêtre pop-up. Une Colab vide doit s'afficher comme suit:

94a875f67d6e34f6.png

Parfait. L'étape suivante consiste à connecter l'interface Colab à un serveur backend afin que vous puissiez exécuter le code Python que vous allez écrire. Pour ce faire, cliquez sur Connect (Se connecter) en haut à droite et sélectionnez Connect to hosted runtime (Se connecter à un environnement d'exécution hébergé).

f4fcd56ae53527bd.png

Une fois connectés, les icônes de RAM et de disque apparaissent à la place:

D979e93ba595d1de.png

Beau travail ! Vous pouvez maintenant commencer à coder en Python pour réentraîner le modèle Model Maker. Procédez simplement comme suit :

Étape 1

Dans la première cellule qui est actuellement vide, copiez le code ci-dessous. Cet outil va installer TensorFlow Lite Model Maker à l'aide du gestionnaire de packages de Python appelé "pip" (il est semblable à npm, qui est le plus connu de cet atelier de programmation avec l'écosystème JS):

!pip install -q tflite-model-maker

Cependant, si vous collez du code dans la cellule, il ne s'exécutera pas. Passez ensuite la souris sur la cellule grise dans laquelle vous avez collé le code ci-dessus. Une petite icône "Lecture" s'affiche à gauche de la cellule, comme illustré ci-dessous:

Be966130d68b5aac.png Cliquez sur le bouton de lecture pour exécuter le code qui vient d'être saisi dans la cellule.

L'installation de Model Maker s'affiche désormais:

376bc0fbde89a60d.png

Une fois cette cellule exécutée, comme indiqué ci-dessous, passez à l'étape suivante.

Étape 2

Ensuite, ajoutez une cellule de code comme indiqué ci-dessous pour que vous puissiez coller du code après la première cellule et l'exécuter séparément:

7ec405d0d82b2196.png

La cellule suivante sera exécutée avec un certain nombre d'importations que le code du notebook devra utiliser. Copiez et collez le contenu ci-dessous dans la nouvelle cellule créée:

import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Il s'agit d'un travail classique, même si vous ne connaissez pas Python. Vous importez simplement des utilitaires et les fonctions de Model Maker nécessaires au classificateur de spam. Cet article vérifie également si vous exécutez TensorFlow 2.x, qui est nécessaire pour utiliser Model Maker.

Enfin, comme précédemment, exécutez la cellule en appuyant sur l'icône de lecture lorsque vous passez la souris dessus, puis ajoutez une cellule de code à l'étape suivante.

Étape 3

Ensuite, téléchargez les données à partir d'un serveur distant sur votre appareil et définissez la variable training_data comme chemin d'accès au fichier local téléchargé:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/jm_blog_comments_extras.csv', extract=False)

Model Maker peut entraîner des modèles à partir de fichiers CSV simples, comme celui téléchargé. Il vous suffit de spécifier les colonnes qui contiennent le texte et celles qui contiennent les libellés. Découvrez comment procéder à l'étape 5. N'hésitez pas à télécharger directement le fichier CSV vous-même pour voir ce qu'il contient, si vous le souhaitez.

Vous remarquerez que, selon vous, ce fichier s'appelle jm_blog_comments_extras.csv. Il s'agit simplement des données d'entraînement d'origine que nous avons utilisées pour générer le premier modèle de spam de commentaire. associés aux nouvelles données de cas périphériques que vous avez découvertes, dans un seul fichier. Vous avez besoin des données d'entraînement d'origine utilisées pour entraîner le modèle, en plus des nouvelles phrases à partir desquelles vous souhaitez apprendre.

Facultatif:Si vous téléchargez ce fichier CSV et que vous consultez les dernières lignes, vous trouverez des exemples de cas spéciaux qui ne fonctionnaient pas correctement auparavant. Ils viennent d'être ajoutés à la fin des données d'entraînement existantes générées par le modèle prédéfini utilisé pour s'entraîner.

Exécutez cette cellule, puis ajoutez-en une nouvelle avant de passer à l'étape 4.

Étape 4

Lorsque vous utilisez Model Maker, vous ne devez pas créer de modèles de A à Z. Vous utilisez généralement les modèles existants que vous personnalisez ensuite en fonction de vos besoins.

Model Maker propose plusieurs représentations vectorielles continues de modèles pré-entraînés, mais la méthode la plus simple et la plus rapide consiste à utiliser average_word_vec, qui vous a permis de créer votre site Web plus tôt. Voici le code :

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Exécutez le modèle une fois que vous l'avez collé dans la nouvelle cellule.

Comprendre les

num_words

paramètre

Il s'agit du nombre de mots que le modèle doit utiliser. Vous pensez peut-être que mieux c'est, mais, en fonction de la fréquence d'utilisation de chaque mot, il existe généralement une petite attente. Si vous utilisez tous les mots de l'ensemble du corpus, vous pourriez vous retrouver avec le modèle qui essaie d'apprendre et d'équilibrer les pondérations des mots qui ne sont utilisés qu'une seule fois. Cela n'est pas très utile. Vous constaterez que dans de nombreux textes, de nombreux mots ne sont utilisés qu'une seule fois ou deux, et qu'il n'est généralement pas intéressant de les utiliser dans votre modèle, car ils ont un impact négligeable sur le sentiment général. Vous pouvez donc ajuster votre modèle sur le nombre de mots souhaités à l'aide du paramètre num_words. Dans ce cas, un nombre plus réduit est associé à un modèle plus petit et plus rapide, mais il peut être moins précis, car il reconnaît moins de mots. Dans ce cas, un nombre plus élevé aura un modèle plus grand et potentiellement plus lent. C'est vous qui trouvez l'emplacement idéal. C'est à vous, en tant qu'ingénieur en machine learning, de déterminer ce qui fonctionne le mieux pour votre cas d'utilisation.

Comprendre les

wordvec_dim

paramètre

Le paramètre wordvec_dim correspond au nombre de dimensions que vous souhaitez utiliser pour le vecteur de chaque mot. Ces dimensions sont principalement les différentes caractéristiques (créées par l'algorithme de machine learning lors de l'entraînement) qu'un mot donné peut mesurer, grâce auquel le programme peut essayer d'associer au mieux les mots qui sont similaires d'une manière significative.

Par exemple, si vous disposiez d'une dimension vous permettant de déterminer si le mot "médicament" s'est produit, cette valeur peut être élevée pour cette dimension. Il peut être utile d'utiliser une "dimension médicale" pour identifier le spam lorsqu'elle est associée à d'autres dimensions importantes qu'elle pourra utiliser.

Dans le cas de mots dont le score est très élevé dans la "dimension médicale", il peut être utile de penser qu'une deuxième dimension qui associe des mots au corps humain sera utile. Les mots comme "jambe", "bras" et "cou" peuvent être très élevés ici et également dans la dimension médicale.

Ces dimensions peuvent être utilisées par le modèle pour détecter ensuite les mots les plus susceptibles d'être associés à du spam. Les spams sont peut-être plus susceptibles d'inclure des mots à la fois des parties médicales et du corps humain.

La règle de base déterminée par la recherche est que la quatrième racine du nombre de mots fonctionne bien pour ce paramètre. Ainsi, si j'utilise 2 000 mots, je pense qu'il est judicieux d'utiliser sept dimensions. Vous pouvez également modifier ce nombre en fonction du nombre de mots utilisés.

Comprendre les

seq_len

paramètre

Les modèles sont généralement très rigides en ce qui concerne les valeurs d'entrée. Avec un modèle de langage, cela signifie qu'il peut classer des phrases d'une longueur spécifique ou statique. Ce paramètre est déterminé par le paramètre seq_len, qui correspond à la "length length". Lorsque vous convertissez des mots en chiffres (ou jetons), une phrase devient une séquence de ces jetons. Ainsi, votre modèle sera entraîné (dans le cas présent) à classifier et à reconnaître les phrases de 20 jetons. Si la phrase est plus longue, elle sera tronquée. S'il est plus court, il sera complété, comme dans le premier atelier de programmation de cette série.

Étape 5 : Chargez les données d'entraînement

Vous avez précédemment téléchargé le fichier CSV. Utilisez à présent un chargeur de données pour transformer celui-ci en données d'entraînement reconnues par le modèle.

data = DataLoader.from_csv(
      filename=data_file,
      text_column='commenttext',
      label_column='spam',
      model_spec=spec,
      delimiter=',',
      shuffle=True,
      is_training=True)

train_data, test_data = data.split(0.9)

Si vous ouvrez le fichier CSV dans un éditeur, vous verrez que chaque ligne a deux valeurs et sont décrites avec du texte sur la première ligne du fichier. Généralement, chaque entrée est considérée comme une colonne. Vous constaterez que la description de la première colonne est commenttext et que la première entrée de chaque ligne est le texte du commentaire.

De même, le descripteur pour la deuxième colonne est spam, et vous constatez que la deuxième entrée de chaque ligne est TRUE ou FALSE pour indiquer si ce texte est considérées comme du spam dans les commentaires. Les autres propriétés définissent la spécification du modèle que vous avez créée à l'étape 4, avec un caractère délimiteur. Dans ce cas, il s'agit d'une virgule, car le fichier est séparé par une virgule. Vous pouvez également définir un paramètre de brassage afin de réorganiser les données d'entraînement de manière aléatoire, afin que les éléments qui soient similaires ou collectés soient répartis de manière aléatoire dans l'ensemble de données.

Vous utiliserez ensuite data.split() pour diviser les données en données d'entraînement et de test. Le chiffre 0,9 indique que 90% de l'ensemble de données sera utilisé pour l'entraînement, et le reste pour les tests.

Étape 6 : Créez le modèle

Ajoutez une autre cellule dans laquelle nous ajouterons du code pour créer le modèle:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

Un modèle de classificateur de texte est alors créé avec Model Maker. Vous devez spécifier les données d'entraînement que vous voulez utiliser (définies à l'étape 4), les spécifications du modèle (définies également à l'étape 4) et un certain nombre d'époques. le cas 50.

Le principe de base du machine learning est qu'il s'agit d'une forme de correspondance de structure. Dans un premier temps, elle chargera les pondérations pré-entraînées pour les mots et essaiera de les regrouper avec une prédiction si celles-ci sont regroupées et indiquent du spam. La première fois qu'il y a lieu, le score sera probablement proche de 50:50, puisque le modèle ne commence pas comme indiqué ci-dessous:

D6c8116f8e7e781b.png

Il mesure ensuite les résultats et modifie les pondérations du modèle pour ajuster sa prédiction, puis il essaie à nouveau. Il s'agit d'une époque. Ainsi, en spécifiant epochs=50, la commande "loop" sera effectuée 50 fois, comme illustré ci-dessous:

fc7bf6a948b7aa26.png

Ainsi, lorsque vous atteignez la 50e époque, le modèle affiche un niveau de précision bien plus élevé. Dans ce cas, la valeur 99,1 % s'affiche.

Étape 7 : Exportez le modèle

Une fois l'entraînement terminé, vous pouvez exporter le modèle. TensorFlow entraîne un modèle dans son format particulier. Celui-ci doit être converti au format TensorFlow.js pour pouvoir être utilisé sur une page Web. Il vous suffit de coller les éléments suivants dans une nouvelle cellule et de les exécuter:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Après avoir exécuté ce code, si vous cliquez sur la petite icône Dossier sur la gauche du Colab, vous pouvez accéder au dossier que vous avez exporté ci-dessus (dans le répertoire racine, vous devrez peut-être monter d'un niveau). Vous verrez alors le dossier ZIP du fichiers exportés dans ModelFiles.zip.

Téléchargez ce fichier ZIP sur votre ordinateur, car vous l'utiliserez comme dans le premier atelier de programmation:

A9D8595a3e2564dc.png

Parfait. La partie Python est terminée. Vous pouvez désormais revenir sur le terrestre JavaScript que vous connaissez et appréciez. Ouf !

5. Diffuser le nouveau modèle de machine learning

Vous êtes maintenant presque prêt à charger le modèle. Avant cela, vous devez importer les nouveaux fichiers de modèle téléchargés précédemment dans l'atelier de programmation. Ils seront donc hébergés et utilisables dans votre code.

Tout d'abord, si vous ne l'avez pas encore fait, décompressez les fichiers du modèle que vous venez de télécharger à partir du notebook Model Maker que vous venez d'exécuter. Vos fichiers doivent contenir les fichiers suivants:

5634d536ef8be9ca.png

Qu'est-ce que vous avez ici ?

  • model.json : il s'agit de l'un des fichiers qui composent le modèle TensorFlow.js entraîné. Vous devez faire référence à ce fichier spécifique dans le code JavaScript.
  • group1-shard1of1.bin : ce fichier binaire contient une grande partie des données enregistrées pour le modèle TensorFlow.js exporté. Il doit être hébergé sur votre serveur pour que vous puissiez le télécharger dans le même répertoire que model.json ci-dessus.
  • vocab : ce fichier étrange sans extension, provenant de Model Maker, nous montre comment encoder des mots dans les phrases pour que le modèle comprenne comment les utiliser. Vous aborderez ces points plus en détail dans la section suivante.
  • labels.txt : contient uniquement les noms de classes prédits par le modèle. Pour ce modèle, si vous ouvrez ce fichier dans votre éditeur de texte, il indique simplement "false" et "true" comme résultat de prédiction.

Héberger les fichiers de modèle TensorFlow.js

D'abord, placez les fichiers model.json et *.bin générés sur un serveur Web pour pouvoir y accéder via votre page Web.

Supprimer des fichiers de modèle existants

Comme vous vous basez sur le résultat final du premier atelier de la série, vous devez d'abord supprimer les fichiers de modèle existants importés. Si vous utilisez Glitch.com, consultez simplement le panneau de fichiers model.json pour group1-shard1of1.bin et cliquez sur le menu déroulant à trois points de chaque fichier, puis sélectionnez Supprimer comme indiqué ci-dessous:

7412b0b795d3b84f.png

Importer de nouveaux fichiers dans Glitch

Parfait. À présent, importez les nouveaux:

  1. Ouvrez le dossier assets dans le panneau de gauche de votre projet Glitch et supprimez tous les anciens assets importés s'ils portent les mêmes noms.
  2. Cliquez sur Importer un élément et sélectionnez group1-shard1of1.bin à importer dans ce dossier. Elle doit se présenter comme suit une fois l'importation effectuée:

25a/2251c7f165184.png

  1. Parfait. À présent, faites de même pour le fichier model.json deux fichiers qui devraient se trouver dans votre dossier d'éléments:

51a6dbd5d3097ffc.png

  1. Si vous cliquez sur le fichier group1-shard1of1.bin que vous venez d'importer, vous pourrez copier l'URL à son emplacement. Copiez ce chemin d'accès comme indiqué ci-dessous:

92ded8d46442c403.png

  1. En bas à gauche de l'écran, cliquez sur Tools > Terminal (Outils > Terminal). Attendez que la fenêtre de terminal se charge.
  2. Une fois le chargement terminé, saisissez le code suivant, puis appuyez sur Entrée pour passer au répertoire du dossier www:

terminal :

cd www
  1. Ensuite, utilisez wget pour télécharger les deux fichiers que vous venez d'importer en remplaçant les URL ci-dessous par les URL que vous avez générées pour les fichiers dans le dossier des éléments de Glitch (vérifiez le dossier des éléments pour l'URL personnalisée de chaque fichier).

Notez que l'espace entre les deux URL et que les URL que vous devrez utiliser seront différentes de celles indiquées, mais qu'elles se présenteront de la même manière:

terminal

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Bonne réponse ! Vous venez de créer une copie des fichiers importés dans le dossier www.

Cependant, ceux-ci sont actuellement téléchargés. Si vous saisissez ls dans le terminal et appuyez sur Entrée, le résultat suivant s'affiche:

9cc90f1d053f517f.png

  1. Utilisez la commande mv pour renommer les fichiers. Dans la console, saisissez ce qui suit, puis appuyez sur Entrée après chaque ligne:

terminal :

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Enfin, actualisez le projet Glitch en saisissant refresh dans le terminal, puis appuyez sur Entrée:

terminal :

refresh

Après l'actualisation, les dossiers model.json et group1-shard1of1.bin devraient s'afficher dans le dossier www de l'interface utilisateur:

50dd98c0a8f3e636.png

Parfait. La dernière étape consiste à mettre à jour le fichier dictionary.js.

  1. Convertissez votre nouveau fichier vocabulaire au format JS approprié manuellement ou via votre éditeur de texte, ou à l'aide de cet outil. Enregistrez la sortie obtenue en tant que dictionary.js dans votre dossier www. Si vous disposez déjà d'un fichier dictionary.js, il vous suffit de copier et coller le nouveau contenu dessus, puis d'enregistrer le fichier.

Excellent ! Vous avez réussi à mettre à jour tous les fichiers modifiés. Si vous essayez maintenant d'utiliser le site Web, vous remarquerez que le modèle réentraîné doit pouvoir tenir compte des cas spéciaux détectés et appris à partir de l'exemple suivant:

3ece5dbd0a673987.gif

Comme vous pouvez le constater, les six premières sont correctement identifiées comme n'étant pas du spam et le deuxième lot de six est identifié comme spam. Parfait !

Faisons le test avec des variantes pour déterminer s'il a été généralisé. À l'origine, une phrase contenant des erreurs était la suivante:

"Bon stock GOOG vient d'être mis ! Attendez trop tard !

Il est désormais correctement classé comme spam, mais que se passe-t-il si vous le modifiez:

"Les actions de XYZ viennent juste d'augmenter de leur valeur ! Achetez-en juste avant qu'il ne soit trop tard !"

Vous obtenez ici une prédiction de 98% susceptible d'être du spam, ce qui est correct même si vous avez modifié légèrement le symbole boursier et la formulation.

Bien entendu, si vous essayez vraiment de casser ce nouveau modèle, vous pourrez le faire, et il se limitera à collecter encore plus de données d'entraînement pour avoir plus de chances d'enregistrer plus de variantes uniques pour les situations courantes que vous êtes susceptible de rencontrer en ligne. Dans un prochain atelier de programmation, nous vous montrerons comment améliorer continuellement votre modèle avec les données en temps réel.

6. Félicitations !

Félicitations, vous avez réussi à réentraîner un modèle de machine learning existant pour qu'il se mette à jour dans les cas principaux que vous avez détectés et déployé dans le navigateur avec TensorFlow.js, pour une application réelle.

Résumé

Dans cet atelier de programmation, vous allez:

  1. Détection de cas spéciaux qui ne fonctionnaient pas lorsque vous utilisez le modèle de spam de commentaires prédéfini
  2. Réentraînement du modèle Model Maker pour prendre en compte les cas spéciaux que vous avez découverts
  3. Nouveau modèle entraîné exporté au format TensorFlow.js
  4. Mettre à jour votre application Web pour utiliser les nouveaux fichiers

Et ensuite ?

Cette mise à jour fonctionne donc très bien, mais comme pour n'importe quelle application Web, les modifications seront apportées au fil du temps. Il serait bien mieux que l'application s'améliore en continu plutôt que de devoir le faire manuellement à chaque fois. Pensez-vous que vous avez pu automatiser ces étapes pour entraîner automatiquement un modèle après avoir reçu, par exemple, 100 nouveaux commentaires marqués comme incorrects ? Mettez un chapeau d'ingénieur Web. Vous allez probablement découvrir comment créer un pipeline afin de le faire automatiquement. Si ce n'est pas le cas, ne vous inquiétez pas. Le prochain atelier de programmation de la série vous expliquera comment faire.

Partagez vos créations

Vous pouvez facilement étendre vos créations pour d'autres cas d'utilisation créatifs, et nous vous encourageons à sortir du lot et à pirater votre chaîne.

N'oubliez pas de nous taguer sur les réseaux sociaux à l'aide du hashtag #MadeWithTFJS, et votre projet sera peut-être mis en avant sur le blog TensorFlow ou même événements futurs. Nous serions ravis de découvrir vos créations.

Plus d'ateliers de programmation TensorFlow.js pour aller plus loin

Sites Web à consulter