Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

Amazon SageMaker JumpStart を使用した微調整と HPO により、テキストドキュメントから重要な洞察を特定します

小売、銀行、金融、ヘルスケア、製造、融資などのさまざまな業界の組織は、多くの場合、ニュース、ブログ、製品レビュー、カスタマー サポート チャネル、ソーシャル メディアなど、さまざまなソースからの膨大な量の非構造化テキスト ドキュメントを処理する必要があります。 これらのドキュメントには、重要なビジネス上の意思決定を行うための鍵となる重要な情報が含まれています。 組織が成長するにつれて、これらのドキュメントから重要な情報を抽出することが課題になります。 自然言語処理 (NLP) および機械学習 (ML) 技術の進歩により、これらのテキスト ドキュメントから貴重な洞察と関連性を迅速かつ高精度に発見できるため、企業が時間通りに質の高いビジネス上の意思決定を行うのに役立ちます。 完全に管理された NLP サービスも、NLP の採用を加速させています。 Amazon Comprehend ML の専門知識がなくても、要件に固有のカスタム NLP モデルを構築できるフル マネージド サービスです。

この投稿では、最先端の ML 手法を利用して、ドキュメントの要約、テキストの分類、質問への回答、固有表現の認識、関係抽出の XNUMX つの異なる NLP タスクを解決する方法を示します。 これらの NLP タスクのそれぞれについて、使用方法を示します。 アマゾンセージメーカー 次のアクションを実行します。

  • 事前トレーニング済みのモデルにデプロイして推論を実行する
  • 新しいカスタム データセットで事前トレーニング済みモデルを微調整する
  • で微調整性能をさらに向上 SageMaker自動モデル調整
  • さまざまな評価指標を使用してホールドアウト テスト データでモデルのパフォーマンスを評価する

この投稿では XNUMX つの特定の NLP タスクについて説明しますが、このソリューションをテンプレートとして使用して、独自のデータセットで事前トレーニング済みの微調整モデルを一般化し、その後ハイパーパラメーターの最適化を実行して精度を向上させることができます。

JumpStart ソリューション テンプレート

Amazon SageMaker ジャンプスタート 多くの一般的な ML ユースケースに対して、ワンクリックでエンドツーエンドのソリューションを提供します。 使用可能なソリューション テンプレートの詳細については、次のユース ケースを調べてください。

JumpStart ソリューション テンプレートはさまざまなユース ケースに対応しており、それぞれにいくつかの異なるソリューション テンプレートが提供されています (このドキュメント理解ソリューションは、「ドキュメントからデータを抽出して分析する」ユース ケースにあります)。

JumpStart ランディング ページから、ユース ケースに最適なソリューション テンプレートを選択します。 各ユース ケースでの特定のソリューションと、JumpStart ソリューションの起動方法の詳細については、次を参照してください。 ソリューション テンプレート.

ソリューションの概要

次の図は、SageMaker コンポーネントでこのソリューションを使用する方法を示しています。 SageMaker トレーニング ジョブはさまざまな NLP モデルをトレーニングするために使用され、SageMaker エンドポイントは各段階でモデルをデプロイするために使用されます。 を使用しております Amazon シンプル ストレージ サービス (Amazon S3) SageMaker と一緒にトレーニング データとモデル アーティファクトを保存します。 アマゾンクラウドウォッチ トレーニングとエンドポイントの出力をログに記録します。

Document Understanding ソリューションを開く

JumpStart で Document Understanding ソリューションに移動します。

ここで、デモ ノートブックから始めて、このソリューションに含まれるアセットのいくつかを詳しく見てみましょう。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

デモノート

デモ ノートブックを使用して、ドキュメントの要約および質問応答タスクのために、既にデプロイされているモデル エンドポイントにサンプル データを送信できます。 デモ ノートブックを使用すると、サンプル データをクエリすることで、すぐに実践的な経験を積むことができます。

Document Understanding ソリューションを起動したら、 を選択してデモノートブックを開きます。 ノートブックでエンドポイントを使用する.

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

このソリューションの XNUMX つの主要なノートブックのそれぞれについて詳しく見ていきましょう。

前提条件

In Amazon SageMakerスタジオを使用していることを確認してください PyTorch 1.10 Python 3.8 CPU Optimized image/kernel でノートブックを開きます。 トレーニングでは 4 つの ml.g2dn.XNUMXxlarge インスタンスを使用するため、 サービス制限の増加リクエスト アカウントでこのタイプの制限を引き上げる必要がある場合。

テキスト分類

テキスト分類とは、入力文をトレーニング データセットのクラス ラベルの XNUMX つに分類することです。 このノートブックは、 ジャンプスタート API テキスト分類用。

事前トレーニング済みモデルにデプロイして推論を実行する

使用することを選択したテキスト分類モデルは、テキストの埋め込み (tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2) モデルから TensorFlowハブこれは、ウィキペディアと BookCorpus のデータセットで事前トレーニングされています。

展開に使用できるモデルは、バイナリ分類レイヤーをテキスト埋め込みモデルの出力にアタッチし、モデル全体を微調整することによって作成されます。 SST-2 肯定的な映画レビューと否定的な映画レビューで構成されるデータセット。

このモデルで推論を実行するには、まず推論コンテナーをダウンロードする必要があります (deploy_image_uri)、推論スクリプト (deploy_source_uri)、および事前トレーニング済みモデル (base_model_uri)。 次に、それらをパラメーターとして渡して、SageMaker モデルオブジェクトをインスタンス化します。これをデプロイできます。

model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name_tc,
)
# deploy the Model.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    endpoint_name=endpoint_name_tc,
)

モデルをデプロイした後、いくつかの入力例を組み立てて、エンドポイントにクエリを実行します。

text1 = "astonishing ... ( frames ) profound ethical and philosophical questions in the form of dazzling pop entertainment" 
text2 = "simply stupid , irrelevant and deeply , truly , bottomlessly cynical "

次のコードは、応答を示しています。

Inference:
Input text: 'astonishing ... ( frames ) profound ethical and philosophical questions in the form of dazzling pop entertainment'
Model prediction: [0.000452966779, 0.999547064]
Labels: [0, 1]
Predicted Label: 1 # value 0 means negative sentiment and value 1 means positive sentiment

Inference:
Input text: 'simply stupid , irrelevant and deeply , truly , bottomlessly cynical '
Model prediction: [0.998723, 0.00127695734]
Labels: [0, 1]
Predicted Label: 0

カスタム データセットで事前トレーニング済みモデルを微調整する

事前にトレーニングされた BERT モデルで推論を実行する手順を説明しました。 SST-2 データセット。

次に、任意の数のクラスを持つカスタム データセットでモデルを微調整する方法について説明します。 微調整に使用するデータセットは依然として SST-2 データセット。 このデータセットは、関心のある任意のデータセットに置き換えることができます。

トレーニング Docker コンテナー、トレーニング アルゴリズム ソース、事前トレーニング済みモデルを取得します。

from sagemaker import image_uris, model_uris, script_uris, hyperparameters

model_id, model_version = model_id, "*" # all the other options of model_id are the same as the one in Section 2.
training_instance_type = config.TRAINING_INSTANCE_TYPE

# Retrieve the docker image
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,
)
# 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 to further fine-tune
train_model_uri = model_uris.retrieve(
    model_id=model_id, model_version=model_version, model_scope="training"
)

アルゴリズム固有のハイパーパラメータについては、アルゴリズムがデフォルト値で受け入れるトレーニング ハイパーパラメータの Python ディクショナリを取得することから始めます。 次のコードに示すように、カスタム値でそれらをオーバーライドできます。

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["batch-size"] = "64"
hyperparameters["adam-learning-rate"] = "1e-6"

データセット (SST-2) はトレーニング セット、検証セット、およびテスト セットに分割されます。トレーニング セットはモデルに適合させるために使用され、検証セットは HPO に使用できる評価指標を計算するために使用され、テスト セットはホールドアウト データとして使用されます。モデルのパフォーマンスを評価するため。 次に、トレーニングと検証データセットが Amazon S3 にアップロードされ、微調整トレーニング ジョブの起動に使用されます。

# Create SageMaker Estimator instance
tc_estimator = Estimator(
    role=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,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    base_job_name=training_job_name,
)

training_data_path_updated = f"s3://{config.S3_BUCKET}/{prefix}/train"
# Launch a SageMaker Training job by passing s3 path of the training data
tc_estimator.fit({"training": training_data_path_updated}, logs=True)

微調整ジョブが完了したら、モデルをデプロイし、ホールドアウト テスト データセットで推論を実行し、評価指標を計算します。 これはバイナリ分類タスクであるため、 精度スコア および F1スコア 評価指標として。 値が大きいほど、パフォーマンスが優れていることを示します。 次のスクリーンショットは、結果を示しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

SageMaker の自動モデル調整により、微調整のパフォーマンスをさらに向上させる

このステップでは、SageMaker 自動モデル調整を使用してモデルを微調整することにより、モデルのパフォーマンスをさらに向上させる方法を示します。 ハイパーパラメーター最適化 (HPO) とも呼ばれる自動モデル チューニングは、指定した範囲のハイパーパラメーターを使用してデータセットで複数のトレーニング ジョブを実行することにより、モデルの最適なバージョンを見つけます。 次に、検証データセットで、選択したメトリクスによって測定されるように、最高のパフォーマンスを発揮するモデルをもたらすハイパーパラメータ値を選択します。

まず、目的を検証データの精度スコアとして設定します (val_accuracy) および目的のメトリック名と正規表現 (regex) を指定して、チューニング ジョブのメトリックを定義します。 正規表現は、アルゴリズムのログ出力を照合し、メトリックの数値を取得するために使用されます。 次に、ハイパーパラメータの範囲を指定して、最適なハイパーパラメータ値を選択します。 チューニング ジョブの総数を XNUMX に設定し、これらのジョブを XNUMX つの異なる アマゾン エラスティック コンピューティング クラウド 並列チューニング ジョブを実行するための (Amazon EC2) インスタンス。 次のコードを参照してください。

# Define objective metric per framework, based on which the best model will be selected.
metric_definitions_per_model = {
    "tensorflow": {
        "metrics": [{"Name": "val_accuracy", "Regex": "val_accuracy: ([0-9.]+)"}],
        "type": "Maximize",
    }
}

# You can select from the hyperparameters supported by the model, and configure ranges of values to be searched for training the optimal model.(https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html)
hyperparameter_ranges = {
    "adam-learning-rate": ContinuousParameter(0.00001, 0.01, scaling_type="Logarithmic")
}

# Increase the total number of training jobs run by AMT, for increased accuracy (and training time).
max_jobs = 6
# Change parallel training jobs run by AMT to reduce total training time, constrained by your account limits.
# if max_jobs=max_parallel_jobs then Bayesian search turns to Random.
max_parallel_jobs = 3

これらの値を渡して、前の微調整ステップで行ったのと同様に、SageMaker Estimator オブジェクトをインスタンス化します。 を呼び出す代わりに fit の機能 Estimator オブジェクト、私たちは Estimator オブジェクトをパラメータとして ハイパーパラメータチューナー コンストラクターを呼び出して fit チューニングジョブを起動する機能:

hp_tuner = HyperparameterTuner(
    tc_estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=tuning_job_name,
)

# Launch a SageMaker Tuning job to search for the best hyperparameters
hp_tuner.fit({"training": training_data_path_updated})

チューニング ジョブが完了したら、検証データセットで最高の評価メトリック スコアを与えるモデルをデプロイし、前のセクションで行ったのと同じホールドアウト テスト データセットで推論を実行し、評価メトリックを計算します。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

結果は、自動モデル チューニングによって選択されたモデルが、ホールドアウト テスト データセットの前のセクションで微調整されたモデルよりも大幅に優れていることを示しています。

名前付きエンティティの認識

Named Entity Recognition (NER) は、名前付きエンティティを検出し、人、組織、場所、数量などの定義済みのカテゴリに分類するプロセスです。 NER には、レコメンデーション エンジン、カスタマー サポート チケットの分類と適切な部門への割り当て、医療における患者レポートからの重要な情報の抽出、ニュースやブログからのコンテンツの分類など、多くの実際のユース ケースがあります。

事前トレーニング済みモデルにデプロイして推論を実行する

私たちは En_core_web_md からのモデル スパシー 図書館。 spaCy は、さまざまなタスクに使用できるオープンソースの NLP ライブラリであり、NER 用のメソッドが組み込まれています。 スクリプト モードで AWS PyTorch Deep Learning Container (DLC) を使用し、spaCy ライブラリを依存関係としてコンテナーの上にインストールします。

次に、スクリプトのエントリ ポイント (引数 entry_point.py) が指定されており、ダウンロードしてロードするすべてのコードが含まれています。 En_core_web_md エンドポイントに送信されるデータをモデル化し、推論を実行します。 最後に、まだ提供する必要がある model_data 推論用の事前トレーニング済みモデルとして。 事前にトレーニングされているため、 En_core_web_md モデルは、エントリ スクリプトで指定されているオンザフライでダウンロードされ、空のアーカイブ ファイルが提供されます。 エンドポイントがデプロイされたら、SageMaker Python SDK を使用して、ノートブックから直接エンドポイントを呼び出すことができます。 Predictor。 次のコードを参照してください。

model = PyTorchModel(
    model_data=f"{config.SOURCE_S3_PATH}/artifacts/models/empty.tar.gz",
    entry_point="entry_point.py",
    source_dir="../containers/entity_recognition",
    role=config.IAM_ROLE,
    framework_version="1.5.0",
    py_version="py3",
    code_location="s3://" + config.S3_BUCKET + "/code",
    env={
        "MMS_DEFAULT_RESPONSE_TIMEOUT": "3000"
    }
)
predictor = model.deploy(
    endpoint_name=endpoint_name,
    instance_type=config.HOSTING_INSTANCE_TYPE,
    initial_instance_count=1,
    serializer=JSONSerializer(),
    deserializer=JSONDeserializer()
)

モデルの入力データはテキスト ドキュメントです。 名前付きエンティティ モデルは、テキスト ドキュメント内の名詞チャンクと名前付きエンティティを抽出し、それらをさまざまなタイプ (人、場所、組織など) に分類します。 入力と出力の例を次のコードに示します。 の start_char パラメータは、スパンの開始の文字オフセットを示し、 end_char スパンの終わりを示します。

data = {'text': 'Amazon SageMaker is a fully managed service that provides every developer and data scientist with the ability to build, train, and deploy machine learning (ML) models quickly.'}
response = predictor.predict(data=data)

print(response['entities'])
print(response['noun_chunks'])

[{'text': 'Amazon SageMaker', 'start_char': 0, 'end_char': 16, 'label': 'ORG'}]
[{'text': 'Amazon SageMaker', 'start_char': 0, 'end_char': 16}, {'text': 'a fully managed service', 'start_char': 20, 'end_char': 43}, {'text': 'that', 'start_char': 44, 'end_char': 48}, {'text': 'every developer and data scientist', 'start_char': 58, 'end_char': 92}, {'text': 'the ability', 'start_char': 98, 'end_char': 109}, {'text': 'ML', 'start_char': 156, 'end_char': 158}]

カスタム データセットで事前トレーニング済みモデルを微調整する

このステップでは、独自のデータセットで NER の事前トレーニング済み言語モデルを微調整する方法を示します。 微調整ステップでは、モデル パラメーターを更新して、独自のデータの特徴を捉え、精度を向上させます。 私たちは、 ウィキアン (PAN-X) データセットを微調整する DistilBERT-ベース-ケースなし ハギングフェイスのトランスフォーマーモデル。

データセットは、トレーニング セット、検証セット、およびテスト セットに分割されます。

次に、モデルのハイパーパラメータを指定し、AWS Hugging Face DLC をスクリプト モード (引数 entry_point) 微調整ジョブをトリガーします。

hyperparameters = {
    "pretrained-model": "distilbert-base-uncased",
    "learning-rate": 2e-6,
    "num-train-epochs": 2,
    "batch-size": 16,
    "weight-decay": 1e-5,
    "early-stopping-patience": 2,
}

ner_estimator = HuggingFace(
    pytorch_version='1.10.2',
    py_version='py38',
    transformers_version="4.17.0",
    entry_point='training.py',
    source_dir='../containers/entity_recognition/finetuning',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=training_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    base_job_name = training_job_name
)

微調整ジョブが完了したら、エンドポイントをデプロイし、ホールドアウト テスト データを使用してそのエンドポイントにクエリを実行します。 エンドポイントにクエリを実行するには、各テキスト文字列を XNUMX つまたは複数のトークンにトークン化し、トランスフォーマー モデルに送信する必要があります。 各トークンは、予測された名前付きエンティティ タグを取得します。 各テキスト文字列は XNUMX つまたは複数のトークンにトークン化できるため、文字列のエンティティ タグという名前のグラウンド トゥルースを、それに関連付けられているすべてのトークンに複製する必要があります。 提供されているノートブックは、これを達成するための手順を説明しています。

最後に、Hugging Face 組み込みの評価指標を使用します。 シーケンシャル ホールドアウト テスト データの評価スコアを計算します。 使用される評価指標は、全体の精度、全体の再現率、全体の F1、および精度です。 次のスクリーンショットは、結果を示しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

SageMaker の自動モデル調整により、微調整のパフォーマンスをさらに向上させる

テキスト分類と同様に、SageMaker 自動モデル調整を使用してモデルを微調整することで、モデルのパフォーマンスをさらに向上させる方法を示します。 チューニング ジョブを実行するには、検証データセット (この場合は F1 スコア) でモデルのパフォーマンスを評価するために使用する目的のメトリック、最適なハイパーパラメーター値を選択するためのハイパーパラメーター範囲、および次のようなチューニング ジョブ構成を定義する必要があります。一度に起動するチューニング ジョブの最大数と並列ジョブの数:

hyperparameters_range = {
    "learning-rate": ContinuousParameter(1e-5, 0.1, scaling_type="Logarithmic"),
    "weight-decay": ContinuousParameter(1e-6, 1e-2, scaling_type="Logarithmic"),
}

tuner = HyperparameterTuner(
    estimator,
    "f1",
    hyperparameters_range,
    [{"Name": "f1", "Regex": "'eval_f1': ([0-9.]+)"}],
    max_jobs=6,
    max_parallel_jobs=3,
    objective_type="Maximize",
    base_tuning_job_name=tuning_job_name,
)

tuner.fit({
    "train": f"s3://{bucket}/{prefix}/train/",
    "validation": f"s3://{bucket}/{prefix}/validation/",
}, logs=True)

チューニング ジョブが完了したら、検証データセットで最高の評価メトリック スコアを与えるモデルをデプロイし、前のセクションで行ったのと同じホールドアウト テスト データセットで推論を実行し、評価メトリックを計算します。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

HPO を使用したモデルは、すべてのメトリックで大幅に優れたパフォーマンスを達成していることがわかります。

質問に答える

質問応答は、特定の情報について大量のテキストを照会する場合に役立ちます。 これにより、ユーザーは質問を自然言語で表現し、即座に簡潔な応答を得ることができます。 NLP を利用した質問応答システムは、検索エンジンや電話会話インターフェイスで使用できます。

事前トレーニング済みモデルにデプロイして推論を実行する

事前トレーニング済みのモデルは抽出的質問応答 (EQA) モデルです bert-large-uncased-whole-word-masking-finetuned-squad Hugging FaceのTransformerモデルに基づいて構築されています。 スクリプト モードで AWS PyTorch DLC を使用し、 トランスフォーマー コンテナ上の依存関係としてのライブラリ。 NER タスクと同様に、引数に空のアーカイブ ファイルを指定します。 model_data 事前トレーニング済みのモデルがその場でダウンロードされるためです。 エンドポイントがデプロイされたら、SageMaker Python SDK を使用して、ノートブックから直接エンドポイントを呼び出すことができます。 Predictor。 次のコードを参照してください。

model = PyTorchModel(
    model_data=f"{config.SOURCE_S3_PATH}/artifacts/models/empty.tar.gz",
    entry_point="entry_point.py",
    source_dir="../containers/question_answering",
    role=config.IAM_ROLE,
    framework_version="1.5.0",
    py_version="py3",
    code_location="s3://" + config.S3_BUCKET + "/code",
    env={
        "MODEL_ASSETS_S3_BUCKET": config.SOURCE_S3_BUCKET,
        "MODEL_ASSETS_S3_PREFIX": f"{config.SOURCE_S3_PREFIX}/artifacts/models/question_answering/",
        "MMS_DEFAULT_RESPONSE_TIMEOUT": "3000",
    },
)

エンドポイントが正常にデプロイされ、予測子が構成されたら、入力例で質問応答モデルを試すことができます。 このモデルは、 スタンフォードの質疑応答データセット (SQuAD) データセット。 このデータセットは、質問応答モデリングの分野をさらに発展させることを期待して導入されました。 これは、パッセージ、質問、および回答で構成される読解データセットです。

必要なことは、XNUMX つのキーを持つディクショナリ オブジェクトを作成することだけです。 context 情報を取得したいテキストです。 question 抽出したい情報を指定する自然言語クエリです。 私たちは呼びます predict 最も可能性の高い回答を含むエンドポイントからの応答を取得する必要があります。

data = {'question': 'what is my name?', 'context': "my name is thom"}
response = predictor.predict(data=data)

応答があり、前のテキストから抽出された最も可能性の高い応答を出力できます。 各回答には、ランキングに使用される信頼スコアがあります (ただし、このスコアは真の確率として解釈されるべきではありません)。 逐語的な回答に加えて、元のコンテキストから回答の開始文字インデックスと終了文字インデックスも取得します。

print(response['answers'])
[{'score': 0.9793591499328613, 'start': 11, 'end': 15, 'answer': 'thom'}, 
{'score': 0.02019440196454525, 'start': 0, 'end': 15, 'answer': 'my name is thom'}, 
{'score': 4.349117443780415e-05, 'start': 3, 'end': 15, 'answer': 'name is thom'}]

次に、このモデルを独自のカスタム データセットで微調整して、より良い結果を取得します。

カスタム データセットで事前トレーニング済みモデルを微調整する

このステップでは、独自のデータセットで EQA 用に事前トレーニング済みの言語モデルを微調整する方法を示します。 微調整ステップでは、モデル パラメーターを更新して、独自のデータの特徴を捉え、精度を向上させます。 私たちは、 SQuAD2.0 テキスト埋め込みモデルを微調整するためのデータセット bert-base-ケースなし ハグフェイスより。 微調整に使用できるモデルは、回答抽出レイヤーをテキスト埋め込みモデルにアタッチし、レイヤー パラメーターをランダムな値に初期化します。 微調整ステップでは、入力データの予測誤差を最小限に抑えるためにすべてのモデル パラメーターを微調整し、微調整されたモデルを返します。

テキスト分類タスクと同様に、データセット (SQuAD2.0) はトレーニング、検証、およびテスト セットに分割されます。

次に、モデルのハイパーパラメータを指定し、 ジャンプスタート API 微調整ジョブをトリガーするには:

hyperparameters = {'epochs': '3', 'adam-learning-rate': '2e-05', 'batch-size': '16'}

eqa_estimator = Estimator(
    role=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,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    base_job_name=training_job_name,
    debugger_hook_config=False,
)

training_data_path_updated = f"s3://{config.S3_BUCKET}/{prefix}/train"
# Launch a SageMaker Training job by passing s3 path of the training data
eqa_estimator.fit({"training": training_data_path_updated}, logs=True)

微調整ジョブが完了したら、モデルをデプロイし、ホールドアウト テスト データセットで推論を実行し、評価指標を計算します。 使用される評価指標は、完全一致スコアの平均と F1 スコアの平均です。 次のスクリーンショットは結果を示しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

SageMaker の自動モデル調整により、微調整のパフォーマンスをさらに向上させる

前のセクションと同様に、 HyperparameterTuner チューニング ジョブを起動するオブジェクト:

hyperparameter_ranges = {
    "adam-learning-rate": ContinuousParameter(0.00001, 0.01, scaling_type="Logarithmic"),
    "epochs": IntegerParameter(3, 10),
    "train-only-top-layer": CategoricalParameter(["True", "False"]),
}

hp_tuner = HyperparameterTuner(
    eqa_estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=training_job_name,
)

# Launch a SageMaker Tuning job to search for the best hyperparameters
hp_tuner.fit({"training": training_data_path_updated})

チューニング ジョブが完了したら、検証データセットで最高の評価メトリック スコアを与えるモデルをデプロイし、前のセクションで行ったのと同じホールドアウト テスト データセットで推論を実行し、評価メトリックを計算します。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

HPO を使用したモデルは、ホールドアウト テスト データで大幅に優れたパフォーマンスを示していることがわかります。

関係抽出

リレーションシップ抽出は、テキストからセマンティック リレーションシップを抽出するタスクであり、通常は XNUMX つ以上のエンティティ間で発生します。 リレーションシップ抽出は、未加工のテキストなどの構造化されていないソースから構造化された情報を抽出する際に重要な役割を果たします。 このノートブックでは、関係抽出の XNUMX つの使用例を示します。

カスタム データセットで事前トレーニング済みモデルを微調整する

に基づいて構築された関係抽出モデルを使用します。 BERTベースケースなし の変圧器を使用したモデル フェイストランスフォーマーを抱き締める 図書館。 微調整用のモデルは、テキスト埋め込みモデルによって出力されたトークン埋め込みのペアを取得し、レイヤー パラメーターをランダムな値に初期化する線形分類レイヤーをアタッチします。 微調整ステップでは、入力データの予測誤差を最小限に抑えるためにすべてのモデル パラメーターを微調整し、微調整されたモデルを返します。

モデルを微調整したデータセットは SemEval-2010 タスク 8. 微調整によって返されたモデルは、推論のためにさらに展開できます。

データセットには、トレーニング、検証、およびテスト セットが含まれています。

SageMaker Python SDK のスクリプト モードで AWS PyTorch DLC を使用します。 transformers ライブラリは、コンテナーの上部に依存関係としてインストールされます。 SageMaker を定義します PyTorch estimator と、事前トレーニング済みモデル、学習率、エポック数などの一連のハイパーパラメータを使用して、微調整を実行します。 関係抽出モデルを微調整するためのコードは、 entry_point.py。 次のコードを参照してください。

hyperparameters = {
    "pretrained-model": "bert-base-uncased",
    "learning-rate": 0.0002,
    "max-epoch": 2,
    "weight-decay": 0,
    "batch-size": 16,
    "accumulate-grad-batches": 2,
    "gradient-clip-val": 1.0
}

re_estimator = PyTorch(
    framework_version='1.5.0',
    py_version='py3',
    entry_point='entry_point.py',
    source_dir='../containers/relationship_extraction',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=train_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    base_job_name=training_job_name,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    debugger_hook_config=False
)

re_estimator.fit(
    {
        "train": f"s3://{bucket}/{prefix}/train/",
        "validation": f"s3://{bucket}/{prefix}/validation/",
    }
)

トレーニング ジョブが完了するまでに約 31 分かかります。 このモデルを使用して、ホールドアウト テスト セットで推論を実行し、次を使用して結果を評価します。 精度, F1マクロ, F1マイクロ スコア。 次のスクリーンショットは、評価スコアを示しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

SageMaker の自動モデル調整により、微調整のパフォーマンスをさらに向上させる

前のセクションと同様に、 HyperparameterTuner SageMaker ハイパーパラメータ調整 API と対話するオブジェクト。 を呼び出して、ハイパーパラメータ調整ジョブを開始できます。 fit 方法:

hyperparameters = {
    "max-epoch": 2,
    "weight-decay": 0,
    "batch-size": 16,
    "accumulate-grad-batches": 2,
    "gradient-clip-val": 1.0
}

estimator = PyTorch(
    framework_version='1.5.0',
    py_version='py3',
    entry_point='entry_point.py',
    source_dir='../containers/relationship_extraction',
    hyperparameters=hyperparameters,
    role=aws_role,
    instance_count=1,
    instance_type=train_instance_type,
    output_path=f"s3://{bucket}/{prefix}/output",
    code_location=f"s3://{bucket}/{prefix}/output",
    base_job_name=tuning_job_name,
    tags=[{'Key': config.TAG_KEY, 'Value': config.SOLUTION_PREFIX}],
    sagemaker_session=sess,
    volume_size=30,
    env={
        'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'
    },
    debugger_hook_config=False
    
    re_tuner = HyperparameterTuner(
    estimator,
    metric_definitions["metrics"][0]["Name"],
    hyperparameter_ranges,
    metric_definitions["metrics"],
    max_jobs=max_jobs,
    max_parallel_jobs=max_parallel_jobs,
    objective_type=metric_definitions["type"],
    base_tuning_job_name=tuning_job_name,
)

re_tuner.fit({
    "train": f"s3://{bucket}/{prefix}/train/",
    "validation": f"s3://{bucket}/{prefix}/validation/",
})

ハイパーパラメータ調整ジョブが完了すると、推論を実行して評価スコアを確認します。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

ホールドアウト テスト データでは、HPO を使用したモデルの方が優れたパフォーマンスを示していることがわかります。

ドキュメントの要約

ドキュメントまたはテキストの要約は、大量のテキスト データを、元のコンテンツ内の最も重要な情報または関連情報を表す意味のある文の小さなサブセットに凝縮するタスクです。 ドキュメントの要約は、大量のテキスト データから重要な情報をいくつかの文に抽出するための便利な手法です。 テキストの要約は、ドキュメントの処理や、ブログ、記事、ニュースからの情報の抽出など、多くのユース ケースで使用されます。

このノートブックは、ドキュメント要約モデルの展開を示しています T5ベース フェイストランスフォーマーを抱き締める 図書館。 また、テキスト記事を使用して展開されたエンドポイントをテストし、Hugging Face 組み込みの評価指標を使用して結果を評価します。 RED.

質問応答や NER ノートと同様に、 PyTorchModel SageMaker Python SDK から entry_point.py スクリプトを使用して、T5 ベース モデルを HTTPS エンドポイントにロードします。 エンドポイントが正常にデプロイされたら、テキスト記事をエンドポイントに送信して、予測応答を取得できます。

ARTICLE = """ Documents are a primary tool for communication,
collaboration, record keeping, and transactions across industries,
including financial, medical, legal, and real estate. The format of data
can pose an extra challenge in data extraction, especially if the content
is typed, handwritten, or embedded in a form or table. Furthermore,
extracting data from your documents is manual, error-prone, time-consuming,
expensive, and does not scale. Amazon Textract is a machine learning (ML)
service that extracts printed text and other data from documents as well as
tables and forms. We’re pleased to announce two new features for Amazon
Textract: support for handwriting in English documents, and expanding
language support for extracting printed text from documents typed in
Spanish, Portuguese, French, German, and Italian. Many documents, such as
medical intake forms or employment applications, contain both handwritten
and printed text. The ability to extract text and handwriting has been a
need our customers have asked us for. Amazon Textract can now extract
printed text and handwriting from documents written in English with high
confidence scores, whether it’s free-form text or text embedded in tables
and forms. Documents can also contain a mix of typed text or handwritten
text. The following image shows an example input document containing a mix
of typed and handwritten text, and its converted output document.."""

data = {'text': ARTICLE}
response = predictor.predict(data=data)
print(response['summary'])

"""Amazon Textract is a machine learning (ML) service that extracts printed text 
and other data from documents as well as tables and forms . 
customers can now extract and process documents in more languages .
support for handwriting in english documents and expanding language support for extracting 
printed text ."""

次に、ROUGEメトリックを使用して、テキスト記事と要約結果を評価および比較します。 次の XNUMX つの評価指標が計算されます。 rougeN, rougeL, rougeLsum. rougeN 一致数を測定する n-grams モデルによって生成されたテキスト (要約結果) と reference (入力テキスト)。 指標 rougeL および rougeLsum 生成された要約と参照要約で最長の共通部分文字列を探すことにより、単語の最長一致シーケンスを測定します。 各メトリックについて、適合率、再現率、および F1 スコアの信頼区間が計算されます。次のコードを参照してください。

results = rouge.compute(predictions=[response['summary']], references=[ARTICLE])

rouge1: AggregateScore(low=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823), 
mid=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823), high=Score(precision=1.0, recall=0.1070615034168565, fmeasure=0.1934156378600823))

rouge2: AggregateScore(low=Score(precision=0.9565217391304348, recall=0.1004566210045662, fmeasure=0.18181818181818182), 
mid=Score(precision=0.9565217391304348, recall=0.1004566210045662, fmeasure=0.18181818181818182), high=Score(precision=0.9565217391304348, recall=0.1004566210045662, 
fmeasure=0.18181818181818182))

rougeL: AggregateScore(low=Score(precision=0.8085106382978723, recall=0.08656036446469248, fmeasure=0.15637860082304528), 
mid=Score(precision=0.8085106382978723, recall=0.08656036446469248, fmeasure=0.15637860082304528), high=Score(precision=0.8085106382978723, recall=0.08656036446469248, 
fmeasure=0.15637860082304528))

rougeLsum: AggregateScore(low=Score(precision=0.9787234042553191, recall=0.10478359908883828, fmeasure=0.18930041152263374), 
mid=Score(precision=0.9787234042553191, recall=0.10478359908883828, fmeasure=0.18930041152263374), high=Score(precision=0.9787234042553191, recall=0.10478359908883828, 
fmeasure=0.18930041152263374))

クリーンアップ

このソリューション用に作成されたリソースは、 すべてのリソースを削除する SageMaker Studio IDE のボタン。 各ノートブックには、エンドポイントを削除するためのコードを含むクリーンアップ セクションも用意されています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。

まとめ

この投稿では、最先端の ML 手法を利用して、ドキュメントの要約、テキスト分類、質問と回答、名前付きエンティティの認識、Jumpstart を使用した関係抽出の XNUMX つの異なる NLP タスクを解決する方法を示しました。 ジャンプスタートを今すぐ始める!


著者について

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。XinHuang博士 は、AmazonSageMakerJumpStartおよびAmazonSageMakerの組み込みアルゴリズムの応用科学者です。 彼はスケーラブルな機械学習アルゴリズムの開発に焦点を当てています。 彼の研究対象は、自然言語処理、表形式データに関する説明可能な深層学習、および非パラメトリック時空間クラスタリングの堅牢な分析の分野です。 彼は、ACL、ICDM、KDD会議、およびRoyal Statistics Society:SeriesAジャーナルに多くの論文を発表しています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。Vivek ガンガサニ アマゾン ウェブ サービスのシニア機械学習ソリューション アーキテクトです。 彼は、スタートアップが AI/ML アプリケーションを構築して運用化するのを支援しています。 彼は現在、コンテナーと機械学習のバックグラウンドを組み合わせて、MLOps、ML 推論、およびローコード ML に関するソリューションを提供することに注力しています。 余暇には、新しいレストランを試したり、AI とディープ ラーニングの新しいトレンドを探求したりしています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。ジェレミー・コーエン はAWSのソリューションアーキテクトであり、顧客が最先端のクラウドベースのソリューションを構築するのを支援しています。 余暇には、ビーチを散歩したり、家族と一緒にベイエリアを探索したり、家の周りの物を修理したり、家の周りの物を壊したり、バーベキューを楽しんだりしています。

Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence を使用した微調整と HPO を通じて、テキストドキュメントから重要な洞察を特定します。垂直検索。あい。ニーラムコシヤ AWSのエンタープライズソリューションアーキテクトです。 彼女の現在の焦点は、戦略的なビジネス成果のためのクラウド導入の旅で企業顧客を支援することです。 余暇には、読書やアウトドアを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習