总览
美图个性化推荐主要应用于美拍APP,应用场景如下:
场景一:美拍直播,实时的在线个性化排序业务;
场景二:美拍热门(即美拍首页),典型的Feed流产品,用户可在热门Feed流中不断翻页滚动,探索和消费自己可能感兴趣的内容;
场景三:播放详情页下的“猜你喜欢”模块,用于推荐相似视频。
个性化推荐的目标是连接用户与内容、提升用户体验和优化内容生态。为了实现以上目标,算法需要理解内容,了解平台上可用于推荐的内容;同时也要理解用户,了解用户的兴趣爱好,从而进行精准推荐。
理解内容
理解内容,即内容的特征提取。美拍APP的内容是短视频,其特征可分为四部分:
基础特征,即视频的时长、分辨率、标签等基础属性;
视觉特征,即通过视觉算法,对人物的性别、颜值、年龄、身高,对视频的场景、对象等进行识别;
文本特征,美拍短视频有封面文字、标题、评论等文本信息,可以通过这些文本信息进行文本挖掘,提取一些关键字、topic、情感极性等文本特征;
交互特征,是用户与内容进行行为交互的产物,用户可以对某些内容进行点赞、评论、分享、播放等行为,通过对这些交互数据进行统计分析得到交互特征。
理解用户
对内容有一定理解之后,则要进一步理解用户,从而连接用户与内容。理解用户就是我们常说的用户画像建设,建设用户画像需要了解用户的自然属性,如用户的性别、年龄、所在城市;社会属性,如职业、婚姻状况等;以及最重要的兴趣属性,除了了解用户在平台上的兴趣和偏好,也要尽可能去探索用户在平台之外的兴趣爱好(打游戏、逛淘宝等)。
推荐流程
基于对内容和用户的理解可进行精准推荐。美图的推荐流程分为如下三个阶段:
召回阶段
推荐的本质是给不同的用户提供不同的内容排序。美拍APP上有数十亿个短视频,面对如此庞大的量级我们无法对用户计算所有内容的排序。通过统计召回、简单模型、图计算等筛选方式将内容的数量级降到几千至几百之后可以得到初步的推荐结果;
预估阶段
利用机器学习模型、结合超高维度和精细化的特征,以“用户-情境-物品”三个维度联合建模,得到预估模型,再对不同的目标进行预估;
排序阶段
在对目标进行预估之后,要对内容进行排序,从而决定可触达用户的排序。排序阶段会结合新颖性、多样性、准确性三个方面进行综合排序,最终将推荐结果呈现给用户。
在召回阶段,我们已经实施了基于热度、趋势、协同过滤、用户画像、内容、情境和社交关系等一系列召回方式,同时也实践了基于深度学习的召回方法。在预估阶段,较成熟的有大规模离线特征+LR、连续特征+GBDT,也实践了NFM、DCN等深度学习预估模型。
基于上述的推荐流程,推荐的整体架构如图6所示:
OFFLINE
主要是离线处理流程,对数据进行收集,并从数据出发进行数据清洗、数据标注、特征工程、模型训练、模型评估,最后生成离线特征、离线召回模型和离线排序模型;
NEARLINE
主要是对实时的数据流进行处理,通过获取实时日志,对数据流进行统计、效果监控、反作弊处理、特征更新以及对模型的增量训练,最终得到实时的召回模型和排序模型;
ONLINE
即引擎部分,对流量分流后进行召回、融合、排序,最终将推荐结果返回给应用端。
个性化推荐探索
推荐时效性
个性化推荐探索
天下武功,唯快不破。美图的用户数量逐步增长,而每个用户的兴趣点随着场景、时间也在同步发生变化。平台上新的内容源源不断,一个好的内容型产品往往不会错过任何热点。随着大环境的变化,推荐时效性显得尤为重要,对此推荐效果的提升也有很大优化空间。
召回时效性
如图7所示,首先建立一个实时更新的相似视频(I2I)索引;当用户播放视频或对其产生有效行为后,利用此索引,得到对应视频的相似视频进行召回。同时通过收集并分析用户的实时行为,计算用户对不同内容类型的实时偏好,并实时获取用户对应偏好类型的实时榜单内容, 从而获得实时召回的结果;
在引擎部分会融合实时及非实时的召回,并进行预估排序,最终将推荐结果综合呈现给用户。
预估时效性
预估时效性
假设预估模型多天内不更新,其离线评估效果的变化情况如图8所示。很明显,预估模型从第二天开始就有大幅度的效用下降,大概一周内会下降至66%左右。根据该图表可以看出,预估的时效性会随着时间迅速下降,所以在预估的时效性上有很大的优化空间。
为了优化预估时效性,我们选择了在线学习。如图9所示,以训练LR模型为例,左上是LR模型的预估方程和损失函数,在复杂的线上环境中,样本输入是随机的,即今后计算的方向以及步长也是随机的,实现在线学习可以简单采用在线梯度下降方式,但是选择这种简单的优化方式会造成模型更新的不稳定性和模型效用的不稳定性;同时简单的梯度更新方式会使得模型从旧样本学习到的有效信息被遗忘。
FTRL则是一种生成解析解的更新方式,详见左下的方程式,其中有四个项,第一个项保证参数随着梯度方向进行更新;第二个项保证模型的稳定性,使得每次更新的结果不会远离之前的结果;第三、四个项是常见的L1和L2正则约束;如图9右侧所示,为更新过程的伪代码。
如图10所示,基于上述FTRL的在线学习方法,我们设计了实时特征与在线学习的流程与架构。 Arachnia收集到日志之后,FeatureServer通过Kafka组件获取到实时日志,进行实时特征计算更新特征。TrainServer还会收集用户不同行为的日志,分正负样本,得到原始样本,再将原始样本与FeatureServer进行交互,索引到对应的特征列表,拼装成模型训练可以直接应用样本,供模型进行更新。
我们设计基于Parameter Server架构的模型更新,模型更新阶段从Parameter Server获取模型参数,对样本进行预估,计算参数的更新,并将更新结果回流到Parameter Server中。由于在复杂的线上环境中,不同行为的日志可能会产生不同程度的延迟,比如在短时间内都是正样本或负样本,这种情况下在线学习的稳定性会受到伤害。因此我们设计了Balance Cache,控制不同行为日志的消费速度使得样本的正负比例保持稳定。通过这样的架构设计,模型更新及特征更新都实现了秒级别更新。
推荐冷启动
冷启动问题分为用户冷启动和内容冷启动。用户冷启动顾名思义就是指当新用户来到平台时无相关的历史行为,而传统的推荐算法都是采用基于行为的模型,因此无法做出有效的推荐。同理,内容冷启动是指当新内容产生时,它还未在平台上进行有效的流量验证,新内容的精准分发也是一个值得探讨的问题。
用户冷启动
一个内容型平台的用户冷启动目标是将新增用户转化为消费用户,进而转化为留存用户。为了将新增用户转化成消费用户,需要匹配该用户的兴趣类型,进而推荐相关的内容,且推荐的内容要具有吸引眼球的能力,使用户能够在该内容上进行消费。
而吸引用户对内容进行消费的同时,要求推荐的内容具有一定的质量,能够使得用户在内容上进行互动并认可消费过的内容,从而转化为留存用户。
在预估阶段,使用服务端日志、客户端信息以及第三方数据做特征工程,提取用户特征(比如性别、年龄、职业)、情境特征(比如时间、位置、网络)和视频特征(比如标签、类型、音乐)。基于这些特征以及对应生成样本再进行模型训练,我们的模型训练会预估三个目标,即点击率、时长和留存率,并进行非线性的组合,对内容综合排序,最终呈现给用户。基于上述两个阶段的优化,新增用户留存率有了大幅度的提升。
内容冷启动
内容冷启动也是一个经典的E&E问题(Exploration & Exploitation),即对新内容和旧内容如何选择与权衡的问题。在做精准推荐时,是对旧内容进行有效挖掘的过程,但对于新内容而言,如果未能利用有效的方式将其曝光,那么我们的算法就无法挖掘到新的优质内容,无法形成一个健康的内容生态。
对于新内容而言,其转化率、点击率等效用函数的变化较不稳定,因此它的后验方差会比较大;而对于旧内容,对它的评估是比较稳定的,其后验方差比较低。换言之,对于新内容效用的预估偏差比较大,而对于旧内容的评估是比较稳定合理。针对这样的新旧内容该如何去选择?这就是经典的E&E问题、多臂老虎机问题(MAB)。
UCB
假设每个老虎机的中奖概率服从二项分布,在每次选择老虎机时,对中奖概率进行假设检验并得到置信区间,然后选择置信区间上界最高的一台老虎机;
Thompson采样
假设每台老虎机的中奖概率都服从β分布,在选择时对每台老虎机的中奖概率进行去拟合β分布,然后再从β分布中随机采样一个点作为此老虎机的预估分,最后选择预估分最高的一台老虎机。
为了解决内容冷启动问题,可将平台流量分成三部分:随机Explore、个性化Explore和个性化Exploit。其中,最大的一部分是个性化Exploit,即通过各种推荐模型,对内容进行有效的精准推荐。随机Explore和个性化Explore则是针对新内容的探索。此处需要关注两点:首先要根据场景和业务设计合理的流量比例;其次要结合业务目标对业务上的流量效用进行量化,如点击率、播放完整度、时长等。
当新内容产生时,经过MAB Score计算,再进行一定的过滤,当它进入到探索候选池里,再进行随机召回,召回成功之后会有对应的排序和展示。当一个新内容得到曝光之后,需要收集它的用户行为反馈以更新MAB Score。过程中,会过滤曝光次数达到一定上限的内容(我们认为它已经是旧内容),也会过滤MAB Score较低的内容,从而形成整个随机Explore的闭环。
个性化Explore相比于随机Explore在新内容产生时,会先利用视觉算法对内容进行分类,视觉分类就是把新内容进行基础的特征提取,归类到某个类目榜单里。接着,结合视觉分类和MAB Score维护动态的类目榜单,最后再结合类目榜单和用户实时偏好进行基于内容的召回。同样的,在召回之后,将收集到的用户的行为反馈用于更新MAB Score和类目榜单。这就是基于内容召回的个性化Explore流程。
内容多样性
那么,如何保证推荐多样性呢?首先要定义什么内容是一样的,从而知道什么内容是不一样的。我们可以通过运营对视频打标签、通过视觉算法进行视觉分类,而上述几种方法都依赖先验的类目体系,往往无法精确匹配用户时刻变化的细粒度兴趣点。一个UGC平台,其重要特性之一就是内容形态快速更新,有各种各样的创意会发展成小众类别,再从小众类别迅速发展成一个新类别,那么这种基于经验知的有监督方法是无法及时响应变化的,因此考虑利用用户行为序列对内容聚类。
内容聚类
在基于用户行为序列的内容聚类中,假设用户对于兴趣点会产生其行为序列,假设某个用户喜欢小鲜肉和舞蹈,那么基于这个兴趣点,他便会观看较多小鲜肉跳舞的视频。这个问题可以类比文本领域的Topic Model问题,当作者写文章时,需要先确定文章主题,再基于主题确定文章中使用到的词。
而对用户兴趣进行建模,我们采用LDA的方法将用户类比为一篇文章,用户行为序列里的内容类比为文章里的词,那么可以对内容直接利用LDA模型进行聚类,从而匹配到用户兴趣。基于这样的假设,可以采用word2Vec对内容生成向量再进行聚类,也可以基于LDA的深化版本DSSM模型来对内容生成向量。如图19右侧所示,是DSSM方法的网络结构图。