

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Object2Vec 演算法
<a name="object2vec"></a>

Amazon SageMaker AI Object2Vec 演算法是可充分自訂的一般用途神經嵌入演算法。它可以學習高維度物件的低維度密集內嵌。透過下列方式學習內嵌：將原始空間物件組之間的關係語意保留在內嵌空間中。例如，您可以使用學習的內嵌有效率地計算物件的最鄰近項，並視覺化低維度空間中相關物件的自然叢集。您也可以將內嵌做為下游監督式任務中對應物件的功能，例如分類或迴歸。

Object2Vec 將知名的 Word2Vec 內嵌技術一般化，用於在 SageMaker AI [BlazingText 演算法](blazingtext.md) 中最佳化的文字。如需討論如何套用 Object2Vec 至一些實際使用案例的部落格文章，請參閱 [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，包括下列範例。


| 輸入資料類型 | 範例 | 
| --- | --- | 
|  句子/句子對  | “多名男性參與的一場足球比賽。” 和 “一些男士正在運動。” | 
|  標籤/序列對  | 影片 “鐵達尼號” 的風格標籤，例如 “浪漫” 和 “戲劇”，以及其簡短說明：“詹姆斯卡梅隆的鐵達尼號是一部史詩級精彩紛呈的浪漫故事，但 R.M.S. 鐵達尼號的首航卻發生不幸。她是她那個時代最奢華的郵輪 (一艘夢之船)，最終在1912 年 4 月 15 日凌晨於北大西洋的冰冷水域中造成 1,500 多人死亡。” | 
|  客戶/客戶對  |  Jane 的客戶 ID 和 Jackie 的客戶 ID。  | 
|  產品/產品對  |  足球的產品 ID 和籃球的產品 ID。  | 
|  項目審核使用者/項目對  |  使用者 ID 和她購買的項目，例如蘋果、梨子和橘子。  | 

若要將輸入資料轉換為支援的格式，您必須預先處理資料。目前，Object2Vec 可原生支援兩種類型的輸入：
+ 分散式權杖，這會以單一 `integer-id` 的清單表示。例如 `[10]`。
+ 一連串分散式權杖，這會以 `integer-ids` 的清單表示。例如 `[0,12,10,13]`。

每一對中的物件可以是非對稱的。例如，對可以是 (權杖、序列) 或 (權杖、權杖) 或 (序列、序列)。若是權杖輸入，演算法支援簡單內嵌做為相容的編碼器。若是權杖向量的序列，演算法支援以下編碼器：
+  平均集區內嵌
+  階層卷積神經網絡 (CNN)、
+  多層雙向長短期記憶體 (BiLSTM) 

每一對的輸入標籤可以是以下其中一個：
+ 分類標籤，表示配對中物件之間的關係 
+ 分數，表示兩個物件之間的相似性強度 

若是用於分類的分類標籤，演算法支援跨熵損失函式。若是用於迴歸的評分/分數標籤，演算法支援均方誤差 (MSE) 損失函式。當您建立模型訓練任務時，請使用 `output_layer` 超參數指定這些損失函式。

## 適用於 Object2Vec 演算法的 EC2 執行個體建議
<a name="object2vec--instances"></a>

您使用的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體類型，取決於您是訓練還是執行推論。

在 CPU 上使用 Object2Vec 演算法來訓練模型時，請從 ml.m5.2xlarge 執行個體開始。若為 GPU 上的訓練，從 ml.p2.xlarge 執行個體開始。如果在此執行個體上訓練的時間太長，您可以使用較大的執行個體。目前，Object2Vec 演算法只能在單一機器上訓練。不過，它提供對多種 GPU 的支援。Object2Vec 可支援 P2、P3、G4DN 和 G5 GPU 執行個體系列，進行訓練和推論。

針對擁有深度類神經網路的 Object2Vec 模型訓練推論，建議您使用 ml.p3.2xlarge GPU 執行個體。由於 GPU 記憶體不足，無論 [GPU 最佳化：分類或廻歸](object2vec-inference-formats.md#object2vec-inference-gpu-optimize-classification) 或 [GPU 最佳化：編碼器內嵌](object2vec-encoder-embeddings.md#object2vec-inference-gpu-optimize-encoder-embeddings) 推論網路是否載入 GPU，都會指定要最佳化 `INFERENCE_PREFERRED_MODE` 環境變數。

## 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 行](http://jsonlines.org/)文字檔案格式。若要在訓練期間取得最高準確性，請先隨機播放資料，再將其饋送到模型。您產生隨機排列的方式取決於語言。若為 python，您可以使用 `np.random.shuffle`；若為 Unix，則可以使用 `shuf`。

## 步驟 2：訓練模型
<a name="object2vec-step-2-training-model"></a>

SageMaker AI Object2Vec 演算法具有以下主要元件：
+ **兩個輸入管道** — 輸入管道會採用相同或不同類型的一對物件做為輸入，並將它們傳遞到獨立和可自訂的編碼器。
+ **兩個編碼器** — 兩個編碼器 (enc0 和 enc1) 可將每個物件轉換為固定長度的內嵌向量。成對物件的編碼內嵌接著會傳遞到比較程式。
+ **比較程式** — 比較程式會以不同方式比較內嵌，並輸出分數以指出成對物件間的關係強度。在句子對的輸出分數中。例如，1 指出句子對之間的強式關係，而 0 代表弱式關係。

在訓練期間，演算法會接受物件組和其關係標籤或分數做為輸入。每一對中的物件可以屬於不同類型，如前所述。如果這兩個編碼器的輸入是由相同權杖層級單位組成，則您可以使用共用的權杖內嵌層，方法為在建立訓練任務時，將 `tied_token_embedding_weight` 超參數設為 `True`。這是可行的，例如，當比較同時具有字組權杖層級單位的句子時。若要以指定的比率產生負面範例，請將 `negative_sampling_rate` 超參數設為所需的負面與正面範例比。此超參數可加速學習如何區分訓練資料中觀察到的正面範例和不可能觀察到的負面範例。

物件對是透過獨立的、可自訂的編碼器來傳遞，而這些編碼器相容於對應物件的輸入類型。編碼器可將一對中的每個物件轉換為等長的固定長度內嵌向量。向量對會傳遞給比較程式運算子，以使用 `comparator_list` 超參數中指定的值，將這些向量組合成單一向量。然後，組合向量會通過多層感知器 (MLP) 層，這會產生一個輸出，而損失函式會將其與提供的標籤進行比較。這個比較會評估成對物件之間的關係強度，是否如模型預測一般。下圖顯示此工作流程。

![\[從資料輸入到分數的 Object2Vec 演算法架構\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/object2vec-training-image.png)


## 步驟 3：產生推論
<a name="object2vec-step-3-inference"></a>

訓練模型後，您可以使用已訓練的編碼器，來預先處理輸入物件或執行兩種類型的推論：
+ 使用對應的編碼器，將單一輸入物件轉換為固定長度內嵌
+ 預測成對輸入物件之間的關係標籤或分數

推論伺服器會根據輸入資料自動判斷請求類型。若要取得內嵌做為輸出，請只提供一個輸入。若要預測關係標籤或分數，請提供該對中的兩個輸入。

# Object2Vec 超參數
<a name="object2vec-hyperparameters"></a>

在 `CreateTrainingJob` 請求中，請指定訓練演算法。您也可以指定演算法特定的超參數做為字串對字串的對應。下表列出 Object2Vec 訓練演算法的超參數。


| 參數名稱 | Description | 
| --- | --- | 
| enc0\$1max\$1seq\$1len |  enc0 編碼器的最大序列長度。 **必要** 有效值：1 ≤ 整數 ≤ 5000  | 
| enc0\$1vocab\$1size |  enc0 權杖的詞彙數量。 **必要** 有效值：2 ≤ 整數 ≤ 3000000  | 
| bucket\$1width |  啟用歸納時，允許的資料序列長度差異。若要啟用歸納，請對此參數指定非零值。 **選用** 有效值：0 ≤ 整數 ≤ 100 預設：0 (不歸納)  | 
| comparator\$1list |  用來自訂兩個內嵌之比較方式的清單。Object2Vec 比較程式運算子層會採取編碼器中的編碼做為輸入，並輸出單一向量。這個向量是子向量的串連。傳遞到 `comparator_list` 的字串值和它們的傳送順序，決定這些子向量的組合方式。例如，如果 `comparator_list="hadamard, concat"`，則比較程式運算子會串連兩個編碼的 Hadamard 乘積和串連兩個編碼來建構向量。另一方面，如果 `comparator_list="hadamard"`，則比較程式運算子會建構向量，只做為兩個編碼的 Hadamard 乘積。 **選用** 有效值：包含三個二進位運算子之任何組合名稱的字串：`hadamard`、`concat` 或 `abs_diff`。Object2Vec 演算法目前需要兩個向量編碼具有相同維度。這些運算子會產生子向量，如下所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/object2vec-hyperparameters.html) 預設值：`"hadamard, concat, abs_diff"`  | 
| dropout |  網路層的退出機率。*退出*是一種用於神經網路的正規化形式，可透過裁剪相互依賴的神經元降低過度擬合。 **選用** 有效值：0.0 ≤ 浮點數 ≤ 1.0 預設值：0.0  | 
| early\$1stopping\$1patience |  套用提早停止前，允許之毫無改進的連續 epoch 數量。改進是搭配 `early_stopping_tolerance` 超參數來定義的。 **選用** 有效值：1 ≤ 整數 ≤ 5 預設值：3  | 
| early\$1stopping\$1tolerance |  演算法必須在連續 epoch 之間達到的損失函式減少量，才能避免在 `early_stopping_patience` 超參數中指定的連續 epoch 數之後提早停止。 **選用** 有效值：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/zh_tw/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/zh_tw/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/zh_tw/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/zh_tw/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 |  要針對訓練執行的 epoch 數量。 **選用** 有效值：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/zh_tw/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 演算法內部會產生每個正面範例兩個負面範例。如果您不想要在訓練期間產生或使用負面範例，請將此值設為 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/zh_tw/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/zh_tw/sagemaker/latest/dg/object2vec-hyperparameters.html) 預設值：`softmax`  | 
| tied\$1token\$1embedding\$1weight |  是否針對兩個編碼器使用共用的內嵌層。如果兩個編碼器的輸入使用相同的權杖層級單位，請使用共用的權杖內嵌層。例如，對於文件集合，如果一個編碼器編碼句子，另一個編碼整份文件，則您可以使用共用的權杖內嵌層。這是因為這兩個句子和文件是由來自相同詞彙的字詞權杖所組成。 **選用** 有效值：`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/zh_tw/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>

演算法會報告均方誤差迴歸器指標，而系統會在測試和驗證期間計算該指標。調校迴歸任務的模型時，請選擇此指標做為目標。


| 指標名稱 | Description | 最佳化方向 | 
| --- | --- | --- | 
| test:mean\$1squared\$1error | 均方誤差 | 最小化 | 
| validation:mean\$1squared\$1error | 均方誤差 | 最小化 | 

### 依 Object2Vec 演算法計算的分類指標
<a name="object2vec-classification-metrics"></a>

Object2Vec 演算法會報告準確性指標和跨熵分類指標，而系統會在測試和驗證期間計算該指標。調校分類任務的模型時，請選擇其中之一做為目標。


| 指標名稱 | Description | 最佳化方向 | 
| --- | --- | --- | 
| 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 行請求格式
<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 記憶體不足，無論分類/廻歸或 [輸出：編碼器內嵌](object2vec-encoder-embeddings.md#object2vec-out-encoder-embeddings-data) 推論網路是否載入 GPU，都會指定要最佳化 `INFERENCE_PREFERRED_MODE` 環境變數。如果大部分的推論是用於分類或廻歸，請指定 `INFERENCE_PREFERRED_MODE=classification`。以下是使用 4 個 p3.2xlarge 執行個體，最佳化分類/廻歸推論的批次轉換範例：

```
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 記憶體不足，無論 [適用於 Object2Vec 推論的資料格式](object2vec-inference-formats.md) 或編碼器內嵌的推論網路是否載入 GPU，都會指定要最佳化 `INFERENCE_PREFERRED_MODE` 環境變數。如果大部分的推論是用於編碼器內嵌，請指定 `INFERENCE_PREFERRED_MODE=embedding`。以下是使用 4 個 p3.2xlarge 執行個體，最佳化編碼器內嵌推論的批次轉換範例：

```
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>

Content-type: 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]}
  ]
}
```

Content-type: 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.”` 其中一個輸入類型。推論服務即會為每個執行個體調用對應的編碼器，並輸出內嵌。

## 輸出：編碼器內嵌
<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`。