Amazon SageMaker での TensorFlow テキスト分類モデルの転移学習

アマゾンセージメーカー のスイートを提供します 組み込みアルゴリズム, 事前トレーニング済みモデル, 構築済みのソリューションテンプレート データ サイエンティストと機械学習 (ML) の実践者が、ML モデルのトレーニングとデプロイを迅速に開始できるようにします。 これらのアルゴリズムとモデルは、教師あり学習と教師なし学習の両方に使用できます。 表形式、画像、テキストなど、さまざまな種類の入力データを処理できます。

この投稿は、SageMaker の新しい組み込みアルゴリズムに関するシリーズの XNUMX 回目です。 の中に 最初の投稿では、SageMaker が画像分類用の組み込みアルゴリズムをどのように提供するかを示しました。 の中に 2番目の投稿では、SageMaker がオブジェクト検出用の組み込みアルゴリズムをどのように提供するかを示しました。 本日、SageMaker が TensorFlow を使用したテキスト分類用の新しい組み込みアルゴリズムを提供することを発表します。 この教師あり学習アルゴリズムは、で利用可能な多くの事前トレーニング済みモデルの転移学習をサポートしています。 TensorFlow ハブ. 入力としてテキストを受け取り、各クラス ラベルの確率を出力します。 大量のテキスト コーパスが利用できない場合でも、転移学習を使用してこれらの事前トレーニング済みモデルを微調整できます。 SageMaker から入手できます 組み込みアルゴリズム、および SageMaker ジャンプスタート UI in Amazon SageMakerスタジオ。 詳細については、を参照してください。 テキスト分類 と例のノートブック JumpStartの概要–テキスト分類.

SageMaker の TensorFlow を使用したテキスト分類は、TensorFlow Hub で利用可能な多くの事前トレーニング済みモデルで転移学習を提供します。 トレーニング データ内のクラス ラベルの数に応じて、事前トレーニング済みの TensorFlow ハブ モデルに分類レイヤーが追加されます。 分類層は、ランダムな重みで初期化される 2 ノルム正則化器を使用して、ドロップアウト層と密層、全結合層で構成されます。 モデルのトレーニングには、ドロップアウト層のドロップアウト率のハイパーパラメーターと、密層の L2 正則化係数があります。 次に、事前トレーニング済みのモデルを含むネットワーク全体、または最上位の分類レイヤーのみを新しいトレーニング データで微調整できます。 この転移学習モードでは、より小さなデータセットでもトレーニングを行うことができます。

新しい TensorFlow テキスト分類アルゴリズムの使用方法

このセクションでは、TensorFlow テキスト分類アルゴリズムを SageMaker Python SDK. Studio UI からの使用方法については、 SageMaker ジャンプスタート.

このアルゴリズムは、にリストされている事前トレーニング済みモデルの転移学習をサポートしています。 Tensorflow モデル. 各モデルは一意の model_id. 次のコードは、によって識別される BERT ベース モデルを微調整する方法を示しています。 model_id tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2 カスタム トレーニング データセットで。 それぞれについて model_id、を介して SageMaker トレーニングジョブを起動します 推定量 SageMaker Python SDK のクラスを使用するには、SageMaker で提供されるユーティリティ関数を使用して、Docker イメージ URI、トレーニング スクリプト URI、事前トレーニング済みモデル URI をフェッチする必要があります。 トレーニング スクリプト URI には、データ処理、事前トレーニング済みモデルの読み込み、モデル トレーニング、推論用のトレーニング済みモデルの保存に必要なすべてのコードが含まれています。 事前トレーニング済みモデルの URI には、事前トレーニング済みモデル アーキテクチャの定義とモデル パラメーターが含まれています。 事前トレーニング済みのモデル URI は、特定のモデルに固有です。 事前トレーニング済みのモデル tarball は、TensorFlow から事前にダウンロードされ、適切なモデル シグネチャで .xml に保存されています。 Amazon シンプル ストレージ サービス (Amazon S3) バケット。トレーニング ジョブがネットワーク分離で実行されるようにします。 次のコードを参照してください。

from sagemaker import image_uris, model_uris, script_urisfrom 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 pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

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

これらのモデル固有のトレーニング アーティファクトを使用して、 推定量 クラス:

# Create SageMaker 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,)

次に、カスタム データセットでの転移学習のために、トレーニング ハイパーパラメーターのデフォルト値を変更する必要がある場合があります。 ハイパーパラメータ. これらのハイパーパラメータの Python ディクショナリをデフォルト値で取得するには、次を呼び出します。 hyperparameters.retrieve_default必要に応じて更新し、Estimator クラスに渡します。 一部のハイパーパラメータのデフォルト値は、モデルによって異なることに注意してください。 大きなモデルの場合、デフォルトのバッチ サイズは小さく、 train_only_top_layer ハイパーパラメータが設定されています True. ハイパーパラメータ Train_only_top_layer 微調整プロセス中にどのモデル パラメータが変化するかを定義します。 もしも train_only_top_layer is True、その後、分類レイヤーのパラメーターが変更され、残りのパラメーターは微調整プロセス中に一定のままです。 一方、 train_only_top_layer is False、モデルのすべてのパラメーターが微調整されます。 次のコードを参照してください。

from sagemaker import hyperparameters# Retrieve the default hyper-parameters 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"

私たちは提供します SST2 モデルを微調整するためのデフォルトのデータセットとして。 データセットには、肯定的な映画のレビューと否定的な映画のレビューが含まれています。 からダウンロードしました TensorFlowApache2.0ライセンス. 次のコードは、S3 バケットでホストされるデフォルトのトレーニング データセットを提供します。

# 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}"

最後に、モデルを微調整するために SageMaker トレーニング ジョブを起動するには、Estimator クラスのオブジェクトで .fit を呼び出し、トレーニング データセットの Amazon S3 の場所を渡します。

# Launch a SageMaker Training job by passing s3 path of the training data
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

カスタム データセットでの転移学習に新しい SageMaker TensorFlow テキスト分類アルゴリズムを使用する方法の詳細については、微調整されたモデルをデプロイし、デプロイされたモデルで推論を実行し、最初の微調整を行わずに事前トレーニング済みのモデルをそのままデプロイします。カスタム データセットについては、次のノートブックの例を参照してください。 JumpStartの概要–テキスト分類.

TensorFlow テキスト分類アルゴリズムの入出力インターフェース

にリストされている事前トレーニング済みの各モデルを微調整できます。 TensorFlow モデル 任意の数のクラスを持つテキスト文で構成される任意のデータセットに。 事前トレーニング済みのモデルは、分類レイヤーをテキスト埋め込みモデルにアタッチし、レイヤー パラメーターをランダムな値に初期化します。 分類層の出力次元は、入力データで検出されたクラスの数に基づいて決定されます。 目的は、入力データの分類エラーを最小限に抑えることです。 微調整によって返されたモデルは、推論のためにさらに展開できます。

次の手順では、モデルへの入力用にトレーニング データをフォーマットする方法について説明します。

  • 入力 – data.csv ファイルを含むディレクトリ。 最初の列の各行には、0 からクラス数までの整数のクラス ラベルが必要です。 XNUMX 列目の各行には、対応するテキスト データが含まれている必要があります。
  • 出力 – 推論のために展開したり、増分トレーニングを使用してさらにトレーニングしたりできる、微調整されたモデル。 クラス インデックスをクラス ラベルにマッピングするファイルは、モデルと共に保存されます。

入力 CSV ファイルの例を以下に示します。 ファイルにはヘッダーが含まれていないことに注意してください。 ファイルは、次のようなパスを持つ 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|
|...|...|

TensorFlow テキスト分類アルゴリズムによる推論

生成されたモデルは、推論およびサポート テキストとしてホストできます。 application/x-text コンテンツ タイプ。 出力には、確率値、すべてのクラスのクラス ラベル、および JSON 形式でエンコードされた最高確率のクラス インデックスに対応する予測ラベルが含まれます。 このモデルは、リクエストごとに XNUMX つの文字列を処理し、XNUMX 行だけを出力します。 以下は、JSON 形式の応答の例です。

accept: application/json;verbose
{"probabilities": [prob_0, prob_1, prob_2, ...],
 "labels": [label_0, label_1, label_2, ...],
 "predicted_label": predicted_label}

If accept に設定されています application/jsonの場合、モデルは確率のみを出力します。 トレーニングと推論の詳細については、サンプル ノートブックの概要を参照してください。 JumpStartの概要–テキスト分類.

JumpStart UI を介して SageMaker 組み込みアルゴリズムを使用する

JumpStart UI から数回クリックするだけで、SageMaker TensorFlow テキスト分類やその他の組み込みアルゴリズムを使用することもできます。 JumpStart は SageMaker の機能であり、組み込みアルゴリズムと事前トレーニング済みモデルをさまざまな ML フレームワークとモデル ハブからグラフィカル インターフェイスを介してトレーニングおよびデプロイできます。 さらに、ML モデルと他のさまざまな AWS サービスを組み合わせて、対象となるユースケースを解決する本格的な ML ソリューションをデプロイできます。

次の XNUMX つのビデオでは、JumpStart UI を介して数回クリックするだけで、先ほど行ったのと同じ微調整およびデプロイ プロセスを再現する方法を示しています。

事前にトレーニングされたモデルを微調整します

これは、同じ事前トレーニング済みのテキスト分類モデルを微調整するプロセスです。

微調整されたモデルをデプロイする

モデルのトレーニングが完了したら、ワンクリックで永続的なリアルタイム エンドポイントにモデルを直接デプロイできます。

まとめ

この投稿では、SageMaker TensorFlow テキスト分類組み込みアルゴリズムの開始を発表しました。 このアルゴリズムを使用して、TensorFlow ハブからの事前トレーニング済みモデルを使用して、カスタム データセットで転移学習を行う方法のサンプル コードを提供しました。

詳細については、 ドキュメント と例のノートブック JumpStartの概要–テキスト分類.


著者について

Amazon SageMaker PlatoBlockchain Data Intelligence の TensorFlow テキスト分類モデルの転移学習。垂直検索。あい。ヴィヴェック・マダン博士 応用科学者であり、 AmazonSageMakerJumpStartチーム。 彼はイリノイ大学アーバナシャンペーン校で博士号を取得し、ジョージア工科大学で博士号を取得しました。 彼は機械学習とアルゴリズム設計の活発な研究者であり、EMNLP、ICLR、COLT、FOCS、SODAの各会議で論文を発表しています。

Amazon SageMaker PlatoBlockchain Data Intelligence の TensorFlow テキスト分類モデルの転移学習。垂直検索。あい。ジョアンモウラ アマゾン ウェブ サービスの AI/ML スペシャリスト ソリューション アーキテクトです。 彼は主に NLP のユースケースに焦点を当てており、顧客が深層学習モデルのトレーニングと展開を最適化するのを支援しています。 また、ローコード ML ソリューションと ML に特化したハードウェアの積極的な支持者でもあります。

Amazon SageMaker PlatoBlockchain Data Intelligence の TensorFlow テキスト分類モデルの転移学習。垂直検索。あい。アシッシュ・ケタン博士 の上級応用科学者です AmazonSageMakerの組み込みアルゴリズム 機械学習アルゴリズムの開発を支援します。 イリノイ大学アーバナ シャンペーン校で博士号を取得。 彼は機械学習と統計的推論の活発な研究者であり、NeurIPS、ICML、ICLR、JMLR、ACL、および EMNLP カンファレンスで多くの論文を発表しています。

タイムスタンプ:

より多くの AWS機械学習