

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

# 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`<br />`Skip-gram`<br />`Batch Skip-gram` | `supervised` | 
| 単一の GPU インスタンス (1 つ以上の GPU を含む) | `cbow`<br />`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 つのトレーニング文だけでなく、ラベルも含まれている必要があります。ラベルは、文字列 *\_\_label\_\_* を前に付けた単語です。以下はトレーニング/検証ファイルの例です。

```
__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 によって生成されたバイナリ (*\*.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 アルゴリズムの概要)]** セクションにあります。ノートブックを開くには、その [**使用**] タブを選び、次に [**コピーを作成**] を選択します。