Este instructivo muestra cómo crear un modelo personalizado para clasificar contenido con AutoML Natural Language. La aplicación entrena un modelo personalizado con un corpus de "momentos felices" de la comunidad del conjunto de datos de código abierto de Kaggle HappyDB. El modelo resultante clasifica los momentos felices en categorías que reflejan las causas de la felicidad.
Los datos están disponibles a través de una licencia CCO: de dominio público de Creative Commons.
El instructivo abarca el entrenamiento del modelo personalizado, la evaluación de su rendimiento y la clasificación de contenido nuevo.
Requisitos previos
Configura el entorno de tu proyecto
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
Habilita las API de AutoML Natural Language.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
Habilita las API de AutoML Natural Language.
- Instala Google Cloud CLI.
- Sigue las instrucciones para crear una cuenta de servicio y descargar un archivo de claves.
- Establece la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
en la ruta de acceso al archivo de claves de la cuenta de servicio que descargaste cuando creaste la cuenta de servicio. Por ejemplo:export GOOGLE_APPLICATION_CREDENTIALS=key-file
- Agrega la cuenta de servicio a la función de IAM del Editor de AutoML con los siguientes comandos. Reemplaza project-id con el nombre de tu proyecto de Google Cloud y reemplaza service-account-name con el nombre de tu nueva cuenta de servicio, por ejemplo,
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' - Permite que las cuentas de servicio de AutoML Natural Language accedan a los recursos del proyecto de Google Cloud:
gcloud projects add-iam-policy-binding project-id
--member="serviceAccount:custom-vision@appspot.gserviceaccount.com"
--role="roles/storage.admin" - Instala la biblioteca cliente.
- Configura las variables de entorno PROJECT_ID y REGION_NAME.
Reemplaza project-id por el ID del proyecto de Google Cloud Platform. Actualmente, AutoML Natural Language requiere la ubicaciónus-central1
.export PROJECT_ID="project-id" export REGION_NAME="us-central1"
- Crea un bucket de Google Cloud Storage para almacenar los documentos que usarás para entrenar tu modelo personalizado.
El nombre del bucket debe tener el siguiente formato:$PROJECT_ID-lcm
. El siguiente comando crea un bucket de almacenamiento llamado$PROJECT_ID-lcm
en la regiónus-central1
.gsutil mb -p $PROJECT_ID -c regional -l $REGION_NAME gs://$PROJECT_ID-lcm/
- Copia el archivo
happiness.csv
del bucket público a tu bucket de Google Cloud Storage.
El archivohappiness.csv
se encuentra en la carpeta NL-classification del bucket público cloud-ml-data.
Ubicaciones de los archivos de código fuente
Si quieres el código fuente, puedes consultarlo aquí. Puedes copiar los archivos de código fuente en la carpeta de tu proyecto de Google Cloud Platform. De lo contrario, te recomendamos copiar directamente el código de esta página a medida que alcances cada paso.
Python
El instructivo consta de estos programas de Python:
language_text_classification_create_dataset.py
: Incluye la funcionalidad para crear conjuntos de datos.import_dataset.py
: Incluye la funcionalidad para importar conjuntos de datos.language_text_classification_create_model.py
: Incluye la funcionalidad para crear modelos.list_model_evaluations.py
: Incluye la funcionalidad para ver listas de las evaluaciones de modelos.language_text_classification_predict.py
: Incluye la funcionalidad relacionada con las predicciones.delete_model.py
: Incluye la funcionalidad para borrar modelos.
Java
El instructivo consta de estos archivos de Java:
LanguageTextClassificationCreateDataset.java
: Incluye la funcionalidad para crear conjuntos de datos.ImportDataset.java
: Incluye la funcionalidad para importar conjuntos de datos.LanguageTextClassificationCreateModel.java
: Incluye la funcionalidad para crear modelos.ListModelEvaluations.java
: Incluye la funcionalidad para ver listas de las evaluaciones de modelos.LanguageTextClassificationPredict.java
: Incluye la funcionalidad relacionada con las predicciones.DeleteModel.java
: Incluye la funcionalidad para borrar modelos
Node.js
El instructivo consta de estos programas de Node.js:
language_text_classification_create_dataset.js
: Incluye la funcionalidad para crear conjuntos de datos.import_dataset.js
: Incluye la funcionalidad para importar conjuntos de datos.language_text_classification_create_model.js
: Incluye la funcionalidad para crear modelos.list_model_evaluations.js
: Incluye la funcionalidad para ver listas de las evaluaciones de modelos.language_text_classification_predict.js
: Incluye la funcionalidad relacionada con las predicciones.delete_model.js
: Incluye la funcionalidad para borrar modelos.
Ejecuta la aplicación
Paso 1: Crear un conjunto de datos
El primer paso cuando se crea un modelo personalizado consiste en crear un conjunto de datos vacío que finalmente tendrá los datos de entrenamiento para el modelo. Cuando creas un conjunto de datos, debes especificar el tipo de clasificación que deseas que realice tu modelo personalizado:
- MULTICLASS asigna una sola etiqueta a cada documento clasificado
- MULTILABEL permite asignar varias etiquetas a cada documento
En este instructivo se crea un conjunto de datos llamado "happydb" y usa MULTICLASS.
Copia el código
Python
Java
Node.js
Solicitud
Ejecuta la función create_dataset
para crear un conjunto de datos vacío. Debes modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. Establece el
display_name
para el conjunto de datos (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
Respuesta
La respuesta incluye los detalles del conjunto de datos recién creado, incluido el ID del conjunto de datos que utilizarás para hacer referencia al conjunto de datos en solicitudes futuras. Te recomendamos que configures una variable de entorno DATASET_ID
en el valor del ID del conjunto de datos mostrado.
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
Paso 2: Importar elementos de entrenamiento en el conjunto de datos
El siguiente paso es propagar el conjunto de datos con una lista de contenido de entrenamiento etiquetada con las categorías de destino.
La interfaz de la función import_dataset
toma como entrada un archivo .csv que enumera las ubicaciones de todos los documentos de entrenamiento, además de la etiqueta adecuada para cada documento de entrenamiento
(Consulta Prepara tus datos de entrenamiento para obtener detalles sobre el formato requerido). Para este instructivo, usaremos el archivo happiness.csv
, que subiste anteriormente a Google Cloud Storage.
Copia el código
Python
Java
Node.js
Solicitud
Ejecuta la función import_data
para importar el contenido de entrenamiento. El primer fragmento de código que se cambiará es el ID del conjunto de datos del paso anterior y el segundo es el URI de happiness.csv
. Debes modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. - Establece el
dataset_id
para el conjunto de datos (del resultado del paso anterior). Establece la
path
que corresponde al URI del (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
Respuesta
Processing import... Dataset imported.
Paso 3: Crear (entrenar) el modelo
Ahora que tienes un conjunto de datos de documentos de entrenamiento etiquetados, puedes entrenar un modelo nuevo.
Copia el código
Python
Java
Node.js
Solicitud
Llama a la función create_model
para crear un modelo. El ID del conjunto de datos es de los pasos anteriores. Debes modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. - Establece el
dataset_id
para el conjunto de datos (del resultado del paso anterior). Configura
display_name
para tu modelo (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
Respuesta
La función create_model
inicia una operación de entrenamiento y, luego, imprime el nombre de la operación. El entrenamiento se realiza de forma asíncrona y puede tardar un poco en completarse, por lo que puedes usar el ID de la operación para verificar el estado del entrenamiento.
Cuando finaliza el entrenamiento, create_model
muestra el ID del modelo. Al igual que con el ID del conjunto de datos, puedes establecer una variable de entorno MODEL_ID
para el valor del ID del modelo que se muestra.
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
Paso 4: Evaluar el modelo
Después del entrenamiento, puedes evaluar la preparación del modelo mediante la revisión de su puntuación F1, precisión y recuperación.
La función display_evaluation
toma el ID del modelo como parámetro.
Copia el código
Python
Java
Node.js
Solicitud
Realiza una solicitud para mostrar el rendimiento general de la evaluación del modelo mediante la ejecución de la siguiente solicitud. Debes modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. Establece
model_id
para el ID de tu modelo.
Python
python list_model_evaluations.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations"
Node.js
node list_model_evaluations.js
Respuesta
Si la puntuación de precisión y recuperación es demasiado baja, puedes fortalecer el conjunto de datos de entrenamiento y volver a entrenar a tu modelo. Para obtener más información, consulta Evaluar modelos.
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%
Paso 5: Implementa el modelo
Cuando tu modelo personalizado cumpla con tus estándares de calidad, puedes implementarlo y, luego, realizar solicitudes de predicción.
Copia el código
Python
Java
Node.js
Solicitud
Para la función deploy_model
, debes modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. Establece
model_id
para el ID de tu modelo.
Python
python deploy_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeployModel.java"
Node.js
node deploy_model.js
Respuesta
Model deployment finished.
Paso 6: Usa un modelo para hacer una predicción
Después de implementar tu modelo, puedes usarlo para clasificar contenido nuevo.
Copia el código
Python
Java
Node.js
Solicitud
Para la función predict
, debes modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. - Establece
model_id
para el ID de tu modelo. Establece el
content
que deseas predecir.
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
Respuesta
La función muestra la puntuación de clasificación que indica lo bien que el contenido coincide con cada categoría.
Prediction results: Predicted class name: affection Predicted class score: 0.9702693223953247
Paso 7: Borra un modelo
Cuando hayas terminado de usar este modelo de muestra, puedes borrarlo permanentemente. Ya no podrás usar el modelo para predicción.
Copia el código
Python
Java
Node.js
Solicitud
Realiza una solicitud con el tipo de operación delete_model
para borrar un modelo que creaste. Tendrás que modificar las siguientes líneas de código:
- Establece
project_id
para tu PROJECT_ID. Establece
model_id
para el ID de tu modelo.
Python
python delete_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel"
Node.js
node delete_model.js
Respuesta
Model deleted.