「Amazon SageMakerを使用したヘルスケアの要約オプションの探索」
探索:Amazon SageMakerの要約オプションを使用したヘルスケア
今日の急速に変化する医療の現場では、医師は介護者のメモ、電子健康記録、画像報告書など、さまざまな情報源から大量の臨床データに直面しています。患者のケアには不可欠なこの情報の富は、医療専門家が情報を選別し、分析するために圧倒的で時間のかかるものにもなり得ます。このデータから効率的に要約し、洞察を抽出することは、より良い患者ケアと意思決定にとって重要です。要約された患者情報は、データ集約、患者の効果的なコーディング、または同様の診断を持つ患者のグループ化など、さまざまな後続プロセスに役立つことがあります。
人工知能(AI)と機械学習(ML)モデルは、これらの課題に取り組むために非常に有望な結果を示しています。モデルは大量のテキストデータを分析し、解釈するためにトレーニングされ、情報を簡潔な要約に効果的にまとめることができます。要約プロセスを自動化することで、医師は迅速に関連情報にアクセスできるようになり、患者ケアに集中し、より情報を基にした意思決定を行うことができます。詳細な実例については、以下のケーススタディをご覧ください。
Amazon SageMakerは、さまざまなAI/MLベースの要約モデルや手法をホストおよび実装するための理想的なプラットフォームを提供する、完全に管理されたMLサービスです。この記事では、Amazon SageMaker JumpStartの基盤モデル、Hugging Faceからの事前学習済みモデルのファインチューニング、カスタム要約モデルの構築など、SageMaker上で要約技術を実装するためのさまざまなオプションについて探求します。また、各アプローチの利点と欠点についても議論し、医療専門家が複雑な臨床データの簡潔で正確な要約を生成するために最適なソリューションを選択できるようにします。
始める前に知っておくべき2つの重要な用語:事前学習済みとファインチューニング。事前学習済みまたは基盤モデルは、通常、一般的な言語知識のために大規模なコーパスで構築およびトレーニングされたモデルです。ファインチューニングは、事前学習済みモデルに、特定のタスクのパフォーマンスを向上させるために、さらにドメイン固有のデータセットを与えるプロセスです。医療設定では、これは特に患者ケアに関連するフレーズや専門用語を含むデータをモデルに与えることを意味します。
SageMaker上でカスタム要約モデルを構築する
最も手間のかかるアプローチですが、一部の組織ではSageMaker上でカスタム要約モデルをゼロから構築することを好む場合があります。このアプローチでは、AI/MLモデルのより深い知識が必要となり、モデルアーキテクチャをゼロから作成するか、既存のモデルを特定のニーズに合わせて適応させることが含まれる場合があります。カスタムモデルを構築することで、要約プロセスに対してより大きな柔軟性と制御が可能になりますが、事前学習済みモデルから始まるアプローチと比べて時間とリソースがさらに必要となります。このオプションの利点と欠点を注意深く検討することが重要です。すべてのユースケースに適しているわけではない可能性があるためです。
SageMaker JumpStartの基盤モデル
SageMaker上で要約を実装するための素晴らしいオプションは、JumpStartの基盤モデルを使用することです。これらのモデルは、主要なAI研究機関によって開発され、テキスト要約を含むさまざまなタスクに最適化された事前学習済み言語モデルを提供しています。SageMaker JumpStartには、プロプライエタリモデルとオープンソースモデルの2種類の基盤モデルがあります。SageMaker JumpStartは、HIPAAの対応性も提供しており、医療ワークロードに役立ちます。ただし、準拠性を確保するのは顧客の責任ですので、適切な手続きを行ってください。詳細については、Amazon Web ServicesにおけるHIPAAセキュリティとコンプライアンスの設計を参照してください。
プロプライエタリ基盤モデル
Jurassicモデル(AI21)やCohereのCohere Generateモデルなどのプロプライエタリモデルは、SageMaker JumpStartでAWS Management Consoleから見つけることができ、現在プレビュー中です。カスタムデータでモデルをファインチューニングする必要がない場合、要約のためのプロプライエタリモデルの利用は理想的です。これにより、簡単に使用できるボックス内のソリューションが提供され、要約の要件を最小限の構成で満たすことができます。これらの事前学習済みモデルの機能を利用することで、カスタムモデルのトレーニングやファインチューニングに費やされる時間とリソースを節約することができます。さらに、プロプライエタリモデルには通信簿やSDKなどのユーザーフレンドリーなAPIが付属しており、既存のシステムやアプリケーションとの統合プロセスを簡素化することができます。特定のカスタマイズやファインチューニングを必要とせずに、事前学習済みのプロプライエタリモデルによって要約ニーズを満たすことができる場合、テキスト要約タスクに対する便利で費用対効果の高い効率的なソリューションを提供します。ただし、これらのモデルは医療用途に特化してトレーニングされていないため、ファインチューニングなしでは医療言語の品質を保証することはできません。
Jurassic-2 Grande Instructは、AI21 Labsによる大規模言語モデル(LLM)であり、自然言語の指示に最適化され、さまざまな言語タスクに適用できます。使いやすいAPIとPython SDKを提供し、品質と手頃な価格のバランスを取っています。人気のある用途には、マーケティングコピーの生成、チャットボットの動力、テキスト要約などがあります。
SageMakerコンソールで、SageMaker JumpStartに移動し、AI21 Jurassic-2 Grande Instructモデルを見つけてTry out modelを選択します。
モデルを管理するSageMakerエンドポイントに展開したい場合は、このサンプルノートブックの手順に従うことができます。このノートブックでは、SageMakerを使用してJurassic-2 Largeを展開する方法を示しています。
オープンソースの基本モデル
オープンソースのモデルには、SageMaker JumpStartのAmazon SageMaker Studio UI、SageMakerコンソールのSageMaker JumpStart、およびSageMaker JumpStart APIで検出できるFLAN T5、Bloom、GPT-2モデルなどが含まれています。これらのモデルは、AWSアカウントの下でファインチューニングおよびエンドポイントへの展開が可能であり、モデルのウェイトとスクリプトコードを完全に所有することができます。
Flan-T5 XLは、さまざまな言語タスクに対応する強力で多目的なモデルです。ドメイン固有のデータを使用してモデルをファインチューニングすることで、テキスト要約やその他のNLPタスクなど、特定のユースケースに最適なパフォーマンスを実現することができます。SageMaker Studio UIを使用してFlan-T5 XLをファインチューニングする詳細については、Amazon SageMaker JumpstartでFLAN T5 XLのインストラクションファインチューニングを参照してください。
Hugging Faceを使用したSageMakerでの事前学習モデルのファインチューニング
SageMakerで要約を実装する最も人気のあるオプションの1つは、Hugging Face Transformersライブラリを使用して事前学習モデルをファインチューニングすることです。Hugging Faceは、テキスト要約を含むさまざまな自然言語処理(NLP)タスクに特化した事前学習トランスフォーマーモデルを幅広く提供しています。Hugging Face Transformersライブラリを使用すると、SageMakerを使用してドメイン固有のデータでこれらの事前学習モデルを簡単にファインチューニングすることができます。このアプローチには、トレーニング時間の短縮、特定のドメインでのパフォーマンスの向上、組み込みのSageMakerツールとサービスを使用したモデルのパッケージ化と展開の容易さなどの利点があります。SageMaker JumpStartで適切なモデルを見つけることができない場合は、Hugging Faceが提供する任意のモデルを選択し、SageMakerを使用してファインチューニングすることができます。
MLの機能を学ぶためにモデルで作業を開始するには、SageMaker Studioを開き、Hugging Face Model Hubで使用したい事前学習モデルを見つけ、展開方法としてSageMakerを選択するだけです。Hugging Faceは、コピーしてノートブックで実行するためのコードを提供します。それほど簡単です!MLエンジニアリングの経験は必要ありません。
Hugging Face Transformersライブラリを使用すると、ビルダーは事前学習モデルで操作を行い、次のセクションで詳しく説明するような高度なタスクを実行することができます。
リソースをプロビジョニングする
開始する前に、ノートブックをプロビジョニングする必要があります。手順については、「ローカルでの機械学習モデルのビルドとトレーニング」のステップ1と2を参照してください。この例では、以下のスクリーンショットに表示される設定を使用しました。
また、トレーニングデータとトレーニングアーティファクトを格納するためのAmazon Simple Storage Service(Amazon S3)バケットを作成する必要があります。手順については、「バケットの作成」を参照してください。
データセットを準備する
ドメインの知識をより向上させるために、タスクに適したデータを取得する必要があります。エンタープライズユースケースのトレーニングでは、トレーニングのために自分自身のデータを準備するためにいくつかのデータエンジニアリングタスクを実行する必要があります。これらのタスクはこの投稿の範囲外です。この例では、看護ノートをエミュレートするためにいくつかの合成データを生成し、Amazon S3に保存しました。データをAmazon S3に保存することで、HIPAAコンプライアンスのためにワークロードを設計することができます。ノートブックが実行されているインスタンスにそれらのノートを取得し、ロードすることから始めます:
from datasets import load_dataset
dataset = load_dataset("csv", data_files={
"train": "s3://" + bucket_name + train_data_path,
"validation": "s3://" + bucket_name + test_data_path
})
ノートは、フルエントリ、ノートを含む列と、要約が何であるかを示す短縮バージョンを含む列で構成されています。このデータセットを使用する目的は、モデルの生物学的および医学的な語彙を改善し、医療の文脈での要約により適応させることです。これをドメインの微調整と呼び、モデルに要約された出力の構造を示します。要約の場合、記事の要旨やレビューの1行の要約を作成したい場合もありますが、この場合は、患者の症状とこれまでに行われた処置の要約バージョンをモデルに出力させることを試みています。
モデルを読み込む
私たちが基礎として使用するモデルは、GoogleのPegasusのバージョンであり、Hugging Face Hubで利用できるようになっています。これは、すでに要約のために事前トレーニングされているため、私たちの微調整プロセスはそのドメイン知識を拡張することに焦点を当てることができます。モデルが実行するタスクを変更することは、この投稿ではカバーされていない別のタイプの微調整です。Transformerライブラリは、model_checkpoint: google/pegasus-xsum
からモデル定義をロードするためのクラスを提供しています。これにより、モデルがハブからロードされ、ノートブックにインスタンス化されるため、後で使用できます。 pegasus-xsum
はシーケンス対シーケンスモデルなので、AutoModelクラスのSeq2Seqタイプを使用する必要があります:
from transformers import AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)
モデルが準備できたので、トレーニングループを実行するために他のコンポーネントに注意を払う時間です。
トークナイザーを作成する
これらのコンポーネントの最初のものはトークナイザーです。トークナイズとは、入力データの単語をモデルが理解できる数値表現に変換するプロセスです。再度、Transformerライブラリは、トークナイザーの定義をロードするためのクラスを提供しています。これは、すでにモデルをインスタンス化するために使用したチェックポイントと同じものを使用しています:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
このトークナイザーオブジェクトを使用すると、前処理関数を作成し、データセットにマッピングしてモデルにフィードする準備が整ったトークンを生成できます。最後に、トークン化された出力をフォーマットし、元のテキストを含む列を削除します。モデルはそれらを解釈することができないため。これで、モデルにフィードする準備が整ったトークン化された入力だけが残ります。次のコードを参照してください:
tokenized_datasets = dataset.map(preprocess_function, batched=True)
tokenized_datasets.set_format("torch")
tokenized_datasets = tokenized_datasets.remove_columns(
dataset["train"].column_names
)
データコレーターとオプティマイザーを作成する
データがトークン化され、モデルがインスタンス化されたので、トレーニングループを実行する準備がほぼ整いました。作成する次のコンポーネントは、データコレーターとオプティマイザーです。データコレーターは、トランスフォーマーズライブラリを介して提供される別のクラスであり、トークン化されたデータのバッチを作成するために使用します。モデルとトークナイザーオブジェクトを使用して、以前にモデルに使用したクラスタイプ(Seq2Seq)に対応するコレータクラスを見つけるだけで簡単に構築できます。オプティマイザーの機能は、トレーニングの進行に応じてトレーニング損失に基づいてパラメータを更新し、トレーニング状態を維持することです。オプティマイザーを作成するには、torchモジュールからoptimパッケージをインポートし、いくつかの最適化アルゴリズムが利用可能です。以前に遭遇したことのある一部の一般的なものは、Stochastic Gradient DescentとAdamです。Adamのコンストラクターは、与えられたトレーニング実行のモデルパラメータとパラメータ化された学習率を受け取ります。以下のコードを参照してください:
from transformers import DataCollatorForSeq2Seq
from torch.optim import Adam
data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)
optimizer = Adam(model.parameters(), lr=learning_rate)
アクセラレータとスケジューラーを構築する
トレーニングを開始する前の最後のステップは、アクセラレータと学習率スケジューラーを構築することです。アクセラレータは、学習中にデバイスを管理するために必要なロジックを抽象化するための、別のライブラリ(私たちは主にTransformersを使用しています)であるHugging Faceによって提供されます。最後のコンポーネントでは、学習率スケジューラーを実装するために、便利なTransformersライブラリに戻ります。スケジューラータイプ、ループ内のトレーニングステップ数、および以前に作成したオプティマイザーを指定することで、get_scheduler
関数は、トレーニングプロセス全体で初期学習率を調整できるオブジェクトを返します:
from accelerate import Accelerator
from transformers import get_scheduler
accelerator = Accelerator()
model, optimizer = accelerator.prepare(
model, optimizer
)
lr_scheduler = get_scheduler(
"linear",
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps,
)
トレーニングジョブの設定
これでトレーニングの準備が整いました!Transformersライブラリを使用してトレーニングジョブを設定しましょう。まず、Transformersライブラリを使用してtraining_argsをインスタンス化し、パラメータの値を選択します。これらの値を、他の準備済みのコンポーネントとデータセットと一緒に、トレーナーに直接渡してトレーニングを開始します。以下のコードに示すように、データセットのサイズと選択したパラメータによっては、かなりの時間がかかる場合があります。
from transformers import Seq2SeqTrainer
from transformers import Seq2SeqTrainingArguments
training_args = Seq2SeqTrainingArguments(
output_dir="output/",
save_total_limit=1,
num_train_epochs=num_train_epochs,
per_device_train_batch_size=batch_size,
per_device_eval_batch_size=batch_size,
evaluation_strategy="epoch",
logging_dir="output/",
load_best_model_at_end=True,
disable_tqdm=True,
logging_first_step=True,
logging_steps=1,
save_strategy="epoch",
predict_with_generate=True
)
trainer = Seq2SeqTrainer(
model=model,
tokenizer=tokenizer,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
data_collator=data_collator,
optimizers=(optimizer, lr_scheduler)
)
trainer.train()
このコードを実行するために、エントリポイントファイルとしてパッケージ化し、SageMakerトレーニングジョブを介して呼び出すことができます。これにより、作成したロジックをトレーニング呼び出しから分離し、SageMakerが別のインスタンスでトレーニングを実行できるようになります。
推論用にモデルをパッケージ化する
トレーニングが実行された後、モデルオブジェクトは推論に使用する準備ができています。ベストプラクティスとして、将来の使用のために作業内容を保存しましょう。モデルのアーティファクトを作成し、それらを一緒にzip化して、Amazon S3にターボールをアップロードする必要があります。zip化するためには、微調整済みのモデルを展開し、モデルのバイナリと関連する設定ファイルを保存する必要があります。また、推論時にモデルを使用するために、トークナイザも同じディレクトリに保存する必要があります。これにより、model_dir
フォルダは次のようなコードになります:
config.json pytorch_model.bin tokenizer_config.json
generation_config.json special_tokens_map.json tokenizer.json
あとは、tarコマンドを実行してディレクトリをzip化し、tar.gzファイルをAmazon S3にアップロードするだけです:
unwrapped_model = accelerator.unwrap_model(trainer.model)
unwrapped_model.save_pretrained('model_dir', save_function=accelerator.save)
tokenizer.save_pretrained('model_dir')
!cd model_dir/ && tar -czvf model.tar.gz *
!mv model_dir/model.tar.gz ./
with open("model.tar.gz", "rb") as f:
s3.upload_fileobj(f, bucket_name, artifact_path + "model/model.tar.gz")
新しく微調整されたモデルは、推論に使用する準備が整い、利用可能です。
推論を実行する
このモデルアーティファクトを推論に使用するには、新しいファイルを開き、以下のコードを使用します。なお、model_data
パラメータをAmazon S3のアーティファクト保存場所に合わせて変更してください。HuggingFaceModel
コンストラクタは、model.tar.gz
に保存したチェックポイントからモデルを再構築し、デプロイ方法を指定することができます。エンドポイントのデプロイには数分かかります。
from sagemaker.huggingface import HuggingFaceModel
from sagemaker import get_execution_role
role = get_execution_role()
huggingface_model = HuggingFaceModel(
model_data=”s3://{bucket_name}/{artifact_path}/model/model.tar.gz”,
role=role,
transformers_version=”4.26”,
pytorch_version=”1.13”,
py_version=”py39”
)
predictor = huggingface_model.deploy(
initial_instance_count=1,
instance_type=”ml.m5.xlarge”
)
エンドポイントがデプロイされたら、作成したpredictorを使用してテストすることができます。データペイロードをpredict
メソッドに渡してセルを実行すると、微調整されたモデルからの応答が得られます:
data = {
"inputs": "要約するテキスト"
}
predictor.predict(data)
結果
モデルの微調整の利点を確認するために、簡単なテストを行いましょう。次の表には、プロンプトとそのプロンプトをモデルに渡した場合の微調整前と微調整後の結果が含まれています。
プロンプト | 微調整なしの応答 | 微調整ありの応答 |
患者が経験している症状を要約してください。患者は45歳の男性で、左腕に放射性の胸の痛みを訴えています。痛みは庭の作業中に突然発生し、軽度の呼吸困難や多汗症と関連しています。到着時の患者の心拍数は120、呼吸数は24、血圧は170/95でした。救急科への到着時に12誘導心電図を行い、3回の舌下ニトログリセリンを使用しても胸の痛みが緩和されませんでした。心電図では前壁誘導でST上昇が見られ、急性前壁心筋梗塞が示唆されました。心臓カテーテル検査室に連絡し、心臓カテーテル検査の準備を行っています。 | 急性心筋梗塞の症例を紹介します。 | 胸痛、前壁心筋梗塞、PCI。 |
ご覧のように、微調整されたモデルは健康用語を異なる方法で使用し、応答の構造を目的に合わせて変更することができました。ただし、結果はデータセットとトレーニング中の設計選択に依存します。モデルのバージョンによっては、非常に異なる結果が得られる場合があります。
クリーンアップ
SageMakerノートブックの使用を終了する際には、長時間実行されるリソースによるコストを避けるために、ノートブックをシャットダウンしてください。なお、インスタンスをシャットダウンすると、インスタンスの一時的なメモリに保存されているデータが失われるため、クリーンアップ前にすべての作業を永続ストレージに保存する必要があります。また、推論のために展開されたエンドポイントを削除するには、SageMakerコンソールのエンドポイントページに移動する必要があります。すべてのアーティファクトを削除するには、Amazon S3コンソールに移動してバケットにアップロードされたファイルを削除する必要もあります。
結論
この記事では、SageMakerを使用して医療専門家が大量の臨床データから効率的に情報を抽出するためのテキスト要約技術のさまざまなオプションを探索しました。SageMaker Jumpstartの基礎モデルの使用、Hugging Faceから事前学習済みモデルの微調整、カスタム要約モデルの構築について説明しました。各アプローチにはそれぞれ利点と欠点があり、異なるニーズと要件に対応しています。
SageMakerでカスタム要約モデルを構築すると、柔軟性と制御性が高まりますが、事前学習済みモデルの使用よりも時間とリソースが必要です。SageMaker Jumpstartの基礎モデルは、特定のカスタマイズや微調整が不要な組織にとって使いやすく、費用効果の高いソリューションを提供します。Hugging Faceから事前学習済みモデルを微調整することで、トレーニング時間が短縮され、ドメイン固有のパフォーマンスが向上し、SageMakerのツールとサービスとのシームレスな統合が可能となりますが、実装の努力が必要です。この記事の執筆時点では、Amazonはさらに管理された環境で要約機能を提供するAmazon Bedrockというオプションを発表しています。
各アプローチの利点と欠点を理解することで、医療専門家や組織は複雑な臨床データの簡潔で正確な要約を生成するための最適なソリューションについての情報を得ることができます。最終的には、SageMakerでAI/MLベースの要約モデルを使用することで、医療専門家が迅速に関連情報にアクセスし、質の高い医療を提供することができるようになります。
リソース
この記事で説明されているスクリプトとサンプルデータの詳細については、GitHubリポジトリを参照してください。AWSでMLワークロードを実行する方法についての詳細は、以下のリソースを参照してください:
- Hugging Face on Amazon SageMakerワークショップ
- Hugging Face Transformers Amazon SageMaker Examples
- Technology Innovation InstituteがAmazon SageMakerで最先端のFalcon LLM 40B基礎モデルをトレーニング
- Amazon SageMakerで大規模言語モデルをトレーニングするためのベストプラクティス
- ForethoughtがAmazon SageMakerを使用して生成的AIモデルのコストを66%以上削減する方法
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles