MLTransformを使用したデータの前処理
このページでは、MLTransform
クラスを使用して、機械学習(ML)ワークフローのデータを前処理する方法について説明します。Apache Beamは、トレーニングおよび推論用のデータを前処理するためのデータ処理変換のセットを提供します。MLTransform
クラスは、さまざまな変換を1つのクラスにラップし、ワークフローを簡素化します。利用可能な変換の完全なリストについては、このページの変換セクションを参照してください。
MLTransformを使用する理由
MLTransform
を使用すると、トレーニングと推論の両方に同じ前処理ステップを使用できるため、結果の一貫性が保証されます。- 大規模言語モデル(LLM)を使用して、テキストデータに関する埋め込みを生成します。
MLTransform
はデータセットに対してフルパスを実行できます。これは、データセット全体を分析した後にのみ単一の要素を変換する必要がある場合に役立ちます。たとえば、MLTransform
を使用すると、次のタスクを実行できます- データセット全体の最小値と最大値を使用して入力値を正規化します。
- 観測されたデータ分布に基づいて、
floats
をバケットを割り当てることでints
に変換します。 - データセット全体で語彙を生成することにより、
strings
をints
に変換します。 - TF-IDFの重みを計算するために、すべてのドキュメント内の単語の出現回数をカウントします。
サポートと制限
- Apache Beam Python SDKバージョン2.53.0以降で利用可能です。
- Python 3.8、3.9、3.10、および3.11をサポート
- デフォルトウィンドウを使用するパイプラインでのみ利用可能です。
変換
MLTransform
を使用して、テキスト埋め込みを生成し、さまざまなデータ処理変換を実行できます。
テキスト埋め込み変換
MLTranform
を使用して、ベクターデータベースにデータをプッシュしたり、推論を実行するために使用できる埋め込みを生成できます。
変換名 | 説明 |
---|---|
SentenceTransformerEmbeddings | Hugging Faceのsentence-transformers モデルを使用して、テキスト埋め込みを生成します。 |
VertexAITextEmbeddings | Vertex AIテキスト埋め込みAPIのモデルを使用して、テキスト埋め込みを生成します。 |
TFTを使用するデータ処理変換
MLTransform
クラスで利用可能な次の変換セットは、TensorFlow Transforms(TFT)ライブラリからのものです。TFTは、機械学習タスク用の特殊な処理モジュールを提供します。これらの変換については、TensorFlowドキュメントのモジュール:tftを参照してください。
変換名 | 説明 |
---|---|
ApplyBuckets | TensorFlowドキュメントのtft.apply_buckets を参照してください。 |
ApplyBucketsWithInterpolation | TensorFlowドキュメントのtft.apply_buckets_with_interpolation を参照してください。 |
BagOfWords | TensorFlowドキュメントのtft.bag_of_words を参照してください。 |
Bucketize | TensorFlowドキュメントのtft.bucketize を参照してください。 |
ComputeAndApplyVocabulary | TensorFlowドキュメントのtft.compute_and_apply_vocabulary を参照してください。 |
DeduplicateTensorPerRow | TensorFlowドキュメントのtft.deduplicate_tensor_per_row を参照してください。 |
HashStrings | TensorFlowドキュメントのtft.hash_strings を参照してください。 |
NGrams | TensorFlowドキュメントのtft.ngrams を参照してください。 |
ScaleByMinMax | TensorFlowドキュメントのtft.scale_by_min_max を参照してください。 |
ScaleTo01 | TensorFlowドキュメントのtft.scale_to_0_1 を参照してください。 |
ScaleToGaussian | TensorFlowドキュメントのtft.scale_to_gaussian を参照してください。 |
ScaleToZScore | TensorFlowドキュメントのtft.scale_to_z_score を参照してください。 |
TFIDF | TensorFlowドキュメントのtft.tfidf を参照してください。 |
I/O要件
MLTransform
クラスへの入力はディクショナリである必要があります。MLTransform
は、変換された要素を含むBeamRow
オブジェクトを出力します。- 出力
PCollection
は、スキーマPCollection
です。出力スキーマには、変換された列が含まれています。
アーティファクト
アーティファクトは、データ変換によって作成された追加のデータ要素です。アーティファクトの例としては、ScaleTo01
変換からの最小値と最大値、またはScaleToZScore
変換からの平均と分散などがあります。
MLTransform
クラスでは、write_artifact_location
パラメーターとread_artifact_location
パラメーターによって、MLTransform
クラスがアーティファクトを作成するか、アーティファクトを取得するかが決定されます。
書き込みモード
write_artifact_location
パラメーターを使用すると、MLTransform
クラスはデータセットで指定された変換を実行し、これらの変換からアーティファクトを作成します。アーティファクトは、write_artifact_location
パラメーターで指定した場所に保存されます。
書き込みモードは、後で使用するために変換の結果を保存する場合に役立ちます。たとえば、異なるデータセットに同じ変換を適用する場合は、書き込みモードを使用して、変換パラメーターの一貫性を確保します。
次の例は、書き込みモードの動作を示しています。
ComputeAndApplyVocabulary
変換は、データセット全体で生成された語彙を含む語彙ファイルを生成します。語彙ファイルは、write_artifact_location
パラメーター値で指定された場所に保存されます。ComputeAndApplyVocabulary
変換は、語彙のインデックスを語彙ファイルに出力します。ScaleToZScore
変換は、データセット全体の平均と分散を計算し、その平均と分散を使用してデータセット全体を正規化します。write_artifact_location
パラメータを使用すると、これらの値はwrite_artifact_location
パラメータ値で指定された場所にtensorflow
グラフとして保存されます。読み取りモードでこれらの値を再利用して、今後の変換で正規化に同じ平均と分散が使用されるようにすることができます。
読み取りモード
read_artifact_location
パラメータを使用する場合、MLTransform
クラスは、read_artifact_location
パラメータで指定された値にアーティファクトが存在することを期待します。このモードでは、MLTransform
はアーティファクトを取得し、変換で使用します。読み取りモードを使用すると、変換がアーティファクトに保存されるため、変換を指定する必要はありません。
アーティファクトワークフロー
次のシナリオは、アーティファクトの使用例を示しています。
機械学習モデルをトレーニングする前に、MLTransform
をwrite_artifact_location
パラメータとともに使用します。MLTransform
を実行すると、データセットを前処理する変換が適用されます。変換により、write_artifact_location
パラメータ値で指定された場所に保存されるアーティファクトが生成されます。
前処理後、変換されたデータを使用して機械学習モデルをトレーニングします。
トレーニング後、推論を実行します。新しいテストデータを使用し、read_artifact_location
パラメータを使用します。この設定を使用することで、テストデータがトレーニングデータと同じ前処理ステップを経るようにします。読み取りモードでは、MLTransform
を実行すると、read_artifact_location
パラメータ値で指定された場所から変換アーティファクトがフェッチされます。MLTransform
はこれらのアーティファクトをテストデータに適用します。
このワークフローは、トレーニングデータとテストデータの両方に対して、前処理ステップの一貫性を提供します。この一貫性により、モデルはテストデータを正確に評価し、モデルのパフォーマンスの整合性を維持できます。
MLTransformを使用したデータの前処理
MLTransform
変換を使用してデータを前処理するには、次のコードをパイプラインに追加します
import apache_beam as beam
from apache_beam.ml.transforms.base import MLTransform
from apache_beam.ml.transforms.tft import <TRANSFORM_NAME>
import tempfile
data = [
{
<DATA>
},
]
artifact_location = tempfile.mkdtemp()
<TRANSFORM_FUNCTION_NAME> = <TRANSFORM_NAME>(columns=['x'])
with beam.Pipeline() as p:
transformed_data = (
p
| beam.Create(data)
| MLTransform(write_artifact_location=artifact_location).with_transform(
<TRANSFORM_FUNCTION_NAME>)
| beam.Map(print))
次の値を置き換えます
- TRANSFORM_NAME: 使用する変換の名前。
- DATA: 変換する入力データ。
- TRANSFORM_FUNCTION_NAME: コード内で変換関数に割り当てる名前。
その他の例については、データ処理のためのMLTransformを変換カタログで参照してください。
最終更新日:2024/10/31
お探しのものはすべて見つかりましたか?
すべて役に立ち、わかりやすかったですか?変更したい点はありますか?ぜひ教えてください!