このチュートリアルでは、AutoML Natural Language を使用して、コンテンツを分類するためのカスタムモデルを作成する方法について説明します。このアプリケーションは、Kaggle のオープンソース データセット HappyDB のクラウド ソーシングで作成された「幸せな瞬間」のコーパスを使用して、カスタムモデルをトレーニングします。結果として得られるモデルにより、さまざまな幸せな瞬間が、幸せの原因に対応するカテゴリに分類されます。
このデータは、クリエイティブ・コモンズの CCO: Public Domain ライセンスで入手できます。
このチュートリアルでは、カスタムモデルのトレーニング、パフォーマンスの評価、新しいコンテンツの分類について説明します。
要件
プロジェクトの環境を構成する
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
AutoML Natural Language API を有効にします。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
AutoML Natural Language API を有効にします。
- Google Cloud CLI をインストールします。
- 手順に沿ってサービス アカウントを作成し、鍵ファイルをダウンロードします。
GOOGLE_APPLICATION_CREDENTIALS
環境変数を、サービス アカウントの作成時にダウンロードしたサービス アカウントの鍵ファイルのパスに設定します。次に例を示します。export GOOGLE_APPLICATION_CREDENTIALS=key-file
- 次のコマンドを使用して、新しいサービス アカウントを AutoML 編集者の IAM ロールに追加します。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
にする必要があります。次のコマンドによって、$PROJECT_ID-lcm
という名前のus-central1
リージョンにストレージ バケットが作成されます。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 は、分類されたドキュメントごとに 1 つのラベルを割り当てます。
- MULTILABEL を使用すると、1 つのドキュメントに複数のラベルを割り当てることができます。
このチュートリアルでは、「happydb」という名前のデータセットを作成し、MULTICLASS を使用します。
コードのコピー
Python
Java
Node.js
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
Java
Node.js
AutoML Natural Language で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
リクエスト
import_data
関数を実行してトレーニング コンテンツをインポートします。前のステップのデータセット ID を変更し、次に happiness.csv
の URI を変更します。次のコード行を変更する必要があります。
project_id
を実際の PROJECT_ID に設定します- データセットの
dataset_id
を設定します(前のステップの出力から取得) (
gs://YOUR_PROJECT_ID-lcm/csv/happiness.csv
)の URI であるpath
を設定します
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
Java
Node.js
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 の場合と同様に、返されたモデル ID に環境変数 MODEL_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
Java
Node.js
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
Java
Node.js
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
Java
Node.js
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
Java
Node.js
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.