Introduction : pourquoi Swift pour l'apprentissage automatique ?
Le monde de l'apprentissage automatique (ML) est traditionnellement associé à Python, aux Jupyter Notebooks et aux bibliothèques comme TensorFlow ou PyTorch. Cependant, ces dernières années, Swift — le langage de programmation d'Apple, connu pour ses performances et sa sécurité — fait son entrée sur la scène. Si vous êtes un développeur iOS/macOS souhaitant intégrer le ML dans vos applications, ou un débutant choisissant un premier langage pour le ML, cet article est pour vous.
Swift propose une approche unique : il combine la vitesse des langages compilés (comme le C++) avec la lisibilité des langages de script. Grâce aux frameworks Core ML et Create ML, ainsi qu'au projet Swift for TensorFlow, Swift devient une alternative viable pour les tâches d'apprentissage automatique sur les appareils Apple. Cependant, cette approche a aussi ses limites. Examinons cela en détail.
Principales possibilités de Swift pour le ML
1. Core ML : intégration de modèles sur l'appareil
Core ML est le framework d'Apple pour exécuter des modèles d'apprentissage automatique directement sur les appareils (iPhone, iPad, Mac). C'est un avantage clé : les données ne sont pas envoyées à un serveur, garantissant confidentialité et rapidité.
Exemple de chargement et d'utilisation d'un modèle pré-entraîné (par exemple, MobileNet pour la classification d'images) :
import CoreMLimport Vision
// Chargement du modèleguard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { fatalError("Impossible de charger le modèle")}
// Création de la requêtelet request = VNCoreMLRequest(model: model) { request, error in guard let results = request.results as? [VNClassificationObservation] else { return } // Affichage des 3 meilleurs résultats for result in results.prefix(3) { print("\\(result.identifier): \\(result.confidence * 100)%") }}
// Exécution de l'analyse d'imageguard let image = UIImage(named: "photo.jpg")?.cgImage else { return }let handler = VNImageRequestHandler(cgImage: image)try? handler.perform([request])Ce code montre à quel point il est facile d'intégrer un puissant réseau de neurones dans votre application iOS. Tout ce dont vous avez besoin est de convertir le modèle depuis PyTorch/TensorFlow au format .mlmodel à l'aide de l'utilitaire coremltools.
2. Create ML : apprentissage sans code (presque)
Pour les tâches simples (classification de texte, d'images, de données tabulaires), Apple propose Create ML — un outil avec interface graphique intégré à Xcode. Vous pouvez entraîner un modèle simplement en faisant glisser des données. Mais si vous préférez le code, Create ML est également disponible en tant que framework :
import CreateMLimport Foundation
// Chargement des données d'entraînementlet data = try MLDataTable(contentsOf: URL(fileURLWithPath: "/path/to/train.csv"))
// Création du classifieurlet classifier = try MLClassifier(trainingData: data, targetColumn: "label")
// Évaluation de la précisionlet metrics = classifier.trainingMetricsprint("Précision : \\(metrics.classificationError * 100)%")
// Sauvegarde du modèletry classifier.write(to: URL(fileURLWithPath: "/path/to/model.mlmodel"))C'est une option idéale pour un MVP (produit minimum viable) ou du prototypage. Cependant, pour les architectures complexes (transformers, GAN), Create ML n'est pas adapté.
3. Swift for TensorFlow (S4TF) : une étoile filante
Le projet Swift for TensorFlow était une tentative ambitieuse de Google de créer une alternative à Python pour le ML. Il proposait une différenciation automatique au niveau du langage et une intégration avec TensorFlow. Malheureusement, en 2021, Google a cessé le développement actif de S4TF. Cependant, l'héritage perdure : de nombreuses idées de S4TF ont été reprises dans les bibliothèques Swift Numerics et swift-ml.
Exemple (si S4TF existait encore) :
import TensorFlow
// Réseau de neurones simplestruct Model: Layer { var layer1 = Dense<Float>(i