本教程演示了如何使用 AutoML Natural Language 创建对内容进行分类的自定义模型。该应用程序使用来自 Kaggle 开源数据集 HappyDB 的众包“快乐时刻”语料库训练自定义模型。由此产生的模型将幸福时刻分成反映幸福原因的不同类别。
该数据通过知识共享 CCO:公共领域许可提供。
本教程介绍如何训练自定义模型、评估其性能以及对新内容进行分类。
前提条件
配置项目环境
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 AutoML Natural Language API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 AutoML Natural Language API。
- 安装 Google Cloud CLI。
- 按照说明创建服务账号并下载密钥文件。
- 将
GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为如下路径:指向您在创建服务账号时所下载的服务账号密钥文件的路径。例如:export GOOGLE_APPLICATION_CREDENTIALS=key-file
- 使用以下命令将您的新服务账号添加到 IAM 角色 AutoML 编辑者。将 project-id 替换为 Google Cloud 项目的名称,并将 service-account-name 替换为新服务账号的名称,例如
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' - 允许 AutoML Natural Language 服务账号访问您的 Google Cloud 项目资源:
gcloud projects add-iam-policy-binding project-id
--member="serviceAccount:custom-vision@appspot.gserviceaccount.com"
--role="roles/storage.admin" - 安装客户端库。
- 设置 PROJECT_ID 和 REGION_NAME 环境变量。
将 project-id 替换为您的 Google Cloud Platform 项目 ID。 AutoML Natural Language 目前要求将位置设为us-central1
。export PROJECT_ID="project-id" export REGION_NAME="us-central1"
- 创建一个 Google Cloud Storage 存储桶以存储您将用于训练自定义模型的文档。
存储桶名称必须采用以下格式:$PROJECT_ID-lcm
. 以下命令将在us-central1
区域中创建一个名为$PROJECT_ID-lcm
的存储桶。gsutil mb -p $PROJECT_ID -c regional -l $REGION_NAME gs://$PROJECT_ID-lcm/
- 将
happiness.csv
文件从公共存储桶复制到您的 Google Cloud Storage 存储桶。
happiness.csv
文件位于公共存储桶 cloud-ml-data 的 NL-classification 文件夹中。
源代码文件位置
如果您需要源代码,可以在此处找到。您可以随时将源代码文件复制到您的 Google Cloud Platform 项目文件夹中。否则,我们建议您在执行每个步骤时直接从本页面复制代码。
Python
本教程包含以下 Python 程序:
language_text_classification_create_dataset.py
- 包含创建数据集的功能import_dataset.py
- 包含导入数据集的功能language_text_classification_create_model.py
- 包含创建模型的功能list_model_evaluations.py
- 包含列出模型评估的功能language_text_classification_predict.py
- 包含与预测相关的功能delete_model.py
- 包含删除模型的功能
Java
本教程包含以下 Java 文件:
LanguageTextClassificationCreateDataset.java
- 包含创建数据集的功能ImportDataset.java
- 包含导入数据集的功能LanguageTextClassificationCreateModel.java
- 包含创建模型的功能ListModelEvaluations.java
- 包含列出模型评估的功能LanguageTextClassificationPredict.java
- 包含与预测相关的功能DeleteModel.java
- 包含删除模型的功能
Node.js
本教程包含以下 Node.js 程序:
language_text_classification_create_dataset.js
- 包含创建数据集的功能import_dataset.js
- 包含导入数据集的功能language_text_classification_create_model.js
- 包含创建模型的功能list_model_evaluations.js
- 包含列出模型评估的功能language_text_classification_predict.js
- 包含与预测相关的功能delete_model.js
- 包含删除模型的功能
运行应用
第 1 步:创建数据集
如要创建自定义模型,首先需要创建一个空数据集,该数据集最终用于保存模型的训练数据。创建数据集时,您可以指定希望自定义模型执行的分类类型:
- 多类别 (MULTICLASS) 分类为每个已分类文档分配一个标签
- 多标签 (MULTILABEL) 允许为一个文档分配多个标签
本教程会创建一个名为“happydb”的数据集并使用多类别分类。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
运行 create_dataset
函数以创建空数据集。您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID 为数据集 (
happydb
) 设置display_name
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
响应
响应中包含新创建的数据集的详细信息,其中包括数据集 ID(用于在以后的请求中引用该数据集)。我们建议您将环境变量 DATASET_ID
设置为返回的数据集 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
第 2 步:将训练项导入数据集
接下来通过使用目标类别标记的训练内容项列表填充数据集。
import_dataset
函数接口接受 .csv 文件作为输入,该文件列出了所有训练文档的位置以及每个训练文档的正确标签。(如需详细了解所需格式,请参阅准备训练数据。)在本教程中,我们将使用上一步中您上传到 Google Cloud Storage 的 happiness.csv
。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
运行 import_data
函数以导入训练内容。需要更改的第一部分代码是上一步中的数据集 ID,第二部分代码是 happiness.csv
的 URI。您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 为数据集设置
dataset_id
(来自上一步的输出) 设置
path
,这是gs://YOUR_PROJECT_ID-lcm/csv/happiness.csv
的 URI
Python
python import_dataset.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.ImportDataset"
Node.js
node import_dataset.js
响应
Processing import... Dataset imported.
第 3 步:创建(训练)模型
拥有已导入带标签训练文档的数据集后,您就可以训练新模型了。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
调用 create_model
函数以创建模型。数据集 ID 来自之前的步骤。您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 为数据集设置
dataset_id
(来自上一步的输出) 为您的模型设置
display_name
(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
响应
create_model
函数开始训练操作并输出操作名称。训练是异步进行的,可能需要一段时间才能完成,因此您可以使用操作 ID 来检查训练状态。训练完成后,create_model
会返回模型 ID。与数据集 ID 一样,我们建议您将环境变量 MODEL_ID
设置为返回的模型 ID 值。
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
第 4 步:评估模型
训练结束后,您可以通过查看模型的精确率、召回率和 F1 得分来评估其就绪情况。
display_evaluation
函数接受模型 ID 作为参数。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
通过执行以下请求来发出显示模型整体评估性能的请求。您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID 将
model_id
设置为您的模型 ID
Python
python list_model_evaluations.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations"
Node.js
node list_model_evaluations.js
响应
如果精确率和召回率分数过低,您可以强化训练数据集并重新训练模型。如需了解详情,请参阅评估模型。
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%
第 5 步:部署模型
当自定义模型达到您的质量标准时,就可以部署模型然后发出预测请求。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
对于 deploy_model
函数,您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID 将
model_id
设置为您的模型 ID
Python
python deploy_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeployModel.java"
Node.js
node deploy_model.js
响应
Model deployment finished.
第 6 步:使用模型进行预测
部署模型后,您就可以使用它来对新内容进行分类了。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
对于 predict
函数,您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID - 将
model_id
设置为您的模型 ID 设置您要预测的
content
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
响应
该函数返回分类得分,指示内容与各类别的匹配程度。
Prediction results: Predicted class name: affection Predicted class score: 0.9702693223953247
第 7 步:删除模型
使用完此示例模型后,您可以永久删除该模型,但之后您将无法再使用该模型进行预测。
复制代码
Python
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Python API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Java API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 AutoML Natural Language 的客户端库,请参阅 AutoML Natural Language 客户端库。 如需了解详情,请参阅 AutoML Natural Language Node.js API 参考文档。
如需向 AutoML Natural Language 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
请求
使用操作类型 delete_model
发送请求以删除您创建的模型。您需要修改以下代码行:
- 将
project_id
设置为您的 PROJECT_ID 将
model_id
设置为您的模型 ID
Python
python delete_model.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel"
Node.js
node delete_model.js
响应
Model deleted.