

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 推論の共通データ形式
<a name="cdf-inference"></a>

Amazon SageMaker AI アルゴリズムは、オンラインのミニバッチ予測取得に使用される、HTTP ペイロード用の異なる MIME タイプをいくつか受け入れて生成します。複数の AWS サービスを使用して、推論を実行する前にレコードを変換または前処理できます。少なくとも、以下のデータを変換する必要があります。
+ 推論リクエストのシリアル化 (ユーザーによる処理) 
+ 推論リクエストの逆シリアル化 (アルゴリズムによる処理) 
+ 推論レスポンスのシリアル化 (アルゴリズムによる処理) 
+ 推論レスポンスの逆シリアル化 (ユーザーによる処理) 

**Topics**
+ [推論リクエストのシリアル化のためにデータを変換する](#ir-serialization)
+ [推論レスポンスの逆シリアル化のためにデータを変換する](#ir-deserialization)
+ [すべてのアルゴリズムに共通のリクエスト形式](#common-in-formats)
+ [組み込みアルゴリズムでバッチ変換を使用する](#cm-batch)

## 推論リクエストのシリアル化のためにデータを変換する
<a name="ir-serialization"></a>

Amazon SageMaker AI アルゴリズムの推論リクエストのコンテンツタイプオプションには、`text/csv`、`application/json`、`application/x-recordio-protobuf` が含まれます。これらのすべてのタイプをサポートしていないアルゴリズムは、他のタイプをサポートできます。たとえば、XGBoost はこのリストの `text/csv` のみをサポートしていますが、`text/libsvm` もサポートしています。

`text/csv` の場合、`invoke_endpoint` の Body 引数の値は、各機能の値をカンマで区切った文字列である必要があります。例えば、4 つの機能があるモデルのレコードは `1.5,16.0,14,23.0` のようになります。トレーニングデータに対して実行された変換はすべて、推論を取得する前にデータに実行される必要があります。機能の順序は重要であるため、変更せずそのままにしておく必要があります。

`application/json` は柔軟性が向上しており、開発者がアプリケーションで使用するための複数の有効な形式を提供しています。高いレベルで、JavaScript のペイロードは次のようになる場合があります。

```
let request = {
  // Instances might contain multiple rows that predictions are sought for.
  "instances": [
    {
      // Request and algorithm specific inference parameters.
      "configuration": {},
      // Data in the specific format required by the algorithm.
      "data": {
         "<field name>": dataElement
       }
    }
  ]
}
```

`dataElement` を指定するために、次のオプションがあります。

**同等のプロトコルバッファ**

```
// Has the same format as the protocol buffers implementation described for training.
let dataElement = {
  "keys": [],
  "values": [],
  "shape": []
}
```

**単純な数値ベクトル**

```
// An array containing numeric values is treated as an instance containing a
// single dense vector.
let dataElement = [1.5, 16.0, 14.0, 23.0]

// It will be converted to the following representation by the SDK.
let converted = {
  "features": {
    "values": dataElement
  }
}
```

**複数数のレコード:**

```
let request = {
  "instances": [
    // First instance.
    {
      "features": [ 1.5, 16.0, 14.0, 23.0 ]
    },
    // Second instance.
    {
      "features": [ -2.0, 100.2, 15.2, 9.2 ]
    }
  ]
}
```

## 推論レスポンスの逆シリアル化のためにデータを変換する
<a name="ir-deserialization"></a>

Amazon SageMaker AI アルゴリズムは、いくつかのレイアウトで JSON を返します。高いレベルで、構造は次のようになります。

```
let response = {
  "predictions": [{
    // Fields in the response object are defined on a per algorithm-basis.
  }]
}
```

予測に含まれるフィールドはアルゴリズムで異なります。以下は、k-means アルゴリズムの出力例です。

**単一レコード推論** 

```
let response = {
  "predictions": [{
    "closest_cluster": 5,
    "distance_to_cluster": 36.5
  }]
}
```

**複数レコード推論**

```
let response = {
  "predictions": [
    // First instance prediction.
    {
      "closest_cluster": 5,
      "distance_to_cluster": 36.5
    },
    // Second instance prediction.
    {
      "closest_cluster": 2,
      "distance_to_cluster": 90.3
    }
  ]
}
```

**protobuf 入力を使用した複数レコード推論**

```
{
  "features": [],
  "label": {
    "closest_cluster": {
      "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0
    },
    "distance_to_cluster": {
      "values": [ 36.5 ]
    }
  },
  "uid": "abc123",
  "metadata": "{ "created_at": '2017-06-03' }"
}
```

SageMaker AI アルゴリズムは JSONLINES 形式もサポートします。この形式では、レコードごとのレスポンスコンテンツが JSON 形式と同じです。複数レコード構造は、レコードごとのレスポンスオブジェクトが改行文字で区切られて集まったものです。2 つの入力データポイントに対する組み込み kmeans アルゴリズムのレスポンスコンテンツは、次のとおりです。

```
{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0}
{"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}
```

バッチ変換の実行中は、`CreateTransformJobRequest` の `Accept` フィールドを `application/jsonlines` に設定して `jsonlines` レスポンスタイプを使用することをお勧めします。

## すべてのアルゴリズムに共通のリクエスト形式
<a name="common-in-formats"></a>

ほとんどのアルゴリズムでは、次の推論リクエスト形式の多くが使用されます。

### JSON リクエストの形式
<a name="cm-json"></a>

**コンテンツタイプ:** application/JSON

**高密度形式**

```
let request =   {
    "instances":    [
        {
            "features": [1.5, 16.0, 14.0, 23.0]
        }
    ]
}


let request =   {
    "instances":    [
        {
            "data": {
                "features": {
                    "values": [ 1.5, 16.0, 14.0, 23.0]
                }
            }
        }
    ]
}
```

**疎形式**

```
{
	"instances": [
		{"data": {"features": {
					"keys": [26, 182, 232, 243, 431],
					"shape": [2000],
					"values": [1, 1, 1, 4, 1]
				}
			}
		},
		{"data": {"features": {
					"keys": [0, 182, 232, 243, 431],
					"shape": [2000],
					"values": [13, 1, 1, 4, 1]
				}
			}
		},
	]
}
```

### JSONLINES リクエストの形式
<a name="cm-jsonlines"></a>

**コンテンツタイプ:** application/JSONLINES

**高密度形式**

高密度形式の単一レコードは、次のいずれかで表すことができます。

```
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

または

```
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
```

**疎形式**

疎形式の単一レコードは、次のように表されます。

```
{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }
```

複数のレコードは、単一レコード表現が改行文字で区切られて集まったものとして表されます。

```
{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } }
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

### CSV リクエストの形式
<a name="cm-csv"></a>

**コンテンツタイプ:** text/CSV; label\_size=0

**注記**  
CSV のサポートは因数分解機では利用できません。

### RECORDIO リクエストの形式
<a name="cm-recordio"></a>

コンテンツタイプ: application/x-recordio-protobuf

## 組み込みアルゴリズムでバッチ変換を使用する
<a name="cm-batch"></a>

バッチ変換の実行中は、JSON の代わりに JSONLINES レスポンスタイプを使用することをお勧めします (ただし、アルゴリズムでサポートされている場合)。これを行うには、`CreateTransformJobRequest` の `Accept` フィールドを `application/jsonlines` に設定します。

変換ジョブを作成するときには、入力データの `ContentType` に基づいて `SplitType` を設定する必要があります。同様に、`CreateTransformJobRequest` の `Accept` フィールドに応じて `AssembleWith` を設定する必要があります。次の表を使用して、これらのフィールドを設定します。


| ContentType | 推奨される SplitType | 
| --- | --- | 
| application/x-recordio-protobuf | RecordIO | 
| text/csv | Line | 
| application/jsonlines | Line | 
| application/json | None | 
| application/x-image | None | 
| image/\* | None | 


| Accept | 推奨される AssembleWith | 
| --- | --- | 
| application/x-recordio-protobuf | None | 
| application/json | None | 
| application/jsonlines | Line | 

特定のアルゴリズムのレスポンス形式の詳細については、以下を参照してください。
+ [DeepAR 推論の形式](deepar-in-formats.md)
+ [因数分解機のレスポンス形式](fm-in-formats.md)
+ [IP Insights 推論データの形式](ip-insights-inference-data-formats.md)
+ [k-means のレスポンス形式](km-in-formats.md)
+ [k-NN リクエストとレスポンスの形式](kNN-inference-formats.md)
+ [線形学習のレスポンス形式](LL-in-formats.md)
+ [NTM のレスポンス形式](ntm-in-formats.md)
+ [Object2Vec 推論のデータ形式](object2vec-inference-formats.md)
+ [Object2Vec のエンコーダー埋め込み](object2vec-encoder-embeddings.md)
+ [PCA のレスポンス形式](PCA-in-formats.md)
+ [RCF のレスポンス形式](rcf-in-formats.md)