データセットのトレーニングとモデルの作成
学習の目的
- Einstein Intent API をコールしてデータセットをトレーニングし、モデルを作成する。
- API を使用してトレーニングの状況を照会する。
- トレーニング状況で返された基本的な統計について説明する。
トレーニングとは?
機械学習では、トレーニングとは、アルゴリズムとデータと組み合わされてモデルを作成するプロセスのことです。アルゴリズムは指定されたデータから「学習」し、その学習はモデルにカプセル化されます。
ここでのシナリオでは、モデルは、「ユーザが質問しているサービスの種別は?」という質問に答えを返すアイテムです。モデルは、ユーザがサービス要求フォームに入力したテキストに基づいて答えます。
データセットのトレーニング
-
次の cURL コマンドの <TOKEN> を自分のトークンに、<DATASET_ID> をデータセット ID に置き換えます。コマンドラインウィンドウでコマンドを実行します。
curl -X POST -H "Authorization: Bearer <TOKEN>" -H "Cache-Control: no-cache" -H "Content-Type: multipart/form-data" -F "name=Service Request Routing Model" -F "datasetId=<DATASET_ID>" https://api.einstein.ai/v2/language/train
API 応答は次の JSON のようになります。データ量によっては、データセットのトレーニングに時間がかかる場合があります。{ "datasetId": 1010060, "datasetVersionId": 0, "name": "Service Request Routing Model", "status": "QUEUED", "progress": 0, "createdAt": "2017-08-18T21:39:53.000+0000", "updatedAt": "2017-08-18T21:39:53.000+0000", "learningRate": 0, "epochs": 0, "queuePosition": 1, "object": "training", "modelId": "3XVRF4KPA4522DWDRDCQ4D4BEQ", "trainParams": null, "trainStats": null, "modelType": "text-intent" }
注意すべき重要な項目は status と modelId です。status 項目値が QUEUED の場合、トレーニングプロセスがまだ開始していないことを示します。queuePosition 項目は、プロセスがキューの先頭にあることを示します。modelId 項目にはモデルの ID が含まれます。modelId をメモします。この ID は、コードでモデルを参照するときに使用します。
トレーニング状況の取得
-
次の cURL コマンドの <TOKEN> を自分のトークンに、<MODEL_ID> をモデル ID に置き換えます。コマンドラインウィンドウでコマンドを実行します。
curl -X GET -H "Authorization: Bearer <TOKEN>" -H "Cache-Control: no-cache" https://api.einstein.ai/v2/language/train/<MODEL_ID>
API 応答は次の JSON のようになります。トレーニングは、データセットのサイズによっては完了までに時間がかかります。status が RUNNING の場合、トレーニングプロセスはまだ実行中であることを示します。{ "datasetId": 1010060, "datasetVersionId": 0, "name": "Service Request Routing Model", "status": "RUNNING", "progress": 0, "createdAt": "2017-09-18T19:59:33.000+0000", "updatedAt": "2017-09-18T19:59:33.000+0000", "learningRate": 0, "epochs": 0, "object": "training", "modelId": "3XVRF4KPA4522DWDRDCQ4D4BEQ", "trainParams": null, "trainStats": null, "modelType": "text-intent" }
status 項目値が SUCCEEDED の場合、トレーニングは成功し、モデルはユーザが使用できる状態であることを示します。モデルの準備ができると、API 応答は次の JSON のようになります。次の単元に進む前に、status が SUCCEEDED であることを確認してください。{ "datasetId": 1010060, "datasetVersionId": 6189, "name": "Service Request Routing Model", "status": "SUCCEEDED", "progress": 1, "createdAt": "2017-08-18T21:39:53.000+0000", "updatedAt": "2017-08-18T21:42:23.000+0000", "learningRate": 0, "epochs": 1000, "object": "training", "modelId": "3XVRF4KPA4522DWDRDCQ4D4BEQ", "trainParams": null, "trainStats": { "labels": 5, "examples": 150, "totalTime": "00:02:28:577", "transforms": null, "trainingTime": "00:02:25:646", "earlyStopping": true, "lastEpochDone": 49, "modelSaveTime": "00:00:00:579", "testSplitSize": 32, "trainSplitSize": 118, "datasetLoadTime": "00:00:02:931", "preProcessStats": null, "postProcessStats": null }, "modelType": "text-intent" }
trainStats オブジェクトには、トレーニングプロセスのさまざまなタスクにかかる時間に関する情報が含まれます。これは、データの量に基づくトレーニング時間を測定するのに役立つ可能性がある情報です。
もう 1 つの興味深い項目は epochs (エポック) 項目です。エポックは、トレーニングの反復の 1 回、つまり、データセットのすべての例を最初から最後まで完全に処理することです。使用したコマンドでデータセットをトレーニングすると、API はデータセットのデータ量に基づいてデフォルトのエポック数を選択します。ただし、トレーニングプロセスで使用するエポック数を渡すことができます。
このモジュールのデータセットでは、API は 1,000 エポック (トレーニングの反復回数) を選択しました。ただし、earlyStopping 項目は、1,000 エポックを完了する前にトレーニングが停止したことをレポートしています。また、lastEpochDone 項目は、トレーニングが 49 エポック後に停止したことをレポートしています。
なぜトレーニングは 1,000 エポックを完了する前に停止したのでしょうか? トレーニングプロセスの間、API はそれ以上トレーニングしてもモデルの精度は上がらないと判断すると、トレーニングを早く終了します。API はこのような方法でユーザに代わり多くの詳細を処理します。
リソース
- 『Einstein Platform Developer Guide (Einstein プラットフォーム開発者ガイド)』の「Train a Dataset (データセットのトレーニング)」
- 『Einstein Platform Developer Guide (Einstein プラットフォーム開発者ガイド)』の「Get Training Status (トレーニング状況の取得)」