Uber开源AI工具箱,免写程序就能训练和测试深度学习模型

Uber AI实验室开源发布训练和测试深度学习模型的AI工具箱Ludwig ,该工具箱创建于深度学习框架TensorFlow上,标榜不需要写程序就能完成模型的训练和测试工作,提供一系列的AI模型开发工具,像是通过可视化的方式,呈现评估模型、比较模型性能和预测结果,目前于GitHub平台以Apache License 2.0授权发布。

Uber表示,目前市面上有许多深度学习相关的函数库,像是TensorFlow、PyTorch、CNTK、MXNET,以及Chainer,Uber决定避免重复开发性质类似的工具,因而在这些开源函数库的根基上,打造AI开发工具箱Ludwig。 Uber曾开源发布在PyTorch上创建的深度机率程序语言Pyro,以及允许在多个GPU和计算机分散训练深度学习模型的框架Horovod。

近几年来,深度学习模型已被证实能够高效执行多种不同机器学习任务,包含计算机视觉、语音识别、自然语言处理等,而在Uber内部,深度模型也被用在多种任务中,像是客户服务、物体识别、优化地图、串流聊天沟通服务、预测和防范诈骗等,为了简化深度学习模型的测试和训练工作,AI工具箱Ludwig已经在Uber内部开发超过2年,主要用于Uber的多项项目,像是从驾驶人驾照萃取数据、从对话截取客户兴趣、预测餐点送达时间等。

Uber指出,Ludwig特别的地方是能够让非AI专家更容易理解深度学习模型,对于经验丰富的AI开发和研究人员而言,也能通过Ludwig缩短模型的开发周期,简化开发原型过程和处理串流数据的工作。

Uber将Ludwig设计为一种通用型的工具箱,主要用于处理新的机器学习问题时,能够简化模型开发和比较模型架构过程,设计的核心原则包含免写程序、具有通用、灵活性和扩展性,并能够通过可视化的方式,让开发者更能理解模型。在通用性的部分,Ludwig允许开发者使用CSV的表格文件和数据串行格式YAML配置文件,来训练深度学习模型,YAML配置文件能够加快模型原型设计的速度,将编码的时间从数小时缩短至数分钟,若有超过一个输出目标变量,Ludwig会执行多任务学习,也就是同时预测所有的输出。

而针对灵活和扩展性的部分,在模型定义中通常会包含额外的信息,特别是对每个特征属性预先处理信息的时候,每个特征属性都需要个别的编码器、解码器和训练参数,而编码和解码器也都需要个别的架构参数,在预先处理和训练的部分,Uber通过经验和现有的学术文献,为多种模型架构参数创建默认值,让新手也能训练复杂的模型,同时,能够个别设置模型配置文件的功能,提供AI专家在训练模型时有更多弹性。此外,每个在Ludwig训练的模型都能够保存,若开发者要用新数据执行模型得到预测结果时,就能重新加载模型。

其中,Ludwig一项主要的新概念是为特定的数据类型提供独立的编码和解码器,也就是说,每种数据类型都有特定的预先处理函数,像是文本、图像和类别(category),如此一来,Ludwig就能够提供高效率的模块化和可扩展架构,借由不同数据种类组件的组合,开发者可以用Ludwig训练多种类的任务,举例来说,文本编码器和类别解码器的组合,就能得到文本分类器,而链接图像编码器和文本解码器就能得到生成图像标题模型。 (图片来源:Uber)

除此之外,每个数据种类可以有超过一个的编码器和解码器,例如,文本类型的数据可以用卷积神经网络、递归神经网络或是其他编码器来编码,接着,开发者可以选定要用哪个编码器并设置超参数,过程中不需要写任何一行程序,目前Ludwig提供开发者训练模型,包含文本分类、物体分类、图像标题生成、时间预测、串行标注、回归、语言模型、机器翻译、问题回答等,对于没有经验的开发新手而言,该工具为他们提供开发用于多种应用案例模型的机会,而有经验的开发者,也能借由该工具箱研究更多新领域。

AI工具箱Ludwig目前的编码器和解码器支持二进制值、浮点数、类别、离散串行、集合、文本、图像和时间串行等数据种类,还有提供一些预先训练的模型,像是词向量模型,未来,Uber还预计支持更多数据种类。