Uber présente Ludwig, boite à outil de Deep learning sans programmation

Uber présente Ludwig, boite à outil de Deep learning sans programmation
Actu IA
ludwig
Uber AI

La société Uber utilise de manière intensive le Deep Learning, que ce soit pour des tâches afférentes à la conduite, la navigation, ou tout simplement au support client. Le laboratoire Uber AI a annoncé le 11 février la mise à disposition d’une boite à outil de Deep Learning open source destinée à démocratiser l’intelligence artificielle : Ludwig.

L’une des particularités de Ludwig est qu’elle est basée sur TensorFlow et scikit-learn. La société ne cherche donc pas à proposer son alternative aux solutions existantes, mais à s’appuyer sur elles. Enfin, ce qui rend particulièrement intéressante Ludwig est la promesse faite par Uber :

Ludwig est une boite à outil qui permet d’entrainer et tester des modèles de Deep learning sans nécessité de rédiger du code informatique.

Si cette démarche de rendre le Deep learning accessible s’inscrit dans une tendance générale, la promesse va plus loin que celle de Google avec Auto ML, qui présente son outil comme “une suite de produits de machine learning qui permet aux développeurs peu expérimentés dans ce domaine d’entraîner des modèles de haute qualité répondant aux besoins spécifiques de leur entreprise”.

L’entraînement d’un modèle est on ne peut plus simple et nécessite deux fichiers : un fichier csv contenant le jeu de données et un fichier YAML contenant la définition du modèle, c’est à dire la description de chaque colonne du fichier CSV.

L’invocation de Ludwig est donc extrêmement simple:

Entraînement
Il suffit de renseigner le fichier csv et le fichier de définiton

ludwig train
--data_csv fichier.csv
--model_definition definition.yaml

Prédiction
Prédiction en précisant le fichier csv et le modèle

ludwig predict
--data_csv data.csv
--model path_to_model

Visualisation
Il est possible de lancer des visualisations des données.

ludwig visualize
--visualization learning_curves
--training_statistics train_statistics.json

ludwig_screen

Mini-tutoriel

Installation sous Debian:
(pré-requis, probablement déjà présent sur votre poste)

apt-get install python3 python3-pip python3-dev gcc
pip3 install wheel

Installation de ludwig :

pip3 install ludwig
python3 -m spacy download en
python3 -m spacy download fr

Nous venons donc d’installer ludwig et l’ensemble de ses dépendances, puis les modèles de langage anglais et français de spaCy, célèbre librairie de TAL.

Préparation de notre dataset:
Nous allons utiliser un jeu de données déjà existant, trouvé sur Github. Il s’agit du dataset utilisé pour le tutoriel “Movie plots by genre” présenté par Lev Konstantinovskiy lors du PyData Berlin du 20 mai 2016.

Nous téléchargeons le dataset :

wget https://github.com/RaRe-Technologies/movie-plots-by-genre/blob/master/data/tagged_plots_movielens.csv

En tappant “head tagged_plots_movielens.csv”, nous nous rendons compte que le dataset est un simple fichier csv contenant 4 colonnees : un numéro de ligne, un id, le plot (résumé du film) et son genre. Les deux premières colonnes étant inutiles, nous allons créer un nouveau fichier reprenant le contenu du précédent, à l’exception de ces colonnes :

sed 's/\([^,]*\),\([^,]*\),\(.*\)/\3/' tagged_plots_movielens.csv>dataset.csv

Nous allons maintenant créer notre fichier model_definition.yml de définition au format yaml :

input_features:
-
name
: plot
type
: sequence
encoder
: parallel_cnn
level
: word

output_features
:
-
name
: tag
type
: category

 
Entraînement du modèle:
Nous entraînons notre modèle et enregistrons le résultat dans le dossier plot_genre_result. Un dossier “experiment_run_0” sera alors créé (et un nouveau, dont le nom sera incrémenté, sera créé à chaque exécution). Le modèle sera stocké dans le sous-dossier “model” de ce dossier.

ludwig train --data_csv dataset.csv --model_definition_file model_definition.yaml --output_directory plot_genre_result

Une fois l’entraînement réalisé, il n’y a plus qu’à soumettre des données au modèle pour réaliser une prédiction. Nous créons un fichier a_predire.csv contenant les synopsis des films dont nous souhaitons prédire le genre :

plot,tag
An introverted young man has no friends. In order to be noticed by a gang of thugs. This is only the beginning of his descent into hell. He will become a drug dealer and will commit ever greater crimes. He will spend 10 years in jail

 
Lançons désormais la prédiction :
Le modèle étant entraîné, nous allons désormais pouvoir prédire le genre de films à partir de leur synopsis. Notons que dans notre exemple, nous demandons à Ludwig de ne prédire qu’un seul échantillon, mais si vous souhaitez effectuer plusieurs prédictions, il suffit d’en mettre plusieurs dans le fichier csv a_predire.csv.

ludwig predict --data_csv a_predire.csv -m plot_genre_result/experiment_run_0/model --output_directory prediction

Un dossier “prediction” sera alors généré et contiendra différents fichiers présentant la prédiction ainsi que les probabilités. La prédiction se trouve dans le fichier “tag_predictions.csv”.

Ludwig ne se limite pas à la classification de texte, sa documentation présente d’ailleurs de nombreux cas d’usages et fichiers de définition de modèles associés : Détection d’entités nommées, NLU (compréhension du langage), traduction, conversation, analyse des sentiments, classification d’images, labellisation d’images, réponse à des questions sur des images, prévision de séries temporelles, entre autres.

D’autre part, il est extensible, et il est aisé d’ajouter de nouveaux encodeurs, décodeurs ou types de données. Enfin, Ludwig est accessible par API et peut donc être exploité directement depuis un script python.

Accéder au site de Ludwig