使用 MLTransform 預處理資料
本頁說明如何使用 MLTransform
類別來預處理機器學習 (ML) 工作流程的資料。Apache Beam 提供一組資料處理轉換,用於預處理訓練和推論的資料。MLTransform
類別將各種轉換包裝在一個類別中,簡化您的工作流程。如需可用轉換的完整清單,請參閱本頁上的「轉換」區段。
為什麼使用 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 文件中的 Module: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
。輸出結構描述包含轉換後的資料行。
成品
成品 (Artifacts) 是由資料轉換所建立的額外資料元素。成品的範例包括來自 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
參數時,這些值會以tensorflow
圖形的形式儲存在write_artifact_location
參數值指定的位置。您可以重複使用讀取模式中的值,以確保未來的轉換使用相同的平均值和變異數進行正規化。
讀取模式
當您使用 read_artifact_location
參數時,MLTransform
類別會預期成品存在於 read_artifact_location
參數中提供的值中。在此模式下,MLTransform
會擷取成品並在轉換中使用它們。由於當您使用讀取模式時,轉換會儲存在成品中,因此您無需指定轉換。
成品工作流程
以下情境提供了成品的使用案例範例。
在訓練機器學習模型之前,您可以使用帶有 write_artifact_location
參數的 MLTransform
。當您執行 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
您是否找到您要找的所有內容?
這些資訊是否對您有用且清楚?您是否有任何想更改的地方?請告訴我們!