天天看点

谷歌发布全新TensorFlow库“tf.Transform” 简化机器学习数据预处理过程

在实际的机器学习开发中,开发者通常需要对数据集进行大量的耗时费力的预处理过程,以适应各种不同标准的机器学习模型(例如神经网络)。这些预处理过程根据待解问题的不同和原始数据的组织形式而各不相同,包括不同格式之间的转换,分词、词干提取和形成词汇,以及包括归一化在内的各种数值操作等等。实际上,数据的预处理已经成为了机器学习开发中无法回避的一个难题。

针对这一难题,谷歌于 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),即由于服务中处理的数据与模型训练中使用的数据存在一定的差异,从而造成的预测质量下降。

谷歌发布全新TensorFlow库“tf.Transform” 简化机器学习数据预处理过程

面对这一问题,此次新发布的 tf.transform 组件还能保证预处理过程的零偏差,即保证服务中的数据预处理和训练中的数据预处理执行完全相同的操作,特别是当模型训练和服务运行在不同的框架时,例如训练在 tensorflow,服务在 apache beam 的情况。

除了便于数据的预处理之外,tf.transform 还允许用户计算其数据集的统计概要(summary statistics)。对于每个机器学习项目的开发者而言,深刻理解其数据都非常重要,因为任何对底层数据做出的错误假设都可能会产生一些微妙的错误。通过更简单和高效地计算数据的统计概要,tf.transform 可以帮助开发者更好地检查他们关于原始数据和预处理数据的假设。

最后,谷歌在博客中表示,对于 tf.transform 的发布他们感到非常激动,他们真诚地希望 tf.transform 可以帮助 tensorflow 开发者们更方便地预处理数据,以及更好地理解这些数据。

本文作者:恒亮