「Amazon SageMaker Data Wranglerを使用して機械学習のためにPII情報を自動的に修正します」
「Amazon SageMaker Data Wranglerを使って機械学習のためにPII情報を自動的に修正する方法」
顧客は、データと洞察を自動的に抽出するために、大規模言語モデル(LLM)などのディープラーニングアプローチを使いたいというニーズがますます高まっています。機械学習(ML)に役立つデータは、多くの産業にとって、個人を特定できる情報(PII)が含まれている場合があります。ディープラーニングモデルのトレーニング、調整、使用時に顧客のプライバシーを確保し、規制遵守を維持するためには、ソースデータから最初にPIIを遮蔽する必要があります。
この投稿では、Amazon SageMaker Data WranglerとAmazon Comprehendを使用して、タブularデータから自動的にPIIを遮蔽する方法を示しています。これは、機械学習オペレーション(ML Ops)ワークフローの一部となります。
問題:PIIを含むMLデータ
PIIは、直接または間接的な手段によって対象の個人の身元を合理的に推測することができる情報のどの表現でも定義されます。PIIは、直接的に個人を特定する情報(名前、住所、社会保障番号または他の識別番号またはコード、電話番号、メールアドレスなど)または他のデータ要素と組み合わせて特定の個人を識別するために機関が使用する情報であり、間接的な識別を意図しています。
金融、小売、法律、政府などのビジネスドメインの顧客は、定期的にPIIデータを取り扱っています。さまざまな政府の規制やルールにより、顧客はこの機微なデータを適切なセキュリティ対策で取り扱い、規制の罰金、潜在的な詐欺、名誉毀損を回避する仕組みを見つける必要があります。PII遮蔽は、機密情報を保護しながらドキュメントから機密情報を遮蔽または削除するプロセスです。
ビジネスは、MLを使用して魅力的な顧客体験とより良いビジネス結果を提供する必要があります。PIIデータの遮蔽は、エンタープライズデータ(または顧客のデータ)が危険にさらされることなく、生成AIモデルを使用したり調整したりするために必要な、より大きなリッチなデータストリームを開放するための重要な最初のステップです。
ソリューションの概要
このソリューションでは、Amazon ComprehendとSageMaker Data Wranglerを使用して、サンプルデータセットからPIIデータを自動的に遮蔽します。
Amazon Comprehendは、構造化されていないデータの洞察と関係を明らかにするために、MLを使用する自然言語処理(NLP)サービスであり、インフラストラクチャの管理やMLの経験は不要です。テキスト内のさまざまなPIIエンティティタイプ(例:名前やクレジットカード番号)を特定する機能を提供します。最新の生成AIモデルでは、一部のPII遮蔽機能が示されていますが、一般的にPII識別の信頼性スコアや遮蔽された内容を説明する構造化データを提供しません。Amazon ComprehendのPII機能では、両方を返すため、スケールで監査可能な遮蔽ワークフローを作成することができます。また、Amazon ComprehendをAWS PrivateLinkと組み合わせることで、顧客データはAWSネットワーク上を離れることなく、他のアプリケーションと同じデータアクセスとプライバシーコントロールで継続的に保護されます。
Amazon MacieもAmazon Comprehendと同様に、Amazon Simple Storage Service(Amazon S3)に格納されたPIIを含む機密データを識別するためにルールベースのエンジンを使用します。ただし、Macieのルールベースのアプローチは、そのデータから近くに位置する特定のキーワードを持つことを前提としています(30文字以内)。対照的に、Amazon ComprehendのNLPベースのMLアプローチは、構造化されていないデータ内のPIIを特定するために、より長いテキストの意味理解を利用するため、より有用です。
また、CSVやプレーンテキストファイルなどの表形式データに関しては、MacieはAmazon Comprehendよりもより詳細な位置情報を返します(行/列の指示子または行番号を返しますが、開始と終了の文字のオフセットは返しません)。これにより、Amazon Comprehendは、PIIと非PIIの単語(たとえば、サポートチケットまたはLLMプロンプト)の混在する構造化されていないテキストからPIIを削除する際に特に役立ちます。
Amazon SageMakerは、MLチームがMLライフサイクル全体でプロセスを自動化し、標準化するための専用ツールを提供しています。SageMaker MLOpsツールを使用すると、チームは簡単にMLモデルの準備、トレーニング、テスト、トラブルシューティング、展開、およびガバナンスをスケールで行うことができます。これにより、データサイエンティストとMLエンジニアの生産性が向上し、モデルのパフォーマンスを保ったまま、本番環境で稼働することができます。以下の図は、SageMaker MLOpsワークフローを示しています。
SageMaker Data Wranglerは、Amazon SageMaker Studioの一部であり、Amazon S3やAmazon Athenaなどの場所に格納されているデータセットのインポート、準備、変換、特徴量化、分析などのエンドツーエンドソリューションを提供します。SageMaker Data Wranglerを使用すると、ビルトインのノーコード変換を使用するか、独自のPythonスクリプトでカスタマイズすることにより、データセットの前処理と特徴エンジニアリングを簡素化し、効率化することができます。
SageMaker Data WranglerをSageMaker Data Wranglerデータ準備ワークフローの一部として使用することで、モデルのトレーニングや推論など、データのすべての下流の使用を組織のPII要件に合わせて維持することができます。SageMaker Data WranglerをAmazon SageMaker Pipelinesと統合して、データ準備とPIIの削除など、エンドツーエンドのMLオペレーションを自動化することもできます。詳細については、SageMaker Data WranglerをSageMaker Pipelinesに統合するを参照してください。この記事の残りの部分では、テーブル形式のデータ内のテキストからPIIを削除するためにAmazon Comprehendを使用するSageMaker Data Wranglerフローを示しています。
この解決策には、シンセティックデータセットとカスタムのSageMaker Data Wranglerフローが必要です。これらは、GitHubでファイルとして入手できます。SageMaker Data Wranglerフローを使用してPIIを削除する手順は次の通りです:
- SageMaker Studioを開きます。
- SageMaker Data Wranglerフローをダウンロードします。
- SageMaker Data Wranglerフローを確認します。
- 宛先ノードを追加します。
- SageMaker Data Wranglerエクスポートジョブを作成します。
このチュートリアルでは、エクスポートジョブを実行するなど、約20-25分かかります。
前提条件
このチュートリアルには、以下のものが必要です:
- AWSアカウント
- SageMaker Studioドメインとユーザー。これらのセットアップについては、Amazon SageMakerドメインへのオンボードを参照してください。SageMaker Studioの実行ロールには、Amazon ComprehendのDetectPiiEntitiesアクションを呼び出すための権限が必要です。
- PII結果のためのS3バケット
SageMaker Studioを開く
SageMaker Studioを開くには、以下の手順を完了してください:
- SageMakerコンソールで、ナビゲーションペインでStudioを選択します。
- ドメインとユーザープロファイルを選択します。
- Studioを開くを選択します。
SageMaker Data Wranglerの新しい機能を使用するには、最新リリースにアップグレードすることがおすすめです。
SageMaker Data Wranglerフローのダウンロード
まず、GitHubからSageMaker Data Wranglerフローファイルを取得し、SageMaker Studioにアップロードする必要があります。次の手順を完了してください:
- GitHubのSageMaker Data Wranglerの
redact-pii.flow
ファイルに移動します。 - GitHubで、ダウンロードアイコンを選択してフローファイルをローカルコンピュータにダウンロードします。
- SageMaker Studioで、ナビゲーションペインのファイルアイコンを選択します。
- アップロードアイコンを選択し、
redact-pii.flow
を選択します。
SageMaker Data Wranglerフローの確認
SageMaker Studioでredact-pii.flow
を開きます。数分後、フローが読み込まれ、フローダイアグラムが表示されます(以下のスクリーンショットを参照)。フローには、S3ソースステップと5つの変換ステップが含まれています。
フローダイアグラムで、最後のステップRedact PIIを選択します。右側にAll Stepsペインが開き、フローのステップのリストが表示されます。各ステップを展開して詳細を表示したり、パラメータを変更したり、カスタムコードを追加したりすることができます。
フローの各ステップを見ていきましょう。
ステップ1(S3ソース)と2(データタイプ)は、新しいフローにデータがインポートされるたびにSageMaker Data Wranglerによって追加されます。 S3ソースでは、S3 URIフィールドがサンプルデータセットを指すようになっており、これはAmazon S3に格納されたCSVファイルです。このファイルには約116,000行が含まれており、フローはサンプリングフィールドの値を1,000に設定するため、SageMaker Data Wranglerはユーザーインターフェースに表示するために1,000行をサンプリングします。データタイプは、インポートされたデータの各列のデータタイプを設定します。
ステップ3(サンプリング)では、SageMaker Data Wranglerがエクスポートジョブのサンプルとしてサンプリングする行数を「Approximate sample size」フィールドで5,000に設定します。なお、これは、ユーザーインターフェースに表示するためにサンプリングされる行数(ステップ1)とは異なります。より多くの行を含むデータをエクスポートするには、この数を増やすか、ステップ3を削除することができます。
ステップ4、5、および6はSageMaker Data Wranglerカスタムトランスフォームを使用しています。カスタムトランスフォームを使用すると、Data Wranglerフロー内で独自のPythonコードまたはSQLコードを実行することができます。カスタムコードは4つの方法で記述することができます:
- SQLを使用して、データセットを変更する
- Pythonで、PySparkデータフレームとライブラリを使用して、データセットを変更する
- Pythonで、pandasデータフレームとライブラリを使用して、データセットを変更する
- Pythonで、ユーザー定義関数を使用して、データセットの列を変更する
Python(pandas)の手法は、データセットがメモリに収まり、単一のインスタンスでのみ実行できるため、効率的にスケールする能力が制限されます。大きなデータセットでPythonで作業する場合は、Python(PySpark)またはPython(ユーザー定義関数)の手法を使用することをおすすめします。SageMaker Data Wranglerは、PySparkやPandasを知らなくてもApache Sparkプラグインと同様のパフォーマンスを提供するため、Pythonユーザー定義関数を最適化します。Databricks SQL Serverless DBTのテストからの5つの教訓。このソリューションをできるだけアクセス可能にするため、この記事では純粋なPythonで書かれたPythonユーザー定義関数を使用しています。
詳細を表示するにはStep 4(PII列を作成する)を展開してください。このステップでは、複数の列から異なるタイプのPIIデータを結合し、新しい列pii_col
に保存する単一のフレーズに結合します。次のテーブルには、データを示す例の行が表示されます。
customer_name | customer_job | billing_address | customer_email |
---|---|---|---|
Katie | ジャーナリスト | 19009 Vang Squares Suite 805 | [email protected] |
これは、「Katieはジャーナリストで、19009 Vang Squares Suite 805に住んでおり、[email protected]にメールできる」というフレーズに結合されます。このフレーズはpii_col
に保存され、この記事ではルーレットに対するターゲット列として使用されます。
ステップ5(レッドアクションの準備)は、レッドアクションする列(pii_col
)を受け取り、効率的なAmazon Comprehendでのレッドアクションに対応する新しい列(pii_col_prep
)を作成します。異なる列からPIIをレッドアクションする場合は、このステップの入力列フィールドを変更できます。
Amazon Comprehendを使用してデータを効率的にレッドアクションするには、2つの要素を考慮する必要があります。
- PIIの検出コストは単位ごとに定義され、1ユニット= 100文字であり、各ドキュメントに対して3ユニットの最小料金がかかります。表形式のデータは通常、セルごとに少量のテキストを含むため、多くの繰り返し関数呼び出しによるオーバーヘッドの蓄積を避け、送信されるデータが常に3ユニットの最小値を超えるようにするために、複数のセルからテキストを結合してAmazon Comprehendに送信することが一般的により時間とコスト効率的です。
- SageMaker Data Wranglerフローのステップの1つとしてレッドアクションを実行しているため、Amazon Comprehendを同期的に呼び出します。 Amazon Comprehendは、同期関数呼び出しごとに100 KB(100,000文字)の制限を設定しているため、送信するテキストがその制限内に収まるようにする必要があります。
これらの要素を考慮して、ステップ5では、各セルのテキストの末尾に区切り文字列を追加してAmazon Comprehendに送信するデータを準備します。区切り文字には、レッドアクションされる列に含まれない任意の文字列を使用できます(理想的には、Amazon Comprehendの文字数に含まれる文字数が少ない文字列を使用します)。このセル区切りを追加することで、Amazon Comprehendへの呼び出しを最適化でき、ステップ6でさらに詳しく説明します。
Note that if the text in any individual cell is longer than the Amazon Comprehend limit, the code in this step truncates it to 100,000 characters (roughly equivalent to 15,000 words or 30 single-spaced pages). Although this amount of text is unlikely to be stored in in a single cell, you can modify the transformation code to handle this edge case another way if needed.
ステップ6(PIIの塗りつぶし)は、入力として塗りつぶす列名(pii_col_prep
)を受け取り、塗りつぶされたテキストを新しい列(pii_redacted
)に保存します。Pythonのカスタム関数変換を使用する場合、SageMaker Data Wranglerは、パンダのseries(テキストの列)を入力として受け取り、同じ長さの修正されたパンダのseriesを返す空のcustom_func
を定義します。以下のスクリーンショットは、PIIの塗りつぶしステップの一部を示しています。
関数custom_func
には2つのヘルパー(内部)関数が含まれています:
make_text_chunks
– この関数は、シリーズ内の個々のセルのテキスト(デリミタを含む)をより長い文字列(チャンク)に連結して、Amazon Comprehendに送信する作業を行います。redact_pii
– この関数はテキストを入力として受け取り、Amazon Comprehendを呼び出してPIIを検出し、見つかったPIIを塗りつぶしたテキストを返します。塗りつぶしは、PIIのテキストを角括弧内に見つかったPIIのタイプで置き換えることによって行われます。たとえば、John Smithは[名前]で置き換えられます。この関数は、PIIを任意の文字列、空の文字列(““)を含むように置き換えるために変更することもできます。また、各PIIのエンティティの信頼スコアをチェックし、特定の閾値を超える場合にのみ塗りつぶすように関数を変更することもできます。
内部関数が定義された後、custom_func
はそれらを使用して塗りつぶしを行います。次のコード抜粋に示すように、塗りつぶしが完了すると、チャンクを元のセルに戻し、それをpii_redacted
列に保存します。
# concatenate text from cells into longer chunks
chunks = make_text_chunks(series, COMPREHEND_MAX_CHARS)
redacted_chunks = []
# call Comprehend once for each chunk, and redact
for text in chunks:
redacted_text = redact_pii(text)
redacted_chunks.append(redacted_text)
# join all redacted chunks into one text string
redacted_text = ''.join(redacted_chunks)
# split back to list of the original rows
redacted_rows = redacted_text.split(CELL_DELIM)
宛先ノードを追加する
変換の結果を確認するためには、SageMaker Data Wranglerでは、Amazon S3、SageMaker Pipelines、Amazon SageMaker Feature Store、およびPythonコードにエクスポートすることができます。塗りつぶされたデータをAmazon S3にエクスポートするためには、まず宛先ノードを作成する必要があります:
- SageMaker Data Wranglerフローダイアグラムで、PIIの塗りつぶしステップの横にあるプラスサインを選択します。
- 宛先の追加を選択し、Amazon S3を選択します。
- 変換されたデータセットの出力名を指定します。
- redactedデータファイルを保存するS3の場所を参照または入力します。
- 宛先の追加を選択します。
これでデータフローの最後に宛先ノードが表示されるはずです。
SageMaker Data Wranglerのエクスポートジョブを作成する
宛先ノードが追加されたので、データセットを処理するエクスポートジョブを作成できます:
- SageMakerデータラングラーで、「ジョブの作成」を選択します。
- 追加した宛先ノードがすでに選択されているはずです。次に進みます。
- 他のオプションはデフォルトのままにして、「実行」を選択します。
これにより、SageMaker Processingジョブが作成されます。ジョブのステータスを表示するには、SageMakerコンソールに移動します。ナビゲーションペインで「Processing」セクションを展開し、「Processing jobs」を選択します。デフォルトのエクスポートジョブ設定(2つのml.m5.4xlargeインスタンス)を使用して、対象の列の116,000セルをレダクトするには、おおよそ8分かかり、約$0.25のコストがかかります。ジョブが完了したら、Amazon S3からレダクトされた列の出力ファイルをダウンロードします。
後片付け
SageMaker Data Wranglerアプリケーションはml.m5.4xlargeインスタンス上で実行されます。シャットダウンするには、SageMaker Studioでナビゲーションペインで「実行中のターミナルとカーネル」を選択します。「RUNNING INSTANCES」セクションで、Data Wranglerとラベル付けされたインスタンスを見つけ、横にあるシャットダウンアイコンを選択します。これにより、インスタンス上で実行されているSageMaker Data Wranglerアプリケーションがシャットダウンされます。
まとめ
この記事では、SageMaker Data WranglerとAmazon Comprehendを使用してMLデータセットからPIIデータをレダクトする方法について説明しました。SageMaker Data Wranglerフローをダウンロードして、今日からタブularデータからPIIをレダクトできます。
SageMaker Data Wranglerカスタムトランスフォーメーションを使用してMLOpsワークフローを強化する他の方法については、NLTKおよびSciPyを使用したAmazon SageMaker Data Wranglerでのカスタムトランスフォーメーションの作成をチェックしてください。データの準備オプションについては、Amazon AthenaまたはAmazon Redshiftからのテキストのリアクト、翻訳、および分析方法を説明するブログ記事シリーズをチェックしてください。
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