推荐策略在图库行业的应用
一、背景
以内容为主体的产品(应用/网站)往往离不开推荐策略,如何在搜索功能之外,将用户感兴趣的内容推送到用户面前,提高内容的点击率、下载率、购买率是当前互联网行业一个非常通用性的问题。
我基于自己在图库行业的工作经验,以图库行业为示例,简单说一下推荐策略在图库行业的应用。文中重点会讲述推荐策略中协同过滤推荐策略(矩阵分解实现)的落地,并给出常见的推荐策略供大家参考。
二、产品需求
图库行业,如何让用户快速找到自己心怡的图片并为止付费,是一个行业内重要的话题。第一个大途径是搜索,第二个大途径则是推荐。本文不讨论搜索如何优化(召回、排序、行为数据反馈),就以图片推荐为切入点,讲解图库行业是如何应用推荐策略的。
产品需求或者说产品目标很简单,通过一个推荐策略,把用户感兴趣的内容放到他的面前。
三、推荐策略选择
我所在的公司,在国内图库行业算是塔尖的公司,因此实际积累了大量的用户行为数据(搜索、点击、下载、收藏),这些数据可以应用来给用户推送优质的内容。我们主要选择的推荐策略有:
- 基于内容的推荐
- 协同过滤推荐(矩阵分解实现)
- 多臂老虎机策略(Multi-Arm Bandit Strategy)
- 上下文感知推荐
- 人工规则推荐
1. 基于内容的推荐
详情页相关内容推荐
在图片的详情页(大图页)中,用户已经打开了一张图片,那么用户对这张图片的主题、风格可以认为是相对满意的,这个时候我们需要推送基于这张图片的相关内容就有可能命中用户的需求。
详情页内容的推荐主要从两个方向考虑:
- 同组图片
- 相似图
其中,同组图片满足的需求场景是:用户需要成套系的图片,或者对这个模特很满意需要别的动作的场景。在供稿人上传图片时,会将同一组场景的内容放到一起,行成组图。这个可以作为同组图片的推荐。
相似图,整体有两个方案,一是从视觉层面的相似,二是从内容主题上的相似。其中视觉层面的相似有两个弊端:
- 对于计算资源消耗较大,成本较高。
- 两张图片过于相似,只有细微变化,可能不符合用户的需求。完全相似的画面内容,在质量、主题上与原图重合度、相似度过高。
而基于内容主题上的相似,即两张图片主体、场景甚至色彩相似,但是不一样,这个对于用户浏览中的扩展阅读是非常棒的体验。我们的实现逻辑,是基于原始图片的关键词与图库中其他图片的关键词比对,计算相似度(或者重叠率),取出相似度最高的TOP100图片。
(1)获取图片ID及图片对应的关键词ID(为了防止二义性、解决同义词、可控性等问题,将关键词转为关键词ID进行系统性管理)。
(2)遍历所有图片,计算每张图片和其他所有图片的关键词重合度(即A有关键词a,B是否有关键词a,然后根据重合的数量、重合关键词在A和B图关键词中的占比情况,综合计算重合度),以关键词重合度作为图片之间的相似度。
(3)取每张图片相似度最高的TOP100张图。
(4)以上循环,每天对新入库的图跑一次数据(确保新入库图上线后即可有相似图推荐)。每月对全量库中图跑一次数据(保证新入库的图可以作为被关联图关联上)。
(5)数据存储如Redis,在每张图片详情页被访问时,查询100张相似图。
以上整个方案其实有两个点我们做了重点的优化:
- 由于有一些关键词,非常常见,大多数图片都有,无具体对图片的描述含义,这部分会影响关键词重合度的计算,污染相似度数值。例如:1个、图片、画等。这部分关键词应该进行过滤,过滤后再去计算重合度和相似度。
- 由于同组图片,在社区上传时,关键词会是一模一样,这部分会和上面说的同组图片大部分重合(这类图肯定相似度最高),会导致推荐位大量图片重复。因此解决办法是,将同组图、相似图合并为“推荐图片”栏目进行展示,并且依据图片ID去重。
2. 协同过滤推荐(矩阵分解实现)
猜你喜欢
在给用户推荐内容时,我们设置了“猜你喜欢”栏目,在图片首页。该部分本质实现思路是协同过滤的推荐逻辑,最终因为考虑到数据规模、计算性能的问题,采用了矩阵分解(ALS)的实现方式。
协同过滤本质逻辑是,A用户下载了a、b、c、d图,B用户下载了a、b、c、e、f图,综合所有用户下载记录的比对,我们认为A和B下载的图重合度较高,即A和B用户较为相似,那我们认为B下载了e、f图,A还没下过,所以我们将e、f推送给A,将A下载的d图推送给B,从而实现了基于用户-用户的协同过滤。
但是由于整个网站用户量级是千万级,图片是亿级,想要构建千万级×亿级的矩阵(并且每个用户下载过的图片肯定总量不大,在千级别,导致这个矩阵非常稀疏),对于系统的计算量来说非常巨大,效率很低下(这个数据需要每日计算一次)。因此直接通过协同过滤推荐逻辑,将下载视为直接因子来构建矩阵实现图片推荐,性价比极低。
综合考虑,采用了基于模型训练的实现方式,即矩阵分解,采用了ALS训练算法训练预测用户喜好(即推荐图片) 的ALS模型。通过ALS算法,交替固定用户因子和图片因子来最小化重建误差、求解结果。通过模型训练,将下载图片作为重要行为,发现用户和图片之间的潜在因子,通过调用模型预测用户喜好完成图片推荐。
(1)通过用户下载日志(业务系统&埋点系统)获得用户ID及对应历史下载图片ID。
(2)清洗数据,将错误的、为空的数据删除。
(3)数据转换,将数据的类型进行统一。
(4)数据加载,数据存储至HBase。
(5)调取Spark MLlib库中ALS(Alternating Least Squares)算法训练模型。
(6)存储训练的ALS模型。
(7)调用ALS模型,传入用户id获取推荐的100张图。
(8)遍历库中所有有下载行为的用户id,重复以上模型预测过程,存储推荐图片ID(和用户ID关联)到HBase。
(9)用户访问图片详情页时,通过user_id调取API接口,获取推荐图片IDs,将推荐图片存入Redis(每日定点清空重置Redis)。
(10)同一用户当日再次访问网站,直接读取Redis。
以上方案仅针对历史有过下载行为的用户有效,对于无下载行为的用户无法训练,则直接展示网站在前3日下载最多的图片。
3. 多臂老虎机策略(Multi-Arm Bandit Strategy)
搜索结果排序
这个地方在本文不详说,多臂老虎机策略本质上平衡“探索(Exploration)”、“利用(Exlpoitation)”,即给出一些没有数据积累的推荐内容来尝试,同时给出一些有数据积累的好的推荐内容来利用。对于搜索图库场景是根据每张图片被点击、收藏、下载的概率来调整图片推荐的优先级(在搜索场景则是排序)。
具体的实现方式是在每个关键词下,图片被搜索、点击、收藏、下载数据进行计算,通过搜索/下载转化率、曝光/下载转化率、下载绝对值、点击绝对值、收藏绝对值等计算图片在这个关键词下的权重,对用户数据积累较多的,进行高权重展示(排序靠前),即“利用”。
而为了防止强者恒强、弱者无曝光导致排序固化,会以一些比较特殊的方式,在搜索结果集插入一些没有数据积累的图片测试用户反馈,即“探索”部分。
4. 上下文感知推荐
搜索页的关联专题推荐
在搜索页,用户搜索图片时,根据用户的搜索词,进行人工运营的图片专题推荐。
5. 人工规则推荐
(1)热门下载图片推荐
在网站首页,提供近3日下载得最多的图片展示,同时为了防止排序固化强者恒强,定期对排序进行打乱保证页面内容的更新。
(2)最新图片
对于入库时间最新的图片,进行展示。但是为了保证展示的效果,对图片内容进行质量分级,仅展示高质量的内容,并且防止组图上传导致图片重复度过高,依据上传作者进行图片去重。
(3)人工运营专题
由运营和编辑,根据临近的商机节点,例如节日、重大事件等,挑选高质量的、新上传的图片,建立专题,专题在首页和搜索页均有曝光展示。
(4)分类导航推荐
也是人工运营推荐的一种,推荐思路是根据用户的行业、使用场景等维度,将所有图片细分到各个分类,帮助用户在不知道怎么组织搜索词时,可以循序渐进的找到自己想要的内容。这种方式对于新手用户体验较好,但是弊端是需要较大量的人工支持。
对于图片数量较少的图库可以采用这种方式,或者通过机器+人工的方式帮助分类。通过CLIP模型实现图片内容识别,从而实现自然语言搜索后,可以根据预先分析好的分类场景便利的批量分类图片。
四、常用推荐策略脑图
总结归纳的一些常用推荐策略,可以参考,不一定非常准确,很多定义是需要在实践中摸索,不同的推荐策略也可以结合使用。
五、ALS算法概要
本文中用来推荐图片的ALS算法,一些基本的概念帮助大家快速了解,感兴趣的同学可以扩展了解一下,很多的推荐方法、算法、模型都已经非常成熟了,条条大路通罗马,只要明确了用户的需求自己的目标,总是能达到的。
本文作者 @Damon
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!