说说标签算法在视频推荐的那些事儿



转眼就到年关了,这里想认真总结下半年基于标签的个性化推荐项目的得与失。

一方面记录下我们使用标签算法遇到的问题和解决方式,还有一方面也和各位分享下过程中做过的那些事儿和踩过的那些坑。

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…

原文地址:https://www.cnblogs.com/llguanli/p/8343194.html

时间: 2024-10-14 13:57:18

说说标签算法在视频推荐的那些事儿的相关文章

抖音平台机制有哪些,热门机制算法和好友推荐机制是什么

首先任何人都不会知道抖音的机制具体是什么,有些机制说的人多了,不管真的还是假的,大家也就信了.一定要在账号实际操作过程中,理论结合实际,自己去实践一番. 流量池机制(去中心化) 抖音的流量是去中心化的,哪怕粉丝数量为0,抖动系统也会为发布的视频智能分发几十上百的流量,也就是所谓的流量池,然后根据你在这个流量池里的表现,决定要不要把你的作品推送给更多人.哪怕你的粉丝数是0,只要你有能力产出优质内容,就有机会跟大号竞争. 1.智能分发:以附近和关注为主,再配合用户标签和内容标签.第一推荐到你所发布视

自学大数据者请进:大数据学习线路及各阶段学习书籍、视频推荐

大数据学习路线及各阶段学习书籍推荐!废话不多说,直接切入主题,有需要的小伙伴可以参考学习! 阶段一.大数据基础--java语言基础方面 自学大数据者请进:大数据学习线路及各阶段学习书籍.视频推荐(1)Java语言基础 Java开发介绍.熟悉Eclipse开发工具.Java语言基础.Java流程控制.Java字符串.Java数组与类和对象.数字处理类与核心技术.I/O与反射.多线程.Swing程序与集合类 在这里相信有许多想要学习大数据的同学,大家可以+下大数据学习裙:740041381,即可免费

从零实现来理解机器学习算法:书籍推荐及障碍的克服

前部为英文原文,原文链接:http://machinelearningmastery.com/understand-machine-learning-algorithms-by-implementing-them-from-scratch/ 后部为中文翻译,本文中文部分转自:http://www.csdn.net/article/2015-09-08/2825646 Understand Machine Learning Algorithms By Implementing Them From

根据文章标签相似度获取推荐文章

主要是使用similar_text函数判断两个字符串的相似度,排序后选出相似度排名前5为的数据 similar_text虽然对中文的相似度检测不是太准确,但是可以作为一个参考,挑选出相似文章 也可以直接对文章标题进行相似度检测获取推荐文章,通过文章标题的实现起来更简单一些 我这里给出的案例是根据标签相似度获取推荐文章的代码 //相关文章获取,使用similar_text函数 $key=''; //将本文的标签组合成字符串,因为每个标签在数据表是一条数据 foreach ($tagsres as

Dubbo加权轮询负载均衡算法应用之推荐产品

Dubbo加权轮询负载均衡算法,核心点:weight(固定的权重),currentWeight(当前权重,动态变化的),算法逻辑:轮询服务提供者(每个服务提供者都有weight和currentWeight),currentWeight增加weight,取最大的currentWeight,然后取对应的服务提供者,最后将取到的服务提供者的currentWeight减去总的权重(所有服务提供者的weight之和).示例如下: 服务器 [A, B, C] 对应权重 [5, 1, 1] ,现在有7个请求依

推荐算法-协同过滤推荐算法

layout: post title: "推荐算法-协同过滤推荐算法" date: 2020-4-13 9:00:00 categories: [Algorithm] excerpt: "协同过滤推荐算法简介,参考https://zhuanlan.zhihu.com/p/40463528" 协同过滤推荐算法步骤 1.收集用户偏好 推测用户的喜好就要收集用户的信息,用户收藏的类别,评论,下载,转发这些信息可以数字化,作为用户信息二维矩阵的变量. 2.用户数据的减噪和归

<video>标签,对视频的支持

H5新增了<video>和<audio>标签,提供对视频和音频的支持 <video> video之间识别多个source标签,可以链接不同的视频资源,浏览器取最近的一个可识别的视频资源:(比如Safari只识别MP4,所以Safari取的是第二个source标签) <video width="240" height="320" controls="controls" autoplay="auto

让程序员抓狂的排序算法教学视频

罗马尼亚是一个爱跳舞的民族,如果你看过罗马尼亚老电影<奇普里安.博隆贝斯库>,那欢快悠扬的舞曲之炽热呵,非把你融化不可! 罗马尼亚人爱跳舞,不仅体现在电影和节日中,你会发现舞蹈无处不在,即使是大学里的计算机课程中的排序算法教学,也被用舞蹈的形式表现出来. 罗马尼亚Tirgu Mures地区的Sapientia大学就制作了一系列用民族舞蹈形式表现的各种排序算法的工作原理.下面就是这些视频. 舞跳的很好,但教学效果如何,我很难评判,至少让我对这几种排序算法的效率产生了严重的怀疑. 排序算法:选择排

Android 图像压缩,和LRU算法使用的推荐链接

近两日,看的关于这些方面的一些教程数十篇,最好的当属google原版的教程了.国内有不少文章是翻译这个链接的. 需要注意的一点是:Android的SDK中的LRU算法在V4包和Util包中各有一个,推荐使用V4包中的. 在此,推荐两个链接: https://developer.android.com/intl/ru/training/displaying-bitmaps/process-bitmap.html http://android-developers.blogspot.jp/2010/