「包括的な革新:Amazon SageMakerでのHack.The.Bias」
Comprehensive Innovation Hack.The.Bias with Amazon SageMaker
この記事は、ETHチューリッヒのAWS学生ハッカソンチームの一員であるDaniele Chiappalupiと共同執筆されました。
Amazon SageMaker JumpStartを使用することで、誰でも簡単に機械学習(ML)を始めることができます。この記事では、大学のハッカソンチームがSageMaker JumpStartを使用して、ユーザーがバイアスを特定し除去するのを支援するアプリケーションを迅速に構築した方法を紹介します。
「Amazon SageMakerは私たちのプロジェクトにおいて重要な役割を果たしました。Flanの事前訓練済みインスタンスを簡単に展開・管理でき、アプリケーションの堅牢な基盤を提供してくれました。オートスケーリング機能は、高トラフィック時において重要な役割を果たし、アプリケーションが応答性を維持し、ユーザーが安定かつ高速なバイアス解析を受けることを保証しました。さらに、Flanモデルのクエリタスクをマネージドサービスにオフロードすることで、アプリケーションを軽量で迅速に保ち、さまざまなデバイスでのユーザーエクスペリエンスを向上させることができました。SageMakerの機能により、私たちはハッカソンでの時間を最大限に活用し、モデルのパフォーマンスとインフラストラクチャの管理ではなく、プロンプトとアプリケーションの最適化に集中することができました。」
– ETHチューリッヒのAWS学生ハッカソンチームの一員であるDaniele Chiappalupi
ソリューションの概要
ハッカソンのテーマはAI技術を活用して国連の持続可能な開発目標に貢献することです。以下の図に示すように、ハッカソンで構築されたアプリケーションは、公正で包括的な言語を促進するために、ユーザーがテキストからバイアスを特定し除去することで、質の高い教育、ジェンダーに基づく差別の対象、および格差の削減という3つの持続可能な開発目標への貢献を果たしています。
以下のスクリーンショットに示すように、テキストを入力すると、アプリケーションは人種、民族、ジェンダーのバイアスがない新しいバージョンを生成します。さらに、各バイアスのカテゴリに関連する入力テキストの特定の部分をハイライト表示します。
以下の図に示すアーキテクチャでは、ユーザーがReactベースのWebアプリケーションにテキストを入力すると、Amazon API Gatewayがトリガーとなり、ユーザーテキストのバイアスに応じてAWS Lambda関数を呼び出します。Lambda関数はSageMaker JumpStartのFlanモデルエンドポイントを呼び出し、同じルートを介して非バイアスのテキスト結果をフロントエンドアプリケーションに返します。
アプリケーション開発プロセス
このアプリケーションの開発プロセスは、反復的で、ユーザーインターフェースとMLモデルの統合の2つの主要な領域に焦点を当てて行われました。
柔軟性、拡張性、インタラクティブなユーザーインターフェースを作成するための強力なツールを持つReactをフロントエンド開発に選択しました。ユーザーの入力を処理し、洗練された結果を表示するというアプリケーションの性質から、Reactのコンポーネントベースのアーキテクチャが理想的でした。Reactを使用することで、ユーザーがテキストを提出し、ページをリフレッシュする必要なくバイアスのない結果を見ることができるシングルページアプリケーションを効率的に構築することができました。
ユーザーが入力したテキストは、強力な言語モデルによってバイアスを検出するために処理する必要がありました。私たちは、その堅牢性、効率性、拡張性の特性からFlanを選びました。Flanを利用するために、SageMaker JumpStartを使用しました。以下のスクリーンショットに示すように、Amazon SageMakerはFlanの事前訓練済みインスタンスを簡単に展開・管理することができ、モデルのパフォーマンスとインフラストラクチャの管理ではなく、プロンプトとクエリの最適化に集中することができました。
Flanモデルをフロントエンドアプリケーションに接続するためには、堅牢で安全な統合が必要でした。この統合はLambdaとAPI Gatewayを使用して実現しました。Lambdaを使用して、SageMakerモデルと直接通信するサーバーレス関数を作成しました。そして、API Gatewayを使用して、ReactアプリケーションがLambda関数を呼び出すための安全でスケーラブルで簡単にアクセスできるエンドポイントを作成しました。ユーザーがテキストを送信すると、アプリケーションはゲートウェイに対して一連のAPI呼び出しをトリガーしました。最初にバイアスが存在するかどうかを特定し、必要に応じてバイアスを特定、位置特定、中和するための追加のクエリを実行しました。これらすべてのリクエストはLambda関数を経由してSageMakerモデルにルーティングされました。
開発プロセスの最終タスクは、言語モデルへのクエリのためのプロンプトの選択でした。CrowS-Pairsデータセットは、実際のバイアスのあるテキストの実例を提供してくれたため、これを利用してリクエストを微調整しました。プロンプトは反復的なプロセスによって選択され、このデータセット内でのバイアス検出の精度を最大化することを目指しました。
プロセスのまとめとして、完成したアプリケーションにはシームレスな運用フローが観察されました。プロセスは、ユーザーが分析のためのテキストを提出することから始まり、それがPOSTリクエスト経由で安全なAPI Gatewayエンドポイントに送信されます。これにより、Lambda関数がトリガーされ、SageMakerエンドポイントと通信します。結果として、Flanモデルは一連のクエリを受け取ります。最初のクエリではテキスト内のバイアスの存在をチェックします。バイアスが検出された場合、追加のクエリが展開され、これらのバイアス要素を特定し、中和します。結果は同じパスを通じて返されます。まずLambda関数に、次にAPI Gatewayを経由して最終的にユーザーに戻ります。元のテキストにバイアスが存在した場合、ユーザーには、検出されたバイアスの種類(人種、民族、性別など)を示す包括的な分析が提供されます。これらのバイアスが見つかったテキストの特定の部分が強調表示され、ユーザーは変更点を明確に把握することができます。この分析とともに、バイアスのない新しいテキストのバージョンが提示され、潜在的なバイアスのある入力が包括的なナラティブに変換されます。
次のセクションでは、このソリューションを実装するための手順の詳細を説明します。
React環境のセットアップ
Reactの開発環境をセットアップするために、最小限の設定で新しいReactアプリケーションを作成するために、create-react-appを使用しました:
npx create-react-app my-app
ユーザーインターフェースの構築
Reactを使用して、ユーザーがテキストを入力するためのシンプルなインターフェースを設計しました。このインターフェースには、送信ボタン、リセットボタン、および処理結果を表示するオーバーレイが含まれています。
SageMakerでFlanモデルを開始する
SageMakerを使用して、リアルタイム推論のためのFlan言語モデルの事前学習済みインスタンスを作成しました。このモデルは、次のようなJSON構造のペイロードに対して使用できます:
payload = {
text_inputs: "text_inputs",
max_length: <max_length>,
num_return_sequences: <num_return_sequences>,
top_k: <top_k>,
top_p: <top_p>,
do_sample: <do_sample>,
num_beams: <num_beams>,
seed: <seed>,
};
Lambda関数の作成
直接SageMakerエンドポイントとやり取りするLambda関数を開発しました。この関数は、ユーザーのテキストをリクエストとして受け取り、それをSageMakerエンドポイントに転送し、精製された結果を返すように設計されています。以下のコードに示すように(ENDPOINT_NAME
はSageMakerインスタンスのエンドポイントとして設定されています):
import os
import io
import boto3
import json
import csv
# 環境変数を取得
ENDPOINT_NAME = os.environ['ENDPOINT_NAME']
runtime= boto3.client('runtime.sagemaker')
def lambda_handler(event, context):
data = json.loads(json.dumps(event))
payload = json.dumps(data['data']).encode('utf-8')
query_response = runtime.invoke_endpoint(
EndpointName=ENDPOINT_NAME,
ContentType='application/json',
Body=payload)
response_dict = json.loads(query_response['Body'].read())
return response_dict['generated_texts']
API Gatewayのセットアップ
API Gatewayで新しいREST APIを設定し、それをLambda関数にリンクしました。この接続により、ReactアプリケーションはAPI Gatewayに対してHTTPリクエストを行い、それによってLambda関数がトリガーされることができます。
ReactアプリケーションをAPIと統合する
Reactアプリケーションを更新して、送信ボタンがクリックされた際にAPI GatewayにPOSTリクエストを行い、リクエストの本文にはユーザーのテキストが含まれるようにしました。API呼び出しを実行するために使用したJavaScriptコードは以下の通りです(REACT_APP_AWS_ENDPOINT
はLambda呼び出しにバインドされたAPI Gatewayエンドポイントに対応します):
const makeAWSApiCall = (
textInputs,
maxLength,
numReturnSequences,
topK,
topP,
doSample,
numBeams
) => {
const axiosRequestUrl =
`${process.env.REACT_APP_AWS_ENDPOINT}`;
const requestData = {
text_inputs: textInputs,
max_length: maxLength,
num_return_sequences: numReturnSequences,
top_k: topK,
top_p: topP,
do_sample: doSample,
num_beams: numBeams,
seed: 8,
};
return axios.post(axiosRequestUrl, { data: requestData });
};
プロンプトの選択の最適化
バイアス検出の精度を向上させるために、CrowS-Pairsデータセットに対してさまざまなプロンプトをテストしました。この反復的なプロセスを通じて、最も高い精度を提供するプロンプトを選択しました。
ReactアプリをVercelにデプロイしてテストする
アプリケーションを構築した後、Vercelにデプロイして一般公開しました。ユーザーインターフェースから言語モデルからの応答まで、アプリケーションが予想どおりに機能することを確認するために、広範なテストを実施しました。
これらの手順により、テキストの分析とバイアスの除去を行うアプリケーションの基盤が整いました。プロセスの固有の複雑さにもかかわらず、SageMaker、Lambda、およびAPI Gatewayなどのツールを使用することで、開発を効率化し、プロジェクトの中核目標であるテキストのバイアスを特定して除去することに集中することができました。
結論
SageMaker JumpStartは、SageMakerの機能と機能を探索する便利な方法を提供します。キュレーションされたワンステップソリューション、サンプルノートブック、展開可能な事前トレーニング済みモデルが提供されます。これらのリソースにより、SageMakerの学習と理解を迅速に行うことができます。また、モデルを微調整して特定のニーズに合わせて展開するオプションもあります。JumpStartへのアクセスは、Amazon SageMaker StudioまたはSageMaker APIを使用してプログラム的に利用できます。
この記事では、学生ハッカソンチームがSageMaker JumpStartを使用して短期間でソリューションを開発した方法について学びました。これは、小規模なチームや個人でも、AWSとSageMaker JumpStartの潜在能力を活用して高度なAIソリューションを迅速に開発・展開することができることを示しています。
SageMaker JumpStartの使用方法について詳しくは、「Amazon SageMaker JumpstartでFLAN T5 XLの指示微調整」と「Amazon SageMaker JumpStartでFlan-T5基盤モデルのゼロショットプロンプティング」を参照してください。
ETH Analytics Clubは、「ETH Datathon」というAI/MLハッカソンを主催しており、ETH Zurich、University of Zurich、EPFLから150人以上の参加者を集めています。このイベントでは業界リーダーによるワークショップ、24時間のコーディングチャレンジ、学生や業界のプロフェッショナルとの貴重なネットワーキングの機会が提供されます。ETH HackathonチームのDaniele Chiappalupi、Athina Nisioti、Francesco Ignazio Re、およびAWSの組織チームのAlice Morano、Demir Catovic、Iana Peix、Jan Oliver Seidenfuss、Lars Nettemann、Markus Winterholerに感謝します。
この投稿の内容や意見は第三者の著者によるものであり、AWSはこの投稿の内容や正確性について責任を負いません。
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