

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

# Object2Vec アルゴリズム
<a name="object2vec"></a>

Amazon SageMaker AI Object2Vec は高度にカスタマイズ可能な汎用のニューラル埋め込みアルゴリズムです。このアルゴリズムは、高次元オブジェクトの低次元高密度埋め込みを学習できます。埋め込みは、元の空間内のオブジェクトのペア間の関係の意味が、埋め込み空間内に保持されるように学習されます。たとえば、学習した埋め込みを使用して、オブジェクトの最近傍を効率的に計算したり、関連オブジェクトの自然なクラスターを低次元空間で視覚化したりすることができます。分類や回帰など、下流の監視タスクで対応するオブジェクトの機能として埋め込みを使用することもできます。

Object2Vec は、SageMaker AI [BlazingText アルゴリズム](blazingtext.md) で最適化されている単語用のよく知られた埋め込み技術である Word2Vec を一般化したものです。実用的なユースケースに Object2Vec を適用する方法を示したブログ投稿については、「[Introduction to Amazon SageMaker AI Object2Vec](https://aws.amazon.com/blogs/machine-learning/introduction-to-amazon-sagemaker-object2vec/)」を参照してください。

**Topics**
+ [Object2Vec アルゴリズムの I/O インターフェイス](#object2vec-inputoutput)
+ [Object2Vec アルゴリズムの EC2 インスタンスに関する推奨事項](#object2vec--instances)
+ [Object2Vec サンプルノートブック](#object2vec-sample-notebooks)
+ [Object2Vec の仕組み](object2vec-howitworks.md)
+ [Object2Vec ハイパーパラメータ](object2vec-hyperparameters.md)
+ [Object2Vec モデルを調整する](object2vec-tuning.md)
+ [Object2Vec トレーニングのデータ形式](object2vec-training-formats.md)
+ [Object2Vec 推論のデータ形式](object2vec-inference-formats.md)
+ [Object2Vec のエンコーダー埋め込み](object2vec-encoder-embeddings.md)

## Object2Vec アルゴリズムの I/O インターフェイス
<a name="object2vec-inputoutput"></a>

Object2Vec は、多数の入力データタイプで使用できます。以下に例を示します。


| 入力データ型 | 例 | 
| --- | --- | 
|  センテンスとセンテンスのペア  | 「複数の男性がプレイしているサッカーの試合」。および「何人かの男性はスポーツをしている」。 | 
|  ラベルとシーケンスのペア  | 映画「タイタニック」のジャンルタグ (例: 「ラブロマンス」や「ドラマ」) とその簡単な説明「ジェームズキャメロンのタイタニックは豪華客船タイタニック号の悲劇的初航海を描いた壮大なアクション満載のラブロマンス映画です。上流階級の彼女が乗っていたこの豪華客船は、1912 年 4 月 15 日の早朝に北大西洋の氷山に接触して沈没し、最終的に 1,500 名を超える犠牲者がでました。」 | 
|  顧客と顧客のペア  |  Jane の顧客 ID と Jackie の顧客 ID。  | 
|  製品と製品のペア  |  フットボールの製品 ID とバスケットボールの製品 ID。  | 
|  商品レビューユーザーと商品のペア  |  ユーザーの ID とそのユーザーが購入した商品 (林檎、梨、オレンジなど)。  | 

入力データをサポートされている形式に変換するには、それを前処理する必要があります。現在、Object2Vec は基本的に次の 2 つの入力タイプをサポートしています。
+ 個別のトークン。単一の `integer-id` のリストとして表されます。例えば、`[10]`。
+ 離散トークンのシーケンス。`integer-ids` のリストとして表されます。例えば、`[0,12,10,13]`。

各ペアのオブジェクトは非対称にすることができます。たとえば、ペアには (トークン、シーケンス)、(トークン、トークン) ペア、(シーケンス、シーケンス) があります。トークン入力の場合、アルゴリズムは単純な埋め込みを互換性のあるエンコーダーとしてサポートします。トークンベクトルのシーケンスの場合、アルゴリズムはエンコーダーとして以下をサポートします。
+  平均プール埋め込み
+  階層型畳み込みニューラルネットワーク (CNN)
+  多層双方向長短期記憶 (BiLSTM) 

各ペアの入力ラベルは、次のいずれかになります。
+ ペアのオブジェクト間の関係を表すカテゴリ別ラベル 
+ 2 つのオブジェクト間の類似性の強度を表すスコア 

分類に使用されるカテゴリ別ラベルの場合、アルゴリズムは交差エントロピー損失関数をサポートします。回帰で使用される評価/スコアベースのラベルの場合、アルゴリズムは平均二乗誤差 (MSE) 損失関数をサポートします。モデルトレーニングジョブを作成するときに、ハイパーパラメータ `output_layer` を使用して、これらの損失関数を指定します。

## Object2Vec アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="object2vec--instances"></a>

使用する Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのタイプは、トレーニングまたは推論を実行しているかによって異なります。

Object2Vec アルゴリズムを使用して CPU 上でモデルをトレーニングする場合は、ml.m5.2xlarge インスタンスから始めます。GPU のトレーニングでは、ml.p2.xlarge インスタンスから始めます。このインスタンスでのトレーニングに時間がかかりすぎる場合は、より大きなインスタンスを使用できます。現在、Object2Vec アルゴリズムは単一のマシンでのみトレーニングできます。ただし、複数の GPU をサポートします。Object2Vec は、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

ディープニューラルネットワークを持つ、トレーニングされた Object2Vec モデルでの推論には、ml.p3.2xlarge GPU インスタンスを使用することをお勧めします。GPU メモリ不足のため、`INFERENCE_PREFERRED_MODE` 環境変数を指定して [GPU 最適化: 分類または回帰](object2vec-inference-formats.md#object2vec-inference-gpu-optimize-classification) または [GPU 最適化: エンコーダー埋め込み](object2vec-encoder-embeddings.md#object2vec-inference-gpu-optimize-encoder-embeddings) 推論ネットワークが GPU にロードされるかどうかを最適化することができます。

## Object2Vec サンプルノートブック
<a name="object2vec-sample-notebooks"></a>
+ [Object2Vec を使用してセンテンスを固定長の埋め込みにエンコードする](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object2vec_sentence_similarity/object2vec_sentence_similarity.html)

# Object2Vec の仕組み
<a name="object2vec-howitworks"></a>

Amazon SageMaker AI Object2Vec アルゴリズムを使用する場合は、データの処理、モデルのトレーニング、推論の生成を行う標準ワークフローに従ってください。

**Topics**
+ [ステップ 1: データを処理する](#object2vec-step-1-data-preprocessing)
+ [ステップ 2: モデルをトレーニングする](#object2vec-step-2-training-model)
+ [ステップ 3: 推論を生成する](#object2vec-step-3-inference)

## ステップ 1: データを処理する
<a name="object2vec-step-1-data-preprocessing"></a>

前処理中に、データを「[Object2Vec トレーニングのデータ形式](object2vec-training-formats.md)」で指定した [JSON Lines](http://jsonlines.org/) テキストファイル形式に変換します。トレーニング中に最高の精度を得られるように、データをモデルに入れる前にランダムにシャッフルします。ランダム配列をどのように生成するかは、言語によって異なります。Python の場合は `np.random.shuffle`、Unix の場合は `shuf` を使用します。

## ステップ 2: モデルをトレーニングする
<a name="object2vec-step-2-training-model"></a>

SageMaker AI Object2Vec アルゴリズムには、次の主なコンポーネントがあります。
+ **2 つの入力チャネル** - 入力チャネルは、同じタイプまたは異なるタイプのオブジェクトのペアを入力として受け取り、それらを独立したカスタマイズ可能なエンコーダーに渡します。
+ **2 つのエンコーダー** - enc0 および enc1 の 2 つのエンコーダーは、各オブジェクトを固定長の埋め込みベクトルに変換します。ペアになっているオブジェクトのエンコードされた埋め込みは、コンパレーターに渡されます。
+ **コンパレーター** - コンパレーターはさまざまな方法で埋め込みを比較し、ペアになったオブジェクト間の関係の強さを示すスコアを出力します。センテンスのペアに対する出力スコア。たとえば、1 はセンテンスのペア間の強い関係を示し、0 は弱い関係を表します。

トレーニング中、アルゴリズムはオブジェクトのペアとそれらの関係ラベルまたはスコアを入力として受け入れます。以前に示したように、各ペアではさまざまなタイプのオブジェクトを使用できます。両方のエンコーダへの入力が同じトークンレベルの単位で構成されている場合は、トレーニングジョブを作成するときに `tied_token_embedding_weight` ハイパーパラメータを `True` に設定することで、共有トークン埋め込みレイヤーを使用できます。たとえば、両方に単語トークンレベルの単位を含むセンテンスを比較する場合などです。指定した比率で負のサンプルを生成するには、負のサンプルの希望する比率のハイパーパラメータ `negative_sampling_rate` を正のサンプルの比率に設定します。このハイパーパラメータによって、観察された正のサンプルとそれ以外の負のサンプルを区別しやすくなります。

オブジェクトのペアは、対応するオブジェクトの入力タイプと互換性のある、カスタマイズ可能な独立したエンコーダーを経由して渡されます。エンコーダーは、ペアになっている各オブジェクトを同じ長さの固定長埋め込みベクトルに変換します。ベクトルのペアは比較演算子に渡され、比較演算子は `comparator_list` ハイパーパラメータで指定された値を使用してベクトルを単一のベクトルにアセンブルします。アセンブルされたベクトルは、多層パーセプトロン (MLP) レイヤーを通過します。これにより、損失関数によって、ユーザーが指定したラベルと比較する出力が生成されます。この比較では、モデルによって予測されるように、ペアのオブジェクト間の関係の強度を評価します。次の図はこのワークフローを示しています。

![\[Object2Vec アルゴリズムのアーキテクチャ (データ入力からスコア)\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/object2vec-training-image.png)


## ステップ 3: 推論を生成する
<a name="object2vec-step-3-inference"></a>

モデルがトレーニングされたら、トレーニングされたエンコーダーを使用して、入力オブジェクトの前処理を行ったり、次の 2 種類の推論を実行したりできます。
+ 対応するエンコーダーを使用してシングルトン入力オブジェクトを固定長埋め込みに変換する
+ ペアになっている入力オブジェクト間の関係ラベルまたはスコアを予測する

推論サーバーは、入力データに基づいてどのタイプがリクエストされているかを自動的に判別します。埋め込みを出力として取得するには、1 つの入力のみを指定します。関係ラベルまたはスコアを予測するには、ペアに両方の入力を指定します。

# Object2Vec ハイパーパラメータ
<a name="object2vec-hyperparameters"></a>

`CreateTrainingJob` リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Object2Vec トレーニングアルゴリズムのハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| enc0\$1max\$1seq\$1len |  enc0 エンコーダーの最大シーケンス長。 **必須** 有効な値: 1 ≤ 整数 ≤ 5000  | 
| enc0\$1vocab\$1size |  enc0 トークンの語彙サイズ。 **必須** 有効な値: 2 ≤ 整数 ≤ 3000000  | 
| bucket\$1width |  バケット処理が有効になっている場合のデータシーケンス長の許容差。バケット処理を有効にするには、このパラメータにゼロ以外の値を指定します。 **オプション** 有効な値: 0 ≤ 整数 ≤ 100 デフォルト値: 0 (バケット処理なし)  | 
| comparator\$1list |  2 つの埋め込みを比較する方法のカスタマイズに使用されるリスト。Object2Vec 比較演算子レイヤーは、両方のエンコーダーからエンコードを入力として受け取り、単一のベクトルを出力します。このベクトルはサブベクトルの連結です。`comparator_list` に渡される文字列値と、それらが渡される順序によって、これらのサブベクトルの組み立て方法が決まります。たとえば、`comparator_list="hadamard, concat"` の場合、比較演算子は、2 つのエンコーディングのアダマール積と 2 つのエンコーディングの連結を連結してベクトルを作成します。一方、`comparator_list="hadamard"` の場合、比較演算子は 2 つのエンコーディングのみのアダマール積としてベクトルを構成します。 **オプション** 有効な値: 3 つの 2 項演算子の名前の任意の組み合わせを含む文字列: `hadamard`、`concat`、または `abs_diff`。現在 Object2Vec アルゴリズムでは、2 つのベクトルエンコーディングのディメンションが同じになるよう義務付けています。これらの演算子によって、次のようにサブベクトルが生成されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `"hadamard, concat, abs_diff"`  | 
| dropout |  ネットワークレイヤーのドロップアウト確率。*ドロップアウト*は、ニューラルネットワークで使用される正則化の一種であり、共依存ニューロンをトリミングすることで過剰適合を減らします。 **オプション** 有効な値: 0.0 ≤ 浮動小数点数 ≤ 1.0 デフォルト値: 0.0  | 
| early\$1stopping\$1patience |  早期停止前に許容される改善なしの連続エポック数が適用されます。改善は、`early_stopping_tolerance` ハイパーパラメータで定義されます。 **オプション** 有効な値: 1 ≤ 整数 ≤ 5 デフォルト値： 3  | 
| early\$1stopping\$1tolerance |  `early_stopping_patience` ハイパーパラメータで指定される連続するエポックが複数回繰り返された後で早期停止が起きるのを回避するために、アルゴリズムが、連続するエポック間で達成しなければならない損失関数の減少。 **オプション** 有効な値: 0.000001 ≤ 浮動小数点数 ≤ 0.1 デフォルト値: 0.01  | 
| enc\$1dim |  埋め込みレイヤーの出力の次元。 **オプション** 有効な値: 4 ≤ 整数 ≤ 10000 デフォルト値: 4096  | 
| enc0\$1network |  enc0 エンコーダーのネットワークモデル。 **オプション** 有効な値: `hcnn`、`bilstm`、または `pooled_embedding` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `hcnn`  | 
| enc0\$1cnn\$1filter\$1width |  畳み込みニューラルネットワーク (CNN) enc0 エンコーダーのフィルタ幅。 **条件付き** 有効な値: 1 ≤ 整数 ≤ 9 デフォルト値： 3  | 
| enc0\$1freeze\$1pretrained\$1embedding |  enc0 の事前トレーニング済み埋め込み重みを凍結するかどうか。 **条件付き** 有効な値: `True` または `False` デフォルト値: `True`  | 
| enc0\$1layers  |  enc0 エンコーダーのレイヤーの数。 **条件付き** 有効な値: `auto` または 1 ≤ 整数 ≤ 4 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `auto`  | 
| enc0\$1pretrained\$1embedding\$1file |  補助データチャネル内の事前トレーニング済み enc0 トークン埋め込みファイルのファイル名。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc0\$1token\$1embedding\$1dim |  enc0 トークン埋め込みレイヤーの出力次元。 **条件付き** 有効な値: 2 ≤ 整数 ≤ 1000 デフォルト値: 300  | 
| enc0\$1vocab\$1file |  事前トレーニング済みの enc0 トークン埋め込みベクトルを数値の語彙 ID にマッピングするための語彙ファイル。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc1\$1network |  enc1 エンコーダーのネットワークモデル。enc1 エンコーダーで、enc0 と同じネットワークを使用する場合は (ハイパーパラメータ値を含む)、値を `enc0` に設定します。  enc0 および enc1 エンコーダーネットワークに同一の対称アーキテクチャがあっても、これらのネットワークの共有パラメータ値は共有されていません。  **オプション** 有効な値: `enc0`、`hcnn`、`bilstm`、または `pooled_embedding` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `enc0`  | 
| enc1\$1cnn\$1filter\$1width |  CNN enc1 エンコーダーのフィルタ幅。 **条件付き** 有効な値: 1 ≤ 整数 ≤ 9 デフォルト値： 3  | 
| enc1\$1freeze\$1pretrained\$1embedding |  enc1 の事前トレーニング済み埋め込み重みを凍結するかどうか。 **条件付き** 有効な値: `True` または `False` デフォルト値: `True`  | 
| enc1\$1layers  |  enc1 エンコーダーのレイヤーの数。 **条件付き** 有効な値: `auto` または 1 ≤ 整数 ≤ 4 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `auto`  | 
| enc1\$1max\$1seq\$1len |  enc1 エンコーダーの最大シーケンス長。 **条件付き** 有効な値: 1 ≤ 整数 ≤ 5000  | 
| enc1\$1pretrained\$1embedding\$1file |  補助データチャネル内の事前トレーニング済み enc1 トークン埋め込みファイルのファイル名。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc1\$1token\$1embedding\$1dim |  enc1 トークン埋め込みレイヤーの出力次元。 **条件付き** 有効な値: 2 ≤ 整数 ≤ 1000 デフォルト値: 300  | 
| enc1\$1vocab\$1file |  事前トレーニング済みの enc1 トークン埋め込みを語彙 ID にマッピングするための語彙ファイル。 **条件付き** 有効な値: 英数字、アンダースコア、またはピリオドを含む文字列。[A-Za-z0-9\$1.\$1\$1]  デフォルト値: "" (空の文字列)  | 
| enc1\$1vocab\$1size |  enc0 トークンの語彙サイズ。 **条件付き** 有効な値: 2 ≤ 整数 ≤ 3000000  | 
| epochs |  トレーニングのために実行するエポックの数  **オプション** 有効な値: 1 ≤ 整数 ≤ 100 デフォルト値: 30  | 
| learning\$1rate |  トレーニングの学習レート。 **オプション** 有効な値: 1.0E-6 ≤ 浮動小数点数 ≤ 1.0 デフォルト値: 0.0004  | 
| mini\$1batch\$1size |  トレーニング中に `optimizer` 用に分割されるデータセットのバッチサイズ。 **オプション** 有効な値: 1 ≤ 整数 ≤ 10000 デフォルト値: 32  | 
| mlp\$1activation |  多層パーセプトロン (MLP) のレイヤーの活性化関数のタイプ。 **オプション** 有効な値: `tanh`、`relu`、または `linear` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `linear`  | 
| mlp\$1dim |  MLP のレイヤーからの出力の寸法。 **オプション** 有効な値: 2 ≤ 整数 ≤ 10000 デフォルト値: 512  | 
| mlp\$1layers |  ネットワークの MLP レイヤーの数。 **オプション** 有効な値: 0 ≤ 整数 ≤ 10 デフォルト値: 2  | 
| negative\$1sampling\$1rate |  アルゴリズムのトレーニングを支援するために生成された、負のサンプルと、ユーザーから提供された正のサンプルの比率。負のサンプルは、実際には発生する可能性が低いデータを表し、トレーニング用に負のラベルが付けられています。観察された正のサンプルとそれ以外の負のサンプルを区別するためにモデルをトレーニングしやすくなります。トレーニングに使用される正のサンプルに対する負のサンプルの比率を指定するには、値を正の整数に設定します。たとえば、すべてのサンプルが正である入力データでアルゴリズムをトレーニングし、`negative_sampling_rate` を 2 に設定した場合、Object2Vec アルゴリズムでは、正のサンプルごとに 2 つの負のサンプルが内部で生成されます。トレーニング中に負のサンプルを生成または使用しない場合は、値を 0 に設定します。 **オプション** 有効な値: 0 ≤ 整数 デフォルト値: 0 (オフ)  | 
| num\$1classes |  分類トレーニングのクラス数。Amazon SageMaker AI では、回帰問題のこのハイパーパラメータは無視されます。 **オプション** 有効な値: 2 ≤ 整数 ≤ 30 デフォルト値: 2  | 
| optimizer |  オプティマイザのタイプ。 **オプション** 有効な値: `adadelta`、`adagrad`、`adam`、`sgd`、または `rmsprop`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `adam`  | 
| output\$1layer |  タスクが回帰または分類であると指定する出力レイヤーのタイプ。 **オプション** 有効な値: `softmax` または `mean_squared_error` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) デフォルト値: `softmax`  | 
| tied\$1token\$1embedding\$1weight |  両方のエンコーダーで共有埋め込みレイヤーを使用するかどうか。両方のエンコーダへの入力で同じトークンレベルのユニットを使用する場合は、共有トークン埋め込みレイヤーを使用します。たとえば、ドキュメントのコレクションで、1 つのエンコーダーでセンテンスをエンコードし、別のエンコーダーでドキュメント全体をエンコードする場合は、共有トークンの埋め込みレイヤーを使用できます。これは、ドキュメントとドキュメントのいずれも、同じ語彙からの単語トークンで構成されているためです。 **オプション** 有効な値: `True` または `False` デフォルト値: `False`  | 
| token\$1embedding\$1storage\$1type |  トレーニング中に使用されるグラデーション更新のモード: `dense` モードが使用されると、グラデーションのほとんどの行の値がゼロであっても、オプティマイザはトークン埋め込みレイヤーのフルグラデーションのマトリックスを計算します。`sparse` モードを使用すると、オプティマイザはミニバッチで実際に使用されているグラデーションの行のみを保存します。アルゴリズムで遅延グラデーション更新を実行して、ゼロ以外の行でのみグラデーションを計算し、トレーニングはスピードアップする場合は、`row_sparse` を指定します。次のように、値を `row_sparse` に設定すると、他のハイパーパラメータに使用できる値が制限されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/object2vec-hyperparameters.html) **オプション** 有効な値: `dense` または `row_sparse` デフォルト値: `dense`  | 
| weight\$1decay |  最適化に使用される重み減衰パラメータ。 **オプション** 有効な値: 0 ≤ 浮動小数点数 ≤ 10000 デフォルト値: 0 (減衰なし)  | 

# Object2Vec モデルを調整する
<a name="object2vec-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。目標メトリクスで、アルゴリズムによって計算されるいずれかのメトリクスを使用します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## Object2Vec アルゴリズムで計算されるメトリクス
<a name="object2vec-metrics"></a>

Object2Vec アルゴリズムには、分類と回帰の両方のメトリクスがあります。`output_layer` タイプは、自動モデル調整に使用できるメトリクスを決定します。

### Object2Vec アルゴリズムで計算される回帰メトリクス
<a name="object2vec-regressor-metrics"></a>

アルゴリズムは、テスト中と検証中に計算された二乗平均誤差回帰メトリクスを報告します。回帰タスク用にモデルを調整するときには、このメトリクスを目標として選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:mean\$1squared\$1error | 平均平方根誤差 | 最小化 | 
| validation:mean\$1squared\$1error | 平均平方根誤差 | 最小化 | 

### Object2Vec アルゴリズムで計算される分類メトリクス
<a name="object2vec-classification-metrics"></a>

Object2Vec アルゴリズムは、テスト中と検証中に計算された精度および交差エントロピー分類メトリクスを報告します。分類タスクのモデルを調整するときには、目標としてこれらのいずれかを選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:accuracy | 正解率 | 最大化 | 
| test:cross\$1entropy | 交差エントロピー | 最小化 | 
| validation:accuracy | 正解率 | 最大化 | 
| validation:cross\$1entropy | 交差エントロピー | 最小化 | 

## 調整可能な Object2Vec ハイパーパラメータ
<a name="object2vec-tunable-hyperparameters"></a>

Object2Vec アルゴリズムの以下のハイパーパラメータを調整できます。


| ハイパーパラメータ名 | ハイパーパラメータタイプ | 推奨範囲と値 | 
| --- | --- | --- | 
| dropout | ContinuousParameterRange | MinValue: 0.0、MaxValue: 1.0 | 
| early\$1stopping\$1patience | IntegerParameterRange | MinValue: 1、MaxValue: 5 | 
| early\$1stopping\$1tolerance | ContinuousParameterRange | MinValue: 0.001、MaxValue: 0.1 | 
| enc\$1dim | IntegerParameterRange | MinValue: 4、MaxValue: 4096 | 
| enc0\$1cnn\$1filter\$1width | IntegerParameterRange | MinValue: 1、MaxValue: 5 | 
| enc0\$1layers | IntegerParameterRange | MinValue: 1、MaxValue: 4 | 
| enc0\$1token\$1embedding\$1dim | IntegerParameterRange | MinValue: 5、MaxValue: 300 | 
| enc1\$1cnn\$1filter\$1width | IntegerParameterRange | MinValue: 1、MaxValue: 5 | 
| enc1\$1layers | IntegerParameterRange | MinValue: 1、MaxValue: 4 | 
| enc1\$1token\$1embedding\$1dim | IntegerParameterRange | MinValue: 5、MaxValue: 300 | 
| epochs | IntegerParameterRange | MinValue: 4、MaxValue: 20 | 
| learning\$1rate | ContinuousParameterRange | MinValue: 1e-6、MaxValue: 1.0 | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 1、MaxValue: 8192 | 
| mlp\$1activation | CategoricalParameterRanges |  [`tanh`, `relu`, `linear`]  | 
| mlp\$1dim | IntegerParameterRange | MinValue: 16、MaxValue: 1024 | 
| mlp\$1layers | IntegerParameterRange | MinValue: 1、MaxValue: 4 | 
| optimizer | CategoricalParameterRanges | [`adagrad`, `adam`, `rmsprop`, `sgd`, `adadelta`] | 
| weight\$1decay | ContinuousParameterRange | MinValue: 0.0、MaxValue: 1.0 | 

# Object2Vec トレーニングのデータ形式
<a name="object2vec-training-formats"></a>

Object2Vec アルゴリズムでトレーニングする場合は、必ずリクエストの入力データに JSON Lines 形式を使用し、各行が単一のデータポイントを表すようにします。

## 入力: JSON Lines リクエスト形式
<a name="object2vec-in-training-data-jsonlines"></a>

Content-type: application/jsonlines

```
{"label": 0, "in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]}
{"label": 1, "in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]}
{"label": 1, "in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
```

「in0」と「in1」はそれぞれ、encoder0 と encoder1 の入力です。分類と回帰の両方の問題で同じ形式が有効です。回帰の場合、フィールド「`"label"`」は実数値の入力を受け入れることができます。

# Object2Vec 推論のデータ形式
<a name="object2vec-inference-formats"></a>

このページでは、Amazon SageMaker AI Object2Vec モデルからスコア推論を取得するための入力リクエストと出力レスポンスの形式について説明します。

## GPU 最適化: 分類または回帰
<a name="object2vec-inference-gpu-optimize-classification"></a>

GPU メモリ不足のため、`INFERENCE_PREFERRED_MODE` 環境変数を指定して、分類/回帰または [出力: エンコーダー埋め込み](object2vec-encoder-embeddings.md#object2vec-out-encoder-embeddings-data) 推論ネットワークが GPU にロードされるかどうかを最適化することができます。推論の大部分が分類または再帰を対象としている場合は、`INFERENCE_PREFERRED_MODE=classification` を指定します。以下は、分類/回帰推論を最適化する p3.2xlarge の 4 つのインスタンスを使用したバッチ変換の例です。

```
transformer = o2v.transformer(instance_count=4,
                              instance_type="ml.p2.xlarge",
                              max_concurrent_transforms=2,
                              max_payload=1,  # 1MB
                              strategy='MultiRecord',
                              env={'INFERENCE_PREFERRED_MODE': 'classification'},  # only useful with GPU
                              output_path=output_s3_path)
```

## 入力: 分類または回帰リクエストの形式
<a name="object2vec-in-inference-data"></a>

Content-type: application/json

```
{
  "instances" : [
    {"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]},
    {"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]},
    {"in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
  ]
}
```

Content-type: application/jsonlines

```
{"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]}
{"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]}
{"in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
```

分類問題の場合、スコアベクトルの長さは `num_classes` に対応します。回帰問題の場合、長さは 1 です。

## 出力: 分類または回帰リクエスト形式
<a name="object2vec-out-inference-data"></a>

Accept: application/json

```
{
    "predictions": [
        {
            "scores": [
                0.6533935070037842,
                0.07582679390907288,
                0.2707797586917877
            ]
        },
        {
            "scores": [
                0.026291321963071823,
                0.6577019095420837,
                0.31600672006607056
            ]
        }
    ]
}
```

Accept: application/jsonlines

```
{"scores":[0.195667684078216,0.395351558923721,0.408980727195739]}
{"scores":[0.251988261938095,0.258233487606048,0.489778339862823]}
{"scores":[0.280087798833847,0.368331134319305,0.351581096649169]}
```

分類形式と回帰形式の両方で、スコアは各ラベルに適用されます。

# Object2Vec のエンコーダー埋め込み
<a name="object2vec-encoder-embeddings"></a>

このページでは、Amazon SageMaker AI Object2Vec モデルからエンコーダー埋め込み推論を取得するための入力リクエストと出力レスポンスの形式を示します。

## GPU 最適化: エンコーダー埋め込み
<a name="object2vec-inference-gpu-optimize-encoder-embeddings"></a>

埋め込みとは、単語などの個別オブジェクトから実数のベクトルへのマッピングです。

GPU メモリ不足のため、`INFERENCE_PREFERRED_MODE` 環境変数を指定して [Object2Vec 推論のデータ形式](object2vec-inference-formats.md) またはエンコーダー埋め込みの推論ネットワークが GPU にロードされるかどうかを最適化するよう指定することができます。推論の大部分がエンコーダー埋め込み用である場合は、`INFERENCE_PREFERRED_MODE=embedding` を指定します。以下は、エンコーダー埋め込み推論を最適化する p3.2xlarge の 4 つのインスタンスを使用したバッチ変換の例です。

```
transformer = o2v.transformer(instance_count=4,
                              instance_type="ml.p2.xlarge",
                              max_concurrent_transforms=2,
                              max_payload=1,  # 1MB
                              strategy='MultiRecord',
                              env={'INFERENCE_PREFERRED_MODE': 'embedding'},  # only useful with GPU
                              output_path=output_s3_path)
```

## 入力: エンコーダー埋め込み
<a name="object2vec-in-encoder-embeddings-data"></a>

コンテンツタイプ: application/json; infer\$1max\$1seqlens=<FWD-LENGTH>,<BCK-LENGTH>

ここで <FWD-LENGTH> と <BCK-LENGTH> は [1,5000] の範囲の整数であり、前方エンコーダおよび後方エンコーダの最大シーケンス長を定義します。

```
{
  "instances" : [
    {"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4]},
    {"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4]},
    {"in0": [774, 14, 21, 206]}
  ]
}
```

コンテンツタイプ: application/jsonlines; infer\$1max\$1seqlens=<FWD-LENGTH>,<BCK-LENGTH>

ここで <FWD-LENGTH> と <BCK-LENGTH> は [1,5000] の範囲の整数であり、前方エンコーダおよび後方エンコーダの最大シーケンス長を定義します。

```
{"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4]}
{"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4]}
{"in0": [774, 14, 21, 206]}
```

どちらの形式でも、`“in0”` と `“in1.”` のいずれか 1 つの入力タイプのみを指定します。その後、推論サービスは対応するエンコーダーを呼び出し、インスタンスごとに埋め込みを出力します。

## 出力: エンコーダー埋め込み
<a name="object2vec-out-encoder-embeddings-data"></a>

Content-type: application/json

```
{
  "predictions": [
    {"embeddings":[0.057368703186511,0.030703511089086,0.099890425801277,0.063688032329082,0.026327300816774,0.003637571120634,0.021305780857801,0.004316598642617,0.0,0.003397724591195,0.0,0.000378780066967,0.0,0.0,0.0,0.007419463712722]},
    {"embeddings":[0.150190666317939,0.05145975202322,0.098204270005226,0.064249359071254,0.056249320507049,0.01513972133398,0.047553978860378,0.0,0.0,0.011533712036907,0.011472506448626,0.010696629062294,0.0,0.0,0.0,0.008508535102009]}
  ]
}
```

Content-type: application/jsonlines

```
{"embeddings":[0.057368703186511,0.030703511089086,0.099890425801277,0.063688032329082,0.026327300816774,0.003637571120634,0.021305780857801,0.004316598642617,0.0,0.003397724591195,0.0,0.000378780066967,0.0,0.0,0.0,0.007419463712722]}
{"embeddings":[0.150190666317939,0.05145975202322,0.098204270005226,0.064249359071254,0.056249320507049,0.01513972133398,0.047553978860378,0.0,0.0,0.011533712036907,0.011472506448626,0.010696629062294,0.0,0.0,0.0,0.008508535102009]}
```

推論サービスによって出力される埋め込みのベクトル長は、トレーニング時に指定するハイパーパラメータ `enc0_token_embedding_dim`、`enc1_token_embedding_dim`、または `enc_dim` の 1 つの値と等しくなります。