Sensei Machine Learning API を使用したモデルのトレーニングと評価
このチュートリアルでは、API 呼び出しを使用してモデルを作成、トレーニング、評価する方法を示します。API ドキュメントの詳しいリストについては、こちらのドキュメントを参照してください。
前提条件
API を使用したモデルのトレーニングと評価に必要なエンジンを作成するには、API を使用してパッケージ化されたレシピをインポートします。
API 呼び出しの作成を開始するには 🔗Experience PlatformAPI 認証のチュートリアルに従います。
このチュートリアルから、次の値を入手できます。
-
{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。 -
{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。 -
{API_KEY}
:固有の Adobe Experience Platform 統合にある特定の API キー値。 -
インテリジェントサービスの Docker イメージへのリンク
API ワークフロー
この API を使用して、トレーニング用の Experiment Run を作成します。このチュートリアルでは、Engines、MLInstances、および Experiments エンドポイントに焦点を当てます。 次の図に、これら 3 つのエンドポイントの関係を示し、Run とモデルの概念を示します。
MLInstance の作成
MLInstance を作成するには、次のリクエストを使用します。API を使用してパッケージ化されたレシピをインポートするチュートリアルで、エンジンを作成した際に返された {ENGINE_ID}
を使用します。
リクエスト
curl -X POST \
https://platform.adobe.io/data/sensei/mlInstances \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/vnd.adobe.platform.sensei+json;profile=mlInstance.v1.json' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-d `{JSON_PAYLOAD}`
{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。{API_KEY}
:固有の Adobe Experience Platform 統合にある特定の API キー値。{JSON_PAYLOAD}
:MLInstance の設定。次に、このチュートリアルで使用する例を示します。
{
"name": "Retail - Instance",
"description": "Instance for ML Instance",
"engineId": "{ENGINE_ID}",
"createdBy": {
"displayName": "John Doe",
"userId": "johnd"
},
"tags": {
"purpose": "tutorial"
},
"tasks": [
{
"name": "train",
"parameters": [
{
"key": "numFeatures",
"value": "10"
},
{
"key": "maxIter",
"value": "2"
},
{
"key": "regParam",
"value": "0.15"
},
{
"key": "trainingDataLocation",
"value": "sample_training_data.csv"
}
]
},
{
"name": "score",
"parameters": [
{
"key": "scoringDataLocation",
"value": "sample_scoring_data.csv"
},
{
"key": "scoringResultsLocation",
"value": "scoring_results.net"
}
]
}
]
}
{JSON_PAYLOAD}
では、tasks
配列でトレーニングとスコアリングに使用するパラメーターを定義します。 {ENGINE_ID}
は使用するエンジンの ID で、tag
フィールドはインスタンスの識別に使用するオプションのパラメーターです。応答には、作成された MLInstance を表す {INSTANCE_ID}
が含まれます。 設定が異なる複数のモデル MLInstance を作成できます。
応答
{
"id": "{INSTANCE_ID}",
"name": "Retail - Instance",
"description": "Instance for ML Instance",
"engineId": "{ENGINE_ID}",
"created": "2018-21-21T11:11:11.111Z",
"createdBy": {
"displayName": "John Doe",
"userId": "johnd"
},
"updated": "2018-21-01T11:11:11.111Z",
"deleted": false,
"tags": {
"purpose": "tutorial"
},
"tasks": [
{
"name": "train",
"parameters": [...]
},
{
"name": "score",
"parameters": [...]
}
]
}
{ENGINE_ID}
:MLInstance が作成されるエンジンを表す ID。{INSTANCE_ID}
:MLInstance を表す ID。
Experiment の作成
データサイエンティストは、トレーニング中に高性能モデルに到達するために、Experiment を使用します。各 Experiment では、データセット、機能、学習パラメーター、ハードウェアが変更されます。次に、Experiment の作成例を示します。
リクエスト
curl -X POST \
https://platform.adobe.io/data/sensei/experiments \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/vnd.adobe.platform.sensei+json;profile=experiment.v1.json' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-api-key: {API_KEY' \
-d `{JSON PAYLOAD}`
{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{API_KEY}
:固有の Adobe Experience Platform 統合にある特定の API キー値。{JSON_PAYLOAD}
:作成する Experiment オブジェクト。次に、このチュートリアルで使用する例を示します。
{
"name": "Experiment for Retail ",
"mlInstanceId": "{INSTANCE_ID}",
"tags": {
"test": "guide"
}
}
{INSTANCE_ID}
:MLInstance を表す ID。
Experiment の作成リクエストを実行すると、次のようなレスポンスが返されます。
応答
{
"id": "{EXPERIMENT_ID}",
"name": "Experiment for Retail",
"mlInstanceId": "{INSTANCE_ID}",
"created": "2018-01-01T11:11:11.111Z",
"updated": "2018-01-01T11:11:11.111Z",
"deleted": false,
"tags": {
"test": "guide"
}
}
{EXPERIMENT_ID}
:作成した Experiment を表す ID。{INSTANCE_ID}
:MLInstance を表す ID。
スケジュールに沿ったトレーニング Experimentの作成
スケジュールに沿った Experiment を使用すると、Experiment Run を作成するたびに、毎回 API 呼び出しを実行する必要がなくなります。Experiment の作成に必要なパラメーターはすべて用意されており、各 Run は定期的に作成されます。
スケジュールに沿った Experiment の作成を指定するには、リクエストの本文に template
セクションを追加する必要があります。スケジュールに沿った Run に必要なパラメーターは、すべて template
に含まれています。たとえば、実行するアクションを示す tasks
、スケジュールに沿った Run の実行予定を示す schedule
などです。
リクエスト
curl -X POST \
https://platform.adobe.io/data/sensei/experiments \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/vnd.adobe.platform.sensei+json;profile=experiment.v1.json' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-api-key: {API_KEY}' \
-d '{JSON_PAYLOAD}`
{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{API_KEY}
:固有の Adobe Experience Platform 統合にある特定の API キー値。{JSON_PAYLOAD}
:使用するデータセット。次に、このチュートリアルで使用する例を示します。
{
"name": "Experiment for Retail",
"mlInstanceId": "{INSTANCE_ID}",
"template": {
"tasks": [{
"name": "train",
"parameters": [
{
"value": "1000",
"key": "numFeatures"
}
],
"specification": {
"type": "SparkTaskSpec",
"executorCores": 5,
"numExecutors": 5
}
}],
"schedule": {
"cron": "*/20 * * * *",
"startTime": "2018-11-11",
"endTime": "2019-11-11"
}
}
}
Experiment を作成する際、本文の {JSON_PAYLOAD}
には mlInstanceId
パラメーターまたは mlInstanceQuery
パラメーターを含める必要があります。この例では、スケジュールに沿った Experiment により、startTime
から endTime
までの間、cron
パラメーターに設定されたとおり 20 分ごとに Run が呼び出されます。
応答
{
"id": "{EXPERIMENT_ID}",
"name": "Experiment for Retail",
"mlInstanceId": "{INSTANCE_ID}",
"created": "2018-11-11T11:11:11.111Z",
"updated": "2018-11-11T11:11:11.111Z",
"deleted": false,
"workflowId": "endid123_0379bc0b_8f7e_4706_bcd9_1a2s3d4f5g_abcdf",
"template": {
"tasks": [
{
"name": "train",
"parameters": [...],
"specification": {
"type": "SparkTaskSpec",
"executorCores": 5,
"numExecutors": 5
}
}
],
"schedule": {
"cron": "*/20 * * * *",
"startTime": "2018-07-04",
"endTime": "2018-07-06"
}
}
}
{EXPERIMENT_ID}
:Experiment を表す ID。{INSTANCE_ID}
:MLInstance を表す ID。
トレーニング用の Experiment Run の作成
Experiment エンティティを作成したら、以下の呼び出しを使用して、トレーニング Run を作成および実行できます。リクエスト本文で、{EXPERIMENT_ID}
と、トリガーする mode
を指定する必要があります。
リクエスト
curl -X POST \
https://platform.adobe.io/data/sensei/experiments/{EXPERIMENT_ID}/runs \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: application/vnd.adobe.platform.sensei+json;profile=experimentRun.v1.json' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-api-key: {API_KEY}' \
-d '{JSON_PAYLOAD}'
{EXPERIMENT_ID}
:目的の Experiment に対応する ID。これは、Experiment を作成した際のレスポンスに含まれています。{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{API_KEY}
:固有の Adobe Experience Platform 統合にある特定の API キー値。{JSON_PAYLOAD}
:トレーニング Run を作成するには、本文に次の内容を含める必要があります。
{
"mode":"Train"
}
また、tasks
配列を含めることで、設定パラメーターを上書きすることもできます。
{
"mode":"Train",
"tasks": [
{
"name": "train",
"parameters": [
{
"key": "numFeatures",
"value": "2"
}
]
}
]
}
次のレスポンスが返され、{EXPERIMENT_RUN_ID}
と設定(tasks
の下)が示されます。
応答
{
"id": "{EXPERIMENT_RUN_ID}",
"mode": "train",
"experimentId": "{EXPERIMENT_ID}",
"created": "2018-01-01T11:11:11.903Z",
"updated": "2018-01-01T11:11:11.903Z",
"deleted": false,
"tasks": [
{
"name": "Train",
"parameters": [...]
}
]
}
{EXPERIMENT_RUN_ID}
:Experiment Run を表す ID。{EXPERIMENT_ID}
:Experiment Run が含まれる Experiment を表す ID。
Experiment Run のステータスの取得
Experiment Run のステータスを照会するには、{EXPERIMENT_RUN_ID}
を使用します。
リクエスト
curl -X GET \
https://platform.adobe.io/data/sensei/experiments/{EXPERIMENT_ID}/runs/{EXPERIMENT_RUN_ID}/status \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-api-key: {API_KEY}'
{EXPERIMENT_ID}
:Experiment を表す ID。{EXPERIMENT_RUN_ID}
:Experiment Run を表す ID。{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。{API_KEY}
:固有の Adobe Experience Platform 統合にある特定の API キー値。
応答
GET 呼び出しを実行すると、次に示すように、state
にス テータスが示されます。
{
"id": "{EXPERIMENT_ID}",
"name": "RunStatus for experimentRunId {EXPERIMENT_RUN_ID}",
"experimentRunId": "{EXPERIMENT_RUN_ID}",
"deleted": false,
"status": {
"tasks": [
{
"id": "{MODEL_ID}",
"state": "DONE",
"tasklogs": [
{
"name": "execution",
"url": "https://mlbaprod1sapwd7jzid.file.core.windows.net/..."
},
{
"name": "stderr",
"url": "https://mlbaprod1sapwd7jzid.file.core.windows.net/..."
},
{
"name": "stdout",
"url": "https://mlbaprod1sapwd7jzid.file.core.windows.net/..."
}
]
}
]
}
}
{EXPERIMENT_RUN_ID}
:Experiment Run を表す ID。{EXPERIMENT_ID}
:Experiment Run が含まれる Experiment を表す ID。
DONE
の状態意外に、次の状態も示されます。
PENDING
RUNNING
FAILED
詳細については、tasklogs
パラメーターの下の詳細ログを確認してください。
トレーニング済みモデルの取得
トレーニング中に、前述の手順で作成したトレーニング済みモデルを取得するには、次のリクエストを実行します。
リクエスト
curl -X GET \
'https://platform.adobe.io/data/sensei/models/?property=experimentRunId=={EXPERIMENT_RUN_ID}' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-gw-ims-org-id: {ORG_ID}'
{EXPERIMENT_RUN_ID}
:目的の Experiment Run に対応する ID。これは、Experiment Run を作成した際のレスポンスに含まれています。{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。
レスポンスは、作成されたトレーニング済みモデルを表します。
応答
{
"children": [
{
"id": "{MODEL_ID}",
"name": "Tutorial trained Model",
"experimentId": "{EXPERIMENT_ID}",
"experimentRunId": "{EXPERIMENT_RUN_ID}",
"description": "trained model for ID",
"modelArtifactUri": "wasb://test-models@mlpreprodstorage.blob.core.windows.net/{MODEL_ID}",
"created": "2018-01-01T11:11:11.011Z",
"updated": "2018-01-01T11:11:11.011Z",
"deleted": false
}
],
"_page": {
"property": "ExperimentRunId=={EXPERIMENT_RUN_ID},deleted!=true",
"count": 1
}
}
{MODEL_ID}
:モデルに対応する ID。{EXPERIMENT_ID}
:Experiment Run が含まれる Experiment に対応する ID。{EXPERIMENT_RUN_ID}
:Experiment Run に対応する ID。
スケジュールに沿った Experiment の停止と削除
endTime
よりも前に、スケジュールに沿った Experiment の実行を停止する場合は、{EXPERIMENT_ID}
に DELETE リクエストを実行します。
リクエスト
curl -X DELETE \
'https://platform.adobe.io/data/sensei/experiments/{EXPERIMENT_ID}' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-gw-ims-org-id: {ORG_ID}'
{EXPERIMENT_ID}
:Experiment に対応する ID。{ACCESS_TOKEN}
:認証後に提供される特定の Bearer トークン値。{ORG_ID}
:組織の資格情報が、一意のAdobe Experience Platform統合で見つかりました。
次に、Experiment が正常に削除されたことを通知するレスポンスを示します。
応答
{
"title": "Success",
"status": 200,
"detail": "Experiment successfully deleted"
}
次の手順
このチュートリアルでは、API を使用してエンジン、Experiment、スケジュールに沿った Experiment Run およびトレーニング済みモデルを作成する方法について説明しました。次の演習では、最もパフォーマンスの高いトレーニング済みモデルを使用して新しいデータセットをスコアリングし、予測を行います。