转眼就到年关了,这里想认真总结下半年基于标签的个性化推荐项目的得与失。
一方面记录下我们使用标签算法遇到的问题和解决方式,还有一方面也和各位分享下过程中做过的那些事儿和踩过的那些坑。
1.事情由来
我们组负责的是优酷、土豆的全部的个性化推荐模块。当前覆盖无线,主站。PCclient等多端,近百个场景。
每天从上亿的视频中。为上千万的用户提供个性化的服务。之前的个性化推荐算法主要基于Item-based协同过滤算法。熟悉推荐系统的同学,都知道这个算法的优势在于:
- 协同过滤依靠的是“群体智慧”,通过用户行为能直接计算出推荐内容之间的相似度。
- 算法project师不须要对于业务的理解,仅仅要实用户的行为日志。就能得出还不错的结果。特别的。对于我们站点不须要对视频内容进行分析理解。
有长处就有缺点。缺点主要体如今:
- 因为依赖用户的行为。捕捉新视频。实时热点视频能力较弱(即Item的冷启动问题)
- 结果因为依赖其它用户的行为,可解释性不强。有时候会发现推荐了一些用户不可理解的内容。著名的样例就是推荐中的“哈利波特”问题。
- 运营编辑人员无法显性的干预推荐结果,对于优酷土豆这样的强媒体属性的公司,这样的支持强干预、抗风险能力是必须的。
2.标签3
重要的事情说三遍! 是的,标签是我们的这件事成败的关键点。单独抽出来和大家分享。
2.1 标签体系
说到标签,大家的第一反应就是相似豆瓣、Delicious一样的站点。或者诸例如以下图的用户标签云模块。
在维基百科中。标签被定义为一种无层次化结构的,用来描写叙述信息、表明物品语义的关键词。
在我们的实际使用过程中,没有直接採用分词标签,而是将不同的词组合成一组能表达特殊兴趣的词包集合,从而构建成兴趣叶子节点。
相关的叶子节点又组合成不同层级的兴趣标签。逐级的合并构建出一棵兴趣分类树,例如以下图所看到的。眼下的兴趣分类树是四层结构。覆盖近万个叶子兴趣节点。这样组织的长处是:
- 层级化结构的标签,易于编辑运营人员的理解和使用。便于兴许的更新与维护,能与已有的品类系统衔接配合
- 能利用兴趣分类树的结构,进行相关标签计算以及在推荐算法的权重调整
2.2 标签匹配
大家知道优酷、土豆有别于其它的视频站点,既包括了比如“跑男”、“琅琊榜”等节目类的内容,又包括大量的用户产生内容,即通常称之为的UGC内容,总视频数超过2亿。
对于如此之多的视频内容,想要分析其视频内容的成本是非常之高的。为此。我们通过视频的标题、描写叙述以及用户上传视频时加入的tag信息,将视频vid 以及用户uid 映射至我们的兴趣标签 Interesting Tag,从而进行我们的个性化推荐。详细的标签匹配过程能够參见我们的上一篇博客《基于用户行为的兴趣标签模型》。
2.3 遇到的问题
在我们实施的过程中,发现了之前未曾考虑的问题。
首先。标签的覆盖是个比較大的问题。假设用户的兴趣没有相应的叶子节点,相应的视频是无法被推荐算法所匹配的。通过统计分析头部的VVLog。ClickLog以及SearchLog的方式。标签的覆盖程度得到了提升,眼下能到当天播放量的70%左右。
其次。标签体系一定是一个“活”的结构,新词发现、标签结构的增删是重要的组成部分。一方面通过同步官方媒资库的方式,扩充节目类视频的标签以及类目关系,还有一方面通过站内搜索日志的新词、站外的内容的爬取扩充已有的兴趣标签。
达到标签系统能更实时的捕捉到突发的兴趣点效果。
另外,标签二义性的问题也是须要解决的。通过标签的分类信息以及视频的属性信息的相关性推断与规则约束,以及上传者范围约束能较好的解决标签二义性问题。
3.从召回到排序
个性化推荐本质上就是在特定的场景(Context),为不同的用户匹配上满足用户须要的内容的过程。
我们比較认同《京东个性化推荐系统持续优化的奥秘》这篇文章里的一个观点,将个性化推荐分为:召回与排序两大步骤。
3.1 召回策略
直接使用包括标签的视频作为候选集。一来质量较差,二来可召回的内容太多,计算复杂度较高,不利于后一步的排序工作的可扩展性。为此。我们须要对候选集进行过滤筛选。生成“优质视频”候选池。
考虑的因素包括:用户观看量、播放完毕率、评论量、点击量等综合考虑的视频质量分;视频上传的时间。上传者的历史播放情况。是否包括敏感词等众多因素。而且因为各个频道分类的不同,阈值也不同,我们针对各个频道消费特点进行调整。比如:电视剧频道的质量条件会比音乐频道严苛。
上线之后。使用CTR与曝光量:将曝光量大,但却没有点击或CTR偏低的视频进行降权,效果得到进一步提升。终于我们依照视频的综合得分Vr排序。形成了Tag->Vid 的倒排表。
3.2排序策略
排序这块。我们參考了项亮《推荐系统实践》中提到的方法。而且结合特有的业务场景做出相应调整优化:
rank(u,v)=∑t∈tagU(u,t)V(t,v)
当中,U(u,t) 表示的是用户兴趣画像特征,V(t,v) 表示的是兴趣标签对于视频描写叙述的重要程度。
上面的排序公式。倾向于推荐热门标签的权重,比如热门电视剧、综艺一般都好几十集,因为观看的次数较多导致相应的权重普遍偏高。而一些小众的兴趣点不能得到体现,不能非常好的反应用户的个性化兴趣。
为此,我们借鉴TF-IDF的思想,对公式进行修正:
rank(u,v)=∑t∈tagU(u,t)log(1+c(u,t))V(t,v)
当中 c(u。t) 表示的是包括标签t 的人数。
假设我们考虑视频本身的质量因素Vr(能够是带时间衰减的观看次数,或加权质量分,也能够是上线之后的CTR);再考虑标签本身的质量TQ,上面的公式可改动为:
rank(u,v)=∑t∈tagTQU(u,t)log(1+c(u,t))V(t,v)Vr
当中 TQ 表示的是标签的质量,表征各个标签的质量差异导致的对于推荐排序的影响。我们是通过spark-mllib 提供的L-BFGS模型,训练得到不同标签对于CTR的影响权重。
3.3上线效果
通过上面的介绍能够看到。我们优化工作是三管齐下:
- 完好标签体系,添加兴趣标签的覆盖度。减少标签错误率
- 优化召回策略。找出最值得推荐的视频
- 调整排序模型。以点击率作为学习目标
我们的工作从10月初正式开发上线至12月底,在优酷首页的猜你喜欢模块,基于标签的算法CTR从4.5%提升至8.2%。同一时候。基于标签的算法也在很多其它的应用场景落地。
4.任重而道远
但遗憾的是,眼下基于标签的个性化推荐眼下点击率仍落后于基于CF的个性化推荐4%左右。
分析了原因。一方面是CF算法在第一节中提到的长处,能更精准的捕捉用户的兴趣(当然包括了众多宅男们喜爱的福利视频)。还有一方面。眼下我们基于标签的推荐工作还不够深入。
未来我们还会在例如以下的方面做出尝试:
实时兴趣标签获取。眼下的召回,或匹配都没有做到实时。实时能够细分三方面:一是新的热点兴趣标签的能被标签系统自己主动捕获。二是新的视频的兴趣标签的实时标注。三是用户的实时行为。不管是搜索、订阅、观看相应的兴趣标签也须要能及时计算。这样才干更准确的捕获用户的短期兴趣。推荐满足当前用户兴趣的新热奇视频。
排序模型优化。眼下的排序模型还相对简单,仅仅考察了用户与视频标签层面的特征匹配程度。对于用户本身特征。视频本身特征,上下文特征,用户的反馈特征。以及其它交叉特征都未做更深入的分析和探讨。
同一时候。个性化推荐模块不但须要准确性,多样性和新颖性,也是须要考虑的因素。这一块也是未来的一个重点。
基于图模型的标签推荐算法。视频、标签、用户这三元组之间的关系能够表示为三部图的结构。Folkrank这一算法,能在标签推荐中获得相似Pageank的效果。基于图计算的分布式计算框架。比如Spark-GraphX。以及阿里的ODPS-GRAPH,能非常好的支持在海量数据上的图算法的实现与计算。这也是下一步我们须要研究的一个方向。
多算法的融合。眼下的推荐系统。假设要不断的迭代优化效果。仅仅依靠一个模型或者一个算法是远远不够的。多算法融合的方式有非常多,怎样发挥各个算法的优势。取长补短。从而为用户提供惬意的推荐体验,也是眼下须要解决的重要的一个问题。
说了这么多,看来2015年我们做的还不远远够,2016年又有不少的方向能够努力。
欢迎各位看官对于上面的内容。假设有什么问题或者建议,能够多交流讨论,我们的邮箱是 [email protected] 。假设你也想投身于个性化算法的优化改进工作,不断改善视频行业的用户体验,也欢迎把你的简历发给我们。
这里有亿级的视频。亿级的用户等你来挑战。我们热忱欢迎你的加入。
最后,祝大家猴年行大运。
路漫漫其修远兮,吾将上下而求索。
To be continue…