Catégories
Astuces et Design

Qu'est-ce que l'apprentissage automatique? – Magazine Smashing

Dans cet épisode, nous parlons de Machine Learning. À quel type de tâches pouvons-nous le mettre dans un contexte de développement Web? Drew McLellan parle à l'expert Charlie Gerard pour le savoir.

Dans cet épisode, nous parlons de Machine Learning. À quel type de tâches pouvons-nous le mettre dans un contexte de développement Web? J'ai parlé avec l'expert Charlie Gerard pour le savoir.

Afficher les notes

Mise à jour hebdomadaire

Transcription

Photo de Charlie GerardDrew McLellan: Elle est développeur front-end senior chez Netlify, développeur Google expert en technologies Web et conférencier technique Mozilla. Dans ses temps libres, elle explore le domaine de l'interaction homme-machine et construit des prototypes interactifs à l'aide de matériel, d'apprentissage automatique et de codage créatif. Elle prend régulièrement la parole lors de conférences et rédige des articles de blog pour partager ce qu'elle apprend. Et plus récemment, est l'auteur du livre, Practical Machine Learning in JavaScript for Apress.

A dessiné: Nous savons donc qu'elle est une experte en front-end, mais a-t-elle une fois échappé à la prison en utilisant une lime métallique qu'elle avait crocheté dans ses rêves. Mes amis fracassants, soyez les bienvenus, Charlie Gerard. Salut Charlie. Comment allez-vous?

Charlie Gerard: Je fracasse.

A dessiné: Je voulais vous parler aujourd'hui de l'apprentissage automatique, ce qui peut sembler un peu étrange pour un podcast qui se concentre principalement sur le type de navigateur à la fin du développement Web. J'ai tendance à penser à l'apprentissage automatique comme à quelque chose qui se produit dans des centres de données géants ou des laboratoires avec des personnes en blouse blanche. C’est définitivement une sorte de mot à la mode de nos jours. Que diable voulons-nous dire quand nous parlons d'apprentissage automatique?

Charlie: Donc, en général, la définition standard serait de donner aux ordinateurs la possibilité de générer des prédictions sans qu'on leur dise quoi faire. J'espère que cela aura du sens lorsque nous continuerons d'en parler, mais c'est le genre de définition générique de conversation. Vous ne dites pas vraiment aux algorithmes ou aux modèles d'aller chercher certaines choses. Ils apprennent grâce aux données que vous leur donnez et peuvent ensuite générer des prédictions.

A dessiné: Donc, plutôt que d'avoir à coder spécifiquement pour certaines circonstances, vous créez en quelque sorte un cas générique où le logiciel peut apprendre à faire cela lui-même?

Charlie: Oui exactement.

A dessiné: Cela semble presque un peu effrayant. C'est en quelque sorte à la limite de ce côté de l'intelligence artificielle. Avez-vous besoin d'être un passionné de mathématiques ou un data scientist pour ce faire? Ou y a-t-il des choses comme des algorithmes établis et des choses sur lesquelles vous pouvez faire appel pour commencer?

Charlie: Ouais. Heureusement, vous n’avez pas besoin d’être un passionné de mathématiques ou un data scientist. Sinon, je ne parlerais certainement pas de cela. Mais il existe des algorithmes déjà élaborés et des outils déjà disponibles qui vous permettent d'utiliser ces algorithmes sans avoir à tout écrire vous-même. Donc, si nous utilisons l'écosystème frontal à titre de comparaison, vous pouvez utiliser des API Web, comme le navigateur, pour obtenir des médias utilisateur lorsque vous souhaitez accéder à la webcam ou au microphone.

Charlie: Et vous n'avez pas besoin de savoir comment cette API a été mise en œuvre sous le capot. Ce qui compte, c'est que vous sachiez à quoi sert cette API et comment l'utiliser, si vous le souhaitez. Ensuite, plus tard, vous pourrez consulter le code source de votre navigateur préféré pour savoir comment il fonctionne vraiment, mais ce n’est vraiment pas utile en premier lieu. Et cela peut être utile si vous souhaitez écrire votre propre algorithme plus tard. Mais pour être vraiment honnête, il est très peu probable que vous souhaitiez faire cela.

A dessiné: D'accord. C'est donc un peu comme la façon dont vous pouvez écrire du CSS pour positionner un élément sur une page. Vous ne vous souciez pas de la façon dont le navigateur fait cela. Vous écrivez simplement du CSS et le navigateur s'en charge.

Charlie: Ouais. Lorsque vous commencez, c'est surtout quelque chose comme ça.

A dessiné: C'est bon. C’est plutôt mon niveau de science des données.

Charlie: Moi aussi.

A dessiné: Quels sont donc les types de problèmes auxquels vous pouvez confronter l'apprentissage automatique? Pour quel genre de choses est-ce bon?

Charlie: Cela dépend de ce que vous voulez faire en premier lieu, car lorsque vous voulez construire une certaine chose, je vous conseille de penser d'abord au type de problème que vous voulez apprendre qui vous aidera ensuite à choisir un algorithme que vous pouvez utiliser pour résoudre ou trouver une solution à votre problème. Donc en général, je commencerais par penser au type de problème que j'essaie de résoudre, et il y en a trois principaux. Je pense qu’il y en a probablement un peu plus, mais en général, pour ce à quoi j’ai été formé et ce que j’ai lu, il y en a trois principaux qui sont mentionnés.

Charlie: Si vous voulez que j'entre dans ce domaine, il y a un apprentissage supervisé, un apprentissage non supervisé et un apprentissage par renforcement. Vous en avez aussi beaucoup supervisé, mais pour être honnête, je n’en sais pas grand chose car j’ai pu construire mes projets avec les trois premiers.

A dessiné: Supervisé, non supervisé et renforcé, avez-vous dit?

Charlie: Ouais, apprentissage par renforcement.

A dessiné: D'accord. Alors, qu'est-ce que l'apprentissage supervisé? Pouvez-vous nous donner un exemple de ce que cela signifie?

Charlie: L'apprentissage supervisé, c'est lorsque votre ensemble de données est composé d'entités et d'étiquettes et que vous le transmettez à un algorithme. Donc, si nous prenons un exemple auquel, espérons-le, la plupart des gens pourront s'identifier, c'est, si vous avez une maison et que vous voulez la vendre, et que vous voulez savoir à quel prix vous allez vendre votre maison ou votre voiture, en fait, au fait, ce serait la même chose. Et vous utiliseriez un ensemble de données de maisons dans le même environnement ou le même type de maisons et connaissant leur prix sur le marché, vous seriez en mesure d'utiliser les caractéristiques de votre propre maison; Alors, combien de pièces et y a-t-il un jardin et dans quel quartier se trouve-t-il? Et des choses dans le genre.

Charlie: Ce sont les caractéristiques et l'étiquette serait le prix, et en utilisant tous ces ensembles de données de maisons déjà autour de vous, vous pouvez utiliser un algorithme d'apprentissage automatique qui va en quelque sorte apprendre la corrélation entre les caractéristiques de votre maison et le prix sur le marché, pour ensuite obtenir les caractéristiques de votre maison et être en mesure d'en générer un prix. Donc, la chose la plus importante est dans l'apprentissage supervisé, vous avez un tas de fonctionnalités et une étiquette aussi, vous êtes donc en mesure d'établir une corrélation entre les deux.

A dessiné: Vous le feriez, vous alimenteriez le modèle avec un vaste ensemble de données sur les maisons dans cet exemple, où vous connaissez leur prix et ensuite vous connaissez toutes ces caractéristiques à leur sujet. Dites les chambres et qu'est-ce que vous avez, comme la superficie en pieds carrés, et je suppose que l'emplacement serait une autre sorte de chose qui pourrait être prise en compte?

Charlie: Ouais. C’est donc l’un des problèmes de l’apprentissage automatique, c’est que vous pouvez avoir de nombreuses fonctionnalités et que certaines ne seront pas aussi efficaces que d’autres. Ainsi, vous pourriez avoir, par exemple, la couleur de votre maison, peut-être en fait aucune corrélation avec le prix, mais vous pouvez donner un tas de fonctionnalités et le modèle lui-même trouvera une corrélation entre les deux. Vous pouvez ensuite modifier votre ensemble de données, si vous le souhaitez, et supprimer la couleur, ou vous réalisez que la taille du jardin n'a pas d'importance ou des choses comme ça.

Charlie: Ainsi, en général, même si vous alimentez votre ensemble de données dans un modèle, vous n'aurez pas une prédiction parfaite du premier coup. Habituellement, vous modifiez plusieurs choses différentes et vous voyez. Vous le modifiez en quelque sorte jusqu'à ce qu'il aboutisse à une prédiction que vous pensez assez précise.

A dessiné: Et puis une fois que ce modèle est créé, ou disons que vous l'avez créé en utilisant les données d'une ville, pourriez-vous le prendre et le nourrir… auriez-vous besoin de lui fournir des données d'une autre ville? Seriez-vous en mesure de le récupérer et de l'utiliser ailleurs une fois la formation terminée ou est-ce spécifique à cet ensemble de données ou comment cela fonctionnerait-il?

Charlie: Je pense que ce serait spécifique à l'ensemble de données. Cela signifie donc que vous pouvez créer un autre ensemble de données avec le même format, disons. Si vous avez une feuille de calcul Excel avec des colonnes différentes, vous pourrez conserver la même étiquette et les mêmes fonctionnalités, mais vous devrez la remplacer par les valeurs de cette ville. Mais en général, cela signifie que la collecte de l'ensemble de données peut également prendre beaucoup de temps, mais si vous savez déjà ce que vous avez fait pour la ville de Paris, par exemple, et que la structure de votre ensemble de données est la même, mais vous remplacez les valeurs, c'est un peu plus rapide et vous pouvez régénérer le modèle.

Charlie: Vous ne devez pas réutiliser le même modèle, si vos données sont différentes car les prix des maisons à Paris sont différents de ceux d’une petite ville d’Australie, par exemple. Vous ne voudriez donc pas avoir de mauvaises données, car le cœur de votre ensemble de données au début n'était pas exactement le même.

A dessiné: Nous parlons beaucoup de types de modèles avec apprentissage automatique. Le modèle est donc un peu comme le résultat final de toute l'analyse de l'ensemble de données. Et il est ensuite utilisé pour faire des prédictions ultérieures. C’est ça le modèle, oui?

Charlie: Oui, c’est exactement cela. C’est un modèle, donc un peu comme une fonction à laquelle vous allez alimenter de nouvelles entrées que vous n’avez jamais vues auparavant, mais en fonction de ce qu’il a appris lors de l’étape de formation. il serait capable de produire une prédiction.

A dessiné: Un apprentissage donc supervisé, puis il fait ce modèle prédictif à partir d'étiquettes sur des fonctionnalités. Qu'est-ce que l'apprentissage non supervisé?

Charlie: Donc, non supervisé, c'est un peu le même concept, mais vous supprimez les étiquettes. Donc, dans ce cas, vous pouvez penser que notre problème de vente d'une maison, ne serait pas vraiment un problème d'apprentissage non supervisé, car si vous ne connaissez que les caractéristiques des maisons qui vous entourent, mais que vous n'avez pas de prix comme étiquette, vous ne peut pas vraiment prédire un prix. Il ne saura même pas ce qu’est un prix.

Charlie: Donc, non supervisé, c'est plus lorsque vous avez un ensemble de données et que vous n'avez que des fonctionnalités à ce sujet. Vous pouvez générer plus de tendances ou de groupes de choses ensemble. Vous n’utiliserez pas l’apprentissage non supervisé si vous voulez un résultat particulier, si vous avez une certaine question, comme "Quel est le prix de ceci?" Ce n’est pas une très bonne utilisation de la fonction non supervisée, mais c’est plus, si vous voulez regrouper des entités, cela peut être des personnes ou des choses comme ça.

Charlie: Donc, généralement, un cas d'utilisation pour cela est des recommandations telles que les recommandations Amazon ou les recommandations Spotify, telles que «Les gens comme vous écoutent aussi ça», et c'est plutôt là où se trouvent les fonctionnalités dans ce cas… eh bien, ils ont des données sur vous, pour qu'ils sachent ce que vous écoutez, dans quel pays vous êtes habituellement, ou combien de fois par jour écoutez-vous quelque chose? Ainsi, en utilisant ces fonctionnalités sur les personnes, ils peuvent ensuite vous mettre dans le même cluster ou le même type d'auditeurs, ou le même type de personnes qui achètent certaines choses sur Amazon. Et en utilisant ce type d'apprentissage non supervisé, ils peuvent savoir quoi vous annoncer ou quoi recommander que vous devriez écouter en fonction de personnes comme vous. C’est donc plus ce genre de problèmes.

A dessiné: D'accord, donc tout cela a beaucoup plus de sens pour moi maintenant en tant que développeur Web, car ces types d'utilisations dont nous avons parlé, les prix et les recommandations internes, et la diffusion d'annonces et autres, en fin de compte, ce sont toutes sortes de choses avec lesquelles nous devons faire face et des fonctionnalités que nous pourrions vouloir mettre dans un site ou un produit, ou autre chose. Nous avons donc les différents types d’apprentissage basés sur le sujet que nous cherchons à prévoir. Y a-t-il d'autres types d'applications avec lesquelles nous pouvons aussi mettre cela? Y a-t-il une sorte de bons exemples que les gens ont créés et qui pourraient utiliser cela?

Charlie: Ouais. Il y a tellement d'exemples. C’est pourquoi, lorsque je parle de prédire le prix d’une maison, ce n’est peut-être pas quelque chose qui vous concerne. Ce n’est peut-être pas si excitant, mais vous pouvez en fait faire beaucoup plus. Il y a de très bons exemples. Je pense que le premier que j'ai vu concernait des textes d'art générés dynamiquement pour les images. Alors bien sûr, c'est quelque chose que vous pouvez faire vous-même lorsque vous ajoutez une image à un site.

Charlie: Mais que se passe-t-il si vous avez un site qui contient réellement des tonnes d'images, et au lieu de le faire manuellement, vous pourriez alimenter chaque image dans un algorithme d'apprentissage automatique, et cela générerait un texte d'art qui correspond à ce que cette image est, et peut-être le seule une démarche humaine serait de vérifier que c'est correct, mais cela vous permettrait vraiment de vous concentrer sur la création de l'application.

Charlie: Et vous rendriez toujours votre site Web accessible en ayant du texte d'art pour les images, mais il serait en quelque sorte généré par une machine. C’est donc l’un des exemples que j’ai vu lorsque j’ai commencé dans ce domaine, mais vous avez également un prototype de filtrage non sécuritaire pour le contenu professionnel. Et je pensais que ce serait plutôt bien dans une extension Chrome, vous pourriez avoir une extension Chrome qui, chaque fois que vous ouvrez une page Web, vous vérifieriez simplement que ce qui est sur la page est une sorte de contenu sûr.

Charlie: Par exemple, si vous avez des enfants qui utilisent votre ordinateur portable ou des choses comme ça, vous pouvez simplement masquer les images ou remplacer ces images par des pandas, si vous le souhaitez ou quelque chose du genre. Mais c'est ce genre d'application où vous pouvez utiliser l'apprentissage automatique pour faire automatiquement des choses à votre place afin que vous n'ayez pas à vous soucier de certaines tâches, ou vous pouvez simplement utiliser la puissance de votre cerveau pour faire d'autres choses.

Charlie: Mais il y a encore plus avancé avec un exemple de reconnaissance gestuelle, en utilisant la webcam qui communiquait alors avec Amazon Alexa et la reconnaissance vocale et tout ça. Ainsi, vous pouvez vraiment fusionner de nombreuses technologies différentes avec la voix, la webcam et l'apprentissage automatique pour une simple reconnaissance et pouvoir interagir avec différentes technologies, mais d'une nouvelle manière. Cela peut donc vraiment être amusant.

A dessiné: C’est assez fascinant, car nous avons examiné une sorte d’analyse de modèles de données en tant que tels, et nous envisageons maintenant d’examiner le contenu des images et d’analyser le contenu des images à l’aide de l’apprentissage automatique, ce qui est très intéressant. Je suppose que c'est le genre de fonctionnalité de Facebook, si quelqu'un publie une photo qui, à son avis, pourrait être sanglante ou montrer une blessure ou quelque chose du genre, et que cela la brouille, puis il vous suffit de cliquer pour la révéler. Ce genre de chose, évidemment, Facebook ne peut pas avoir d'équipes de modérateurs qui examinent chaque image qui est téléchargée.

Charlie: J'espère que non.

A dessiné: Ce serait une tâche sans fin.

Charlie: Ce n’est pas non plus un excellent travail.

A dessiné: J'avais l'habitude de travailler sur un site Web d'annonces gratuites où les gens pouvaient publier des annonces. Et il y avait beaucoup de modération dans cela, que même moi, en tant que développeur Web, devions m'impliquer, juste en regardant toutes ces images en disant: «Oui, non, oui, non.»

Charlie: Je l'ai fait un peu aussi. J'aurais aimé qu'à cette époque il y ait eu l'apprentissage automatique, juste un petit outil utilitaire juste pour le faire pour moi, et maintenant il est là. Alors c’est plutôt cool.

A dessiné: Ouais, c’est vraiment super. Et c'est assez excitant de penser à l'entrée en direct d'une webcam et de pouvoir en quelque sorte analyser cela en temps réel, afin que vous puissiez faire des interactions basées sur les gestes. Est-ce…

Charlie: Oui, donc au fond, il utilise en fait plus de classification d'image, car votre webcam, une image est un ensemble de pixels, mais alors que vous faites certains gestes, vous pouvez entraîner un modèle à reconnaître que votre main droite est levée et peut-être que vous contrôleriez la souris comme ça, ou elle regarderait la coordonnée de votre main et de l'écran, et vous suivriez la souris. Vous pouvez vraiment faire ce que vous voulez. Vous pourriez peut-être avoir une reconnaissance des couleurs.

Charlie: Vous pouvez faire des choses vraiment amusantes. Un prototype que j'ai construit, que j'ai en quelque sorte abandonné à un moment donné, mais j'ai construit un peu … Je voulais que ce soit une extension Chrome, mais cela n'a pas fonctionné. J'ai créé une petite application de bureau avec Electron. Aussi en JavaScript où je pouvais parcourir une page Web simplement en inclinant la tête. Donc, il reconnaîtrait que lorsque j'incline la tête vers le bas, alors ça défile vers le bas, et quand je monte, ça monte. C'était juste ce genre de petites expériences où je pensais: "Eh bien, si je peux ensuite le transformer en une extension Chrome, cela pourrait être utile pour certaines personnes."

Charlie: Même si vous mangez juste devant votre ordinateur et que vous lisez les actualités et que je ne veux pas que mon clavier soit sale, alors je peux simplement incliner la tête, mais j'espère aussi que pour l'accessibilité, cela pourrait réellement aider les gens naviguent sur certaines pages Web ou des choses comme ça. Il existe de nombreux outils disponibles et il s'agit de l'idée que vous pouvez proposer d'observer la situation autour de vous, et comment pouvez-vous résoudre certains de ces problèmes liés à l'utilisation de l'apprentissage automatique?

A dessiné: Pour le machine learning, on pense souvent aux langages, Python. Je pense que c’est là qu’une grande partie du développement semble se produire en premier. Mais en tant que développeurs Web, nous sommes évidemment plus à l'aise avec JavaScript en général. L'apprentissage automatique est-il quelque chose que nous pouvons raisonnablement espérer faire? Je veux dire que les petits exemples amusants sont une chose, mais est-ce vraiment utile pour un vrai travail en JavaScript?

Charlie: Eh bien, je veux dire, je pense que oui, mais je sais que la plupart des choses que je fais sont des prototypes, mais je pense que cela dépend de la situation dans laquelle vous vous trouvez au travail. Il existe des moyens d'implémenter l'apprentissage automatique en tant que développeur dans votre travail quotidien. Mais ce que j'aime vraiment à propos de JavaScript, c'est le fait que si vous êtes déjà un développeur front-end, vous n'avez pas à apprendre un nouvel écosystème ou un nouvel ensemble d'outils ou une nouvelle syntaxe, un nouveau langage. Vous êtes déjà dans votre environnement dans lequel vous travaillez tous les jours.

Charlie: Habituellement, lorsque vous apprenez ce genre de choses, vous devez en quelque sorte commencer à votre rythme, si ce n’est pas votre travail quotidien et que le temps de tout le monde est précieux et que vous n’en avez pas beaucoup. Donc, si vous pouvez supprimer certaines barrières et rester dans le même écosystème que vous connaissez, alors je pense que c'est plutôt bien, mais vous pouvez aussi commencer … le pouvoir de JavaScript, c'est que vous pouvez commencer par construire un petit prototype pour convaincre les gens que peut-être qu'il y a une idée qui doit être étudiée, et en étant capable de lancer quelque chose rapidement en JavaScript, vous pouvez valider que votre idée est juste.

Charlie: Ensuite, soit vous pouvez obtenir l'adhésion de la direction pour consacrer plus de temps ou plus d'argent, soit vous pouvez ensuite donner cela aux développeurs Python, si vous souhaitez le construire en Python. Mais pour moi, cette capacité à valider rapidement une idée est super importante. Surtout, peut-être que si vous travaillez pour une startup et que tout va vite et que vous êtes en mesure de montrer que quelque chose vaut la peine d’être examiné, je pense que c’est assez important.

Charlie: Et aussi le fait qu'il existe vraiment un grand écosystème d'outils et qu'il y a de plus en plus de frameworks et d'applications de machine learning. En JavaScript, ce n'est pas seulement sur une page Web que nous pouvons ajouter du machine learning. Comme je le disais auparavant, vous pouvez créer des extensions Chrome et des applications de bureau avec Electron, et des applications mobiles avec React Native, et du matériel et de l'IoT avec des frameworks comme Johnny-Five.

Charlie: Donc, avec le langage que vous connaissez déjà, vous avez en fait accès à un énorme écosystème de différentes plates-formes sur lesquelles vous pouvez exécuter la même expérience. Et je pense que, pour moi, c’est assez incroyable. Et c'est là que je vois la réelle puissance de l'apprentissage automatique en JavaScript. Et au fur et à mesure que cela s'améliore, vous pourrez peut-être vraiment l'intégrer dans les applications que nous créons tous les jours.

A dessiné: JavaScript est partout, n'est-ce pas?

Charlie: Oui.

A dessiné: Pour le meilleur ou pour le pire, il est partout. Qui aurait cru? Cela sonne bien, mais cela ressemble aussi à beaucoup de travail. Et je pense aux ensembles de données et aux choses, comment diable commencez-vous à faire ce genre de tâches?

Charlie: Il y a pour le moment, au moins avec TensorFlow.JS, il y a trois choses que vous pouvez faire avec le framework. Et disons que le plus simple consiste à importer un modèle pré-entraîné existant. Donc, il y en a quelques-uns, il y a différents modèles qui ont été formés avec différents ensembles de données, et je recommanderais de commencer par cela parce que vous, vous pouvez apprendre les bases sur la façon d'utiliser le framework lui-même et ce que vous pouvez faire avec ces modèles.

Charlie: Vous disposez donc de certains modèles de reconnaissance d'image qui ont été formés avec différentes images. Certains d'entre eux sont meilleurs pour la reconnaissance d'objets. Certains d'entre eux sont meilleurs pour la reconnaissance des personnes, et en comprenant quels modèles utiliser, nous pouvons alors être libres de construire ce que vous voulez dans la contrainte de ce modèle.

Charlie: Mais je pense que c’est une bonne façon de commencer. J'utilise toujours des modèles pré-entraînés pour beaucoup de mes expériences, car c'est aussi, pourquoi réinventeriez-vous la roue si elle est déjà là? Utilisons simplement les outils fournis. Ensuite, lorsque vous voulez aller plus loin, peut-être un peu plus loin, vous pouvez faire ce qu'on appelle l'apprentissage par transfert, lorsque vous reconvertissez un modèle important. Vous utilisez donc toujours l'un des modèles pré-entraînés, mais vous avez ensuite la possibilité de le recycler en direct avec vos propres échantillons.

Charlie: Par exemple, si vous souhaitez utiliser une classification d'images dans laquelle vous avez différentes personnes, vous souhaitez peut-être effectuer une classification par gestes. Si votre modèle, par exemple, est formé avec des personnes qui ont toujours, je ne sais pas, leur main droite ou quelque chose du genre, mais pour votre application, vous voulez la main gauche, vous pouvez recycler ce modèle avec vos échantillons de la gauche main, et vous auriez alors un modèle qui est déjà assez entraîné pour reconnaître la main droite, mais ensuite vous ajouteriez votre propre échantillon et vous pourrez le recycler assez rapidement dans le navigateur, en fonction de la quantité de nouvelles données d'entrée que vous lui donnez , cela prend un peu de temps, mais en quelques secondes, vous avez un modèle recyclé qui est très bon pour reconnaître ces deux gestes que vous pouvez ensuite utiliser dans, dans votre application.

Charlie: C’est donc généralement la deuxième étape. Et puis, une troisième étape un peu plus complexe consiste à tout faire dans le navigateur. Donc, vous écrivez votre propre modèle à partir de zéro et vous l'entraînez dans le navigateur et vous vraiment entraînez et exécutez et générez le modèle, tout dans le navigateur. Mais en général, la seule application que j'ai vue pour cela est la création de visualisations. Lorsque vous souhaitez visualiser le processus d'un modèle en cours d'entraînement et le nombre d'étapes qu'il prend, combien de temps cela prend, et vous pouvez voir la précision augmenter ou diminuer, en fonction des fonctionnalités que vous choisissez et des paramètres que vous modifiez .

Charlie: Donc je n'ai pas vraiment joué avec celui-là parce que je n'ai pas trouvé d'application pour moi avec laquelle je voulais construire, mais les deux premières étapes consistant à utiliser uniquement le modèle pré-entraîné ou à le recycler avec mes propres échantillons sont là pour moi J'ai vu. Je me suis amusé avec ça.

A dessiné: Il s'agira donc généralement de créer le modèle à l'avance, en quelque sorte hors ligne, puis le navigateur utilise ensuite ce modèle entraîné, ou peut-être en ajoute un peu, il fait un peu de recyclage, mais généralement, ce modèle va-t-il être établi avant d'être mis en service dans le navigateur de l'utilisateur?

Charlie: En général, oui. Ensuite, vous pouvez certainement créer votre propre modèle. Si vous le faites, je ne recommanderais pas de l'entraîner dans le navigateur, mais vous pouvez également le faire dans NodeJS. Si vous savez, un peu de NodeJS. J'ai certainement créé mes propres modèles, mais je les exécute généralement dans NodeJS car il est un peu plus performant. Et puis j'utilise le modèle généré que j'ai créé ensuite dans le navigateur.

A dessiné: Quels outils sont disponibles pour faire cela avec JavaScript? Vous avez mentionné TensorFlow JS mais qu'est-ce que c'est, où est-ce? Est-ce que c'est de Google?

Charlie: Oui. Au début, Google avait l'outil TensorFlow en Python et maintenant, depuis quelques années peut-être, peut-être un peu plus, ils ont créé la version JavaScript, donc cela a tendance à suivre JS. Mais il y a aussi ML5 JS qui est un peu une abstraction en plus. Donc, si vous êtes un peu confus ou si TensorFlow JS semble un peu effrayant avec une partie du vocabulaire qu'ils utilisent dans leur documentation, vous pouvez utiliser ML5 JS qui a la plupart des mêmes fonctionnalités, mais disons que l'API ou la syntaxe est un peu plus convivial pour les débutants.

Charlie: Vous pouvez commencer avec ML5, voir si vous aimez l'apprentissage automatique, ou si vous pensez à une application cool, puis si vous avez peut-être des bloqueurs dans ML5 ou si le framework n'a pas certaines choses que vous voulez faire, vous pouvez alors passez à TensorFlow JS si vous le souhaitez. Et si vous n'êtes vraiment pas intéressé à écrire votre propre code mais que vous souhaitez simplement utiliser des outils qui sont déjà là, il existe des API d'Amazon, Google et Microsoft pour faire de la reconnaissance d'image ou de la reconnaissance vocale. Donc, si vous êtes plus intéressé par ce qu'il peut faire, mais que vous ne voulez pas passer trop de temps à écrire le code, vous pouvez envoyer un ping à certaines API et essayer certains de leurs outils également.

A dessiné: C’est assez intéressant. Vous pouvez donc peut-être utiliser le navigateur pour capturer les entrées d'une webcam ou d'un microphone ou autre, puis l'envoyer à Amazon, Microsoft ou à qui que ce soit, puis les laisser faire le travail acharné?

Charlie: Ouais.

A dessiné: Et puis vous profitez simplement des résultats.

Charlie: Exactement.

A dessiné: Cela semble être une manière agréable et tentante de commencer avec les idées. Cela sonne bien, mais à quels problèmes pouvons-nous appliquer cela dans le front-end? Nous avons parlé de quelques petites choses, mais y a-t-il d'autres façons de mettre cela à profit?

Charlie: Il existe de nombreuses façons. Si je commence par la classification des images, oui, vous pourriez. Vous pouvez utiliser des images du Web ou de la webcam sur votre téléphone. Si vous utilisez simplement votre site Web sur votre téléphone et que vous pouvez prendre des photos et reconnaître des objets, et soit faire… Une petite chose que j'ai construite était autour du recyclage, où si je ne sais pas vraiment où mettre certains objets dans quelle poubelle, nous ayez le bac jaune, le vert, cela dépend des pays. Ils ont des couleurs différentes, mais parfois je ne sais pas vraiment où lancer les choses afin que vous puissiez construire de petits outils comme celui-ci, en direct peut reconnaître deux objets devant vous, puis les classer et vous pouvez construire certaines choses comme ce.

Charlie: Sinon, vous avez une classification de texte où, plus tôt cette année, j'ai utilisé l'un des modèles TensorFlow GS pour examiner les commentaires écrits sur, les problèmes GitHub et les PR GitHub pour ensuite les classer et dire: «Hé, si c'est un commentaire toxique, alors vous avez un petit robot qui dit: «Hé, peut-être que tu n'aurais pas dû écrire ça» ou «Attention, c'est un peu toxique. Nous voulons que ce soit un espace sûr. »» Vous pouvez donc utiliser une classification de texte comme ça.

Charlie: Il y a une classification sonore si vous voulez, où quand Apple a sorti sa nouvelle montre, OS, ils avaient quelque chose pour reconnaître le bruit de l'eau courante, dire aux gens, se laver les mains pendant 20 secondes avec la pandémie COVID, mais vous pouvez le faire en JavaScript également. Et ce qui était vraiment intéressant, je regardais certaines des vidéos et je me suis dit: "Oh, je sais comment faire cela en JavaScript."

Charlie: Et j'ai construit un petit prototype. Je ne sais pas s'il fonctionne sur la montre Apple. Peut être. Je n’en ai pas, mais je sais qu’il fonctionne sur mon téléphone et mon ordinateur portable. Et puis, cela peut également lancer des idées pour d'autres personnes, où un de mes amis, Ramón Huidobro, @hola_soy_milk sur Twitter. Il a participé à de nombreuses conférences en ligne cette année. Et l'un de ses problèmes est que lorsqu'il applaudit pour applaudir quelqu'un, il n'a pas le temps d'ajouter également les emoji clap sur le chat. Et ce qu'il voulait faire, c'est écouter le son de ses applaudissements et cela enverrait automatiquement des emojis d'applaudissements dans le chat.

Charlie: Et ce sont de petites choses comme celles-ci que si vous voulez une application peut-être vraiment plus utile dans votre travail quotidien, il s'agit de la prélecture prédictive. Cela utilise également l'apprentissage automatique dans le front-end pour analyser les analyses de votre site Web. Alors, quelles pages sont généralement consultées, après quoi, et des choses comme ça. Vous pouvez pré-extraire les ressources à l'avance en fonction de la page la plus susceptible d'être visitée après. C’est quelque chose sur lequel j’avais envie de me pencher toute l’année, mais je n’ai pas eu le temps, mais cela vous permet d’améliorer réellement les performances et l’exploitation de votre page. Et vous ne demandez pas de ressources dont vous n’auriez pas besoin, pour que cela puisse vraiment s’améliorer, et c’est aussi une application du machine learning.

Charlie: Vous pouvez donc faire des choses amusantes ou faire des choses plus utiles, mais il n’ya pas de mauvaise application, il peut y avoir de mauvaises applications. Je le reprends, mais je dis juste que si vous vous lancez vraiment dans le jeu, il n'y a rien de mal à commencer par quelque chose d'amusant, et ensuite je peux donner quelques idées de quelque chose que vous pouvez faire au travail en tant que bien.

A dessiné: Je suppose que la chose vraiment utile ici est de savoir que ces choses sont possibles. Et en fait, des moyens créatifs de résoudre les problèmes que nous pouvons résoudre seuls. Traditionnellement, nous construisions des choses en modérant le contenu soumis par les utilisateurs, et c'était assez primitif et nous avons essentiellement dû demander aux êtres humains de regarder les choses et de prendre des décisions à leur sujet. Mais avec l'accès à l'apprentissage automatique, dans cet exemple, nous pourrions en transmettre davantage, puis demander aux humains de regarder les cas extrêmes, par exemple, des choses qui n'avaient pas de correspondance convaincante.

A dessiné: Bien sûr, ce sera alors un peu de temps pour développer cette chose et la mettre en place, mais ensuite vous pensez aux économies de ne pas avoir des êtres humains qui vérifient manuellement les choses. À quelles fins voyez-vous que cela sera utilisé à l'avenir à mesure que la technologie s'améliorera?

Charlie: Pour moi, peut-être dans le futur, je pense que, à mesure que les modèles deviennent plus petits à charger et qu'ils deviennent plus performants, nous améliorons probablement les ensembles de données avec lesquels ils sont entraînés. J'espère pouvoir voir des outils plus utiles. Je veux dire, personnellement, je suis intéressé par ces minuscules modèles d'apprentissage automatique qui peuvent fonctionner sur des microcontrôleurs pour créer des éléments. Mais si nous restons plus dans le monde frontal, j'espère peut-être une meilleure reconnaissance vocale car j'ai l'impression que nous sommes habitués à naviguer sur le Web avec un pavé tactile ou un clavier, mais pour le moment, il y a encore une reconnaissance vocale, mais ce n'est pas toujours super précis, ou ce n'est pas précis avec les accents, par exemple. Et j'espère qu'au fur et à mesure que nous développons de meilleurs modèles, les petits utilisateurs n'auront pas peur de l'ajouter à leur site Web, car cela n'aura pas un impact négatif sur les performances.

Charlie: Je suis intéressé à utiliser l'apprentissage automatique dans des domaines tels que la prélecture prédictive afin que nous puissions créer des sites Web plus intelligents qui améliorent l'expérience sur un spectre, car pour les utilisateurs, c'est mieux parce que la page va se charger plus rapidement, donc les performances en général de votre site, c'est mieux. Mais disons aussi que si nous pensons à la durabilité, le fait de ne pas demander de ressources inutiles contribue également à l’empreinte carbone de votre site Web. Mais il y a aussi l'empreinte carbone des modèles d'apprentissage automatique. Ce n’est pas très bon. Alors peut-être ne parlons pas de ça. Je pense que pour l'avenir, j'espère juste avoir des modèles peut-être plus performants ou plus petits afin que les gens soient plus susceptibles d'essayer, car disons qu'il y aura moins de bloqueurs pour que les gens se lancent dans ce domaine. , mais voyons voir.

A dessiné: Existe-t-il des limitations et des contraintes connues dont nous devons être conscients avant de nous lancer dans un projet d'apprentissage automatique?

Charlie: Ouais. Il y a. Je pense que, peu importe si vous le faites en JavaScript ou en Python, il y a des limites. Je pense que si vous voulez créer quelque chose, qui est très personnalisé, pour lequel il n’existe pas de modèle pré-entraîné, l’une des limites est que vous pourriez avoir besoin de beaucoup de données et que tout le monde n’en a pas. Donc, si vous faites quelque chose par vous-même en tant que projet parallèle et que vous ne trouvez pas l'ensemble de données, il vous faudrait en fait assez de temps pour en obtenir un qui vous permette de générer de bonnes prédictions. Vous pouvez créer un petit ensemble de données, mais vous ne pourrez pas le pousser en production ou autre si vous ne disposez pas réellement d'un ensemble de données suffisamment cohérent. Je pense donc que la quantité de données dont vous avez besoin, la formation des modèles peut prendre beaucoup de temps.

Charlie: Cela dépend de la quantité de données que vous alimentez, mais en fonction de l'application avec laquelle vous souhaitez la construire, vous devez être conscient que cela peut prendre beaucoup de temps. Je me souviens quand j'ai commencé et que je le faisais en Python et que je voulais… J'ai oublié ce que je voulais faire, mais mon modèle fonctionnait, il s'entraînait pendant huit heures. Et à la fin, il m'a dit qu'il avait échoué à cause de quelque chose. Et je me suis dit: "Tu me dis ça à la fin, après huit heures", donc ça peut être un peu frustrant et ça peut encore être expérimental et il faut être à l'aise avec le fait que ce n'est pas une science pure, pas tout est toujours précis.

Charlie: Pour le moment, comme certains modèles le sont encore, ils peuvent faire quelques mégaoctets, si vous construisez quelque chose que vous savez, qui sera probablement vu sur un écran mobile, vous voudrez peut-être prendre en compte le fait que, eh bien , vous ne voulez pas charger toutes ces données sur le réseau 4G. Vous voudrez peut-être avertir les gens qu'ils doivent être connectés au Wi-Fi ou à l'utilisation de la batterie, ou le type de téléphone ne peut pas vraiment gérer tout cela également. Et puis plus sérieusement en termes de responsabilité, vous devez comprendre pourquoi votre modèle a prédit certaines choses. Et cela peut être difficile car le modèle est une boîte noire. C’est une fonction dont vous ne savez pas vraiment ce qu’il contient. Vous savez ce qu'il a prédit et en fonction de ce que vous construisez, s'il prend certaines décisions, je ne sais pas, qui obtient un prêt ou qui va en prison, en fonction de quoi que ce soit, vous voulez être en mesure d'expliquer comment vous arrivé à cette décision.

Charlie: Si vous décidiez d’utiliser l’apprentissage automatique pour faire abstraction d’une partie du travail, cela ne serait pas fait par des personnes. Cela peut être assez dangereux, vous devez donc savoir ce que vous faites, et en fin de compte, rappelez-vous simplement que ce n’est pas parfait. Je pense que les gens supposent parfois que parce que nous parlons d'intelligence artificielle est tout aussi intelligent que les gens, mais non, ce sont toujours des ordinateurs. Ce sont toujours des données qui leur sont données et elles constituent des prédictions et nous y faisons confiance, ce qui est effrayant. Mais oui, c'est quelques-unes des limites.

A dessiné: Oui. Je suppose que cela peut sembler intelligent, mais cela reste artificiel. Ces derniers temps, il y a eu des cas assez médiatisés, en particulier dans le domaine de l'apprentissage automatique avec la reconnaissance d'images, qui ont soulevé des problèmes de biais dans l'apprentissage automatique, par exemple, un modèle ne détectant les humains que s'ils ont la peau claire. Y a-t-il des considérations éthiques que nous devrions faire ici?

Charlie: Pour moi, cela semble être un aspect vraiment intéressant de l'apprentissage automatique. Et c’est aussi pourquoi, avant de dire cela, rappelez-vous que ce n’est pas parfait. Parfois, j’ai l’impression que les gens pensent que la machine a raison et sait tout par elle-même, mais c’est toujours quelque chose que nous programmons. Et lorsqu'un algorithme produit ou génère un résultat biaisé, l'algorithme ne génère que des éléments basés sur les données qui lui ont été fournies auparavant. Ainsi, un algorithme lui-même ou un modèle ne connaîtra pas la différence dans la société entre les personnes à la peau claire et les personnes à la peau foncée. Il ne sait pas et il s'en moque. La seule chose qu’elle sait, c’est que j’ai reçu des photos de certaines personnes et que je vais juste générer des images en fonction de ce que je sais.

Charlie: Et l'ensemble de données qui est donné à l'algorithme est en général généré par nous, par des personnes. Ce n'est peut-être pas le développeur qui utilise le modèle, mais à un moment donné, quelqu'un a créé un ensemble de données. Et je pense qu’il est important de se rappeler que nous sommes responsables de nous assurer que les prévisions générées sont aussi justes que possible et aussi impartiales que possible. Et cela crée alors des questions intéressantes, car alors vous pouvez entrer dans: «Eh bien, qu'est-ce qui est juste pour les gens?» ou si nous pensons à mon exemple de l'action GitHub que j'ai créée pour examiner les commentaires toxiques, eh bien, peut-être que ce que je pense être toxique n'est pas la même chose que ce que les autres pensent être toxique.

Charlie: C'est intéressant. Il existe une collection vraiment intéressante de vidéos du MIT Media Lab sur l'éthique et la gouvernance de l'intelligence artificielle, et je trouve cela fascinant car il ne s'agit pas de dire aux gens: «Oh, vous êtes une mauvaise personne parce que vous avez utilisé un algorithme biaisé». ou "Vous êtes une mauvaise personne parce que vous avez produit un modèle biaisé." Il s'agit plutôt de soulever certaines questions et de vous aider à réaliser: «Eh bien, en fait, peut-être que je pourrais être meilleur», parce que cette surface dit: «Oui, j'ai oublié d'ajouter diverses personnes à mon ensemble de données. Laissez-moi résoudre ce problème. Il ne s’agit pas vraiment de dire: «N'utilisons plus jamais ce modèle.» Il suffit de le recycler. Réalisez que: «Oh, j'ai oublié ceci. Je peux le recycler et nous pouvons l'améliorer. » Et c’est quelque chose que je trouve vraiment intéressant.

Charlie: Et vous avez des entreprises qui essaient vraiment d'améliorer cela. Lorsque le problème de Google qui traduisait certaines langues neutres en langues sexuées, et tout d'un coup, l'ingénieur était un homme et le cuisinier était une femme. Maintenant, ils savent qu'ils ont vraiment retravaillé là-dessus et que c'est beaucoup plus impartial et ils utilisent également le pronom «ils». Ils essaient aussi vraiment de l'améliorer, mais il y a aussi des trucs bizarres où je pense qu'IBM avait créé un ensemble de données appelé Diversity in Faces, qui était censé être l'un des très rares que j'ai dit à avoir en fait un spectre diversifié de personnes. Mais quand j'ai essayé de le trouver pour l'utiliser, il n'est plus disponible. Alors je me dis: «Oh, tu as eu cette bonne initiative. Vous essayez de faire mieux que beaucoup d'autres personnes, et maintenant les gens vont vraiment l'utiliser. » Je ne sais pas, mais je pense que la question est vraiment fascinante car il peut vraiment nous aider à nous améliorer. Et puis, nous améliorons également l'outil que nous utilisons.

A dessiné: Je suppose qu'il vaut la peine d'être vraiment prudent d'être équilibré et d'être diversifié lors de la sélection des données pour les modèles de formation. Je suppose que c’est de cela qu’il s’agit, n’est-ce pas?

Charlie: Ouais. Eh bien, je veux dire, vous créez un outil pour le public, en général, non? Si c'est un outil que tout le monde peut utiliser, il doit refléter tout le monde vraiment, ou vous devez être très clair et dire: «Cet outil ne peut être utilisé que par ces personnes parce que le modèle a été formé de cette façon, mais ce n'est pas vraiment ce que nous devrions faire." Je comprends que parfois, si vous n’y avez jamais pensé, cela peut être je ne sais pas, vous pouvez le voir comme un fardeau. Je déteste que les gens pensent de cette façon, mais c'est aussi, si vous passiez tout ce temps, peut-être à écrire votre propre algorithme ou à générer votre propre modèle et à faire tout ce travail, vous ne pouvez pas me dire que trouver des données diverses le jeu est la partie la plus difficile. Je ne pense pas que ce serait le cas. J'ai donc bon espoir, et je pense qu'au fur et à mesure que de plus en plus de gens soulèvent des inquiétudes à ce sujet, et je pense que les gens regardent cet espace, ce qui est vraiment bien parce que si les entreprises ne le font pas, elles le feront si nous leur disons que c'est Pas vrai. Et si vous voulez l'adoption de modèles d'apprentissage automatique, vous devez vous assurer que tout le monde peut les utiliser.

A dessiné: Parmi les différents outils disponibles pour faire du machine learning en JavaScript, vous avez beaucoup travaillé avec TensorFlow JS et vous avez écrit un livre à ce sujet. Parlez-nous de votre livre.

Charlie: Oui je l'ai fait. J'ai écrit un livre cette année sur TensorFlow JS. Donc, pour aider les développeurs JavaScript à en savoir plus sur l'apprentissage automatique et à mieux le comprendre. Et je pense que l'objectif principal de ce livre était d'aider les gens à se plonger dans l'apprentissage automatique, mais en le rendant moins effrayant, car je sais qu'au début j'ai pensé à l'apprentissage automatique comme à cette grande chose, complètement différente du développement Web que je ne ferais jamais rien comprendre. Je ne pensais pas que je devrais écrire mes propres algorithmes et vraiment comprendre les mathématiques. Et en me plongeant dans cela au cours des deux dernières années et demie, je me suis rendu compte que ce n’était pas vraiment comme ça. Et j'espérais que l'écriture de ce livre pourrait aussi aider les gens à réaliser qu'ils peuvent le faire et ce qui peut être fait.

Charlie: Et il y a aussi quelques projets que vous pouvez vraiment mettre en pratique ce que vous apprenez, mais il était vraiment destiné aux personnes qui n'ont pas encore vraiment étudié le ML ou qui sont simplement curieuses d'en savoir plus. Je ne plonge pas vraiment dans les algorithmes comme le code source des algorithmes, mais c'est vraiment plus révélateur aux gens, en essayant de comprendre ce que fait un algorithme et lequel utiliser et pour quoi. Un peu de ce dont nous venons de parler, mais cela explique le contenu de manière claire, donc j'espère que c'est moins effrayant et que les gens veulent, espérons-le, plonger un peu plus dans le sujet.

A dessiné: Il s’appelle donc Practical Machine Learning In JavaScript et est disponible sur Apress, et nous allons le relier dans les notes de l’émission. J'ai donc tout appris sur le machine learning aujourd'hui. Qu'est-ce que tu as appris dernièrement, Charlie?

Charlie: Disons qu’une chose dans laquelle je me penche et qui est liée à l’apprentissage automatique ou que j’utiliserai avec elle, mais c’est le traitement numérique du signal que je souhaite utiliser avec l’apprentissage automatique. Comme nous avons parlé du fait que l'apprentissage automatique a besoin de beaucoup de données, si vous souhaitez créer vos propres modèles, vous devez parfois filtrer vos données pour obtenir la bonne prédiction. Et si nous y réfléchissons, pensons aux écouteurs à réduction de bruit. Dans votre vie de tous les jours, vous avez beaucoup de bruit autour de vous. Supposons que vous essayez de regarder une vidéo dans le train et que des gens parlent autour de vous, et que le train retentit. Et ce sur quoi vous voulez vous concentrer, c'est le son de la vidéo.

Charlie: Avec le traitement numérique du signal, ce serait un peu comme vos écouteurs à réduction de bruit, où il y a du bruit autour duquel vous ne vous souciez pas. Il y a donc certaines données que vous ne voulez pas écouter, et les écouteurs à réduction de bruit vous permettent de vous concentrer sur le son provenant de la vidéo sur votre téléphone, de sorte que vous puissiez vraiment écouter et vous concentrer sur cela. Ce que je fais avec le traitement numérique du signal, c’est que j’ai un tas de données provenant d’un matériel, comme un Arduino, mais je sais qu’il y en a beaucoup dont je ne me soucie peut-être pas. Je veux filtrer les choses qui ne m'intéressent pas, afin que je puisse ensuite transmettre cela à un modèle et obtenir de meilleures prédictions sur les gestes ou des choses comme ça. Vous avez donc votre signal de données que vous pouvez soit transformer, soit filtrer.

Charlie: C'est comme si vous utilisez l'API Web pour obtenir le son de votre microphone, vous pouvez soit voir les tableaux de nombres sur vos outils de développement, soit le transformer en spectrogramme pour voir l'image du son. Et c’est un peu de ça. Pour avoir une meilleure prédiction des gestes en fonction des données matérielles, je peux transformer ce signal. Je voulais faire ça depuis quelques années, mais c’est quelque chose dont je ne sais rien. Cela prend du temps à apprendre, mais maintenant que j'en connais un peu plus sur le côté de l'apprentissage automatique, je peux apprendre le côté du traitement numérique et j'y arrive. J'aime ce moment où je me dis: "Oh, je commence à comprendre parce que j'y ai passé tout ce temps." Et oui, c’est, c’est vraiment intéressant. Je vais vous laisser aller un peu.

A dessiné: Charlie, tu es vraiment un nerd. Si vous, cher auditeur, souhaitez en savoir plus sur Charlie, vous pouvez la trouver sur Twitter, où elle est @devdevcharlie et son site Web personnel comprend des liens vers de nombreuses expériences et projets, et cela vaut vraiment la peine de vérifier sur charliegerard.dev. Son livre Practical Machine Learning In JavaScript est maintenant disponible, et nous y renverrons un lien dans les notes de l'émission. Merci de nous rejoindre aujourd'hui. Charlie, avez-vous des mots d'adieu?

Charlie: N'oubliez pas de vous amuser. Nous avons beaucoup parlé aujourd'hui de choses amusantes, puis de choses pratiques, mais si vous êtes prêt à vous pencher sur cela, n'oubliez pas de vous amuser, peu importe ce que vous décidez de construire.

Éditorial fracassant(il)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *