BlazingText アルゴリズム - Amazon SageMaker

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

BlazingText アルゴリズム

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

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

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

BlazingText アルゴリズムを使用すると、大規模なデータセットに簡単にスケールできます。Word2vec と同様に、Skip-gram and continuous bag-of-words (CBOW) トレーニングアーキテクチャを提供します。 BlazingTextの教師ありマルチクラス、マルチラベルテキスト分類アルゴリズムの実装により、 fastText テキスト分類子が拡張され、カスタム CUDA カーネルで GPU アクセラレーションが使用されます。マルチコア CPU または GPU を使用すると、数分で 10 億個以上の単語でモデルをトレーニングできます。また、 state-of-the-art 深層学習テキスト分類アルゴリズムと同等のパフォーマンスを実現できます。

BlazingText アルゴリズムは並列化できません。トレーニングに関連するパラメータの詳細については、 SageMaker 「組み込みアルゴリズムの Docker レジストリパス」を参照してください。

SageMaker BlazingText アルゴリズムには次の機能があります。

  • 高度に最適化された CUDA カーネルを使用する、マルチコア CPU または GPU 上の fastText テキスト分類子あるいは GPU 上の Word2Vec の加速されたトレーニング。詳細については、BlazingText「: 複数の GPU を使用した Word2Vec のスケーリングと高速化 GPUs」を参照してください。

  • 文字 n グラムのベクトル表現を学習することによって、サブワード情報で強化された単語ベクトル。このアプローチにより、 BlazingText は、ベクトルを文字 n グラム out-of-vocabulary (サブワード) ベクトルの合計として表現することで、 (OV) 単語の意味のあるベクトルを生成できます。

  • 複数の CPU ノード間でのより高速なトレーニングと分散計算を可能にする Word2Vec アルゴリズムの batch_skipgram modebatch_skipgram mode は、Negative Sample Sharing (負のサンプル共有) 戦略を使用してミニバッチングを行い、レベル 1 の BLAS オペレーションをレベル 3 の BLAS オペレーションに変換します。これにより、最新のアーキテクチャーの multiply-add 手順が効率的に活用されます。詳細については、Parallelizing Word2Vec in Shared and Distributed Memory (共有および分散メモリでの Word2Vec の並列処理) を参照してください。

要約すると、さまざまなタイプのインスタンス 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「: 複数の GPU を使用した Word2Vec のスケーリングと高速化 GPUs」を参照してください。

アルゴリズムの BlazingText入出力インターフェイス

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

トレーニングと検証のデータ形式

Word2Vec アルゴリズムのトレーニングと検証のデータ形式

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

テキスト分類アルゴリズムのトレーニングと検証のデータ形式

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

ファイルモードでトレーニングする

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 .
注記

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

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

拡張マニフェストテキスト形式でトレーニングする

CPU インスタンスの教師ありモードは拡張マニフェスト形式もサポートしているため、RecordIO ファイルを作成しなくてもパイプモードでトレーニングを実行できます。この形式を使用する一方で、文のリストとそれに対応するラベルを含む S3 マニフェストファイルを生成する必要があります。マニフェストファイル形式は、各行が 1 つのサンプルを表す JSON Lines 形式になっている必要があります。文は 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]}

拡張マニフェストファイルの詳細については、トレーニングジョブの拡張マニフェストファイルを参照してください。

モデルアーティファクトと推論

Word2Vec アルゴリズムのモデルアーティファクト

Word2Vec トレーニングの場合、モデルアーティファクトは、 words-to-vectors マッピングを含む 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) 単語の out-of-vocabularyベクトルを生成できます。

JSON リクエスト例

Mime タイプ: application/json

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

テキスト分類アルゴリズムのモデルアーティファクト

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

JSON リクエスト例

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-typeacceptパラメータは等しくなければなりません。バッチ変換の場合は、どちらも 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 ) モードの両方で、 によって生成されたバイナリ (*.bin ) は fastText によって消費され、その逆 BlazingText も同様です。fastText BlazingText によって生成されたバイナリを使用できます。同様に、 を使用して 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 インスタンスレコメンデーション

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

batch_skipgram モードの場合、 は単一または複数の CPU インスタンス BlazingText をサポートします。複数のインスタンスでトレーニングする場合、 CreateTrainingJobに渡す S3DataSource オブジェクトの S3DataDistributionTypeフィールドの値を に設定しますFullyReplicated。 BlazingText はマシン間でデータを分散します。

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

BlazingText サンプルノートブック

単語ベクトルを生成する SageMaker BlazingText アルゴリズムをトレーニングおよびデプロイするサンプルノートブックについては、「 を使用した Word2Vec 単語表現の学習 BlazingText」を参照してください。でサンプルを実行するために使用できる Jupyter Notebook インスタンスを作成してアクセスする手順については SageMaker、「」を参照してくださいAmazon SageMaker Notebook インスタンス。ノートブックインスタンスを作成して開いたら、SageMaker 「例」タブを選択すると、すべての SageMaker 例のリストが表示されます。Blazing Text を使用するトピックモデリングのサンプルノートブックは、[Introduction to Amazon Algorithms (Amazon アルゴリズムの概要)] セクションにあります。ノートブックを開くには、その [使用] タブを選び、次に [コピーを作成] を選択します。