使用 MLTransform 预处理数据

此页面介绍如何使用 MLTransform 类为机器学习 (ML) 工作流预处理数据。Apache Beam 提供了一组数据处理转换,用于预处理用于训练和推理的数据。MLTransform 类将各种转换封装在一个类中,简化了您的工作流。有关可用转换的完整列表,请参阅本页上的 转换 部分。

为什么要使用 MLTransform

支持和限制

转换

您可以使用 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 要求

工件

工件是数据转换创建的附加数据元素。工件示例包括来自 ScaleTo01 转换的最小值和最大值,或来自 ScaleToZScore 转换的平均值和方差。

MLTransform 类中,write_artifact_locationread_artifact_location 参数决定 MLTransform 类是创建工件还是检索工件。

写入模式

当您使用 write_artifact_location 参数时,MLTransform 类将在数据集上运行指定的转换,然后从这些转换创建工件。工件存储在您在 write_artifact_location 参数中指定的 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 用于数据处理,位于 转换目录 中。