Ce tutoriel explique comment créer un modèle personnalisé pour classer des contenus à l'aide d'AutoML Natural Language. L’application entraîne un modèle personnalisé à l’aide d’un corpus de "moments de bonheur" vécus par des utilisateurs, issu de l'ensemble de données Open Source HappyDB de Kaggle. Le modèle qui en résulte classe les moments heureux en catégories qui reflètent les causes du bonheur.
Les données sont mises à disposition via une licence Creative Commons CCO : domaine public.
Ce tutoriel traite de l'entraînement du modèle personnalisé, de l'évaluation de ses performances et de la classification de nouveaux contenus.
Prerequisites
Configurer l'environnement de projet
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Activer les API AutoML Natural Language.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Activer les API AutoML Natural Language.
- Installez Google Cloud CLI.
- Suivez les instructions pour créer un compte de service et télécharger un fichier de clé.
- Indiquez le chemin d'accès au fichier de clé du compte de service, que vous avez téléchargé lors de la création de ce dernier, comme variable d'environnement
GOOGLE_APPLICATION_CREDENTIALS
. Exemple :export GOOGLE_APPLICATION_CREDENTIALS=key-file
- Ajoutez votre nouveau compte de service au rôle IAM de l'éditeur AutoML à l'aide des commandes ci-dessous. Remplacez project-id par le nom de votre projet Google Cloud Project et service-account-name par le nom de votre nouveau compte de service, par exemple
service-account1@myproject.iam.gserviceaccount.com
.gcloud auth login gcloud config set project project-id gcloud projects add-iam-policy-binding project-id
--member=serviceAccount:service-account-name
--role='roles/automl.editor' - Autorisez les comptes de service AutoML Natural Language à accéder aux ressources du projet Google Cloud :
gcloud projects add-iam-policy-binding project-id
--member="serviceAccount:custom-vision@appspot.gserviceaccount.com"
--role="roles/storage.admin" - Installez la bibliothèque cliente.
- Définissez les variables d'environnement PROJECT_ID et REGION_NAME.
Remplacez project-id par l'ID de votre projet Google Cloud Platform. AutoML Natural Language nécessite actuellement l'emplacementus-central1
.export PROJECT_ID="project-id" export REGION_NAME="us-central1"
- Créez un bucket Google Cloud Storage afin de stocker les documents nécessaires pour entraîner votre modèle personnalisé.
Le nom du bucket doit respecter le format suivant :$PROJECT_ID-lcm
. La commande ci-dessous permet de créer un bucket de stockage dans la régionus-central1
, nommé$PROJECT_ID-lcm
.gsutil mb -p $PROJECT_ID -c regional -l $REGION_NAME gs://$PROJECT_ID-lcm/
- Copiez le fichier
happiness.csv
du bucket public dans votre bucket Google Cloud Storage.
Le fichierhappiness.csv
se trouve dans le dossier NL-classification du bucket public cloud-ml-data.
Emplacements des fichiers de code source
Si vous souhaitez obtenir le code source, vous pouvez le trouver ici. N'hésitez pas à copier les fichiers de code source dans le dossier de votre projet Google Cloud Platform. Sinon, nous vous recommandons de copier directement le code de cette page à chaque étape.
Python
Le tutoriel contient ces programmes Python :
language_text_classification_create_dataset.py
: inclut une fonctionnalité permettant de créer un ensemble de donnéesimport_dataset.py
: inclut une fonctionnalité permettant d'importer un ensemble de donnéeslanguage_text_classification_create_model.py
: inclut une fonctionnalité permettant de créer un modèlelist_model_evaluations.py
: inclut une fonctionnalité permettant de répertorier les évaluations de modèleslanguage_text_classification_predict.py
: inclut une fonctionnalité liée à la prédictiondelete_model.py
: inclut une fonctionnalité permettant de supprimer un modèle
Java
Le tutoriel contient ces fichiers Java :
LanguageTextClassificationCreateDataset.java
: inclut une fonctionnalité permettant de créer un ensemble de donnéesImportDataset.java
: inclut une fonctionnalité permettant d'importer un ensemble de donnéesLanguageTextClassificationCreateModel.java
: inclut une fonctionnalité permettant de créer un modèleListModelEvaluations.java
: inclut une fonctionnalité permettant de répertorier les évaluations de modèlesLanguageTextClassificationPredict.java
: inclut une fonctionnalité liée à la prédictionDeleteModel.java
: inclut une fonctionnalité permettant de supprimer un modèle
Node.js
Le tutoriel comprend les programmes Node.js suivants :
language_text_classification_create_dataset.js
: inclut une fonctionnalité permettant de créer un ensemble de donnéesimport_dataset.js
: inclut une fonctionnalité permettant d'importer un ensemble de donnéeslanguage_text_classification_create_model.js
: inclut une fonctionnalité permettant de créer un modèlelist_model_evaluations.js
: inclut une fonctionnalité permettant de répertorier les évaluations de modèleslanguage_text_classification_predict.js
: inclut une fonctionnalité liée à la prédictiondelete_model.js
: inclut une fonctionnalité permettant de supprimer un modèle
Exécuter l'application
Étape 1 : Créez un ensemble de données
La première étape de l'élaboration d'un modèle personnalisé consiste à créer un ensemble de données vide, qui contiendra à terme les données d'entraînement du modèle. Lorsque vous créez un ensemble de données, vous spécifiez le type de classification que le modèle personnalisé doit effectuer. Deux options sont possibles :
- MULTICLASS attribue un seul libellé à chaque document classé.
- MULTILABEL permet d'attribuer plusieurs libellés à un document.
Ce tutoriel crée un ensemble de données nommé "happydb" et utilise la classification MULTICLASS.
Copier le code
Python
Java
Node.js
Requête
Exécutez la fonction create_dataset
pour créer un ensemble de données vide. Vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur votre valeur PROJECT_ID. Définissez le champ
display_name
pour l'ensemble de données (happydb
).
Python
python language_text_classification_create_dataset.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.LanguageTextClassificationCreateDataset"
Node.js
node language_text_classification_create_dataset.js
Réponse
La réponse inclut les détails de l'ensemble de données créé, y compris son ID qui permet de le référencer dans des requêtes ultérieures. Nous vous recommandons d'indiquer la valeur de l'ID d'ensemble de données renvoyé sur la ligne d'une variable d'environnement DATASET_ID
.
Dataset name: projects/216065747626/locations/us-central1/datasets/TCN7372141011130533778 Dataset id: TCN7372141011130533778 Dataset display name: happydb Text classification dataset specification: classification_type: MULTICLASS Dataset example count: 0 Dataset create time: seconds: 1530251987 nanos: 216586000
Étape 2 : Importez des éléments d'entraînement dans l'ensemble de données
L'étape suivante consiste à insérer dans l'ensemble de données une liste d'éléments de contenus d'apprentissage, lesquels auront été étiquetés à l'aide des catégories cibles.
L'interface de la fonction import_dataset
utilise un fichier .csv qui répertorie les emplacements de tous les documents d'entraînement et le libellé approprié pour chacun de ces documents.
(Consultez la section Préparer les données d'entraînement pour en savoir plus sur le format requis.) Pour les besoins de ce tutoriel, nous allons utiliser happiness.csv
, que vous avez précédemment importé dans Google Cloud Storage.
Copier le code
Python
Java
Node.js
Requête
Exécutez la fonction import_data
pour importer les contenus d'entraînement. Le premier élément de code à modifier est l'ID de l'ensemble de données de l'étape précédente, le second est l'URI du fichier happiness.csv
. Vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur votre valeur PROJECT_ID. - Définissez le champ
dataset_id
pour l'ensemble de données (à partir de la sortie de l'étape précédente). Définissez le champ
path
qui correspond à l'URI du fichier (gs://YOUR_PROJECT_ID-lcm/csv/happiness.csv
).
Python
python import_dataset.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.ImportDataset"
Node.js
node import_dataset.js
Réponse
Processing import... Dataset imported.
Étape 3 : Créez (entraînez) le modèle
Maintenant que vous disposez d'un ensemble de données de documents d'entraînement étiquetés, vous pouvez entraîner un nouveau modèle.
Copier le code
Python
Java
Node.js
Demande
Appelez la fonction create_model
pour créer un modèle. L'ID de l'ensemble de données provient des étapes précédentes. Vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur le PROJECT_ID de votre projet. - Définissez le champ
dataset_id
pour l'ensemble de données (à partir de la sortie de l'étape précédente). Définissez le champ
display_name
pour votre modèle (happydb_model).
Python
python language_text_classification_create_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.LanguageTextClassificationCreateModel"
Node.js
node language_text_classification_create_model.js
Réponse
La fonction create_model
déclenche une opération d'entraînement et imprime le nom de l'opération. L'entraînement se déroule de manière asynchrone et peut prendre un certain temps. Vous pouvez donc consulter l'état de l'entraînement à l'aide de l'ID d'opération.
Une fois l'entraînement terminé, create_model
renvoie l'ID du modèle. Comme pour l'ID de l'ensemble de données, vous pouvez définir une variable d'environnement MODEL_ID
sur la valeur de l'ID de modèle renvoyé.
Training operation name: projects/216065747626/locations/us-central1/operations/TCN3007727620979824033 Training started... Model name: projects/216065747626/locations/us-central1/models/TCN7683346839371803263 Model id: TCN7683346839371803263 Model display name: happydb_model Model create time: seconds: 1529649600 nanos: 966000000 Model deployment state: deployed
Étape 4 : Évaluer le modèle
Après avoir entraîné le modèle, vous pouvez évaluer son état de préparation en examinant sa précision, son rappel et son score F1.
La fonction display_evaluation
utilise l'ID du modèle comme paramètre.
Copier le code
Python
Java
Node.js
Demande
Pour afficher les performances d'évaluation globales du modèle, exécutez la requête suivante. Vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur votre valeur PROJECT_ID. Définissez le champ
model_id
sur l'ID de votre modèle.
Python
python list_model_evaluations.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations"
Node.js
node list_model_evaluations.js
Réponse
Si les scores de précision et de rappel sont trop faibles, vous pouvez renforcer l'ensemble de données d'entraînement et ré-entraîner le modèle. Pour plus d'informations, consultez la page Évaluer les modèles.
Precision and recall are based on a score threshold of 0.5 Model Precision: 96.3% Model Recall: 95.7% Model F1 score: 96.0% Model Precision@1: 96.33% Model Recall@1: 95.74% Model F1 score@1: 96.04%
Étape 5 : Déployer le modèle
Lorsque votre modèle personnalisé répond à vos normes de qualité, vous pouvez le déployer, puis envoyer une requête de prédiction.
Copier le code
Python
Java
Node.js
Demande
Pour la fonction deploy_model
, vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur votre valeur PROJECT_ID. Définissez le champ
model_id
sur l'ID de votre modèle.
Python
python deploy_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeployModel.java"
Node.js
node deploy_model.js
Réponse
Model deployment finished.
Étape 6 : Réaliser une prédiction à l'aide d'un modèle
Après avoir déployé votre modèle, vous pouvez vous en servir pour classer du contenu récent.
Copier le code
Python
Java
Node.js
Demande
Pour la fonction predict
, vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur le PROJECT_ID de votre projet. - Définissez le champ
model_id
sur l'ID de votre modèle. Définissez le contenu (
content
) que vous souhaitez prédire.
Python
python language_text_classification_predict.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.LanguageTextClassificationPredict"
Node.js
node language_text_classification_predict.js
Réponse
La fonction renvoie le score de classification, qui indique le degré de correspondance des contenus à chaque catégorie.
Prediction results: Predicted class name: affection Predicted class score: 0.9702693223953247
Étape 7 : Supprimer le modèle
Lorsque vous avez fini d'utiliser cet exemple de modèle, vous pouvez le supprimer définitivement. Vous ne pourrez plus vous servir du modèle pour la prédiction.
Copier le code
Python
Java
Node.js
Demande
Effectuez une requête avec le type d'opération delete_model
pour supprimer un modèle que vous avez créé. Vous devez modifier les lignes de code suivantes :
- Définissez le champ
project_id
sur votre valeur PROJECT_ID. Définissez le champ
model_id
sur l'ID de votre modèle.
Python
python delete_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel"
Node.js
node delete_model.js
Réponse
Model deleted.