在實際的機器學習開發中,開發者通常需要對數據集進行大量的耗時費力的預處理過程,以適應各種不同標準的機器學習模型(例如神經網絡)。這些預處理過程根據待解問題的不同和原始數據的組織形式而各不相同,包括不同格式之間的轉換,分詞、詞干提取和形成詞匯,以及包括歸一化在內的各種數值操作等等。
實際上,數據的預處理已經成為了機器學習開發中無法回避的一個難題。
針對這一難題,谷歌于 22 日通過開發者博客正式發布了一個基于 TensorFlow 的全新功能組件 —— tf.Transform。它允許用戶在大規模數據處理框架中定義預處理流水線(preprocessing pipelines),同時用戶還可以將這些流水線導出,并將其作為 TensorFlow 計算圖(TensorFlow graph)的一部分。用戶可以通過組合 Python 函數來定義該流水線,然后在 Apache Beam 框架下通過 tf.Transform 執行。(注:Apache Beam 是一個用于大規模的、高效的、分布式的數據處理的開源框架)目前,基于 Apache Beam 框架的流水線可以在 Google Cloud Dataflow 平臺上運行,并計劃在未來支持更多的平臺(可能包括 Apache Apex,Apache Flink 和 Apache Spark 等)。值得一提的是,通過 tf.Transform 導出的 TensorFlow 計算圖還可以在模型預測階段將這種數據預處理步驟復用(例如,通過 Tensorflow Serving 提供模型時)。
另一方面,開發者最終在產品形態運行機器學習模型時通常還會遇到“訓練服務偏差”(training-serving skew),即由于服務中處理的數據與模型訓練中使用的數據存在一定的差異,從而造成的預測質量下降。
面對這一問題,此次新發布的 tf.Transform 組件還能保證預處理過程的零偏差,即保證服務中的數據預處理和訓練中的數據預處理執行完全相同的操作,特別是當模型訓練和服務運行在不同的框架時,例如訓練在 TensorFlow,服務在 Apache Beam 的情況。
除了便于數據的預處理之外,tf.Transform 還允許用戶計算其數據集的統計概要(summary statistics)。對于每個機器學習項目的開發者而言,深刻理解其數據都非常重要,因為任何對底層數據做出的錯誤假設都可能會產生一些微妙的錯誤。通過更簡單和高效地計算數據的統計概要,tf.Transform 可以幫助開發者更好地檢查他們關于原始數據和預處理數據的假設。
最后,谷歌在博客中表示,對于 tf.Transform 的發布他們感到非常激動,他們真誠地希望 tf.Transform 可以幫助 TensorFlow 開發者們更方便地預處理數據,以及更好地理解這些數據。
開源地址:https://github.com/tensorflow/transform