

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

# テキストデータ用の組み込み SageMaker AI アルゴリズム
<a name="algorithms-text"></a>

SageMaker AI は、自然言語処理、文書の分類または要約、トピックのモデリングまたは分類、言語の文字起こしまたは翻訳で使用されるテキスト文書の分析用に調整されたアルゴリズムを提供します。
+ [BlazingText アルゴリズム](blazingtext.md) - 大規模なデータセットに簡単に拡張できる Word2vec とテキスト分類アルゴリズムの高度に最適化された実装。これは、多くの下流の自然言語処理 (NLP) タスクに役立ちます。
+ [潜在的ディリクレ配分 (LDA) アルゴリズム](lda.md) - 一連のドキュメントのトピックを決定するのに適しているアルゴリズム。これは *教師なしアルゴリズム*です。つまり、トレーニング時に回答を含むサンプルデータを使用しないということです。
+ [ニューラルトピックモデル (NTM) アルゴリズム](ntm.md) - ニューラルネットワークアプローチを使用して一連のドキュメントのトピックを決定する別の教師なし手法。
+ [Object2Vec アルゴリズム](object2vec.md) - レコメンデーションシステム、ドキュメント分類、文章埋め込みに使用できる汎用のニューラル埋め込みアルゴリズム。
+ [Sequence to Sequence アルゴリズム](seq-2-seq.md) - 一般的にニューラル機械翻訳に使用される教師ありアルゴリズム。
+ [テキスト分類 - TensorFlow](text-classification-tensorflow.md) - テキスト分類に利用可能な事前トレーニング済みモデルを使用して転移学習をサポートする教師ありアルゴリズム。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| BlazingText | トレーニング | ファイルまたはパイプ | テキストファイル (1 行に 1 文、スペース区切りのトークンを含む)  | GPU (単一インスタンスのみ) または CPU | 不可 | 
| LDA | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU (単一インスタンスのみ) | 不可 | 
| ニューラルトピックモデル | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | ファイルまたはパイプ | recordIO-protobuf または CSV | GPU または CPU | はい | 
| Object2Vec | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | システム | JSON Lines  | GPU または CPU (単一インスタンスのみ) | 不可 | 
| Seq2Seq モデリング | トレーニング、検証、および vocab | システム | recordIO-protobuf | GPU (単一インスタンスのみ) | 不可 | 
| テキスト分類 - TensorFlow | トレーニングおよび検証 | システム | CSV | CPU または GPU | はい (単一インスタンス上の複数の GPU 間でのみ) | 

# BlazingText アルゴリズム
<a name="blazingtext"></a>

Amazon SageMaker AI BlazingText アルゴリズムは、Word2vec とテキスト分類アルゴリズムの高度に最適化された実装を提供します。Word2vec アルゴリズムは、感情分析、名前付きエンティティ認識、機械翻訳など、多くの下流の自然言語処理 (NLP) タスクに役立ちます。テキスト分類は、ウェブ検索、情報検索、ランク付け、およびドキュメント分類を実行するアプリケーションにとって重要なタスクです。

Word2vec アルゴリズムは、単語を高品質の分散ベクトルにマッピングします。結果として得られる単語のベクトル表現は、*単語埋め込み*と呼ばれます。意味的に類似している単語は、互いに接近しているベクトルに対応します。単語の埋め込みでは、そのような方法で単語間の意味関係をキャプチャします。

多くの自然言語処理 (NLP) アプリケーションは、ドキュメントの大規模なコレクションでトレーニングすることによって単語の埋め込みを学習します。これらのトレーニング済みベクトル表現は、セマンティクスおよび単語の分散に関する情報を提供します。通常、その後限られた量のデータでトレーニングされる他のモデルの一般化可能性が向上します。Word2vec アルゴリズムのほとんどの実装は、マルチコア CPU アーキテクチャ向けに最適化されていません。これにより、大規模なデータセットに対するスケーリングが困難になります。

BlazingText アルゴリズムを使用すると、大規模なデータセットに簡単に拡張できます。Word2vec と同様に、Skip-Gram および Continuous Bag-of-Words (CBOW) トレーニングアーキテクチャーが提供されます。教師ありの複数クラス、複数ラベルのテキスト分類アルゴリズムの BlazingText の実装は、カスタム [CUDA](https://docs.nvidia.com/cuda/index.html) カーネルで GPU アクセラレーションを使用するように fastText テキスト分類子を拡張します。マルチコア CPU または GPU を使用すると、数分で 10 億個以上の単語でモデルをトレーニングできます。また、最先端の深層学習テキスト分類アルゴリズムと同等のパフォーマンスを達成します。

BlazingText アルゴリズムは並列化できません。トレーニングに関連するパラメータの詳細については、「[Docker Registry Paths for SageMaker Built-in Algorithms」(SageMaker 組み込みアルゴリズムの Docker レジストリパス](https://docs.aws.amazon.com/en_us/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)) を参照してください。

 SageMaker AI BlazingText アルゴリズムは、次の機能を提供します。
+ 高度に最適化された CUDA カーネルを使用する、マルチコア CPU または GPU 上の fastText テキスト分類子あるいは GPU 上の Word2Vec の加速されたトレーニング。詳細については、[BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs (BlazingText: 複数の GPU を使用した Word2Vec のスケーリングと加速)](https://dl.acm.org/citation.cfm?doid=3146347.3146354) を参照してください。
+ 文字 n グラムのベクトル表現を学習することによって、[サブワード情報で強化された単語ベクトル](https://arxiv.org/abs/1607.04606)。このアプローチにより BlazingText は、文字 n グラム (サブワード) ベクトルの和としてベクトルを表すことで、未定義 (OOV) 語の意味のあるベクトルを生成することができます。
+ 複数の CPU ノード間でのより高速なトレーニングと分散計算を可能にする Word2Vec アルゴリズムの `batch_skipgram` `mode`。`batch_skipgram` `mode` は、Negative Sample Sharing (負のサンプル共有) 戦略を使用してミニバッチングを行い、レベル 1 の BLAS オペレーションをレベル 3 の BLAS オペレーションに変換します。これにより、最新のアーキテクチャーの multiply-add 手順が効率的に活用されます。詳細については、[Parallelizing Word2Vec in Shared and Distributed Memory (共有および分散メモリでの Word2Vec の並列処理)](https://arxiv.org/pdf/1604.04661.pdf) を参照してください。

要約すると、BlazingText ではさまざまなタイプのインスタンスで以下のモードがサポートされています。


| モード |  Word2Vec (教師なし学習)  |  テキスト分類 (教師あり学習)  | 
| --- | --- | --- | 
|  単一の CPU インスタンス  |  `cbow` `Skip-gram` `Batch Skip-gram`  |  `supervised`  | 
|  単一の GPU インスタンス (1 つ以上の GPU を含む)  |  `cbow` `Skip-gram`  |  1 つの GPU による `supervised`  | 
|  複数の CPU インスタンス  | Batch Skip-gram  | なし | 

BlazingText で行われる計算の詳細については、[BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs (BlazingText: 複数の GPU を使用した Word2Vec のスケーリングと加速)](https://dl.acm.org/citation.cfm?doid=3146347.3146354) を参照してください。

**Topics**
+ [BlazingText アルゴリズムの入出力インターフェイス](#bt-inputoutput)
+ [BlazingText アルゴリズムの EC2 インスタンスの推奨事項](#blazingtext-instances)
+ [BlazingText サンプルノートブック](#blazingtext-sample-notebooks)
+ [BlazingText ハイパーパラメータ](blazingtext_hyperparameters.md)
+ [BlazingText モデルを調整する](blazingtext-tuning.md)

## BlazingText アルゴリズムの入出力インターフェイス
<a name="bt-inputoutput"></a>

BlazingText アルゴリズムは、スペースで区切られたトークンを含む単一の事前処理済みテキストファイルを想定しています。ファイルの各行には単一の文が含まれている必要があります。複数のテキストファイルに対するトレーニングを行う必要がある場合は、それらを 1 つのファイルに連結して、それぞれのチャネルにファイルをアップロードします。

### トレーニングと検証のデータ形式
<a name="blazingtext-data-formats"></a>

#### Word2Vec アルゴリズムのトレーニングと検証のデータ形式
<a name="blazingtext-data-formats-word2vec"></a>

Word2Vec トレーニングの場合は、*トレーニング*チャネルでファイルをアップロードしてください。他のチャネルはサポートされていません。ファイルには 1 行に 1 つのトレーニング文が含まれている必要があります。

#### テキスト分類アルゴリズムのトレーニングと検証のデータ形式
<a name="blazingtext-data-formats-text-class"></a>

教師ありモードの場合は、ファイルモードまたは拡張マニフェストテキスト形式でトレーニングできます。

##### ファイルモードでトレーニングする
<a name="blazingtext-data-formats-text-class-file-mode"></a>

`supervised` モードの場合は、トレーニング/検証ファイルに、1 行に 1 つのトレーニング文だけでなく、ラベルも含まれている必要があります。ラベルは、文字列 *\$1\$1label\$1\$1* を前に付けた単語です。以下はトレーニング/検証ファイルの例です。

```
__label__4  linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp .

__label__2  bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
```

**注記**  
文中のラベルの順序は関係ありません。

トレーニングチャネルでトレーニングファイルをアップロードし、必要に応じて検証チャネルで検証ファイルをアップロードします。

##### 拡張マニフェストテキスト形式でトレーニングする
<a name="blazingtext-data-formats-text-class-augmented-manifest"></a>

CPU インスタンスの教師ありモードは拡張マニフェスト形式もサポートしているため、RecordIO ファイルを作成しなくてもパイプモードでトレーニングを実行できます。この形式を使用する一方で、文のリストとそれに対応するラベルを含む S3 マニフェストファイルを生成する必要があります。マニフェストファイル形式は、各行が 1 つのサンプルを表す [JSON Lines](http://jsonlines.org/) 形式になっている必要があります。文は `source` タグを使用して指定し、ラベルは `label` タグを使用して指定できます。`source` タグと `label` タグの両方を、リクエストで指定されている `AttributeNames` パラメータ値の下で指定する必要があります。

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}
```

ラベルの JSON 配列を指定することで、マルチラベルのトレーニングもサポートされます。

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}
```

拡張マニフェストファイルの詳細については、[トレーニングジョブの拡張マニフェストファイル](augmented-manifest.md)を参照してください。

### モデルアーティファクトと推論
<a name="blazingtext-artifacts-inference"></a>

#### Word2Vec アルゴリズムのモデルアーティファクト
<a name="blazingtext--artifacts-inference-word2vec"></a>

Word2Vec トレーニングの場合、モデルアーティファクトは、単語からベクトルへのマッピングを含む *vectors.txt* と、ホスティング、推論、またはその両方のために BlazingText によって使用されるバイナリである *vectors.bin* から構成されます。*vectors.txt* は、Gensim や Spacy などの他のツールと互換性のある形式でベクトルを保存します。たとえば、Gensim ユーザーは次のコマンドを実行して vectors.txt ファイルをロードできます。

```
from gensim.models import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False)
word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])
word_vectors.doesnt_match("breakfast cereal dinner lunch".split())
```

評価パラメータが `True` に設定されている場合は、追加のファイル *eval.json* が作成されます。このファイルには、WS-353 データセットに対する類似度の評価結果 (スピアマンの順位相関係数を使用) が含まれています。WS-353 データセットから、トレーニングコーパスに存在しない単語数が報告されます。

推論リクエストのために、モデルは文字列のリストを含む JSON ファイルを受け取り、ベクトルのリストを返します。単語が語彙内で見つからない場合、推論はゼロのベクトルを返します。トレーニング中にサブワードが `True` に設定された場合、モデルは未定義 (OOV) 語のベクトルを生成できます。

##### JSON リクエスト例
<a name="word2vec-json-request"></a>

Mime タイプ:` application/json`

```
{
"instances": ["word1", "word2", "word3"]
}
```

#### テキスト分類アルゴリズムのモデルアーティファクト
<a name="blazingtext-artifacts-inference-text-class"></a>

教師ありトレーニングの出力では、BlazingText ホスティングで使用できる *model.bin* ファイルが作成されます。推論のために、BlazingText モデルは文のリストを含む JSON ファイルを受け入れ、対応する予測ラベルと確率スコアのリストを返します。各シーケンスはスペースで区切られたトークン、単語、またはその両方の文字列であることが想定されます。

##### JSON リクエスト例
<a name="text-class-json-request"></a>

Mime タイプ:` application/json`

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."]
}
```

デフォルトでは、サーバーは 1 つの予測、つまり最も高い確率の予測のみを返します。上位 *k* 個の予測を取得するには、次のように設定で *k* を設定します。

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."],
 "configuration": {"k": 2}
}
```

BlazingText の場合、` content-type` パラメータと `accept` パラメータは等しくなければなりません。バッチ変換の場合は、どちらも `application/jsonlines` である必要があります。これらが異なる場合、`Accept` フィールドは無視されます。入力の形式は次のとおりです。

```
content-type: application/jsonlines

{"source": "source_0"}
{"source": "source_1"}

if you need to pass the value of k for top-k, then you can do it in the following way:

{"source": "source_0", "k": 2}
{"source": "source_1", "k": 3}
```

出力の形式は次のとおりです。

```
accept: application/jsonlines


{"prob": [prob_1], "label": ["__label__1"]}
{"prob": [prob_1], "label": ["__label__1"]}

If you have passed the value of k to be more than 1, then response will be in this format:

{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
```

教師あり (テキスト分類) モードと教師なし (Word2Vec) モードの両方で、BlazingText によって生成されたバイナリ (*\$1.bin*) は fastText によって相互消費される可能性があり、その逆も同様です。BlazingText によって生成されたバイナリを fastText で使用できます。同様に、fastText で作成されたモデルバイナリを、BlazingText を使用してホストすることができます。

次に、fastText を使用して BlazingText で生成されたモデルを使用する方法の例を示します。

```
#Download the model artifact from S3
aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz

#Unzip the model archive
tar -xzf model.tar.gz

#Use the model archive with fastText
fasttext predict ./model.bin test.txt
```

ただし、バイナリは CPU とシングル GPU のトレーニングでのみサポートされ、マルチ GPU のトレーニングではバイナリは生成されません。

## BlazingText アルゴリズムの EC2 インスタンスの推奨事項
<a name="blazingtext-instances"></a>

`cbow` モードおよび `skipgram` モードの場合、BlazingText は 1 つの CPU と 1 つの GPU インスタンスをサポートします。これらのモードは両方とも、`subwords` 埋め込みの学習をサポートします。精度を犠牲にすることなく最高速度を達成するには、ml.p3.2xlarge インスタンスを使用することをお勧めします。

`batch_skipgram` モードの場合、BlazingText は 1 つまたは複数の CPU インスタンスをサポートします。複数のインスタンスでトレーニングする場合、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) に渡す [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) オブジェクトの `S3DataDistributionType` フィールドの値を `FullyReplicated` に設定します。BlazingText は、マシン間でのデータの分散を処理します。

教師ありテキスト分類モードの場合は、トレーニングデータセットが 2 GB 未満のときには、C5 インスタンスが推奨されます。より大きなデータセットの場合、単一の GPU を備えたインスタンスを使用します。BlazingText は、トレーニングと推論の P2、P3、G4dn、G5 インスタンスをサポートしています。

## BlazingText サンプルノートブック
<a name="blazingtext-sample-notebooks"></a>

SageMaker AI BlazingText アルゴリズムをトレーニングしてデプロイし、単語ベクトルを生成するサンプルノートブックについては、「[Learning Word2Vec Word Representations using BlazingText](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/blazingtext_word2vec_text8/blazingtext_word2vec_text8.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする手順については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。Blazing Text を使用するトピックモデリングのサンプルノートブックは、**[Introduction to Amazon Algorithms (Amazon アルゴリズムの概要)]** セクションにあります。ノートブックを開くには、その [**使用**] タブを選び、次に [**コピーを作成**] を選択します。

# BlazingText ハイパーパラメータ
<a name="blazingtext_hyperparameters"></a>

`CreateTrainingJob` リクエストでトレーニングジョブを開始する場合、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。BlazingText アルゴリズムのハイパーパラメータは、Word2Vec (教師なし) とテキスト分類 (教師あり) のどちらのモードを使用しているかによって異なります。

## Word2Vec ハイパーパラメータ
<a name="blazingtext_hyperparameters_word2vec"></a>

次の表に、Amazon SageMaker AI によって提供される BlazingText Word2Vec トレーニングアルゴリズムのハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| mode |  Word2vec アーキテクチャは、トレーニングに使用されます。 **必須** 有効な値: `batch_skipgram`、`skipgram`、または `cbow`  | 
| batch\$1size |  `mode` が `batch_skipgram` に設定されている場合の各バッチのサイズ。10～20 間の数字に設定します。 **オプション** 有効な値: 正の整数 デフォルト値: 11  | 
| buckets |  サブワードに使用するハッシュバケットの数。 **オプション** 有効な値: 正の整数 デフォルト値: 2000000  | 
| epochs |  トレーニングデータの完全なパスの数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| evaluation |  [WordSimilarity-353 テスト](http://www.gabrilovich.com/resources/data/wordsim353/wordsim353.html)を使用してトレーニング済みのモデルが評価されるかどうか。 **オプション** 有効な値: (ブール値) `True` または `False` デフォルト値: `True`  | 
| learning\$1rate |  パラメータ更新に使用されるステップサイズ。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 0.05  | 
| min\$1char |  サブワード/文字 n グラムに使用する最小文字数。 **オプション** 有効な値: 正の整数 デフォルト値： 3  | 
| min\$1count |  出現回数が `min_count` 未満の単語は破棄されます。 **オプション** 有効な値: 負以外の整数 デフォルト値: 5  | 
| max\$1char |  サブワード/文字 n グラムに使用する最大文字数。 **オプション** 有効な値: 正の整数 デフォルト値: 6  | 
| negative\$1samples |  Negative Sample Sharing (負のサンプル共有) 戦略の負のサンプル数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| sampling\$1threshold |  単語の出現回数のしきい値。トレーニングデータ内でより高い頻度で出現する単語は、ランダムにダウンサンプリングされます。 **オプション** 有効な値: 正の小数。推奨される範囲は (0, 1e-3] です。 デフォルト値: 0.0001  | 
| subwords |  サブワード埋め込みを学習するかどうか。 **オプション** 有効な値: (ブール値) `True` または `False` デフォルト値: `False`  | 
| vector\$1dim |  アルゴリズムが学習する単語ベクトルのディメンション。 **オプション** 有効な値: 正の整数 デフォルト値: 100  | 
| window\$1size |  コンテキストウィンドウのサイズ。コンテキストウィンドウは、トレーニングに使用されたターゲット単語を囲む単語の数です。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 

## テキスト分類ハイパーパラメータ
<a name="blazingtext_hyperparameters_text_class"></a>

次の表に、Amazon SageMaker AI によって提供されるテキスト分類トレーニングアルゴリズムのハイパーパラメータを示します。

**注記**  
テキスト分類モードと Word2Vec モードのパラメータの一部は共通していますが、コンテキストによっては意味が異なる場合があります。


| Parameter Name | 説明 | 
| --- | --- | 
| mode |  トレーニングモード。 **必須** 有効な値: `supervised`  | 
| buckets |  単語 n-gram に使用するハッシュバケットの数。 **オプション** 有効な値: 正の整数 デフォルト値: 2000000  | 
| early\$1stopping |  エポックの `patience` 数を過ぎても検証の正確性が向上しない場合にトレーニングを中止するかどうか。早期停止を使用する場合は、検証チャネルが必要であることに注意してください。 **オプション** 有効な値: (ブール値) `True` または `False` デフォルト値: `False`  | 
| epochs |  トレーニングデータの完全なパスの最大数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| learning\$1rate |  パラメータ更新に使用されるステップサイズ。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 0.05  | 
| min\$1count |  出現回数が `min_count` 未満の単語は破棄されます。 **オプション** 有効な値: 負以外の整数 デフォルト値: 5  | 
| min\$1epochs |  早期停止ロジックが呼び出される前にトレーニングするエポックの最小数。 **オプション** 有効な値: 正の整数 デフォルト値: 5  | 
| patience |  検証セットで何も進捗がない場合に、早期停止を適用するまでに待機するエポック数。`early_stopping` が `True` である場合にのみ使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 4  | 
| vector\$1dim |  埋め込みレイヤーのディメンション。 **オプション** 有効な値: 正の整数 デフォルト値: 100  | 
| word\$1ngrams |  使用する単語 n-gram 機能の数。 **オプション** 有効な値: 正の整数 デフォルト値: 2  | 

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

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

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

## BlazingText アルゴリズムによって計算されるメトリクス
<a name="blazingtext-metrics"></a>

BlazingText Word2Vec アルゴリズム (`skipgram`、`cbow`、および `batch_skipgram` モード) は、トレーニング中に単一のメトリクス (`train:mean_rho`) についてレポートします。このメトリクスは、[WS-353 単語類似度データセット](https://aclweb.org/aclwiki/WordSimilarity-353_Test_Collection_(State_of_the_art))について計算されます。Word2Vec アルゴリズムのハイパーパラメータ値を調整するときには、このメトリクスを目標として使用してください。

BlazingText テキスト分類アルゴリズム (`supervised` モード) は、トレーニング中に単一のメトリクス (`validation:accuracy`) についてもレポートします。テキスト分類アルゴリズムのハイパーパラメータ値を調整するときには、これらのメトリクスを目標として使用してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| train:mean\$1rho |  [WS‐353 単語類似度データセット](http://alfonseca.org/pubs/ws353simrel.tar.gz)の平均 rho (スピアマンの順位相関係数)  |  最大化  | 
| validation:accuracy |  ユーザー指定の検証データセットの分類精度  |  最大化  | 

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

### Word2Vec アルゴリズムの調整可能なハイパーパラメータ
<a name="blazingtext-tunable-hyperparameters-word2vec"></a>

次のハイパーパラメータを使用して Amazon SageMaker AI BlazingText Word2Vec モデルを調整します。Word2Vec の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`mode`、` learning_rate`、`window_size`、`vector_dim`、`negative_samples` です。


| パラメータ名 | パラメータタイプ | 推奨範囲または値 | 
| --- | --- | --- | 
| batch\$1size |  `IntegerParameterRange`  |  [8-32]  | 
| epochs |  `IntegerParameterRange`  |  [5-15]  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.005、MaxValue: 0.01  | 
| min\$1count |  `IntegerParameterRange`  |  [0～100]  | 
| mode |  `CategoricalParameterRange`  |  [`'batch_skipgram'`, `'skipgram'`, `'cbow'`]  | 
| negative\$1samples |  `IntegerParameterRange`  |  [5-25]  | 
| sampling\$1threshold |  `ContinuousParameterRange`  |  MinValue: 0.0001、MaxValue: 0.001  | 
| vector\$1dim |  `IntegerParameterRange`  |  [32-300]  | 
| window\$1size |  `IntegerParameterRange`  |  [1-10]  | 

### テキスト分類アルゴリズムの調整可能なハイパーパラメータ
<a name="blazingtext-tunable-hyperparameters-text_class"></a>

次のハイパーパラメータを使用して Amazon SageMaker AI BlazingText テキスト分類モデルを調整します。


| パラメータ名 | パラメータタイプ | 推奨範囲または値 | 
| --- | --- | --- | 
| buckets |  `IntegerParameterRange`  |  [1000000-10000000]  | 
| epochs |  `IntegerParameterRange`  |  [5-15]  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.005、MaxValue: 0.01  | 
| min\$1count |  `IntegerParameterRange`  |  [0～100]  | 
| vector\$1dim |  `IntegerParameterRange`  |  [32-300]  | 
| word\$1ngrams |  `IntegerParameterRange`  |  [1-3]  | 

# 潜在的ディリクレ配分 (LDA) アルゴリズム
<a name="lda"></a>

Amazon SageMaker AI 潜在的ディリクレ配分 (LDA) アルゴリズムは、一連の観測値を異なるカテゴリの混合として記述しようとする教師なし学習アルゴリズムです。LDA は、テキストコーパス内のドキュメントによって共有されるトピックの、ユーザー指定数を検出するために最もよく使用されます。ここで、各観測はドキュメントであり、特徴は各単語の存在 (または出現回数) であり、カテゴリはトピックです。このメソッドは管理されていないので、トピックは前もって指定されておらず、人間が自然にドキュメントを分類する方法とは必ずしも合致しません。トピックは、各ドキュメント内に出現する単語に対する確率分布として学習されます。各ドキュメントは、順次、トピックの混在として示されます。

類似したトピックが混在する 2 つの異なるドキュメントの正確な内容は同じではありません。しかし全体的にみると、これらのドキュメントでは、異なるトピックが混在するドキュメントと比較した場合よりも頻繁に単語の共有サブセットを使用されることが予期されます。これにより、LDA はこれらの単語グループを検出し、トピックを形成することができます。非常に単純な例として、食べる、寝る、遊ぶ、ニャー、吠えるという単語のみが出現するドキュメントのセットの場合、LDA によって生成される可能性のあるトピックは、次のようになります。**********


| **トピック** | *食べる* | *寝る*  | *play* | *ニャー* | *吠える* | 
| --- | --- | --- | --- | --- | --- | 
| トピック 1  | 0.1  | 0.3  | 0.2  | 0.4  | 0.0  | 
| トピック 2  | 0.2  | 0.1 | 0.4  | 0.0  | 0.3  | 

トピック 1 に分類される可能性が高いドキュメントは猫 (*ニャー*と*寝る*) に関するもの、トピック 2 に分類されるドキュメントは犬 (*遊ぶ*と*吠える*) に関するものであると推測できます。これらのトピックは、犬と猫という言葉がいずれのテキストに全く出現しない場合でも見つかることがあります。

**Topics**
+ [潜在的ディリクレ配分 (LDA) とニューラルトピックモデル (NTM) のいずれかを選択する](#lda-or-ntm)
+ [LDA アルゴリズムの入出力インターフェイス](#lda-inputoutput)
+ [LDA アルゴリズムの EC2 インスタンスに関する推奨事項](#lda-instances)
+ [LDA サンプルノートブック](#LDA-sample-notebooks)
+ [LDA の仕組み](lda-how-it-works.md)
+ [LDA ハイパーパラメータ](lda_hyperparameters.md)
+ [LDA モデルを調整する](lda-tuning.md)

## 潜在的ディリクレ配分 (LDA) とニューラルトピックモデル (NTM) のいずれかを選択する
<a name="lda-or-ntm"></a>

トピックモデルは、一般的に (1) 意味論的意味を一貫してカプセル化し、(2) ドキュメントを効果的に説明するコーパスからトピックを生成するために使用されます。そのため、トピックモデルは Perplexity を最小限に抑え、トピックコヒーレンスを最大化することを目的としています。

Perplexity は、テストデータ内で単語ごとの幾何平均の尤度の逆数を測定する固有言語モデリング評価メトリクスです。Perplexity スコアが低いほど、一般化パフォーマンスが向上します。研究により、単語ごとに計算される尤度は人間による判断と一致しないことが多く、完全に相関しない可能性があるため、トピックコヒーレンスが導入されています。モデルから推測される各トピックは単語で構成され、トピックコヒーレンスはモデルからその特定のトピックの上位 N 語に対して計算されます。これは多くの場合、そのトピック内の単語のペアワイズ単語の類似性スコア (点相互情報 (PMI) など) の平均値または中央値として定義されます。有望なモデルは、解釈しやすいトピック (トピックコヒーレンススコアが高いトピック) を生成します。

目的は、Perplexity を最小化してトピックコヒーレンスを最大化するトピックモデルをトレーニングすることですが、多くの場合、LDA と NTM 両方にトレードオフがあります。最近の研究 (Amazon, Dinget et al., 2018) により、NTM は高いトピックコヒーレンスの達成に対して有望ですが、崩れたギブスサンプリングでトレーニングされた LDA の Perplexity はより良好であることが示されています。Perplexity とトピックコヒーレンスの間にはトレードオフがあります。ハードウェアと計算能力に関する実用性の観点から、NTM は CPU と GPU 上で動作し、複数の GPU インスタンス間で並列化できるのに対して、LDA は単一インスタンスの CPU トレーニングのみをサポートしているため、SageMaker NTM ハードウェアは LDA よりも柔軟性があり、拡張性に優れています。

**Topics**
+ [潜在的ディリクレ配分 (LDA) とニューラルトピックモデル (NTM) のいずれかを選択する](#lda-or-ntm)
+ [LDA アルゴリズムの入出力インターフェイス](#lda-inputoutput)
+ [LDA アルゴリズムの EC2 インスタンスに関する推奨事項](#lda-instances)
+ [LDA サンプルノートブック](#LDA-sample-notebooks)
+ [LDA の仕組み](lda-how-it-works.md)
+ [LDA ハイパーパラメータ](lda_hyperparameters.md)
+ [LDA モデルを調整する](lda-tuning.md)

## LDA アルゴリズムの入出力インターフェイス
<a name="lda-inputoutput"></a>

LDA はトレーニングチャネルにデータが提供されることを期待しており、最終的なモデルで採点されたテストチャネルをオプションでサポートしています。LDA は、`recordIO-wrapped-protobuf` (密および疎) および `CSV` ファイル形式の両方をサポートしています。`CSV` の場合、データは密で、その次元は*レコードの次元数 \$1 語彙のサイズ*と等しくなければなりません。recordIO でラップされた protobuf を使用する場合、LDA はファイルモードまたはパイプモードでトレーニングできますが、`CSV` 形式のファイルモードでのみトレーニングできます。

`text/csv`、`application/json`、および `application/x-recordio-protobuf` コンテンツタイプが、推論のためにサポートされています。`application/json` および `application/x-recordio-protobuf` に疎データを渡すこともできます。LDA の推論は、`application/json` または `application/x-recordio-protobuf` *予測*を返し、これには、各観測の `topic_mixture` ベクトルが含まれます。

トレーニングと推論形式の詳細については、[LDA サンプルノートブック](#LDA-sample-notebooks)を参照してください。

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

LDA は現在、単一インスタンスの CPU トレーニングのみをサポートしています。ホスティング/推論には CPU インスタンスをお勧めします。

## LDA サンプルノートブック
<a name="LDA-sample-notebooks"></a>

SageMaker AI 潜在的ディリクレ配分アルゴリズムをデータセットでトレーニングし、トレーニングされたモデルをデプロイして入力ドキュメント内のトピックの混在についての推論を実行する方法を示すサンプルノートブックについては、「[An Introduction to SageMaker AI LDA](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lda_topic_modeling/LDA-Introduction.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# LDA の仕組み
<a name="lda-how-it-works"></a>

Amazon SageMaker AI LDA は、一連の観測を異なるのカテゴリの混在として記述しようとする、教師なし学習アルゴリズムです。これらのカテゴリは、それ自体が特徴に対する確率分布です。LDA はジェネレーティブ確率モデルです。つまり、潜在変数に基づく出力と入力の分布のモデルを提供しようとします。これは、入力が出力にマップされる方法を学習しようとする判別モデルとは対照的です。

LDA を使用すると、製品購入に基づく顧客のクラスタリングから音楽の自動調和解析まで、さまざまなタスクを実行できます。ただし、最も関連しているのは、テキストコーパスのトピックモデリングです。観測はドキュメントと呼ばれます。この特徴セットは語彙と呼ばれます。特徴は単語と呼ばれます。また、結果のカテゴリはトピックと呼ばれます。

**注記**  
レンマ化によりアルゴリズムの性能と精度が大幅に向上します。入力テキストデータの前処理を検討してください。詳細については、「[Stemming and lemmatization](https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html)」を参照してください。

LDA モデルは、2 つのパラメータで定義されます。
+ α — トピックの確率についての事前の推定 (つまり、特定のドキュメント内の各トピックが発生する平均頻度)。
+ β — 各トピックに、「トピック語分布」とも呼ばれるドキュメントコーパスで使用される語彙に対する確率分布が与えられる k 個のトピックの集合。

LDA は「bag-of-words (単語の袋)」モデルであり、単語の順序は重要ではありません。LDA は生成混合モデルであるため、トピックの混在 θ 〜 ディリクレ (α) を選択して、各ドキュメントが単語ごとに生成されます。

 ドキュメント内の各単語の場合。
+  トピック z ∼ 多項式 (θ) を選択します。
+  対応するトピック語分布 β\$1z を選択します。
+  単語 w 〜 多項式 (β\$1z) を描きます。

モデルを訓練するときの目標は、モデルによってテキストコーパスが生成される確率を最大化するパラメータ α および β を見つけることです。

LDA モデルを推定する最も一般的な方法では、ギブスサンプリング法または期待値最大化法 (EM) を使用します。Amazon SageMaker AI LDA はテンソルスペクトル分解を使用します。これにはいくつかの利点があります。
+  **結果に対する理論上の保証**。標準的な EM 法は、しばしば品質が悪い局所最適解にのみ収束することが保証されています。
+  **大量の並列化が可能**。作業は、トレーニングと推論の両方で、入力ドキュメントに普通に分割することができます。EM メソッドとギブスサンプリングメソッドを並列化することはできますが、容易ではありません。
+  **高速**。EM メソッドは反復コストは低いものの、収束率が低下する傾向があります。ギブスサンプリングもまた、収束率が低く、多数のサンプルを必要とします。

テンソル分解方法は、高レベルでこのプロセスに従います。

1.  目標は、コーパス内のドキュメントのモーメントを要約する **V** x **V** x **V** テンソルのスペクトル分解を計算することです。**V** は語彙サイズ (つまり、すべてのドキュメントの個別の単語数) です。このテンソルのスペクトルコンポーネントは、ドキュメントコーパスの全体的な可能性を最大にする LDA パラメータ α および β です。ただし、語彙サイズが大きくなる傾向があるので、この **V** x **V** x **V** テンソルは、メモリに格納するのが非常に困難です。

1.  代わりに、ステップ 1 のテンソルの 2 次元アナログである **V** x **V** モーメントマトリックスを使用して、**V** x **k** 次元の白色化マトリックスを見つけることができます。このマトリックスは、**V** x **V** モーメントマトリックスを **k** x **k** 単位行列に変換するために使用できます。**k** はモデル内のトピック数です。

1.  この同じ白色化マトリックスを使用して、より小さい **k** x **k** x **k** テンソルを見つけることができます。スペクトル分解されるとき、このテンソルには、**V** x **V** x **V** テンソルのコンポーネントと単純な関係のあるコンポーネントがあります。

1.  *交互最小二乗法*は、より小さい **k** x *k* x **k** テンソルを分解するために使用されます。これにより、メモリ消費量と速度を大幅に改善されます。パラメータ α および β は、スペクトル分解のこれらの出力を「非白色化」することによって見つかります。

LDA モデルのパラメータが見つかったら、各ドキュメントのトピックの混在を見つけることができます。確率的勾配降下を使用して、これらのデータに対応する指定されたトピックの混在を観測する尤度関数を最大化します。

トピックの品質を向上させるには、トレーニングで探すトピックの数を増やし、品質の低いものを除外します。これは実際に SageMaker AI LDA で自動的に行われます。25% 多くのトピックが計算され、関連するディリクレの最大の関連トピックが返されます。トピックのフィルタリングと分析をさらに実行するには、トピック数を増やして、結果の LDA モデルを次のように変更します。

```
> import mxnet as mx
> alpha, beta = mx.ndarray.load(‘model.tar.gz’)
> # modify alpha and beta
> mx.nd.save(‘new_model.tar.gz’, [new_alpha, new_beta])
> # upload to S3 and create new SageMaker model using the console
```

LDA のアルゴリズムと SageMaker AI 実装の詳細については、以下を参照してください。
+ Animashree Anandkumar、Rong Ge、Daniel Hsu、Sham M Kakade、および Matus Telgarsky。*Tensor Decompositions for Learning Latent Variable Models*、Journal of Machine Learning Research、15:2773–2832、2014 年。
+  David M Blei、Andrew Y Ng、および Michael I Jordan。*潜在的ディリクレ配分*。Journal of Machine Learning Research、3(Jan):993–1022、2003 年。
+  Thomas L Griffiths および Mark Steyvers。*Finding Scientific Topics*。Proceedings of the National Academy of Sciences、101(suppl 1):5228–5235、2004 年。
+  Tamara G Kolda および Brett W Bader。*Tensor Decompositions and Applications*。SIAM Review、51(3):455–500、2009 年。

# LDA ハイパーパラメータ
<a name="lda_hyperparameters"></a>

`CreateTrainingJob` リクエストで、トレーニングアルゴリズムを指定します。また、アルゴリズム固有のハイパーパラメータを文字列から文字列へのマップとして指定することもできます。次の表に、Amazon SageMaker AI によって提供される LDA トレーニングアルゴリズムのハイパーパラメータを示します。詳細については、「[LDA の仕組み](lda-how-it-works.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1topics |  データ内で見つける LDA のトピックの数。 **必須** 有効な値: 正の整数  | 
| feature\$1dim |  入力ドキュメントコーパスの語彙のサイズ。 **必須** 有効な値: 正の整数  | 
| mini\$1batch\$1size |  入力ドキュメントコーパス内のドキュメントの合計数。 **必須** 有効な値: 正の整数  | 
| alpha0 |  集中パラメータの最初の推測: 前のディリクレの要素の合計。小さな値ではスパーストピック混在を生成する可能性が高く、大きな値 (1.0 以上) はより均一な混合物を生成します。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 1.0  | 
| max\$1restarts |  アルゴリズムの交互最小二乗法 (ALS) スペクトル分解フェーズで実行する再起動の回数。追加の計算を犠牲にして、より良い品質のローカル最小値を見つけるために使用できますが、通常は調整しないでください。 **オプション** 有効な値: 正の整数 デフォルト値: 10  | 
| max\$1iterations |  アルゴリズムの ALS フェーズで実行する反復の最大回数。追加の計算を犠牲にして、より良い品質の最小値を見つけるために使用できますが、通常は調整しないでください。 **オプション** 有効な値: 正の整数 デフォルト値: 1000  | 
| tol |  アルゴリズムの ALS フェーズの目標のエラー許容値。追加の計算を犠牲にして、より良い品質の最小値を見つけるために使用できますが、通常は調整しないでください。 **オプション** 有効な値: 正の浮動小数 デフォルト値: 1e-8  | 

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

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

LDA は、一連の観測 (ドキュメント) を異なるのカテゴリ (トピック) の混在として記述しようとする、親なしトピックモデリングアルゴリズムです。「単語ごとの対数尤度」 (PWLL) メトリクスは、学習したトピックのセット (LDA モデル) がテストドキュメントデータセットを正確に記述している可能性を測定します。PWLL の値が大きいほど、テストデータが LDA モデルによって記述される可能性が高いことを示します。

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

## LDA アルゴリズムによって計算されたメトリクス
<a name="lda-metrics"></a>

LDA アルゴリズムは、トレーニング中に単一のメトリクス `test:pwll` について報告します。モデルを調整するときに、このメトリクスを目標メトリクスとして選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:pwll | テストデータセットの単語ごとの対数尤度。テストデータセットが学習済み LDA モデルによって正確に記述されている可能性。 | 最大化 | 

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

LDA アルゴリズムの以下のハイパーパラメータを調整できます。ハイパーパラメータ `alpha0` と `num_topics` はどちらも、LDA 目標メトリクス (`test:pwll`) に影響を与える可能性があります。単語ごとの対数尤度を最大化し、正確な LDA モデルを生成する、これらのハイパーパラメータの最適値がまだわからない場合は、自動モデル調整で見つけることができます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| alpha0 | ContinuousParameterRanges | MinValue: 0.1、MaxValue: 10 | 
| num\$1topics | IntegerParameterRanges | MinValue: 1、MaxValue: 150 | 

# ニューラルトピックモデル (NTM) アルゴリズム
<a name="ntm"></a>

Amazon SageMaker AI NTM は、ドキュメントのコーパスを、それらの統計的分布に基づいた単語のグループ化を含むトピックに編成するために使用される教師なし学習アルゴリズムです。**たとえば、「自転車」、「車」、「電車」、「走行距離」、「スピード」などの単語が頻繁に含まれるドキュメントは、「交通」に関するトピックを共有する可能性があります。トピックモデリングを使用すると、検出されたトピックに基づいてドキュメントを分類または要約したり、トピックの類似性に基づいて情報を検索したりコンテンツを推奨したりすることができます。NTM が学習したドキュメントのトピックは、コーパス内で観察された単語分布から推測されるため、*潜在的な表現*として特徴付けられます。トピックの意味は通常、トピックに含まれる上位の単語を調べることによって推測されます。メソッドは教師なしであるため、トピック自体ではなく、トピックの数のみが事前に指定されます。さらに、トピックが人によるドキュメントの自然な分類方法と一致することは保証されません。

トピックモデリングは、大量のドキュメントコーパスのコンテンツを、学習したトピックの形で視覚化する方法を提供します。各トピックに関連するドキュメントは、ソフトトピックラベルに基づいてインデックス付けまたは検索される場合があります。また、そのトピックスペース内で類似のドキュメントを見つけるために、ドキュメントの潜在表現が使用される場合もあります。トピックモデルが学習するドキュメントの潜在表現を、別の教師ありアルゴリズム (文書分類器など) の入力として使用することもできます。ドキュメントの潜在表現には基盤となるドキュメントの意味をキャプチャすることが期待されているため、これらの表現の一部をベースとするアルゴリズムは、語彙特徴単独をベースとするアルゴリズムよりも優れたパフォーマンスを発揮することが期待されます。

トピックモデリングには Amazon SageMaker AI NTM アルゴリズムと LDA アルゴリズムの両方を使用できますが、それらは別個のアルゴリズムであり、同じ入力データに対して別の結果が生成されることが期待されます。

NTM 背後で行われる計算の詳細については、[Neural Variational Inference for Text Processing (テキスト処理のためのニューラル変分推論)](https://arxiv.org/pdf/1511.06038.pdf) を参照してください。

**Topics**
+ [NTM アルゴリズムの入出力インターフェイス](#NTM-inputoutput)
+ [NTM アルゴリズムの EC2 インスタンスに関する推奨事項](#NTM-instances)
+ [NTM サンプルノートブック](#NTM-sample-notebooks)
+ [NTM のハイパーパラメータ](ntm_hyperparameters.md)
+ [NTM モデルを調整する](ntm-tuning.md)
+ [NTM のレスポンス形式](ntm-in-formats.md)

## NTM アルゴリズムの入出力インターフェイス
<a name="NTM-inputoutput"></a>

Amazon SageMaker AI ニューラルトピックモデルは、トレーニング、検証、テスト、補助の 4 つのデータチャネルに対応しています。検証、テスト、および補助のデータチャネルは省略可能です。これらのオプションチャネルを指定する場合は、その `S3DataDistributionType` パラメータの値を `FullyReplicated` に設定します。検証データを提供した場合、このデータの損失は全エポックでログに記録され、検証の損失が改善していないと検出されるとすぐにモデルのトレーニングが停止します。検証データを提供しない場合、トレーニングデータに基づいてアルゴリズムが早期に停止しますが、より効率が下がる場合があります。テストデータを提供した場合、アルゴリズムは最終的なモデルからテストの損失を報告します。

NTM のトレーニング、検証、およびテストデータチャネルは、`recordIO-wrapped-protobuf` (高密度形式と疎形式) および `CSV` ファイル形式の両方をサポートします。`CSV` 形式の場合、各行は対応するドキュメントに存在しない単語に対してゼロカウントで高密度形式で表現する必要があり、その次元は (レコード数) \$1 (語彙のサイズ) と等しくなければなりません。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについてモデルをトレーニングできます。補助チャネルは、語彙を含むテキストファイルを提供するために使用されます。語彙ファイルを提供することによって、ユーザーは自分の整数 ID の代わりに、ログに出力された各トピックの上位の単語を確認できます。語彙ファイルが提供されると、NTM は単語埋め込みトピックコヒーレンス (WETC) スコアを計算することができます。これはログに表示される新しいメトリクスであり、各トピックの上位の単語間の類似性を効果的にキャプチャします。補助チャネルの `ContentType` は `text/plain` であり、各行には、データに指定されている整数 ID に対応する順序で単一の単語が含まれます。語彙ファイルは `vocab.txt` という名前でなければならず、現在は UTF-8 エンコーディングのみがサポートされています。

推論については、`text/csv`、`application/json`、`application/jsonlines`、および `application/x-recordio-protobuf` コンテンツタイプがサポートされています。`application/json` および `application/x-recordio-protobuf` に疎データを渡すこともできます。NTM の推論は、`application/json` または `application/x-recordio-protobuf` *予測*を返し、これには、各観測の `topic_weights` ベクトルが含まれます。

補助チャネルと WETC スコアの使用の詳細については、[ブログ記事](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-neural-topic-model-now-supports-auxiliary-vocabulary-channel-new-topic-evaluation-metrics-and-training-subsampling/)を参照してください。WETC スコアの計算方法の詳細については、[Coherence-Aware Neural Topic Modeling (コヒーレンス認識ニューラルトピックモデリング)](https://arxiv.org/pdf/1809.02687.pdf) を参照してください。Amazon SageMaker AI ニューラルトピックモデルには、このペーパーで説明しているペアワイズ WETC を使用しました。

入出力ファイル形式の詳細については、[NTM のレスポンス形式](ntm-in-formats.md) (推論の場合) および[NTM サンプルノートブック](#NTM-sample-notebooks)を参照してください。

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

NTM のトレーニングは、GPU と CPU のインスタンスタイプの両方に対応しています。GPU インスタンスをお勧めしますが、特定のワークロードについては CPU インスタンスのほうがトレーニングコストの削減につながる場合があります。推論については、CPU インスタンスで十分であるはずです。NTM のトレーニングは、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

## NTM サンプルノートブック
<a name="NTM-sample-notebooks"></a>

SageMaker AI NTM アルゴリズムを使用して、トピック分布が既知である合成データソースからドキュメント内のトピックを発見するサンプルノートブックについては、「[Introduction to Basic Functionality of NTM](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ntm_synthetic/ntm_synthetic.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# NTM のハイパーパラメータ
<a name="ntm_hyperparameters"></a>

次の表に、Amazon SageMaker AI ニューラルトピックモデル (NTM) アルゴリズムで設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
|  `feature_dim`  |  データセットの語彙サイズ。 **必須** 有効な値 : 正の整数 (最小: 1、最大: 1,000,000)  | 
| num\$1topics |  必要なトピックの数。 **必須** 有効な値 : 正の整数 (最小: 2、最大: 1000)  | 
| batch\$1norm |  トレーニング中にバッチの正規化を使用するかどうか。 **オプション** 有効な値: *true* または *false* デフォルト値: *false*  | 
| clip\$1gradient |  各勾配コンポーネントの大きさの最大値。 **オプション** 有効な値: 浮動小数点 (最小: 1e-3) デフォルト値は: 無限大  | 
| encoder\$1layers |  エンコーダー内のレイヤーの数と、各レイヤーの出力サイズ。*auto* に設定すると、アルゴリズムは 3 x `num_topics` のサイズと 2 x `num_topics` のサイズのレイヤーをそれぞれ使用します。 **オプション** 有効な値 : 正の整数のカンマ区切りリストまたは *auto* デフォルト値: *auto*  | 
| encoder\$1layers\$1activation |  エンコーダーレイヤーで使用するアクティベーション関数。 **オプション** 有効な値:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ntm_hyperparameters.html) デフォルト値: `sigmoid`  | 
| epochs |  トレーニングデータへのパスの最大数。 **オプション** 有効な値: 正の整数 (最小: 1) デフォルト値: 50  | 
| learning\$1rate |  オプティマイザの学習レート。 **オプション** 有効な値: 浮動小数点 (最小: 1e-6、最大: 1.0) デフォルト値: 0.001  | 
| mini\$1batch\$1size |  各ミニバッチ内の例の数。 **オプション** 有効な値 : 正の整数 (最小: 1、最大: 10000) デフォルト値: 256  | 
| num\$1patience\$1epochs |  早期停止条件が評価される後続のエポック数。損失関数の変化が最後のエポック数 `num_patience_epochs` 以内に指定された `tolerance` を下回ると、早期停止がトリガーされます。早期停止を無効にするには、`num_patience_epochs` を `epochs` より大きい値にします。 **オプション** 有効な値: 正の整数 (最小: 1) デフォルト値： 3  | 
| optimizer |  トレーニングに使用するオプティマイザ。 **オプション** 有効な値: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ntm_hyperparameters.html) デフォルト値: `adadelta`  | 
| rescale\$1gradient |  勾配の再スケール係数。 **オプション** 有効な値: 浮動小数点 (最小: 1e-3、最大: 1.0) デフォルト値: 1.0  | 
| sub\$1sample |  トレーニングのためにエポックごとにサンプリングするトレーニングデータの割合。 **オプション** 有効な値: 浮動小数点 (最小: 0.0、最大: 1.0) デフォルト値: 1.0  | 
| tolerance |  損失関数の最大相対変化。損失関数の変化が最後のエポック数 `num_patience_epochs` 以内にこの値を下回ると、早期停止がトリガーされます。 **オプション** 有効な値: 浮動小数点 (最小: 1e-6、最大: 0.1) デフォルト値: 0.001  | 
| weight\$1decay |   重み減衰係数。L2 正規化を追加します。 **オプション** 有効な値: 浮動小数点 (最小: 0.0、最大: 1.0) デフォルト値: 0.0  | 

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

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

Amazon SageMaker AI NTM は教師なし学習アルゴリズムで、ドキュメントのコーパスなど、大量の離散データのコレクションの潜在表現を学習します。潜在表現は、直接測定されていない推定変数を使用して、データセット内の観測値をモデル化します。NTM での自動モデル調整は、トレーニングまたは検証データの損失を最小限に抑えるモデルを見つけるのに役立ちます。*トレーニング損失*は、モデルがトレーニングデータにどの程度適合しているかを測定します。*検証損失*は、トレーニングされていないデータにどの程度モデルを一般化できるかを測定します。トレーニング損失が少ないということは、モデルがトレーニングデータに適していることを示します。検証の損失が少ないということは、モデルがトレーニングデータに過剰適合していないことを示しているため、モデルが正しくトレーニングされていないドキュメントをモデル化できます。通常望ましいのは、両方の損失を小さくすることです。ただし、トレーニング損失を最小限に抑えると、過剰適合が発生し、検証損失が増加する可能性があります。これにより、モデルの一般性が低下します。

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

## NTM アルゴリズムによって計算されたメトリクス
<a name="ntm-metrics"></a>

NTM アルゴリズムは、トレーニング中に計算された単一のメトリクス (`validation:total_loss`) を報告します。総損失は、再構成損失とカルバック・ライブラー情報量の合計です。ハイパーパラメータ値を調整するときには、このメトリクスを目標として選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:total\$1loss |  検証セットの総損失  |  最小化  | 

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

NTM アルゴリズムの以下のハイパーパラメータを調整できます。通常、`mini_batch_size` を低く設定し、`learning_rate` 値を小さくすると、検証損失が少なくなりますが、トレーニングに時間がかかる可能性があります。検証損失が低い場合、必ずしも人間がより解釈しやすいトピックが生成されるわけではありません。トレーニングおよび検証の喪失に対する他のハイパーパラメータの影響は、データセットによって異なる可能性があります。互換性のある値を確認するには、[NTM のハイパーパラメータ](ntm_hyperparameters.md) を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| encoder\$1layers\$1activation |  CategoricalParameterRanges  |  ['sigmoid', 'tanh', 'relu']  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4、MaxValue: 0.1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 16、MaxValue:2048  | 
| optimizer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'adadelta']  | 
| rescale\$1gradient |  ContinuousParameterRange  |  MinValue: 0.1、MaxValue: 1.0  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 1.0  | 

# NTM のレスポンス形式
<a name="ntm-in-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。このトピックには、SageMaker AI NTM アルゴリズムで使用可能な出力形式のリストが含まれています。

## JSON レスポンスの形式
<a name="ntm-json"></a>

```
{
    "predictions":    [
        {"topic_weights": [0.02, 0.1, 0,...]},
        {"topic_weights": [0.25, 0.067, 0,...]}
    ]
}
```

## JSONLINES レスポンスの形式
<a name="ntm-jsonlines"></a>

```
{"topic_weights": [0.02, 0.1, 0,...]}
{"topic_weights": [0.25, 0.067, 0,...]}
```

## RECORDIO レスポンスの形式
<a name="ntm-recordio"></a>

```
[
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    }  
]
```

# 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 つの値と等しくなります。

# Sequence to Sequence アルゴリズム
<a name="seq-2-seq"></a>

Amazon SageMaker AI Sequence to Sequence は、入力が一連のトークン (テキスト、オーディオなど) であり、生成される出力が別の一連のトークンである、教師あり学習アルゴリズムです。アプリケーションの例として、機械学習 (1 つの言語で入力した文が別の言語でどうなるかを予測する)、テキスト要約 (入力した長い文字列のより短い文字列での要約を予測する)、音声認識 (トークンの出力文に変換したオーディオクリップ) が含まれます。近年、このドメインの問題はディープニューラルネットワークによってモデル化に成功し、以前の方式を大幅に超えるパフォーマンスを示しています。Amazon SageMaker AI seq2seq は再帰型ニューラルネットワーク (RNN) モデルと畳み込みニューラルネットワーク (CNN) モデルにアテンションを組み合わせたエンコーダーデコーダーアーキテクチャを使用します。

**Topics**
+ [Sequence to Sequence アルゴリズムの入出力インターフェイス](#s2s-inputoutput)
+ [Sequence to Sequence アルゴリズムの EC2 インスタンスに関する推奨事項](#s2s-instances)
+ [Sequence to Sequence サンプルノートブック](#seq-2-seq-sample-notebooks)
+ [Sequence to Sequence の仕組み](seq-2-seq-howitworks.md)
+ [Sequence to Sequence ハイパーパラメータ](seq-2-seq-hyperparameters.md)
+ [Sequence to Sequence モデルを調整する](seq-2-seq-tuning.md)

## Sequence to Sequence アルゴリズムの入出力インターフェイス
<a name="s2s-inputoutput"></a>

**トレーニング**

SageMaker AI seq2seq は、RecordIO-Protobuf 形式のデータを想定します。ただし、通常の場合と同様に、トークンは浮動小数点ではなく整数であることが想定されます。

[seq2seq サンプルノートブック](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/seq2seq_translation_en-de/SageMaker-Seq2Seq-Translation-English-German.html)に、トークン化されたテキストファイルからのデータを protobuf 形式に変換するスクリプトが含まれています。一般的には、データを 32 ビットの整数テンソルにパッキングし、メトリクスの計算や推論に必要な語彙ファイルを生成します。

前処理の完了後、アルゴリズムをトレーニングのために呼び出すことができます。アルゴリズムは以下の 3 つのチャネルを想定します。
+ `train`: トレーニングデータ (事前処理スクリプトによって生成される `train.rec` ファイルなど) が含まれている必要があります。
+ `validation`: 検証データ (事前処理スクリプトによって生成される `val.rec` ファイルなど) が含まれている必要があります。
+ `vocab`: 2 つの語彙ファイル (`vocab.src.json` と `vocab.trg.json`) が含まれている必要があります 

アルゴリズムによってこれらの 3 つのチャネルでデータが見つからなかった場合、トレーニングの結果はエラーになります。

**推論**

ホストされるエンドポイントの場合、推論は 2 つのデータ形式をサポートします。スペース区切りのテキストトークンを使用して推論を実行するには、`application/json` 形式を使用します。それ以外の場合は、`recordio-protobuf` 形式を使用して整数にエンコードされたデータを処理します。どちらのモードも入力データのバッチ処理をサポートしています。`application/json` 形式では、アテンション行列を視覚化することもできます。
+ `application/json`: 入力を JSON 形式で要求し、出力を JSON 形式で返します。コンテンツタイプと受け取りタイプは両方とも `application/json` である必要があります。各シーケンスは空白で区切られたトークンの文字列であることが要求されます。この形式は、バッチ内のソースシーケンスの数が少ないときに推奨されます。また、次の追加の設定オプションにも対応しています。

  `configuration`: \$1`attention_matrix`: `true`\$1: 特定の入力シーケンスについてアテンション行列を返します。
+ `application/x-recordio-protobuf`: 入力を `recordio-protobuf` 形式で要求し、出力を `recordio-protobuf format` 形式で返します。コンテンツタイプと受け取りタイプは両方とも `applications/x-recordio-protobuf` である必要があります。この形式では、後続のプロトコルバッファーへのエンコードのために、ソースシーケンスを整数のリストに変換する必要があります。この形式は、一括での推論に推奨されます。

バッチ変換の場合、推論は JSON Lines 形式をサポートします。バッチ変換は、JSON Lines 形式の入力を想定し、JSON Lines 形式の出力を返します。コンテンツタイプと受け取りタイプは両方とも `application/jsonlines` である必要があります。入力の形式は次のとおりです。

```
content-type: application/jsonlines

{"source": "source_sequence_0"}
{"source": "source_sequence_1"}
```

レスポンスの形式は次のとおりです。

```
accept: application/jsonlines

{"target": "predicted_sequence_0"}
{"target": "predicted_sequence_1"}
```

推論のために入力と出力を特定の形式にシリアル化および逆シリアル化する方法の詳細については、[Sequence to Sequence サンプルノートブック](#seq-2-seq-sample-notebooks)を参照してください。

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

Amazon SageMaker AI seq2seq アルゴリズムは、GPU インスタンスタイプでのみサポートし、単一のマシンでのトレーニングできます。ただし、複数の GPU を備えたインスタンスを使用することができます。seq2seq アルゴリズムは P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

## Sequence to Sequence サンプルノートブック
<a name="seq-2-seq-sample-notebooks"></a>

SageMaker AI Sequence to Sequence アルゴリズムを使用して英語 - ドイツ語翻訳モデルをトレーニングする方法を示すサンプルノートブックについては、「[Machine Translation English-German Example Using SageMaker AI Seq2Seq](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/seq2seq_translation_en-de/SageMaker-Seq2Seq-Translation-English-German.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# Sequence to Sequence の仕組み
<a name="seq-2-seq-howitworks"></a>

通常、sequence-to-sequence モデリングのニューラルネットワークは、次のようなレイヤーで構成されます。
+ **埋め込みレイヤー**。このレイヤーでは、希薄な方法 (one-hot エンコードなど) でエンコードされた入力トークンである入力行列が、高密度の特徴レイヤーにマッピングされます。高次元の特徴ベクトルは、特定のトークンに関して、単純な one-hot エンコードされたベクトルよりも情報をエンコードできるため、必須です。また、標準的な方法として、この埋め込みレイヤーを事前にトレーニングを行った [FastText](https://fasttext.cc/) や [Glove](https://nlp.stanford.edu/projects/glove/) などの言語ベクトルを使用して初期化する、またはトレーニング中にそれをランダムに初期化してパラメータを学習する方法も挙げられます。
+ **エンコーダーレイヤー**。入力トークンを高密度の特徴スペースにマッピングした後、シーケンスはエンコーダーレイヤーを移行して、(全シーケンスの) 入力埋め込みレイヤーからのすべての情報を固定長の特徴ベクトルに圧縮します。通常、エンコーダーは長・短期記憶 (LSTM) やゲート付き再帰型ユニット (GRU) などの RNN タイプのネットワークで作成されます (LSTM の詳細については、[Colah のブログ](http://colah.github.io/posts/2015-08-Understanding-LSTMs/)を参考にしてください)。
+ **デコーダーレイヤー**。デコーダーレイヤーはこのエンコードされた特徴ベクトルを取得し、トークンの出力シーケンスを生成します。また、このレイヤーは通常、RNN アーキテクチャ (LSTM と GRU) で構成されます。

モデル全体が共同でトレーニングが行われ、ソースシーケンスが指定されたターゲットシーケンスの可能性を最大化します。このモデルは、2014 年に [Sutskever ら](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf)によって最初に導入されました。

**アテンション機構**。エンコーダーデコーダーフレームワークの欠点は、エンコードされた固定長の特徴ベクトルに含めることのできる情報の量には制限があるため、ソースシーケンスの長さが増えるたびにモデルのパフォーマンスが減少する点です。この問題に取り組むために、Bahdanau らは 2015 年に[アテンション機構](https://arxiv.org/pdf/1409.0473.pdf)を提案しました。アテンション機構では、デコーダーが最も重要な情報が存在する可能性があるエンコーダーシーケンス内の場所の検索を試行し、その情報と以前にデコードした単語を使用して、シーケンス内の次のトークンを予測します。

詳細については、Luong らによるホワイトペーパー [Effective Approaches to Attention-based Neural Machine Translation (アテンションに基づくニューラル機械翻訳の効果的なアプローチ)](https://arxiv.org/abs/1508.04025) を参照してください。さらに、Wu らによるホワイトペーパー [Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (Google のニューラル機械翻訳システム: 人間と機械翻訳の間での橋渡し)](https://arxiv.org/abs/1609.08144) では、Google の機械翻訳のアーキテクチャーについて説明しています。

# Sequence to Sequence ハイパーパラメータ
<a name="seq-2-seq-hyperparameters"></a>

次の表に、Amazon SageMaker AI Sequence-to-Sequence (seq2seq) アルゴリズムでトレーニングするときに設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| batch\$1size | 勾配降下のミニバッチサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 64 | 
| beam\$1size | ビームサーチのビームの長さ。トレーニング中に `bleu` の計算に使用され、推論中に使用されます。 **オプション** 有効な値: 正の整数 デフォルト値: 5 | 
| bleu\$1sample\$1size | トレーニング中に `bleu` スコアをデコードして計算するために検証データセットから選択するインスタンスの数。完全な検証セットを使用するには -1 に設定します (`bleu` が `optimized_metric` として選択されている場合)。 **オプション** 有効な値: 整数 デフォルト値: 0 | 
| bucket\$1width | (source,target) バケットを最大で (`max_seq_len_source`,`max_seq_len_target`) で返します。より長い側のデータは `bucket_width` のステップを使用し、短い側はターゲット/ソースの長さの平均比でスケールダウンしたステップを使用します。一方の側が他方より先に最大長に達した場合、その側の余分なバケットの幅はその側の `max_len` に固定されます。 **オプション** 有効な値: 正の整数 デフォルト値: 10 | 
| bucketing\$1enabled | バケットを無効にし、最大長に展開するには、`false` に設定します。 **オプション** 有効な値: `true` または `false` デフォルト値: `true` | 
| checkpoint\$1frequency\$1num\$1batches | x バッチごとにチェックポイントと評価を行います。このチェックポイントハイパーパラメータは SageMaker AI の seq2seq アルゴリズムに渡され、最適なモデルを早期停止して取得できます。アルゴリズムのチェックポイントは、アルゴリズムのトレーニングコンテナ内でローカルで実行され、SageMaker AI チェックポイントとは互換性がありません。アルゴリズムは、一時的にチェックポイントをローカルパスに保存し、トレーニングジョブが停止した後、最適なモデルアーティファクトを S3 のモデル出力パスに保存します。 **オプション** 有効な値: 正の整数 デフォルト値: 1000 | 
| checkpoint\$1threshold | トレーニングが停止する前に検証データセット上の `optimized_metric` で改善しないように許可されたモデルのチェックポイントの最大数。このチェックポイントハイパーパラメータは SageMaker AI の seq2seq アルゴリズムに渡され、最適なモデルを早期停止して取得できます。アルゴリズムのチェックポイントは、アルゴリズムのトレーニングコンテナ内でローカルで実行され、SageMaker AI チェックポイントとは互換性がありません。アルゴリズムは、一時的にチェックポイントをローカルパスに保存し、トレーニングジョブが停止した後、最適なモデルアーティファクトを S3 のモデル出力パスに保存します。 **オプション** 有効な値: 正の整数 デフォルト値： 3 | 
| clip\$1gradient | これより大きなクリップのグラデーション絶対値。無効にするには、負の値に設定します。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1 | 
| cnn\$1activation\$1type | 使用される `cnn` のアクティベーションタイプ。 **オプション** 有効な値： 文字列。`glu`、`relu`、`softrelu`、`sigmoid`、`tanh` のいずれか。 デフォルト値: `glu` | 
| cnn\$1hidden\$1dropout | 畳み込みレイヤー間のドロップアウトのドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| cnn\$1kernel\$1width\$1decoder | `cnn` デコーダーのカーネル幅。 **オプション** 有効な値: 正の整数 デフォルト値: 5 | 
| cnn\$1kernel\$1width\$1encoder | `cnn` エンコーダーのカーネル幅。 **オプション** 有効な値: 正の整数 デフォルト値： 3 | 
| cnn\$1num\$1hidden | エンコーダーやデコーダーの `cnn` の非表示ユニットの数。 **オプション** 有効な値: 正の整数 デフォルト値: 512 | 
| decoder\$1type | デコーダーの種類。 **オプション** 有効な値： 文字列。`rnn` または `cnn` です。 デフォルト値: *rnn* | 
| embed\$1dropout\$1source | ソース側の埋め込みのドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| embed\$1dropout\$1target | ターゲット側の埋め込みのドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| encoder\$1type | エンコーダーの種類。`rnn` アーキテクチャーは Bahdanau らによるアテンション機構に基づいており、*cnn* アーキテクチャーは Gehring らに基づいています。 **オプション** 有効な値： 文字列。`rnn` または `cnn` です。 デフォルト値: `rnn` | 
| fixed\$1rate\$1lr\$1half\$1life | `fixed_rate_`\$1 のスケジューラのチェックポイント数に関する学習レートの半減期。 **オプション** 有効な値: 正の整数 デフォルト値: 10 | 
| learning\$1rate | 初期学習レート。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.0003 | 
| loss\$1type | トレーニングの損失関数。 **オプション** 有効な値: 文字列。 `cross-entropy` デフォルト値: `cross-entropy` | 
| lr\$1scheduler\$1type | 学習レートスケジューラタイプ。`plateau_reduce` は、`validation_accuracy` の `optimized_metric` がプラトーに達するたびに学習レートを下げることを意味します。`inv_t` は逆時間減衰です。`learning_rate`/(1\$1`decay_rate`\$1t) **オプション** 有効な値： 文字列。`plateau_reduce`、`fixed_rate_inv_t`、`fixed_rate_inv_sqrt_t` のいずれか 1 つ。 デフォルト値: `plateau_reduce` | 
| max\$1num\$1batches | 処理する更新/バッチの最大数。無限の場合は -1。 **オプション** 有効な値: 整数 デフォルト値: -1 | 
| max\$1num\$1epochs | フィッティングが停止する前にトレーニングデータを移行するエポックの最大数。このパラメータが渡された場合に検証の正確性が改善しない場合でも、トレーニングはエポックがこの数に達するまで続行されます。渡されない場合は無視されます。 **オプション** 有効な値: max\$1num\$1epochs 以下の正の整数。 デフォルト値: なし | 
| max\$1seq\$1len\$1source | ソースシーケンスの長さの最大長。この長さより長いシーケンスはこの長さに切り捨てられます。 **オプション** 有効な値: 正の整数 デフォルト値: 100  | 
| max\$1seq\$1len\$1target | ターゲットシーケンスの長さの最大長。この長さより長いシーケンスはこの長さに切り捨てられます。 **オプション** 有効な値: 正の整数 デフォルト値: 100 | 
| min\$1num\$1epochs | トレーニングが `early_stopping` 条件に従って停止されるまでに実行する必要のあるエポックの最小数。 **オプション** 有効な値: 正の整数 デフォルト値: 0 | 
| momentum | `sgd` に使用されるモーメンタム定数。`adam` または `rmsprop` を使用している場合は、このパラメータを渡さないでください。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし | 
| num\$1embed\$1source | ソーストークンの埋め込みサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 512 | 
| num\$1embed\$1target | ターゲットトークンの埋め込みサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 512 | 
| num\$1layers\$1decoder | デコーダー *rnn* または *cnn* のレイヤーの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1 | 
| num\$1layers\$1encoder | エンコーダー `rnn` または `cnn` のレイヤーの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1 | 
| optimized\$1metric | 早期停止を最適化するメトリクス。 **オプション** 有効な値： 文字列。`perplexity`、`accuracy`、`bleu` のいずれか 1 つ。 デフォルト値: `perplexity` | 
| optimizer\$1type | 選択するオプティマイザー。 **オプション** 有効な値： 文字列。`adam`、`sgd`、`rmsprop` のいずれか 1 つ。 デフォルト値: `adam` | 
| plateau\$1reduce\$1lr\$1factor | 学習レートを乗算する係数 (`plateau_reduce` の場合)。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.5 | 
| plateau\$1reduce\$1lr\$1threshold | `plateau_reduce` スケジューラでは、`optimized_metric` がこの数のチェックポイントを改善しなかった場合、学習レートに減衰係数を乗算します。 **オプション** 有効な値: 正の整数 デフォルト値： 3 | 
| rnn\$1attention\$1in\$1upper\$1layers | Google NMT のペーパーのように、アテンションを *rnn* の上位レイヤーに渡します。複数のレイヤーが使用されている場合にのみ適用できます。 **オプション** 有効な値: ブール値 (`true` または `false`) デフォルト値: `true` | 
| rnn\$1attention\$1num\$1hidden | アテンションレイヤーの非表示ユニットの数。デフォルトは `rnn_num_hidden` です。 **オプション** 有効な値: 正の整数 デフォルト値: `rnn_num_hidden` | 
| rnn\$1attention\$1type | エンコーダーのアテンションモデル。Luong らのペーパーによると、`mlp` は concat を参照し、bilinear は general を参照します。 **オプション** 有効な値： 文字列。`dot`、`fixed`、`mlp`、`bilinear` のいずれか。 デフォルト値: `mlp` | 
| rnn\$1cell\$1type | 特定のタイプの `rnn` アーキテクチャー。 **オプション** 有効な値： 文字列。`lstm` または `gru` です。 デフォルト値: `lstm` | 
| rnn\$1decoder\$1state\$1init | `rnn` デコーダーの状態をエンコーダーから初期化する方法。 **オプション** 有効な値： 文字列。`last`、`avg`、`zero` のいずれか 1 つ。 デフォルト値: `last` | 
| rnn\$1first\$1residual\$1layer | 残差接続がある最初の *rnn* レイヤー、エンコーダーまたはデコーダー内のレイヤーの数が 1 を超える場合にのみ適用可能。 **オプション** 有効な値: 正の整数 デフォルト値: 2 | 
| rnn\$1num\$1hidden | エンコーダーおよびデコーダーの *rnn* の非表示ユニットの数。このアルゴリズムはデフォルトで双方向の長短期記憶 (LSTM) を使用するため、これは 2 の倍数である必要があります。 **オプション** 有効な値: 正の偶数 デフォルト値: 1024 | 
| rnn\$1residual\$1connections | 多層 *rnn* に残差接続を追加する。レイヤーの数は 1 を超える必要があります。 **オプション** 有効な値: ブール値 (`true` または `false`) デフォルト値: `false` | 
| rnn\$1decoder\$1hidden\$1dropout | コンテキストをデコーダーの *rnn* の非表示状態を組み合わせる、非表示状態のドロップアウトする確率。 **オプション** 有効な値: 浮動小数点数。[0,1] の範囲です。 デフォルト値: 0 | 
| training\$1metric | 検証データ上のトレーニングを追跡するメトリクス。 **オプション** 有効な値： 文字列。`perplexity` または `accuracy` です。 デフォルト値: `perplexity` | 
| weight\$1decay | 重み減衰定数。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0 | 
| weight\$1init\$1scale | 重み初期化方法のスケール (初期化方法が `uniform` および `xavier` の場合)。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 2.34 | 
| weight\$1init\$1type | 重み初期化方法の種類。 **オプション** 有効な値： 文字列。`uniform` または `xavier` です。 デフォルト値: `xavier` | 
| xavier\$1factor\$1type | Xavier の係数タイプ。 **オプション** 有効な値： 文字列。`in`、`out`、`avg` のいずれか 1 つ。 デフォルト値: `in` | 

# Sequence to Sequence モデルを調整する
<a name="seq-2-seq-tuning"></a>

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

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

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

Sequence to Sequence アルゴリズムは、トレーニング中に計算される 3 つのメトリクスを報告します。ハイパーパラメータ値を調整するときに最適化する目標として、いずれか 1 つを選択します。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:accuracy |  検証データセットで計算される精度。  |  最大化  | 
| validation:bleu |  検証データセットで計算される [BLEU](https://en.wikipedia.org/wiki/BLEU) スコア。BLEU の計算は高価であるため、検証データセットのランダムなサブサンプルに対して BLEU を計算するように選択すると、全体的なトレーニングプロセスを加速することができます。サブサンプルを指定するには、`bleu_sample_size` パラメータを使用します。  |  最大化  | 
| validation:perplexity |  [Perplexity](https://en.wikipedia.org/wiki/Perplexity) は、検証データセットで計算される損失関数です。Perplexity は、経験的サンプルとモデル予測の分布との間の交差エントロピーを測定するため、モデルがサンプル値をどの程度予測できるかの尺度を提供します。サンプルの予測に優れたモデルは、Perplexity が低くなります。  |  最小化  | 

## Sequence to Sequence ハイパーパラメータを調整する
<a name="seq-2-seq-tunable-hyperparameters"></a>

SageMaker AI Sequence to Sequence アルゴリズムの次のハイパーパラメータを調整できます。Sequence to Sequence の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`batch_size`、`optimizer_type`、`learning_rate`、`num_layers_encoder`、および `num_layers_decoder` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| num\$1layers\$1encoder |  IntegerParameterRange  |  [1-10]  | 
| num\$1layers\$1decoder |  IntegerParameterRange  |  [1-10]  | 
| batch\$1size |  CategoricalParameterRange  |  [16,32,64,128,256,512,1024,2048]  | 
| optimizer\$1type |  CategoricalParameterRange  |  ['adam', 'sgd', 'rmsprop']  | 
| weight\$1init\$1type |  CategoricalParameterRange  |  ['xavier', 'uniform']  | 
| weight\$1init\$1scale |  ContinuousParameterRange  |  xavier タイプの場合: MinValue: 2.0、MaxValue: 3.0、uniform タイプの場合: MinValue: -1.0、MaxValue: 1.0  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 0.00005、MaxValue: 0.2  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.1  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.5、MaxValue: 0.9  | 
| clip\$1gradient |  ContinuousParameterRange  |  MinValue: 1.0、MaxValue: 5.0  | 
| rnn\$1num\$1hidden |  CategoricalParameterRange  |  再帰型ニューラルネットワーク (RNN) にのみ適用できます。[128,256,512,1024,2048]   | 
| cnn\$1num\$1hidden |  CategoricalParameterRange  |  畳み込みニューラルネットワーク (CNN) にのみ適用できます。[128,256,512,1024,2048]   | 
| num\$1embed\$1source |  IntegerParameterRange  |  [256-512]  | 
| num\$1embed\$1target |  IntegerParameterRange  |  [256-512]  | 
| embed\$1dropout\$1source |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| embed\$1dropout\$1target |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| rnn\$1decoder\$1hidden\$1dropout |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| cnn\$1hidden\$1dropout |  ContinuousParameterRange  |  MinValue: 0.0、MaxValue: 0.5  | 
| lr\$1scheduler\$1type |  CategoricalParameterRange  |  ['plateau\$1reduce', 'fixed\$1rate\$1inv\$1t', 'fixed\$1rate\$1inv\$1sqrt\$1t']  | 
| plateau\$1reduce\$1lr\$1factor |  ContinuousParameterRange  |  MinValue: 0.1、MaxValue: 0.5  | 
| plateau\$1reduce\$1lr\$1threshold |  IntegerParameterRange  |  [1-5]  | 
| fixed\$1rate\$1lr\$1half\$1life |  IntegerParameterRange  |  [10-30]  | 

# テキスト分類 - TensorFlow
<a name="text-classification-tensorflow"></a>

Amazon SageMaker AI テキスト分類 - TensorFlow アルゴリズムは、[TensorFlow ハブ](https://tfhub.dev/)の多くの事前トレーニング済みモデルによる転移学習をサポートする教師あり学習アルゴリズムです。大量のテキストデータが使用可能でない場合でも、転移学習を使用して、使用可能な事前トレーニング済みモデルのいずれかを独自のデータセットで微調整できます。テキスト分類アルゴリズムは、テキスト文字列を入力として受け取り、各クラスラベルの確率を出力します。トレーニングデータセットは CSV 形式である必要があります。このページには、テキスト分類 - TensorFlow の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

**Topics**
+ [SageMaker AI テキスト分類の使用方法 - TensorFlow アルゴリズム](text-classification-tensorflow-how-to-use.md)
+ [テキスト分類 - TensorFlow アルゴリズムの入出力インターフェイス](text-classification-tensorflow-inputoutput.md)
+ [テキスト分類 - TensorFlow アルゴリズムの Amazon EC2 インスタンスの推奨事項](#text-classification-tensorflow-instances)
+ [テキスト分類 - TensorFlow サンプルノートブック](#text-classification-tensorflow-sample-notebooks)
+ [テキスト分類 - TensorFlow の仕組み](text-classification-tensorflow-HowItWorks.md)
+ [TensorFlow ハブモデル](text-classification-tensorflow-Models.md)
+ [テキスト分類 - TensorFlow ハイパーパラメータ](text-classification-tensorflow-Hyperparameter.md)
+ [テキスト分類 - TensorFlow モデルの調整](text-classification-tensorflow-tuning.md)

# SageMaker AI テキスト分類の使用方法 - TensorFlow アルゴリズム
<a name="text-classification-tensorflow-how-to-use"></a>

テキスト分類 - TensorFlow は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker AI Python SDK でテキスト分類 - TensorFlow を使用する方法について説明します。Amazon SageMaker Studio Classic UI からテキスト分類 - TensorFlow を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。

テキスト分類 - TensorFlow アルゴリズムは、互換性のある事前トレーニング済み TensorFlow モデルのいずれかを使用した転移学習をサポートしています。使用可能なすべての事前トレーニング済みモデルのリストについては、「[TensorFlow ハブモデル](text-classification-tensorflow-Models.md)」を参照してください。すべての事前トレーニング済みモデルには一意の `model_id` があります。次の例では、BERT Base Uncased (`model_id`: `tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2`) を使用してカスタムデータセットを微調整しています。事前トレーニング済みモデルはすべて TensorFlow ハブ から事前にダウンロードされ、Amazon S3 バケットに保存されているため、トレーニングジョブはネットワーク分離状態で実行できます。事前に生成されたこれらのモデルトレーニングアーティファクトを使用して SageMaker AI 推定器を構築します。

まず、Docker イメージ URI、トレーニングスクリプト URI、および事前トレーニング済みのモデル URI を取得します。次に、必要に応じてハイパーパラメータを変更します。使用可能なすべてのハイパーパラメータとそのデフォルト値の Python ディクショナリは、`hyperparameters.retrieve_default` で確認できます。詳細については、「[テキスト分類 - TensorFlow ハイパーパラメータ](text-classification-tensorflow-Hyperparameter.md)」を参照してください。これらの値を使用して SageMaker AI 推定器を構築します。

**注記**  
デフォルトのハイパーパラメータ値はモデルによって異なります。例えば、モデルが大きいほど、既定のバッチサイズは小さくなります。

この例では、肯定的および否定的な映画レビューを含む [https://www.tensorflow.org/datasets/catalog/glue#gluesst2](https://www.tensorflow.org/datasets/catalog/glue#gluesst2) データセットを使用しています。データセットを事前にダウンロードして、Amazon S3 で使用できるようにしてあります。モデルを微調整するには、トレーニングデータセットの Amazon S3 の場所を使用して `.fit` を呼び出します。ノートブックで使用する S3 バケットは、それにアクセスするノートブックインスタンスと同じ AWS リージョンに存在する必要があります。

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyperparameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/SST2/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tc-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create an Estimator instance
tf_tc_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Launch a training job
tf_tc_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

カスタムデータセットの転移学習に SageMaker テキスト分類 - TensorFlow アルゴリズムを使用する方法の詳細については、「[Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb)」ノートブックを参照してください。

# テキスト分類 - TensorFlow アルゴリズムの入出力インターフェイス
<a name="text-classification-tensorflow-inputoutput"></a>

TensorFlow ハブモデルに一覧表示されている事前トレーニング済みモデルはそれぞれ、任意の数のクラスを持つテキスト文で構成されるデータセットに合わせて微調整できます。事前トレーニング済みモデルは分類レイヤーをテキスト埋め込みモデルにアタッチし、レイヤーパラメータをランダム値に初期化します。分類レイヤーの出力次元は、入力データで検出されたクラスの数に基づいて決定されます。

テキスト分類 - TensorFlow モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。
+ **トレーニングデータの入力形式:** `data.csv` ファイルを含むディレクトリ。最初の列の各行は、0 からクラス数の間の整数のクラスラベルを含んでいる必要があります。2 列目の各行は、対応するテキストデータを含んでいる必要があります。

入力 CSV ファイルの例を次に示します。ファイルにはヘッダーを含めないことにご注意ください。ファイルは、次のようなパスの Amazon S3 バケットでホストされている必要があります。`s3://bucket_name/input_directory/`。末尾の `/` は必須であることにご注意ください。

```
|   |  |
|---|---|
|0 |hide new secretions from the parental units|
|0 |contains no wit , only labored gags|
|1 |that loves its characters and communicates something rather beautiful about human nature|
|...|...|
```

## 段階的トレーニング
<a name="text-classification-tensorflow-incremental-training"></a>

以前に SageMaker AI でトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。

**注記**  
SageMaker AI テキスト分類 - TensorFlow モデルは、SageMaker AI でトレーニングされた別のテキスト分類 - TensorFlow モデルを使用してのみシードできます。

一連のクラスが同じままである限り、任意のデータセットを段階的トレーニングに使用できます。段階的トレーニングのステップは微調整のステップと同様ですが、事前トレーニング済みモデルから始める代わりに、既存の微調整済みモデルから始めます。

SageMaker AI テキスト分類 - TensorFlow アルゴリズムを使用した段階的トレーニングの使用の詳細については、「[Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb)」サンプルノートブックを参照してください。

## テキスト分類 - TensorFlow アルゴリズムによる推論
<a name="text-classification-tensorflow-inference"></a>

TensorFlow テキスト分類トレーニングの結果として生じる微調整済みモデルを推論のためにホストすることができます。推論用の未加工テキストの形式はすべて、コンテンツタイプ `application/x-text` でなければなりません。

推論を実行すると、確率値、すべてのクラスのクラスラベル、および確率が最も高いクラスインデックスに対応する予測ラベルが JSON 形式にエンコードされて得られます。テキスト分類 - TensorFlow モデルは、リクエストごとに単一の文字列を処理し、1 行だけを出力します。JSON 形式のレスポンスの例を次に示します。

```
accept: application/json;verbose

{"probabilities": [prob_0, prob_1, prob_2, ...],
"labels": [label_0, label_1, label_2, ...],
"predicted_label": predicted_label}
```

`application/json` に `accept` が設定されている場合、モデルは確率のみを出力します。

## テキスト分類 - TensorFlow アルゴリズムの Amazon EC2 インスタンスの推奨事項
<a name="text-classification-tensorflow-instances"></a>

テキスト分類 - TensorFlow アルゴリズムは、次を含むすべてのトレーニング用 CPU および GPU インスタンスをサポートします。
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`
+ `ml.g4dn.xlarge`
+ `ml.g4dn.16.xlarge`
+ `ml.g5.xlarge`
+ `ml.g5.48xlarge`

大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスをお勧めします。CPU (M5 など) インスタンスと GPU (P2、P3、G4Dn、または G5) インスタンスの両方を推論に使用できます。 AWS リージョン間の SageMaker トレーニングインスタンスと推論インスタンスの包括的なリストについては、[Amazon SageMakerの料金](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

## テキスト分類 - TensorFlow サンプルノートブック
<a name="text-classification-tensorflow-sample-notebooks"></a>

カスタムデータセットの転移学習に SageMaker AI テキスト分類 - TensorFlow アルゴリズムを使用する方法の詳細については、「[Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb)」ノートブックを参照してください。

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# テキスト分類 - TensorFlow の仕組み
<a name="text-classification-tensorflow-HowItWorks"></a>

テキスト分類 - TensorFlow アルゴリズムは、テキストを受け取り、1 つの出力クラスラベルに分類します。テキスト分類において [BERT](https://arxiv.org/pdf/1810.04805.pdf) などの深層学習ネットワークは高精度です。また、TextNet など、大規模なテキストデータセットでトレーニングされた深層学習ネットワークもあり、約 11,000 のカテゴリで 1,100 万以上のテキストが格納されています。TextNet データでネットワークをトレーニングした後、特定のフォーカスを持つデータセットでネットワークを微調整し、より具体的なテキスト分類タスクを実行できます。Amazon SageMaker AI テキスト分類 - TensorFlow アルゴリズムは、TensorFlow ハブで使用可能な多くの事前トレーニング済みモデルでの転移学習をサポートします。

トレーニングデータ内のクラスラベルの数に応じて、選択した事前トレーニング済み TensorFlow モデルにテキスト分類レイヤーがアタッチされます。分類レイヤーは、ドロップアウトレイヤー、高密度レイヤー、2 ノルム正則化による全結合レイヤーで構成され、ランダムな重みで初期化されます。ドロップアウトレイヤーのドロップアウト率のハイパーパラメータ値と高密度レイヤーの L2 正則化係数は変更することができます。

ネットワーク全体 (事前トレーニング済みモデルを含む) の微調整、または新しいトレーニングデータの最上位の分類レイヤーだけの微調整のいずれかを実行できます。この転移学習の方法を使用すると、より小さなデータセットでのトレーニングが可能になります。

# TensorFlow ハブモデル
<a name="text-classification-tensorflow-Models"></a>

テキスト分類 - TensorFlow アルゴリズムによる転移学習には、次の事前トレーニング済みモデルが使用可能です。

次のモデルは、指定するデータセットにより、サイズ、モデルパラメータの数、トレーニング時間、および推定レイテンシーが大きく異なります。ユースケースに最適なモデルは、微調整するデータセットの複雑さや、トレーニング時間、推論レイテンシー、またはモデルの精度に関する要件によって異なります。


| モデル名 | `model_id` | ソース | 
| --- | --- | --- | 
|  BERT Base Uncased  | `tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/3) | 
|  BERT Base Cased  | `tensorflow-tc-bert-en-cased-L-12-H-768-A-12-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_cased_L-12_H-768_A-12/3) | 
|  BERT Base Multilingual Cased  | `tensorflow-tc-bert-multi-cased-L-12-H-768-A-12-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_multi_cased_L-12_H-768_A-12/3) | 
|  Small BERT L-2\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-128_A-2/1) | 
|  Small BERT L-2\$1H-256\$1A-4 | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-256_A-4/1) | 
|  Small BERT L-2\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-512_A-8/1) | 
|  Small BERT L-2\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-768_A-12/1) | 
|  Small BERT L-4\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-128_A-2/1) | 
|  Small BERT L-4\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-256_A-4/1) | 
|  Small BERT L-4\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-512_A-8/1) | 
|  Small BERT L-4\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-768_A-12/1) | 
|  Small BERT L-6\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-128_A-2/1) | 
|  Small BERT L-6\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-256_A-4/1) | 
|  Small BERT L-6\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-512_A-8/1) | 
|  Small BERT L-6\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-768_A-12/1) | 
|  Small BERT L-8\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-128_A-2/1) | 
|  Small BERT L-8\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-256_A-4/1) | 
|  Small BERT L-8\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1) | 
|  Small BERT L-8\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-768_A-12/1) | 
|  Small BERT L-10\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-128_A-2/1) | 
|  Small BERT L-10\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-256_A-4/1) | 
|  Small BERT L-10\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-512_A-8/1) | 
|  Small BERT L-10\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-768_A-12/1) | 
|  Small BERT L-12\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-128-A-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-128_A-2/1) | 
|  Small BERT L-12\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-256-A-4` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-256_A-4/1) | 
|  Small BERT L-12\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-512-A-8` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-512_A-8/1) | 
|  Small BERT L-12\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-768-A-12` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-768_A-12/1) | 
|  BERT Large Uncased  | `tensorflow-tc-bert-en-uncased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_uncased_L-24_H-1024_A-16/3) | 
|  BERT Large Cased  | `tensorflow-tc-bert-en-cased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_cased_L-24_H-1024_A-16/3) | 
|  BERT Large Uncased Whole Word Masking  | `tensorflow-tc-bert-en-wwm-uncased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_wwm_uncased_L-24_H-1024_A-16/3) | 
|  BERT Large Cased Whole Word Masking  | `tensorflow-tc-bert-en-wwm-cased-L-24-H-1024-A-16-2` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/bert_en_wwm_cased_L-24_H-1024_A-16/3) | 
|  ALBERT Base  | `tensorflow-tc-albert-en-base` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/albert_en_base/2) | 
|  ELECTRA Small\$1\$1  | `tensorflow-tc-electra-small-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/electra_small/2) | 
|  ELECTRA Base  | `tensorflow-tc-electra-base-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/electra_base/2) | 
|  BERT Base Wikipedia and BooksCorpus  | `tensorflow-tc-experts-bert-wiki-books-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/experts/bert/wiki_books/2) | 
|  BERT Base MEDLINE/PubMed  | `tensorflow-tc-experts-bert-pubmed-1` | [TensorFlow ハブリンク](https://tfhub.dev/google/experts/bert/pubmed/2) | 
|  トラッキングヘッド Base  | `tensorflow-tc-talking-heads-base` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/talkheads_ggelu_bert_en_base/1) | 
|  トラッキングヘッド Large  | `tensorflow-tc-talking-heads-large` | [TensorFlow ハブリンク](https://tfhub.dev/tensorflow/talkheads_ggelu_bert_en_large/1) | 

# テキスト分類 - TensorFlow ハイパーパラメータ
<a name="text-classification-tensorflow-Hyperparameter"></a>

ハイパーパラメータは、機械学習モデルが学習を開始する前に設定されるパラメータです。Amazon SageMaker AI 組み込みオブジェクト検出 - TensorFlow アルゴリズムでは、次のハイパーパラメータがサポートされています。ハイパーパラメータのチューニングに関する詳細ついては、「[テキスト分類 - TensorFlow モデルの調整](text-classification-tensorflow-tuning.md)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| batch\$1size |  トレーニングのバッチサイズ。複数の GPU を使用するインスタンスのトレーニングでは、このバッチサイズは GPU 間で使用されます。 有効な値: 正の整数。 デフォルト値: `32`。  | 
| beta\$11 |  `"adam"` および `"adamw"` オプティマイザの beta1。最初のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| beta\$12 |  `"adam"` および `"adamw"` オプティマイザの beta2。2 番目のモーメントの見積もりの指数関数的減衰率を表します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.999`。  | 
| dropout\$1rate | 最上位の分類レイヤーのドロップアウトレイヤーのドロップアウト率。`reinitialize_top_layer` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.2` | 
| early\$1stopping |  `"True"` に設定すると、トレーニング中に早期停止ロジックを使用します。`"False"` の場合、早期停止は使用されません。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| early\$1stopping\$1min\$1delta | 改善と認定するのに必要な最小変化。early\$1stopping\$1min\$1delta の値より小さな絶対変化は、改善とは認定されません。early\$1stopping が "True" に設定されている場合にのみ使用されます。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.0`。 | 
| early\$1stopping\$1patience |  改善なしでトレーニングを継続できるエポック数。`early_stopping` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 正の整数。 デフォルト値: `5`。  | 
| epochs |  トレーニングエポックの数。 有効な値: 正の整数。 デフォルト値: `10`。  | 
| epsilon |  `"adam"`、`"rmsprop"`、`"adadelta"`、および `"adagrad"` オプティマイザのイプシロン。通常は、0 で除算されないように小さな値を設定します。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `1e-7`。  | 
| initial\$1accumulator\$1value |  アキュムレータの開始値、または `"adagrad"` オプティマイザのパラメータごとのモーメンタム値。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.0001`。  | 
| learning\$1rate | オプティマイザの学習レート。有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。デフォルト値: `0.001`。 | 
| momentum |  `"sgd"` および `"nesterov"` オプティマイザのモーメンタム。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.9`。  | 
| optimizer |  オプティマイザのタイプ。詳細については、TensorFlow ドキュメントの「[Optimizers](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)」を参照してください。 有効な値: 文字列、(`"adamw"`、`"adam"`、`"sgd"`、`"nesterov"`、`"rmsprop"`、` "adagrad"`、`"adadelta"`) のいずれか。 デフォルト値: `"adam"`。  | 
| regularizers\$1l2 |  分類レイヤーの高密度レイヤーの L2 正則化係数。`reinitialize_top_layer` が `"True"` に設定されている場合にのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.0001`。  | 
| reinitialize\$1top\$1layer |  `"Auto"` に設定すると、微調整時に最上位の分類レイヤーパラメータが再初期化されます。段階的トレーニングの場合、`"True"` に設定されない限り、最上位の分類レイヤーのパラメータは再初期化されません。 有効な値: 文字列、(`"Auto"`、`"True"`、または `"False"`) のいずれかです。 デフォルト値: `"Auto"`。  | 
| rho |  `"adadelta"` および `"rmsprop"` オプティマイザの勾配の割引係数。他のオプティマイザでは無視されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.95`。  | 
| train\$1only\$1on\$1top\$1layer |  `"True"` の場合、最上位の分類レイヤーパラメータのみ微調整されます。`"False"` の場合、すべてのモデルパラメータが微調整されます。 有効な値: 文字列、(`"True"` または `"False"`) のいずれか。 デフォルト値: `"False"`。  | 
| validation\$1split\$1ratio |  ランダムに分割して検証データを作成するトレーニングデータの割合。検証データが `validation` チャネルを介して提供されていない場合にのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.2`。  | 
| warmup\$1steps\$1fraction |  ウォームアップとして学習レートが 0 から初期学習レートに増加する勾配更新ステップの合計数の割合。`adamw` オプティマイザでのみ使用されます。 有効な値: 浮動小数点数、範囲: [`0.0`, `1.0`]。 デフォルト値: `0.1`。  | 

# テキスト分類 - TensorFlow モデルの調整
<a name="text-classification-tensorflow-tuning"></a>

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

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

## テキスト分類 - TensorFlow アルゴリズムによって計算されたメトリクス
<a name="text-classification-tensorflow-metrics"></a>

次の表を参照して、テキスト分類 - TensorFlow アルゴリズムによって計算されるメトリクスを確認してください。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| validation:accuracy | 実行された予測の総数に対する正しい予測の数の比率。 | 最大化 | `val_accuracy=([0-9\\.]+)` | 

## 調整可能なテキスト分類 - TensorFlow ハイパーパラメータ
<a name="text-classification-tensorflow-tunable-hyperparameters"></a>

次のハイパーパラメータを使用してテキスト分類モデルを調整します。テキスト分類の目標メトリクスに最も大きな影響を与えるハイパーパラメータは、`batch_size`、`learning_rate`、および `optimizer` です。選択した `optimizer` に基づいて、`momentum`、`regularizers_l2`、`beta_1`、`beta_2`、および `eps` などのオプティマイザ関連のハイパーパラメータを調整します。例えば、`adamw` または `adam` が `optimizer` である場合にのみ `beta_1` と `beta_2` を使用します。

各 `optimizer` で使用されるハイパーパラメータの詳細については、「[テキスト分類 - TensorFlow ハイパーパラメータ](text-classification-tensorflow-Hyperparameter.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 4, MaxValue: 128 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8、MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6、MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['adamw', 'adam', 'sgd', 'rmsprop', 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.999 | 
| train\$1only\$1on\$1top\$1layer | CategoricalParameterRanges | ['True', 'False'] | 