当推荐遇到社交:美图的推荐算法设计优化实践

简介: 本文是美图高级算法专家汤斌的一篇文章,重点介绍了社交网络背景下推荐算法面临的挑战,以及应对的方法。

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


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


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


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


推荐算法的技术挑战


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


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


  1. 场景多,人力少:多款社交化产品合计十余个推荐场景,在当前的人力下,工作量是比较艰巨的;
  2. 场景、用户差异大:不同场景下,用户的消费习惯和使用意图,以及内容的属性存在比较大的差异,比如,美图秀秀社区以图文为主,美拍以短视频为主,导致不同场景下的模型不能简单复用;
  3. 产品、目标迭代快:用户的生活习惯不是一成不变的,我们的社交产品也时刻处在不同的发展阶段,需要根据用户的诉求,以及我们产品的发展需求及时调整推荐算法的优化目标。


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

工具篇:MML 机器学习平台


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

 

微信图片_20211201220428.jpg图一 平台架构图


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 模型的支持。


平台收益

微信图片_20211201220432.jpg

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

  1. 开发效率的显著提升:平台上线前,算法同学需要同时开发样本拼接、模型训练、在线服务等多个模块的代码,平台上线后,算法同学可以专注于模型网络结构的设计;
  2. 模型迭代周期显著降低,模型调研的范畴大幅扩大:平台上线前,算法同学需要花费较多的精力在工程模块的开发上面,而且只能在几个固定的算法框架下进行一些有限的尝试。新框架不仅减少了算法同学的工程负担,同时因为框架的灵活性,使得算法的调研不再局限于几个固定的模式,模型迭代效率得到了极大的提升;
  3. 机器成本:新平台效率上的提升,也同样体现在机器资源的节约上面,在美拍热门排序上,接入新平台后,机器节约了一半;
  4. 经验沉淀:此前各个业务维护自己的模型代码,经验很难进行交流和复用。新平台很好地解决了这部分问题。


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

微信图片_20211201220435.jpg

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


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

image.gif

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%。微信图片_20211201221016.jpg




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


从 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%。 

微信图片_20211201220438.jpg


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


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


多目标优化之样本 reweight


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


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


多目标优化之多目标模型



微信图片_20211201220446.jpg


样本 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 技术等也将持续进行跟进和优化。期待后续能和大家有更多地探讨和交流。


作者简介


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


相关文章
|
2天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
105 80
|
20天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
116 30
|
3天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
15 6
|
9天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
38 3
|
9天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
24 2
|
23天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
100 15
|
24天前
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
195 15
|
20天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。
|
24天前
|
算法
通过matlab分别对比PSO,反向学习PSO,多策略改进反向学习PSO三种优化算法
本项目使用MATLAB2022A版本,对比分析了PSO、反向学习PSO及多策略改进反向学习PSO三种优化算法的性能,主要通过优化收敛曲线进行直观展示。核心代码实现了标准PSO算法流程,加入反向学习机制及多种改进策略,以提升算法跳出局部最优的能力,增强全局搜索效率。
|
20天前
|
算法
通过matlab对比遗传算法优化前后染色体的变化情况
该程序使用MATLAB2022A实现遗传算法优化染色体的过程,通过迭代选择、交叉和变异操作,提高染色体适应度,优化解的质量,同时保持种群多样性,避免局部最优。代码展示了算法的核心流程,包括适应度计算、选择、交叉、变异等步骤,并通过图表直观展示了优化前后染色体的变化情况。