MLTransformを使用したデータの前処理

このページでは、MLTransformクラスを使用して、機械学習(ML)ワークフローのデータを前処理する方法について説明します。Apache Beamは、トレーニングおよび推論用のデータを前処理するためのデータ処理変換のセットを提供します。MLTransformクラスは、さまざまな変換を1つのクラスにラップし、ワークフローを簡素化します。利用可能な変換の完全なリストについては、このページの変換セクションを参照してください。

MLTransformを使用する理由

サポートと制限

変換

MLTransformを使用して、テキスト埋め込みを生成し、さまざまなデータ処理変換を実行できます。

テキスト埋め込み変換

MLTranformを使用して、ベクターデータベースにデータをプッシュしたり、推論を実行するために使用できる埋め込みを生成できます。

変換名説明
SentenceTransformerEmbeddingsHugging Faceのsentence-transformersモデルを使用して、テキスト埋め込みを生成します。
VertexAITextEmbeddingsVertex AIテキスト埋め込みAPIのモデルを使用して、テキスト埋め込みを生成します。

TFTを使用するデータ処理変換

MLTransformクラスで利用可能な次の変換セットは、TensorFlow Transforms(TFT)ライブラリからのものです。TFTは、機械学習タスク用の特殊な処理モジュールを提供します。これらの変換については、TensorFlowドキュメントのモジュール:tftを参照してください。

変換名説明
ApplyBucketsTensorFlowドキュメントのtft.apply_bucketsを参照してください。
ApplyBucketsWithInterpolationTensorFlowドキュメントのtft.apply_buckets_with_interpolationを参照してください。
BagOfWordsTensorFlowドキュメントのtft.bag_of_wordsを参照してください。
BucketizeTensorFlowドキュメントのtft.bucketizeを参照してください。
ComputeAndApplyVocabularyTensorFlowドキュメントのtft.compute_and_apply_vocabularyを参照してください。
DeduplicateTensorPerRowTensorFlowドキュメントのtft.deduplicate_tensor_per_rowを参照してください。
HashStringsTensorFlowドキュメントのtft.hash_stringsを参照してください。
NGramsTensorFlowドキュメントのtft.ngramsを参照してください。
ScaleByMinMaxTensorFlowドキュメントのtft.scale_by_min_maxを参照してください。
ScaleTo01TensorFlowドキュメントのtft.scale_to_0_1を参照してください。
ScaleToGaussianTensorFlowドキュメントのtft.scale_to_gaussianを参照してください。
ScaleToZScoreTensorFlowドキュメントのtft.scale_to_z_scoreを参照してください。
TFIDFTensorFlowドキュメントのtft.tfidfを参照してください。

I/O要件

アーティファクト

アーティファクトは、データ変換によって作成された追加のデータ要素です。アーティファクトの例としては、ScaleTo01変換からの最小値と最大値、またはScaleToZScore変換からの平均と分散などがあります。

MLTransformクラスでは、write_artifact_locationパラメーターとread_artifact_locationパラメーターによって、MLTransformクラスがアーティファクトを作成するか、アーティファクトを取得するかが決定されます。

書き込みモード

write_artifact_locationパラメーターを使用すると、MLTransformクラスはデータセットで指定された変換を実行し、これらの変換からアーティファクトを作成します。アーティファクトは、write_artifact_locationパラメーターで指定した場所に保存されます。

書き込みモードは、後で使用するために変換の結果を保存する場合に役立ちます。たとえば、異なるデータセットに同じ変換を適用する場合は、書き込みモードを使用して、変換パラメーターの一貫性を確保します。

次の例は、書き込みモードの動作を示しています。

読み取りモード

read_artifact_locationパラメータを使用する場合、MLTransformクラスは、read_artifact_locationパラメータで指定された値にアーティファクトが存在することを期待します。このモードでは、MLTransformはアーティファクトを取得し、変換で使用します。読み取りモードを使用すると、変換がアーティファクトに保存されるため、変換を指定する必要はありません。

アーティファクトワークフロー

次のシナリオは、アーティファクトの使用例を示しています。

機械学習モデルをトレーニングする前に、MLTransformwrite_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))

次の値を置き換えます

その他の例については、データ処理のためのMLTransform変換カタログで参照してください。