Swift pour l'apprentissage automatique : possibilités et limites en pratique
\n\nLe monde de l'apprentissage automatique (ML) a longtemps été associé exclusivement à Python. Cependant, avec la croissance du développement iOS/macOS et l'émergence de frameworks puissants d'Apple, le langage Swift entre de plus en plus dans ce domaine. Dans cet article, nous analyserons dans quelle mesure Swift est adapté aux tâches de ML, quels outils il propose, où son utilisation est justifiée et où il est encore inférieur au Python classique.
\n\nPourquoi Swift ? Écosystème Apple et performances
\n\nSwift est un langage compilé avec un système de typage strict et des performances élevées, proches de C++. Pour l'apprentissage automatique, cela offre plusieurs avantages clés :
\n- \n
- Vitesse d'exécution : calculs natifs sans frais généraux d'interpréteur. \n
- Intégration avec les plateformes Apple : accès direct à Metal (GPU), Neural Engine, Accelerate framework. \n
- Sécurité mémoire : moins d'erreurs d'exécution par rapport à Python. \n
Cependant, le principal moteur est la volonté d'Apple de rendre le ML accessible aux développeurs mobiles. Au lieu d'apprendre Python et de déployer des modèles séparément, un développeur iOS peut rester dans l'environnement natif Xcode.
\n\nFrameworks clés
\nApple fournit trois outils principaux pour travailler avec le ML en Swift :
\n- \n
- Core ML — runtime pour exécuter des modèles sur l'appareil. \n
- Create ML — framework pour entraîner des modèles sans Python. \n
- MLX (projet open source d'Apple) — pour des recherches plus approfondies. \n
Exécution de modèles prêts à l'emploi avec Core ML
\nLe scénario le plus courant est l'intégration d'un modèle pré-entraîné dans une application mobile. Swift excelle ici : le code est minimal et intuitif.
\n\nExemple de classification d'image avec Core ML et Vision :
\nimport Vision\nimport CoreML\n\n// 1. Chargeons le modèle (par exemple, MobileNetV2)\nguard let model = try? VNCoreMLModel(for: MobileNetV2().model) else {\n fatalError("Impossible de charger le modèle")\n}\n\n// 2. Créons une requête\nlet request = VNCoreMLRequest(model: model) { request, error in\n if let results = request.results as? [VNClassificationObservation] {\n // Affichons les 3 meilleures prédictions\n for result in results.prefix(3) {\n print("\\(result.identifier): \\(result.confidence * 100)%")\n }\n }\n}\n\n// 3. Exécutons la requête sur l'image\nguard let image = UIImage(named: "cat.jpg"),\n let ciImage = CIImage(image: image) else { return }\n\nlet handler = VNImageRequestHandler(ciImage: ciImage)\ntry? handler.perform([request])\n\nComme vous pouvez le voir, Swift permet d'effectuer l'inférence en 10 à 15 lignes de code. Tout fonctionne nativement, en utilisant le GPU ou le Neural Engine.
\n\nEntraînement de modèles avec Create ML
\nCreate ML est la tentative d'Apple de rendre l'entraînement de modèles accessible aux développeurs ordinaires. Vous pouvez entraîner des classifieurs d'images, de texte, des données tabulaires et même des modèles de recommandation sans quitter Swift.
\n\nExemple : entraînement d'un classifieur de texte
\nSupposons que nous ayons un fichier CSV avec des avis et des étiquettes (positif/négatif). L'entraînement ressemble à ceci :
\nimport CreateML\nimport Foundation\n\n// 1. Chargeons les données\nlet data = try MLDataTable(contentsOf: URL(fileURLWithPath: "reviews.csv"))\n\n// 2. Séparons en ensembles d'entraînement et de test\nlet (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 42)\n\n// 3. Créons un classifieur\nlet classifier = try MLTextClassifier(trainingData: trainingData,\n textColumn: "text",\n labelColumn: "label")\n\n// 4. Évaluons la précision\nlet evaluation = classifier.evaluation(on: testingData)\nprint("Précision : \\(evaluation.classificationError * 100)%")\n\n// 5. Sauvegardons le modèle pour Core ML\ntry class