写点什么

人均关注和时长均增长 50%,你的机器学习平台是这么做的吗?

  • 2019-09-09
  • 本文字数:5357 字

    阅读完需:约 18 分钟

人均关注和时长均增长50%,你的机器学习平台是这么做的吗?

导读

在美图公司社交战略部署下,推荐算法存在多方面的挑战,为了解决这些挑战,我们团队从工具和算法两个方面分别开展了工作。


在工具上,我们开发了 MML 机器学习平台,提供从数据分析到模型在线服务的全流程开发及部署支持。基于 Tensorflow ,我们内部自研了 Bamboo 建模框架,提供了丰富的 SOTA 模型,常用 Layers 以及其它建模所需的组件,模型离线评估等,让算法工程师专注网络结构的设计。


在算法上,我们将推荐排序的演进划分成四个阶段,从线性模型+大规模人工组合特征,到非线性模型+少量人工特征,再到深度学习模型+用户行为序列特征,最后是从单目标优化到多目标优化。推荐排序四个阶段的演进,又可以归纳为三个方面的工作,分别是模型优化、特征工程,以及多目标优化。


在过去的一年,我们在美拍,累计提升人均关注 65.06%,人均时长 56.07%。美图秀秀,累计提升人均关注 14.93%,人均时长 10.33%。在这一年的实践中,我们进行了很多的尝试,在这里也和大家分享我们过去的一些尝试和踩过的一些坑,希望能让大家有所收获。

推荐算法的技术挑战

目前,美图公司旗下拥有多款社交产品,比如美图秀秀社区、美拍短视频社区等。针对这几款社交产品,不管在内容上还是产品背景上都有着自己的特点。比如美图秀秀从工具向社区转型,如何让用户进行内容消费并且产生持续消费成了我们需要重点考虑的问题。而对于美拍,用户本身有很强的内容消费属性,在留存的基础上如何吸引更多的用户是当前主要的考虑点。


针对多个不同形态的社交产品,推荐算法存在以下三个方面的挑战:


  1. 场景多,人力少:多款社交化产品合计十余个推荐场景,在当前的人力下,工作量是比较艰巨的;

  2. 场景、用户差异大:不同场景下,用户的消费习惯和使用意图,以及内容的属性存在比较大的差异,比如,美图秀秀社区以图文为主,美拍以短视频为主,导致不同场景下的模型不能简单复用;

  3. 产品、目标迭代快:用户的生活习惯不是一成不变的,我们的社交产品也时刻处在不同的发展阶段,需要根据用户的诉求,以及我们产品的发展需求及时调整推荐算法的优化目标。


为了解决上述挑战,我们分别从工具和算法两个方面入手。在工具上,去年我们开发了 MML 机器学习平台,提供从日志处理到模型在线服务的一站式解决方案。在算法上,我们在美图推荐场景上进行了良好的实践,针对目前存在的问题以及产品的需要,进行了很多有益的尝试,也获取到了一些经验。下面我将从工具和算法这两方面和大家分享下。

工具篇:MML 机器学习平台

MML,全称 Meitu Machine Learning Platform,是一站式机器学习服务平台,为用户提供从数据预处理,特征与样本生产,模型构建、训练与评估以及模型在线服务的全流程开发及部署支持。其平台架构图见图一。



图一 平台架构图


MML 机器学习平台包括三个主要模块:


  1. Spark Feature:负责数据分析、特征工程,以及样本拼接。 Spark Feature 基于 Spark SQL 进行开发,用户通过编写 SQL 以及配置样本拼接 JSON ,即可实现特征以及样本生产的工作;

  2. Bamboo:基于 tensorflow 开发,负责模型训练、离线效果评估。 Bamboo 实现了推荐领域大量的 State of the Art 的模型,并且提供了丰富的 Layers ,以简化算法同学的建模工作。在训练方面支持多种并行训练方式,同时通过对代码的优化实现了较高的训练效率;

  3. MML Serving:负责模型的在线服务。底层通过 C++ 实现,在内存和并发上做了大量的优化,支持同时请求多个模型,以及在线热更。灵活的架构让我们能够很方便地接入各种机器学习框架训练的模型。

Bamboo

如果说 Spark Feature 和 MML Serving 是 MML 机器学习平台的手和脚,那么 Bamboo 就是 MML 机器学习平台的大脑。 Bamboo 负责机器学习模型的训练和效果评估。我们底层采用 tensorflow 开发,对外提供封装好的组件。总的来说, Bamboo 具有以下优点:


  1. 便捷:内置了近几年推荐领域的 SOTA 模型,以及建模常用的 Layers ,并且内置了部分公共数据集的访问接口,能够支持从本地磁盘,以及 HDFS 读取训练数据。数据、训练、模型评估、模型导出通过配置化实现,算法同学可以专注于模型的设计;

  2. 高效:采用 tensorflow 底层 API 和 Estimator 来实现,并遵循 tensorflow 官方性能优化指南,最大限度提升模型训练效率,相比 Keras 以及内部未优化版本,单卡训练效率有数倍提升。同时,能够支持同步、异步等多种并行训练方案;

  3. 可扩展: Bamboo 的最初的设计目标是作为 tensorflow 的补充,因此在整个设计过程充分考虑了扩展性,能够支持采用 Bamboo 提供的 API 或者使用 tensorflow 原生 API 。良好的分层设计,方便使用方进行模块的复用和重构。

MML Serving

MML Serving 决定了模型能否上线提供服务以及在线服务的效率。去年下半年,我们上线了采用 C++ 开发的新版 MML Serving ,通过内存和并发的优化,让我们整体预估耗时减少了 50% ,服务初始化耗时减少了 50% ,内存使用量降低了 77% 。通过压测发现,服务在高并发下,整体表现稳定。另外良好的架构设计,可以很方便接入各种第三方机器学习库,目前已经内置了对 tensorflow 和 xgboost 模型的支持。

平台收益


MML 机器学习平台上线后,生产力得到了极大的释放。可以简单归纳为四个方面的收益:


  1. 开发效率的显著提升:平台上线前,算法同学需要同时开发样本拼接、模型训练、在线服务等多个模块的代码,平台上线后,算法同学可以专注于模型网络结构的设计;

  2. 模型迭代周期显著降低,模型调研的范畴大幅扩大:平台上线前,算法同学需要花费较多的精力在工程模块的开发上面,而且只能在几个固定的算法框架下进行一些有限的尝试。新框架不仅减少了算法同学的工程负担,同时因为框架的灵活性,使得算法的调研不再局限于几个固定的模式,模型迭代效率得到了极大的提升;

  3. 机器成本:新平台效率上的提升,也同样体现在机器资源的节约上面,在美拍热门排序上,接入新平台后,机器节约了一半;

  4. 经验沉淀:此前各个业务维护自己的模型代码,经验很难进行交流和复用。新平台很好地解决了这部分问题。

算法篇:美图推荐排序实践


工具的价值落地到业务中,需要通过算法来实现。美图推荐排序算法大致可以分成四个阶段:第一个阶段是以 LR 为主的线性模型,组合大规模人工特征。第二个阶段发展成了以深度学习为主的非线性模型,以及少量的人工特征。再然后,为了减少人工特征工程的工作,我们开始调研以用户行为序列为主的原始特征,此时线上的主力模型是深度学习模型以及用户行为序列特征。最后一个阶段我们从单目标模型演进到了现在的多目标模型。排序模型四个阶段的演进可以归纳为模型、特征、优化目标三个方面的工作,下面我将和大家一一进行介绍。

美图推荐排序实践 —— 模型演进


2018 年,我们上线了第一个基于何向南在 SIGIR 2017 发表的 《Neural Factorization Machines for Sparse Predictive Analytics》 改进的模型 —— NFM-v4 。相比原论文,我们的主要改进点是通过一个线性变换,将变长稀疏的原始高维特征压缩到一个定长稠密的低维实数空间,从而屏蔽了模型在输入特征处理上的差异,可以将精力更多放在特征的挖掘上。


但是,将几十万维的高维空间直接压缩到几百维,存在一定的信息损失,因此,在 NFM-v4 的基础上,我们通过将部分高维 id 特征单独建模,比较好的解决了这个问题,在业务指标上,也有不错的效果提升,美拍的人均播放时长增加了 4.75%,人均有效行为数增加了 3.45%。


不过, NFM 存在的一个问题是, bi-interaction pooling 认为特征二阶交叉的权重是相等的,这种假设在多数场景下并不符合数据的真实分布。因此,在 NFM 的基础上,我们提出了 Neural Field weighted Factorization Machines(NFwFM) 模型,通过引入一个权重向量,来建模二阶交叉特征的权重。通过二阶向量不等权相加,业务指标整体提升较为明显。其中美拍人均播放时长增加 3.78% ,播放用户数增加 1.74% ,美图秀秀点击率提升了 5.689% ,人均使用时长增加 2.53% ,新用户点击率增加 2.701% 。


美图推荐排序实践 —— 特征工程

从 LR 升级到 NFwFM ,我们虽然减少了大量的特征组合上的工作,但是,如何从数据中挖掘对当前业务有效的特征?如何进行特征选择?依旧占据了我们的主要精力。去年,工业界和学术界,都发表了大量关于 User Behaviors Sequence 建模的新工作,随后,我们也开始跟进这一方面的工作,并在我们的业务中进行了尝试,通过端到端的建模,减少我们在特征工程上的工作。


目前,我们主要尝试了三种用户行为序列建模的方法,包括 Sum/Mean Pooling 、 RNN 、 Attention 等。在我们的业务场景下, RNN 的离线效果并不理想,原因推测是用户点击 feed 的先后顺序并不存在某种固定的模式,而主要取决于用户对所推荐 feed 的偏好,此外, RNN 的训练耗时也增加比较明显。


Sum/Mean Pooling 的方式虽然简单,但是在长行为序列建模上,效果相比其它两种方式表现得更加优异,因此是我们目前线上建模用户长序列特征的主要手段。


我们也对比了基于 Attention 的方法,离线效果相比 Sum/Mean Pooling 有略微提升,但是考虑到计算复杂度, Attention 只适合于序列长度较短的场景。


在美拍,美图秀秀社区,以及 push 业务都尝试了用户行为序列特征建模,各项业务指标均有较大幅度的提升,美拍人均时长提升了 12% ,秀秀的点击率提升了 5% , push 的到达点击率提升了 10% 。


随着模型和特征的复杂度显著增加,在线 inference 的耗时已经无法满足业务的要求。为了解决模型推理效率的问题,一方面我们通过 C++ 重写了模型在线推理服务—— MML Serving ,并在内存和并发上做了大量优化,使得 QPS 和稳定性有了大幅度提升。另一方面,我们实现了多塔网络的模型框架,通过离线预计算 user 和 feed 子网络的输出,并存到 DB 中,在线通过检索 DB 的方式,避免了实时计算 user 和 feed 子网络的庞大计算量。收益也是很明显,其中排序预估耗时从 100+ms 下降到了 7ms ,秀秀社区 push 服务预估耗时从单尾号 5 小时降低到了 3 分钟,到达点击率平均提升 23.9%。


美图推荐排序实践 —— 多目标优化

随着产品优化的深入,单一的模型优化目标已经无法准确刻画产品的迭代方向,为了满足多样化的产品需求,我们开始探索多目标优化。整个多目标优化的路线,大概经历了四个阶段:样本 reweight ,多目标模型,多模型,多个多目标模型。下面我将对这四个阶段的工作分别进行介绍。


多目标优化之样本 reweight


样本 reweight 是一种简单轻量的可用于解决多目标问题的做法,它借鉴了 imbalanced data 的典型做法,在保持模型优化的主目标不变的情况下,通过提高次要目标的正样本占比,来模拟多目标的联合概率分布。


我们在美拍和美图秀秀社区上,对增加关注目标进行了尝试。美拍在播放时长略微上涨的情况下,实现了人均关注 10.06%的提升。美图秀秀社区关注转化率提升了 12.03%,不过点击率也有略微的下降。


多目标优化之多目标模型



样本 reweight 的方式改变了样本的原始分布,导致主目标存在比较大的预估偏差。同时,因为次要目标是通过主目标的网络结构来实现,无法对各个目标的模型分别进行调优,模型结构优化存在比较大的局限性。因此,我们开始尝试多目标模型建模。


多目标模型通过共享底层的网络输入,实现信息共享,再根据每个目标的数据特点,分别构建各个目标的输出网络,得到每个目标的输出。


在美图的多个社交场景中,我们进行了尝试,并取得了比较大的在线提升。其中,在美拍双列 feed 流场景下,人均关注提升 11.43% ,人均播放时长提升 12.45% 。美图秀秀首页 feed 流,点击率提升 1.93% ,关注率提升 2.9% 。美图秀秀下滑 feed 流,关注率提升 9.3% ,人均时长提升 10.33% 。


多目标优化之多模型


虽然多目标模型在业务上取得了比较大的提升,但是仍然存在一些问题。典型的问题包括:


  1. 当不同任务的目标相关性较弱,或者损失函数的输出值范围差异较大时,多目标模型的调优存在比较大的困难;

  2. 使用多目标模型,会导致不同目标的优化存在比较大的耦合,延迟整体优化进度,在产品要求快速迭代的场景下,这种技术手段不一定能够很好的满足业务需求。


为了解决多目标模型存在的一些问题,我们通过拆分多目标模型的各个目标,得到多个单目标模型,并对每个单目标模型分别进行优化。在美拍双列 feed 流场景下,我们进行了相应的尝试,在人均时长不变的情况下,人均关注提升了 2.98% 。通过进一步调整模型的优化目标,人均时长再次提升了 19.37% ,人均关注提升了 14.1% 。


多目标优化之多个多目标模型


当推荐场景的优化目标增加,多模型的方案会存在维护成本高,线上资源开销大,各个任务的模型无法利用其它任务的数据等问题。


综合多模型和多目标模型的优点,采用多个多目标模型是解决多目标任务的有效手段。在美拍场景下,通过同时优化关注、时长、播放等目标,人均关注提升 12.18% ,活跃留存提升 25.67% 。

未来规划

未来,我们将继续完善 MML 机器学习平台的建设,并计划对 Bamboo 项目进行开源。在算法上,我们开始了强化学习在推荐领域的调研,同时,对多目标建模、行为序列特征建模、以及 Embedding 技术等也将持续进行跟进和优化。期待后续能和大家有更多地探讨和交流。


作者简介


汤斌,美图高级算法专家,曾在腾讯任高级研究员,硕士毕业于哈尔滨工业大学。主要从事推荐算法,点击率预估以及自然语言处理方面的相关研究。在工业界的大规模推荐与排序算法实践上积累了丰富的经验。


2019-09-09 17:124418

评论

发布
暂无评论
发现更多内容

解决两大难题,TDengine 助力亿咖通打造自动驾驶技术典范

TDengine

数据库 tdengine 物联网

写作社区 2 周年,全员狂欢燥起来!

InfoQ写作社区官方

热门活动 InfoQ写作社区2周年

OneBlock | 区块链人才聚集地,面向全球的Substrate 开发者社区

One Block Community

技术社区 #区块链#

TiDB 6.0 发版:向企业级云数据库迈进

PingCAP

基于云服务器ECS搭建网页游戏《浪剑天下》

阿里云弹性计算

玩转ECS 游戏服务器

如何在云端重塑内容生产?来看这场虚拟人主持的发布会

阿里云CloudImagine

阿里云 音视频 视频剪辑 智能生产 视频云

EMQ 映云科技 & 阿里云推出“一站式工业数字化解决方案”,共建产业数据湖生态圈

EMQ映云科技

阿里云 开源 物联网 IoT emq

CESS:波卡生态去中心化数据存储的未来

One Block Community

区块链 云存储 去中心化存储 CESS

恒源云(Gpushare)_新功能上线,你确定不进来看看?

恒源云

GPU服务器 GPU算力

团队在线协作文档工具推荐

小炮

团队协作 文档协作

如何使用阿里云容器服务保障容器的内存资源质量

阿里巴巴云原生

大数据培训-Hive高频面试题分享

@零度

hive 大数据开发

幸运哈希值竞猜游戏系统开发方案

薇電13242772558

区块链 哈希值

3分钟了解Vue开发小程序的技术原理

FinClip

CityClub 北京站马上开始!线下沙龙等你来!

InfoQ写作社区官方

热门活动

Java培训-怎样通过 Bucket4j 提供速率限制

@零度

JAVA开发 Bucket4j

Redis Stream 专为队列而生,别再用 List 实现队列了

码哥字节

Redis Stream Redis 数据结构 4月月更

波卡动态 | Moonbeam 上第一个3D NFT项目宣布合作

One Block Community

区块链 以太坊 polkadot 波卡 Moonbeam

领域驱动设计(DDD)理论与方法

Java工程师

Java 程序员 互联网 DDD 架构设计

web前端培训-ES6 教程:全面了解 ES6 模块

@零度

前端 ES6

深度学习,如何选择GPU服务器?

Finovy Cloud

人工智能 深度学习 GPU服务器

2022年3月国产数据库大事记-墨天轮

墨天轮

数据库 TiDB 国产数据库 KingBase gbase8a

解读谷歌Pathways架构(一):Single-controller与Multi-controller

OneFlow

人工智能 机器学习 深度学习 架构 深度学习框架

入门Python之后还是搞不定面试、做不来项目,推荐读读这本书

图灵教育

Python 编程 程序员

MacOS 系统如何把PHP版本升级到 7.4或者更高的版本呢,今天教程来啦

CRMEB

Moonbeam 漏洞赏金计划,最高奖金 100 万美金!

One Block Community

区块链 波卡 Moonbeam

真的是最全的一致性hash环讲解了

Java工程师

Java 架构 分布式 算法 hash

FinClip 与 uniapp:轻应用平台与前端开发框架

FinClip

运维人必知必会的Zabbix核心命令

博文视点Broadview

一文搞懂Netty发送数据全流程 | 你想知道的细节全在这里

bin的技术小屋

网络编程 Netty Java’ 4月月更 Reactor多线程

招聘 | 多家区块链项目招募开发者!

One Block Community

区块链 招聘 波卡

人均关注和时长均增长50%,你的机器学习平台是这么做的吗?_AI&大模型_汤斌_InfoQ精选文章