Comment former un modèle de base ML pour une application iOS

Ce que vous allez créer

Core ML permet aux développeurs iOS d'ajouter facilement un apprentissage approfondi de la machine à leurs applications. Dans cet article, je vais vous montrer comment former un modèle Core ML pour en tirer des informations intelligentes..

L’apprentissage automatique a sans aucun doute été l’un des sujets les plus en vogue de l’année écoulée, des entreprises de toutes sortes essayant de rendre leurs produits plus intelligents afin d’améliorer les expériences des utilisateurs et de différencier leurs offres. L'année dernière, Google a investi entre 20 et 30 milliards d'euros en intelligence artificielle, selon l'état de machine d'apprentissage et d'intelligence artificielle de McKinsey, 2017. 

AI est en train de devenir une course aux brevets et à la propriété intellectuelle (IP) parmi les plus grandes entreprises technologiques du monde… Le rapport cite de nombreux exemples de développement interne, notamment les investissements d'Amazon dans la robotique et la reconnaissance vocale, et Salesforce dans les agents virtuels et l'apprentissage automatique. BMW, Tesla et Toyota sont en tête des constructeurs automobiles dans leurs investissements en robotique et en apprentissage automatique destinés aux voitures sans conducteur. Toyota prévoit d'investir 1 milliard de dollars dans la création d'un nouvel institut de recherche consacré à l'IA pour la robotique et les véhicules sans conducteur. (source: Forbes)

Apple n'échappe pas à cette tendance, ayant utilisé l'apprentissage automatique dans ses propres applications. Par exemple, l'application Photos pour iOS peut reconnaître les visages, les objets et les points de repère, et Siri en déduit l'intention et la signification à partir de la parole. Les messages pour iOS suggèrent et prédisent intelligemment les mots en fonction des comportements précédents des utilisateurs.. 

Dans ce didacticiel, vous apprendrez à appliquer des algorithmes d'apprentissage automatique à un ensemble de données d'apprentissage afin de créer un modèle expérimenté qui établira par la suite des prédictions basées sur de nouvelles entrées. Tout cela grâce au nouveau framework Core ML d'Apple. 

Objectifs de ce tutoriel

Ce tutoriel vous présentera un sous-ensemble d'apprentissage automatique. Vous formerez et intégrerez un modèle d'apprentissage automatique dans une application iOS simple, à l'aide d'un framework d'algorithmes d'apprentissage approfondi populaire. Dans ce tutoriel, vous allez:

  • apprendre quelques concepts de base d'apprentissage machine 
  • formez votre modèle en utilisant des exemples de données
  • intégrer le modèle formé dans une application iOS

Après avoir étudié la théorie de la PNL, nous mettrons nos connaissances en pratique en analysant des messages Twitter via un simple client Twitter. Allez-y, clonez le dépôt GitHub du tutoriel et jetez un coup d'œil à la version finale de l'application que nous allons créer à partir de zéro.. 

Connaissance supposée

Ce tutoriel suppose que vous êtes un développeur iOS chevronné, mais bien que vous utilisiez l'apprentissage automatique, vous n'avez pas besoin de connaissances en la matière. Vous allez utiliser un peu de Python pour créer votre modèle expérimenté, mais vous pouvez suivre l'exemple du tutoriel sans connaissance préalable de Python.. 

Apprentissage automatique 101

L'apprentissage automatique a pour objectif qu'un ordinateur effectue des tâches sans être explicitement programmé pour le faire, c'est-à-dire la capacité de penser ou d'interpréter de manière autonome. La conduite autonome est un cas d'utilisation contemporain de premier plan: elle permet aux voitures d'interpréter visuellement leur environnement et de conduire sans aide.. 

Aujourd'hui, les grandes entreprises tirent parti de l'apprentissage automatique pour prendre de meilleures décisions commerciales en s'appuyant sur des données historiques, en utilisant des algorithmes d'apprentissage approfondis pour identifier des modèles et des corrélations leur permettant de mieux prédire l'avenir. Par exemple, vous pouvez résoudre des problèmes tels que «Quelle est la probabilité qu'un client spécifique achète un produit ou un service spécifique?» Avec une plus grande confiance, en fonction d'un comportement antérieur.. 

L’apprentissage automatique s’applique mieux aux problèmes pour lesquels vous disposez d’un historique de réponses, comme vous le découvrirez plus loin dans ce didacticiel lorsque nous examinerons notre exemple de problème. Un exemple d'apprentissage automatique en action serait votre filtre anti-spam de messagerie, qui utilise l'apprentissage supervisé (lorsque vous marquez des éléments comme spam ou non) pour mieux filtrer le spam au fil du temps. Le modèle d'apprentissage automatique code l'ensemble de ces connaissances sur les résultats passés et les met à la disposition de l'algorithme pour une utilisation efficace au moment de l'exécution..

Cela peut sembler un peu pénible au début, mais ce n’est pas compliqué, et je vais vous expliquer comment créer un modèle entraîné sous peu. Une fois que vous avez conçu un modèle entraîné via un algorithme, vous le convertissez ensuite en un modèle pouvant être consommé par iOS, grâce à Core ML..

Core ML est une nouveauté dans la famille de SDK d’Apple, introduite avec iOS 11 pour permettre aux développeurs d’implémenter une vaste gamme de modes d’apprentissage automatique et de types de couches d’apprentissage approfondi.. 

Le traitement du langage naturel (PNL) s'inscrit logiquement dans le cadre Core ML aux côtés de deux autres bibliothèques puissantes, Vision et GameplayKit. Vision fournit aux développeurs la possibilité de mettre en œuvre un apprentissage de la vision par ordinateur afin de détecter des visages, des points de repère ou d'autres objets, tandis que GameplayKit fournit aux développeurs de jeux des outils pour la création de jeux et des fonctionnalités de jeu spécifiques.. 

L'avantage de Core ML par rapport à d'autres solutions est qu'Apple a optimisé l'apprentissage automatique à l'exécution sur périphérique, ce qui signifie une consommation d'énergie de la mémoire et une latence réduites. Cela permet également de stocker les informations de l'utilisateur dans l'appareil, améliorant ainsi la confidentialité..

Avec un aperçu de l’apprentissage automatique et des modèles mis de côté, mettons la théorie en pratique en créant votre premier modèle de formation.. 

Former votre modèle

Pour qu’un modèle soit utile, il doit être formé à reconnaître les données en tant qu’informations qu’il pourra ensuite utiliser pour affirmer des prédictions avec un algorithme approprié. Core ML prend actuellement en charge les types de modèle suivants:

En plus de désigner un algorithme, plus vous disposez de données, plus votre modèle sera bien formé et plus les prédictions seront précises. Avant de commencer à créer notre modèle Core ML, examinons l'exemple d'application avec lequel nous allons travailler, et en particulier les exemples de données.. 

Exemple d'application: Prédicteur de score d'hôtel à Las Vegas

Pour ce tutoriel, nous allons utiliser un ensemble de données open source sur les avis d’hôtels du Strip de Las Vegas, que j’ai fournis à l’UCI pour illustrer la formation d’un modèle et le calcul des corrélations. Vous pouvez consulter le fichier CSV complet, délimité par des virgules, que nous utiliserons dans notre application. La structure des données est la suivante:

Nr. Commentaires, Nr. Note, Nom, Hôtel étoiles 11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3… 

Nous nous intéresserons à la prévision du nombre d'étoiles d'un hôtel, en fonction de la corrélation entre le nombre d'avis d'hôtel et d'avis généraux, pour chaque hôtel en particulier, ce qui constitue un exemple assez artificiel mais assez simple pour illustrer le concept de formation d'un modèle. données simples. 

Téléchargez le fichier CSV délimité par des virgules dans un nouveau dossier que vous utiliserez pour cet exercice. Maintenant, allons-y et mettons-nous au courant avec du Python, dans le but d'accomplir les tâches suivantes: 

  • importer les bibliothèques nécessaires, y compris les bibliothèques Python Core ML
  • importer nos échantillons de données
  • appliquer un algorithme de régression linéaire à nos données, en utilisant une bibliothèque appelée SciKit
  • identifiant les colonnes dans les données qui nous intéressent à la modélisation (Nr. avis, Nr. avis de l'hôtel, Hôtel étoiles)
  • identifiant la colonne qu’elle peut influencer (But
  • convertir le modèle formé en un modèle Core ML

Il peut sembler que plusieurs étapes sont nécessaires, mais ce n’est pas aussi décourageant que vous le pensez. Le code Python que nous démontrerons ensuite ne sera pas difficile à suivre, quelle que soit votre expérience de la langue. 

Tout d'abord, nous allons configurer nos modules et dépendances requis, y compris SciKit, coremltools (les outils officiels Core ML d'Apple pour Python) et les pandas, un puissant outil d'analyse de la structure de données.. 

Ouvrez une fenêtre de terminal, accédez au dossier de projet dans lequel vous avez le fichier CSV et entrez les informations suivantes:

sudo -H pip install - des pandas scikit-learn installés par la corne

Ensuite, en utilisant un éditeur de votre choix, créez un nouveau .py fichier, et nommez-le quelque chose comme convert_reviews.py, en ajoutant les lignes suivantes pour importer les bibliothèques que vous utiliserez:

from sklearn.linear_model import Pandas importateurs LinearRegression import coremltools 

Juste après les instructions d'importation, ajoutez les éléments suivants:

data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) Importer un modèle de fichier CSV = LinearRegression () # (2) Appliquer une impression de régression linéaire (données) model.fit (data [["Nr. reviews "," Nr. Hôtels "," Hôtel étoiles "]], data [" Score "]) # (3) Des données pour extrapoler

Jusqu'ici, nous importons simplement le fichier CSV à l'aide du cadre pandas, imprimons les données importées à l'écran, puis utilisons le cadre SciKit pour établir un algorithme de régression linéaire à appliquer aux colonnes que nous souhaitons extrapoler.. 

Ne vous inquiétez pas trop de la signification d'un algorithme de régression linéaire, mais sachez que nous utilisons une technique simple d'algorithme de modélisation pour effectuer des prédictions. Dans ce projet, nous nous intéressons à la manière dont cela affecte le score de notre hôtel, que nous venons d’établir à l’aide de la model.fit une fonction. 

Nous avons maintenant notre modèle formé, mais nous avons encore besoin de le convertir en un modèle que Core ML peut consommer, c'est là que coremltools entre en jeu. Insérez les lignes de code suivantes:

coreml_model = coremltools.converters.sklearn.convert (modèle, ["commentaires Nr.", "Nr. commentaires d'hôtels", "étoiles", "Score") # (4) Convertissez coreml_model.save ("Vegas_Reviews.mlmodel" ) # (5) Exporter vers un objet de modèle CoreML

Les deux dernières lignes convertissent votre modèle en un modèle compatible Core ML avant d’enregistrer le résultat sous forme de fichier. .mlmodel objet, prêt à être consommé dans votre projet Xcode. Enregistrez le script Python et exécutez-le via un terminal:

python convert_reviews.py

En supposant que vous n’ayez rencontré aucune erreur, le  Vegas_Reviews.mlmodel le fichier sera généré et votre modèle formé sera prêt à être importé dans Xcode. 

Intégrer le modèle formé

Dans la seconde partie de ce didacticiel, vous allez créer une application simple avec un seul contrôleur de vue, quelques curseurs et un contrôle de segment pour permettre aux utilisateurs de basculer entre différentes valeurs, ce qui vous permet d’observer diverses prédictions Core ML. L'application finale ressemblera à ce qui suit:

Dans Xcode, créez un nouveau Single View App Projet rapide, et lui donner un nom.

Ensuite, assurez-vous que vous avez inclus le produit Vegas_Reviews.mlmodel fichier dans votre projet, en le faisant glisser dans le volet de votre projet de navigation.

Maintenant, ouvrez le ViewController.swift fichier, et ajoutez ce qui suit:

class ViewController: UIViewController laissez commentaires = Vegas_Reviews () @IBOutlet var faible stackView: UIStackView! @IBOutlet faible var scoreValue: UILabel! @IBOutlet faible nrReviews var: UISlider! @IBOutlet faible var nrHotelReviews: UISlider! @IBOutlet étoiles faibles: UISegmentedControl!

La première chose que vous faites est de créer une instance de notre modèle, que vous utiliserez pour faire des prédictions plus tard dans la classe. Vous créez également quelques IBOutlet variables que vous allez câbler dans le story-board prochainement, qui correspondent aux propriétés de modèle individuelles avec lesquelles nous voulons jouer.

Basculez vers Storyboard et ajoutez les contrôles correspondants déclarés dans votre contrôleur de vue, en vous assurant de connecter chaque contrôle au contrôleur de vue:

Revenez à la ViewController.swift fichier, et ajoutez ce qui suit @IBAction méthode: 

@IBAction func makePrediction (_ expéditeur: N'importe lequel) let nrReviewsSelected = Double (nrReviews.value) let nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSélectionné: Double switch stars.selectedSegmentIndex case 0: retour 3.0 cas 2: return 5.0 défaut: return 5.0 if let predictions = try? about.revediction (Nr__avis: nrReviewsSelected, Nr__hotel_reviews: nrHotelReviewsSelected, Hotel_stars: starsSelected) a été ajouté au profil suivant: Score) else print ("Erreur")

Ceci est le code fonctionnel principal de notre moteur de prédiction, disséquons donc cette méthode étape par étape. Nous avons d’abord jeté les différents contrôles dans le Double type, qui sera passé comme argument lorsque nous appellerons notre méthode de prédiction. Dans un essayer? bloquer, appeler self.reviews.prediction (), qui est une méthode générée automatiquement appartenant à notre modèle, ainsi que les propriétés attendues que nous avons définies lors de l'importation de notre modèle formé.

Le résultat du bloc de prédiction est ensuite transmis à l'étiquette. ScoreValue, à afficher dans votre application. Nous sommes presque finis. Il suffit de revenir une fois de plus au storyboard et de cartographier chaque contrôle. valueChanged: propriété à la @IBAction méthode que nous avons créée dans le contrôleur de vue. Vous souhaitez que cette méthode soit appelée chaque fois que vous modifiez une valeur de curseur ou de segment. Et pour faire bonne mesure, vous pouvez également vous assurer que vous appelez automatiquement cette méthode dans votre viewDidLoad () méthode pour qu’elle se mette à jour dès le début:

remplacer func viewDidLoad () super.viewDidLoad () self.makePrediction (self)

Créez et exécutez l'application dans Xcode et dans le simulateur, basculez les différents curseurs et observez la prédiction de la valeur du score à mesure qu'elle change en fonction des autres facteurs d'attribution du nombre d'avis d'hôtel et de commentaires en général.. 

Comme souligné précédemment, il s'agit bien d'un exemple artificiel, mais il vous donne une idée de la manière de construire vos propres expériences pour corréler et, plus important encore, de la simplicité de mise en œuvre de modèles formés dans iOS.. 

Conclusion

Grâce à Core ML dans iOS 11, Apple a facilité la tâche des développeurs de tous les jours sans formation approfondie pour pouvoir ajouter de l'intelligence à leurs applications. Tous les traitements sont effectués sur l'appareil, garantissant de meilleures performances sans les problèmes de confidentialité liés au stockage de données dans le cloud. Alors qu'Apple «nourrissait» son implémentation d'apprentissage automatique sur des applications intégrées telles que Photos et Mail, les développeurs tiers ont désormais la possibilité de reconnaître les modèles, les images et les intentions textuelles avec seulement quelques lignes de code. 

Ce n'est sans doute que le début du mouvement Core ML d'Apple, mais c'est une excellente occasion pour les développeurs de commencer à penser de manière plus globale à propos des données. Avec Core ML, nous pouvons offrir aux utilisateurs une meilleure expérience utilisateur tout en fournissant aux chefs de produit une meilleure compréhension de leurs comportements.. 

Pendant que vous êtes ici, consultez certains de nos autres articles sur le développement d'applications iOS et l'apprentissage automatique.!