Lancé officiellement le 9 janvier, AutoGluon permet aux développeurs d'exploiter des modèles d'apprentissage automatique avec des images, du texte ou des ensembles de données tabulaires, sans avoir besoin d'expérimenter manuellement. Les développeurs peuvent obtenir des performances prédictives solides dans leurs applications.
Sur le site dédié, Amazon précise :
« AutoGluon permet d'utiliser AutoML en mettant l'accent sur l'apprentissage en profondeur et les applications du monde réel couvrant des images, du texte ou des données tabulaires. Destiné aux débutants et aux experts ML, AutoGluon vous permet de:
- Prototyper rapidement des solutions d'apprentissage en profondeur pour vos données avec quelques lignes de code.
- Tirer parti du réglage automatique des hyperparamètres, de la sélection de modèle / recherche d'architecture et du traitement des données.
- D'utiliser automatiquement des techniques d'apprentissage en profondeur de pointe sans pour autant être un expert.
- D'améliorer facilement les modèles sur mesure et les pipelines de données existants, ou personnaliser AutoGluon pour votre cas d'utilisation ».
Le kit a été officiellement lancé le 9 janvier. Il permet d’exploiter des modèles d’apprentissage machine avec image, texte, jeux de données de structure tabulaire, sans recourir à une expérimentation manuelle. Par exemple, pour reconnaître le ou les sujets principaux d’une image, pour faire des prédictions à partir du contenu d’un texte ou pour prédire les valeurs dans les colonnes d’une table à partir des valeurs des autres colonnes.
Accessible sur le site du projet ou sur GitHub, AutoGluon automatise un certain nombre de décisions pour les développeurs, ce qui permet de produire un modèle de réseau neuronal avec seulement trois lignes de code. Autre intérêt mis en avant par Amazon, son service tire parti des ressources de calcul disponibles pour trouver le modèle le plus puissant compte tenu du runtime alloué. Il s’utilise avec Python 3.6 ou 3.7 et il est pour l’instant limité à Linux. Les supports de Windows et MacOS sont prévus ultérieurement.
Classification de texte : faire des prédictions en fonction du contenu du texte
Amazon présente la tâche de classification de texte comme exemple courant pour illustrer l’utilisation de base de la capacité NLP d’AutoGluon.
Dans ce didacticiel, nous utilisons l'analyse des sentiments comme exemple de classification de texte. Nous allons charger des phrases et les étiquettes correspondantes (sentiment) dans AutoGluon et utiliser ces données pour obtenir un réseau neuronal qui peut classer de nouvelles phrases. Différent de l'apprentissage automatique traditionnel où nous devons définir manuellement le réseau neuronal et spécifier les hyperparamètres dans le processus de formation, avec un seul appel à la fonction d'ajustement d'AutoGluon, AutoGluon formera automatiquement de nombreux modèles sous des milliers de configurations hyperparamétriques différentes, puis renverra le meilleur modèle.
Nous commençons par spécifier TextClassification comme notre tâche d'intérêt:
Code Python : | Sélectionner tout |
1 2 | import autogluon as ag from autogluon import TextClassification as task |
Créer un jeu de données AutoGluon
Nous utilisons un sous-ensemble de Stanford Sentiment Treebank (SST). L'ensemble de données d'origine se compose de phrases tirées de critiques de films et d'annotations humaines de leur sentiment. La tâche consiste à classer si une phrase donnée a un sentiment positif ou négatif (classification binaire).
Code Python : | Sélectionner tout |
dataset = task.Dataset(name='ToySST')
Dans l'appel ci-dessus, nous avons la bonne répartition entrainement / validation / test de l'ensemble de données SST.
Utiliser AutoGluon pour s'adapter aux modèles
Maintenant, nous voulons obtenir un classificateur de réseau neuronal en utilisant AutoGluon. Dans la configuration par défaut, plutôt que d'essayer de former des modèles complexes à partir de zéro en utilisant nos données, AutoGluon affine les réseaux de neurones qui ont déjà été préformés sur un ensemble de données texte à grande échelle comme Wikicorpus. Bien que l'ensemble de données implique un texte entièrement différent, les entités de niveau inférieur capturées dans les représentations du réseau préformé (comme les détecteurs de bord / texture) resteront probablement utiles pour notre propre ensemble de données texte.
Notons que si Amazon s'en tient principalement aux configurations par défaut dans ce didacticiel pour débutant, le didacticiel avancé couvre diverses options que vous pouvez spécifier pour un meilleur contrôle du processus de formation. Avec un seul appel à la fonction d'ajustement d'AutoGluon, AutoGluon formera de nombreux modèles avec différentes configurations d'hyperparamètres et retournera le meilleur modèle.
Cependant, la formation au réseau de neurones peut être assez coûteuse en temps. Pour garantir des temps d'exécution rapides, nous demandons à AutoGluon d'obéir à des limites strictes: num_training_epochs spécifie combien d'efforts de calcul peuvent être consacrés à la formation d'un réseau unique, tandis que time_limits en secondes spécifie combien de temps il faut pour renvoyer un modèle. À des fins de démonstration, nous spécifions uniquement de petites valeurs pour time_limits, num_training_epochs:
predictor = task.fit(dataset, epochs=1)
Code Python : | Sélectionner tout |
1 2 3 | Starting Experiments Num of Finished Tasks is 0 Num of Pending Tasks is 2 |
Code Python : | Sélectionner tout |
1 2 3 4 5 | scheduler: FIFOScheduler( DistributedResourceManager{ (Remote: Remote REMOTE_ID: 0, <Remote: 'inproc://172.31.41.232/14587/1' processes=1 threads=8, memory=33.24 GB>, Resource: NodeResourceManager(8 CPUs, 1 GPUs)) }) |
Code Python : | Sélectionner tout |
HBox(children=(FloatProgress(value=0.0, max=2.0), HTML(value='')))
Code x : | Sélectionner tout |
1 2 3 4 5 | Using gradient accumulation. Effective batch size = batch_size * accumulate = 32 [Epoch 0] loss=0.6859, lr=0.0000032, metrics:accuracy:0.5383: 100%|██████████| 426/426 [05:43<00:00, 1.24it/s] 100%|██████████| 6/6 [00:01<00:00, 3.31it/s] validation metrics:accuracy:0.5287 Finished Task with config: {'lr': 6.32456e-05, 'net.choice': 0, 'pretrained_dataset.choice': 0} and reward: 0.5287356321839081 |
Code x : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | Using gradient accumulation. Effective batch size = batch_size * accumulate = 32 [Epoch 0] loss=0.6912, lr=0.0000064, metrics:accuracy:0.5350: 100%|██████████| 426/426 [05:51<00:00, 1.21it/s] 100%|██████████| 6/6 [00:01<00:00, 3.30it/s] validation metrics:accuracy:0.5287 Finished Task with config: {'lr': 0.00012693257529892082, 'net.choice': 0, 'pretrained_dataset.choice': 0} and reward: 0.5287356321839081 Using gradient accumulation. Effective batch size = batch_size * accumulate = 32 [Epoch 0] loss=0.6859, lr=0.0000032, metrics:accuracy:0.5383: 100%|██████████| 426/426 [05:51<00:00, 1.21it/s] 100%|██████████| 6/6 [00:01<00:00, 3.32it/s] validation metrics:accuracy:0.5287 |
Au sein de fit, le modèle avec la meilleure configuration d'hyperparamètre est sélectionné en fonction de sa précision de validation après avoir été formé sur les données de la division d'apprentissage.
La meilleure précision Top-1 obtenue sur l'ensemble de validation est:
print('Top-1 val acc: %.3f' % predictor.results['best_reward'])Top-1 val acc: 0.529
Étant donné un exemple de phrase, nous pouvons facilement utiliser le modèle final pour prédire l'étiquette (et la probabilité de classe conditionnelle):
Code Python : | Sélectionner tout |
1 2 3 | sentence = 'I feel this is awesome!' ind = predictor.predict(sentence) print('The input sentence sentiment is classified as [%d].' % ind.asscalar()) |
The input sentence sentiment is classified as [1].
L'objet results renvoyé par fit contient des résumés décrivant divers aspects du processus de formation. Par exemple, nous pouvons inspecter la meilleure configuration d'hyperparamètre correspondant au modèle final qui a obtenu les (meilleurs) résultats ci-dessus:
print('The best configuration is:')
print(predictor.results['best_config'])
The best configuration is:
{'lr': 6.32456e-05, 'net.choice': 0, 'pretrained_dataset.choice': 0}
Conclusion
En somme, AutoGluon permet de prototyper des solutions de deep learning pour un jeu de données avec peu de lignes de code. Le service met en œuvre l’optimisation hyperparamétrique (consistant à choisir les paramètres optimaux pour contrôler le processus d’apprentissage) ainsi que la sélection du modèle, la recherche de l’architecture et le traitement des données. Il peut aussi servir à améliorer les modèles de réseaux neuronaux existants et les pipelines de données. Bien entendu, il s’appuie sur les API pour améliorer les performances prédictives dans les applications sans faire intervenir d’expertise humaine.
D'ordinaire, le déploiement de modèles de deep learning qui requiert une grande précision d’inférence nécessite l’intervention d’un expert et l’entraînement de ces modèles exige des développeurs beaucoup de temps et d’efforts. Malgré les avancées apportées par certains outils, tels que la bibliothèque Keras, pour spécifier plus facilement les paramètres et les couches dans ces modèles, les développeurs continuent à se débattre avec des problèmes complexes en particulier sur le prétraitement des données et l’optimisation hyperparamétrique. Avec AutoGluon, Amazon prétend rendre le deep learning plus accessible à davantage de développeurs.
Source : AutoGluon (site du projet, GitHub)