当我们将机器学习应用于真实世界数据集时,我们需要花费大量工作来将数据处理成适合标准机器学习模型(比如神经网络)的格式。这种预处理(preprocessing)有许多不同的形式——从格式之间的转换,到文本的标记化(tokenizing)和提干(stemming)以及形成词汇表,再到执行各种数值运算(例如归一化)。
今天,我们宣布发布 tf.Transform,这是一个 TensorFlow 库,可以让用户定义预处理流程(preprocessing pipelines)和使用大规模数据处理框架运行这些流程,同时还能让用户以一种将这些流程作为 TensorFlow graph 一部分的方式运行从而利用这些流程。用户可以通过将模块化的 Python 函数组合到一起来定义一个流程,然后 tf.Transform 会使用 Apache Beam 来执行它。Apache Beam 是一个用于大规模数据的、高效的、分布式的数据处理框架。通过 Apache Beam 计划好的对其它框架的运行支持,Apache Beam 流程还能运行在 Google Cloud Dataflow 上。通过 tf.Transform 导出的 TensorFlow graph 可以让预处理步骤在训练好的模型被用于预测时被复制,比如当使用 TensorFlow Serving 将模型投入应用时。
相关链接:
tf.Transform:https://github.com/tensorflow/transform
Apache Beam:https://beam.apache.org/
Google Cloud Dataflow:https://cloud.google.com/dataflow
TensorFlow Serving:https://tensorflow.github.io/serving/
在生产中运行机器学习模型时会常常遇到一个问题:「训练-应用偏差(training-serving skew)」,参阅机器之心文章《谷歌机器学习应用的四十三条经验法则》。「训练-应用偏差」是指当投入产品应用阶段的模型所收到的数据在某些方面不同于该模型在训练过程中所使用的数据时,预测质量出现下降的情况。tf.Transform 通过保证应用阶段的变换和训练阶段所执行的变换完全相同,能够确保在预处理过程中不会出现偏差,这不同于训练阶段和应用阶段的预处理在两个不同的环境中分别实现的情况(比如,分别在 Apache Beam 和 TensorFlow 环境中)。
除了方便预处理之外,tf.Transform 允许用户为他们的数据集计算汇总的统计。在每一个机器学习项目中,理解数据都是非常重要的,因为如果对基本数据做出了错误的假设,那么就会产生一些微妙的错误。为了使这种汇总统计的计算简单有效,tf.Transform 允许用户检查他们关于原始数据和预处理后的数据的假设。
tf.Transform 允许用户定义预处理流程。用户能够在 TensorFlow 训练中具体化要预处理的数据,也能导出一个 tf.Transform graph,其能将转换过程编码为 TensorFlow graph。然后这一转换图(transformation graph)可被整合进用于推断的模型图。
我们非常高兴能把这个最新版本添加到 TensorFlow 生态系统中,我们希望用户发现它对预处理、理解数据有所帮助。
致谢
我们感谢以下 tf.Transform 成员为该项目所作出的贡献: Clemens Mewald, Robert Bradshaw, Rajiv Bharadwaja, Elmer Garduno, Afshin Rostamizadeh, Neoklis Polyzotis, Abhi Rao, Joe Toth, Neda Mirian, Dinesh Kulkarni, Robbie Haertel, Cyril Bortolato and Slaven Bilac。也感谢 TensorFlow、TensorFlow Serving 和 Cloud Dataflow 团队的支持。
原文地址:https://research.googleblog.com/2017/02/preprocessing-for-machine-learning-with.html