前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频

嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频

作者头像
AI科技评论
发布2020-12-08 13:54:09
1.6K0
发布2020-12-08 13:54:09
举报
文章被收录于专栏:AI科技评论AI科技评论

编译 | 陈彩娴

喜欢在YouTube上看视频的朋友也许会有一个苦恼:YouTube的算法会推荐一些“垃圾”视频,或者“标题党”链接。

这也能理解,毕竟算法推荐一般是优先考虑用户的点击率与视频观看时长。

为了解决这个烦恼,Chris Lovejoy决定自己写代码,帮助自己找到有价值的视频,而不是依靠YouTube的推荐算法。

他是怎么做的呢?

1

大体计划

首先,Chris将自己对算法工具的要求进行可视化。

Chris对算法的期待有两点:1)算法能够基于视频与他本人的可能相关性对视频进行排序;2)算法能够自动向他发送推荐视频,他可以从中自由选择。

在Chris看来,如果他可以一次性决定每周要观看的影视清单,减少滑动浏览YouTube页面的次数,那么他便能够减少筛选时间、大幅提高工作效率。

在设计算法的过程中,作者使用YouTube的API来获取视频信息,然后创建了一个公式,对视频信息进行处理,从而对视频进行排序。

最后,作者使用AWS Lambda设置了一封自动发送的邮件。邮件发送到他本人的邮箱,里面列举了排名靠前的视频清单。

2

借用YouTube API

那么,如何根据视频与本人的兴趣相关性对视频进行排序呢?

作者仔细阅读YouTube API的文档后,发现可以在视频与频道上找到一些能够帮助他进行视频排序的指标,如:

视频栏:视频名称、发布时间、观看次数、索引缩略图等等;

频道栏:订阅人数、评论次数、观看次数、播放列表等等。

链接:https://developers.google.com/youtube/v3/

于是,作者通过谷歌的开发者操控台获得了API密钥,并将API密钥复制到Python脚本中。

操控台地址:https://console.developers.google.com/apis/credentials

通过这个步骤,你可以将 API call 初始化,并通过以下代码检索结果:

紧接着,结果会返回一个JSON object,对JSON object进行分析后,能够找到视频的有用信息,比如视频发布日期。你也可以对结果进行检索,如下所示:

下方所示视频系列对如何使用YouTube API进行了详细解释:

视频地址:https://www.youtube.com/watch?v=-QMg39gK624&list=PLyb_C2HpOQSBJRh38CTPvsouV4SBpyt_H&ab_channel=IndianPythonista

3

如何找到最有用的视频?

定义一个好的公式,是找到优质视频的必要条件。

完成前面的步骤后,你已经可以针对部分的信息进行查询,并使用所获得的值,根据视频与本人的兴趣相关度对视频进行排序。

这个问题很棘手:一个影片的优劣应该由什么决定?观看次数?评论次数?或是频道的订阅人数?

作者决定先将“总观看次数”作为评价视频价值的一级指标。

理论上,如果一个视频很有趣,或者拍得很好,那么一定会收到观众的积极反馈,传播也更广、观看次数也更多。

但“总观看次数”也可能忽略一些重要因素:

首先,如果一个频道原先便有许多观众,那么与小频道相比,大频道自然更容易获得大规模的观看次数。因此,虽然“总观看次数”在很大程度上能够推荐好的视频,但作者并不想因此而错过小频道的优质视频。一个拥有1万订阅者的频道,其观看次数为10万的视频可能会比一个拥有100万订阅者的频道中观看次数为10万的视频更优秀。

其次,一个观看次数多的视频并不一定是因为视频本身的内容优质,而可能是其他原因,比如视频名称是标题党、视频内容有争议。作者本人对这些视频并不感兴趣。

因此,除了“总观看次数”,作者还将“订阅人数”作为评价指标。

作者先是单单根据观看次数与订阅者的比率(即,将观看次数除以订阅者人数)测试视频的排序。

部分测试结果看起来很乐观,但也存在一个问题:订阅人数极少的视频,得分却极高。

虽然排名靠前的几个视频看起来好像很有趣,但第二个视频和第三个视频并没有达到作者的预期。因此,他将最少观看次数设置为5000,观看次数与订阅者的最大比率设置为5,希望能改善推荐结果:

作者设置了各种各样的阈值,且看起来都很好地过滤了那些订阅人数少、观看次数少的视频。Chris在几个主题上测试了代码,并取得了不错的结果。

但是,他随即又注意到另一个问题:发布时间较早的视频,更可能有更高的观看次数。观看次数也是需要时间积累的。

Chris的计划是一周运行一次代码,所以他决定将视频的发布时间范围限制在7天之内。

因此,他还将“视频发布后的天数”添加到排名指标中。将之前的得分除以天数,那么最终指标将与视频的播放时间成正比。

进一步测试代码之后,作者发现自己一直在确定自己想观看的精彩视频。他对公式的内容进行了多次修改和加权处理,最终选择了以下公式:

(图注:Value Function)

4

测试新代码

首先,作者使用“医学院”一次进行了查询,得到以下结果:

接着,他登录YouTube,手动搜索有关医学和医学院的视频。结果显示,他新设计的算法已经成功定位了他想看的所有视频。尤其是第二个由名为Kevin Jabbal的医生录制的视频,是他喜欢看的。

他还用另一个搜索词“生产力”进行了测试,结果也很满意:

第二个视频的质量一般,并不是他喜欢的视频类型。这些视频可能是因为搜索词的其他含义而被选中,他表示,目前想不到更简单的方法来过滤掉这些视频。

除了能大致达到手动搜索的效果,新的算法还能找到手动搜索发现不了的有趣视频!

几个月前,OpenAI分享了一个非常有趣的神经网络,称为“ GPT-3”。于是,作者决定使用“GPT-3”作为搜索词进行测试,然后找到了下面的视频:

视频地址: https://www.youtube.com/watch?v=wx4GQUXOHIQ

这支视频的发布者只有几千订阅人数,但视频内容非常有趣。

但如果在YouTube上手动进行相同的搜索,则必须滚动浏览所有大型频道上有关GPT-3的视频,才能找到上述的、位于第31位的视频。

在过去的几个月中,作者根据自己的兴趣尝试了多个搜索词,例如“人工智能”、“医学AI” 和 “Python编程”。实验显示:Video Finder所建议的前五名视频中,至少有一个视频是他认为很有趣的。

5

设置工作流

Chris已将所有的代码进行整理,并上传到GitHub。

GitHub地址:https://github.com/chris-lovejoy/YouTube-video-finder

代码的工作流程如下:

1、使用搜索词、搜索时间段和API密钥等从YouTube中提取视频信息;

2、理清符合自己兴趣的视频指标;

3、使用上述的“Value Function”来根据预设的兴趣对视频进行排名;

4、将相关的视频信息储存到DataFrame中;

5、将排名前5的视频的详细信息(包括视频链接)打印发送到控制台。

为了能够自动运行此脚本,作者决定使用AWS Lambda(无服务器平台),如此一来,你可以编写处于休眠状态的代码,直到代码被“唤醒”(例如,每周一次,或基于事件)。

理想情况下,作者希望Lambda每周都能自动将推荐视频发送到自己的邮箱,这样一来,就可以直接在邮件中挑选过去一周想要观看的视频、而不必访问YouTube主页。但这个目标还没有达到。

由于是第一次使用Lambda,作者难以让所有导入的库同时工作,执行时,代码需要用到boto3电子邮件客户端、用于API call的OAuth,以及用于存储结果与多个子依赖项的Pandas。

通常来说,安装这些软件包非常简单,但在Lambda上却困难重重:首先,上传安装包时有内存限制,需要将库进行压缩、然后在上传后解压;其次,AWS Lambda使用自定义Linux,很难导入正确的、交叉兼容的库;第三,Mac电脑在虚拟环境中会出现异常表现。

在花了大约10到15个小时来搜寻StackOverFlow,上传又重新上传不同的代码库,并咨询了几个朋友之后,这个问题还是没有解决。因此,作者只能采取Plan B:每周收到自动发送电子邮件提示后,在本地计算机上手动运行脚本。

(如果你们有什么好的解决方法,欢迎评论区留言交流~)

6

总结

Chris追崇信息自动化处理,而这个项目是他实践自己想法的行动之一。

目前,视频排序的指标还是比较粗糙,可以进一步完善,比如定义“喜欢/不喜欢”之间的比例。

搜索词之间也存在许多依存关系。如果视频没有标题或文字描述,那么新设计的代码则无法找到这些视频。

新写的代码运行起来还很慢。考虑到每周只运行一次,因此作者没有在优化速度上投入太多精力。

接下来,作者计划构建一个界面,让用户可以快速输入搜索词与搜索时间段,让用户不需要登录YouTube就能观看视频。

通过智能数字极简主义,相信我们有可能通过提高生产力、重新夺回属于我们的时间。

原文链接:

https://towardsdatascience.com/i-created-my-own-youtube-algorithm-to-stop-me-wasting-time-afd170f4ca3a


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技评论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档