知行编程网知行编程网  2022-07-19 14:00 知行编程网 隐藏边栏 |   抢沙发  15 
文章评分 0 次,平均分 0.0

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

编译 | 陈彩娴

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

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

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

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

他是怎么做的呢?


   大体计划
首先,Chris将自己对算法工具的要求进行可视化。
Chris对算法的期待有两点:1)算法能够基于视频与他本人的可能相关性对视频进行排序;2)算法能够自动向他发送推荐视频,他可以从中自由选择。
在Chris看来,如果他可以一次性决定每周要观看的影视清单,减少滑动浏览YouTube页面的次数,那么他便能够减少筛选时间、大幅提高工作效率。
在设计算法的过程中,作者使用YouTube的API来获取视频信息,然后创建了一个公式,对视频信息进行处理,从而对视频进行排序。
最后,作者使用AWS Lambda设置了一封自动发送的邮件。邮件发送到他本人的邮箱,里面列举了排名靠前的视频清单。

   借用YouTube API
那么,如何根据视频与本人的兴趣相关性对视频进行排序呢?
作者仔细阅读YouTube API的文档后,发现可以在视频与频道上找到一些能够帮助他进行视频排序的指标,如:
视频栏:视频名称、发布时间、观看次数、索引缩略图等等;
频道栏:订阅人数、评论次数、观看次数、播放列表等等。
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
链接:https://developers.google.com/youtube/v3/
于是,作者通过谷歌的开发者操控台获得了API密钥,并将API密钥复制到Python脚本中。
操控台地址:https://console.developers.google.com/apis/credentials
通过这个步骤,你可以将 API call 初始化,并通过以下代码检索结果:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
紧接着,结果会返回一个JSON object,对JSON object进行分析后,能够找到视频的有用信息,比如视频发布日期。你也可以对结果进行检索,如下所示:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
下方所示视频系列对如何使用YouTube API进行了详细解释:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
视频地址:https://www.youtube.com/watch?v=-QMg39gK624&list=PLyb_C2HpOQSBJRh38CTPvsouV4SBpyt_H&ab_channel=IndianPythonista

   如何找到最有用的视频?
定义一个好的公式,是找到优质视频的必要条件。
完成前面的步骤后,你已经可以针对部分的信息进行查询,并使用所获得的值,根据视频与本人的兴趣相关度对视频进行排序。
这个问题很棘手:一个影片的优劣应该由什么决定?观看次数?评论次数?或是频道的订阅人数?
作者决定先将“总观看次数”作为评价视频价值的一级指标。
理论上,如果一个视频很有趣,或者拍得很好,那么一定会收到观众的积极反馈,传播也更广、观看次数也更多。
但“总观看次数”也可能忽略一些重要因素:
首先,如果一个频道原先便有许多观众,那么与小频道相比,大频道自然更容易获得大规模的观看次数。因此,虽然“总观看次数”在很大程度上能够推荐好的视频,但作者并不想因此而错过小频道的优质视频。一个拥有1万订阅者的频道,其观看次数为10万的视频可能会比一个拥有100万订阅者的频道中观看次数为10万的视频更优秀。
其次,一个观看次数多的视频并不一定是因为视频本身的内容优质,而可能是其他原因,比如视频名称是标题党、视频内容有争议。作者本人对这些视频并不感兴趣。
因此,除了“总观看次数”,作者还将“订阅人数”作为评价指标。
作者先是单单根据观看次数与订阅者的比率(即,将观看次数除以订阅者人数)测试视频的排序。
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
部分测试结果看起来很乐观,但也存在一个问题:订阅人数极少的视频,得分却极高。
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
虽然排名靠前的几个视频看起来好像很有趣,但第二个视频和第三个视频并没有达到作者的预期。因此,他将最少观看次数设置为5000,观看次数与订阅者的最大比率设置为5,希望能改善推荐结果:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
作者设置了各种各样的阈值,且看起来都很好地过滤了那些订阅人数少、观看次数少的视频。Chris在几个主题上测试了代码,并取得了不错的结果。
但是,他随即又注意到另一个问题:发布时间较早的视频,更可能有更高的观看次数。观看次数也是需要时间积累的。
Chris的计划是一周运行一次代码,所以他决定将视频的发布时间范围限制在7天之内。
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
因此,他还将“视频发布后的天数”添加到排名指标中。将之前的得分除以天数,那么最终指标将与视频的播放时间成正比。
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
进一步测试代码之后,作者发现自己一直在确定自己想观看的精彩视频。他对公式的内容进行了多次修改和加权处理,最终选择了以下公式:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
(图注:Value Function)

   测试新代码
首先,作者使用“医学院”一次进行了查询,得到以下结果:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
接着,他登录YouTube,手动搜索有关医学和医学院的视频。结果显示,他新设计的算法已经成功定位了他想看的所有视频。尤其是第二个由名为Kevin Jabbal的医生录制的视频,是他喜欢看的。
他还用另一个搜索词“生产力”进行了测试,结果也很满意:
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
第二个视频的质量一般,并不是他喜欢的视频类型。这些视频可能是因为搜索词的其他含义而被选中,他表示,目前想不到更简单的方法来过滤掉这些视频。
除了能大致达到手动搜索的效果,新的算法还能找到手动搜索发现不了的有趣视频!
几个月前,OpenAI分享了一个非常有趣的神经网络,称为“ GPT-3”。于是,作者决定使用“GPT-3”作为搜索词进行测试,然后找到了下面的视频:
视频地址: https://www.youtube.com/watch?v=wx4GQUXOHIQ
这支视频的发布者只有几千订阅人数,但视频内容非常有趣。
但如果在YouTube上手动进行相同的搜索,则必须滚动浏览所有大型频道上有关GPT-3的视频,才能找到上述的、位于第31位的视频。
在过去的几个月中,作者根据自己的兴趣尝试了多个搜索词,例如“人工智能”、“医学AI” 和 “Python编程”。实验显示:Video Finder所建议的前五名视频中,至少有一个视频是他认为很有趣的。
 
   设置工作流


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:每周收到自动发送电子邮件提示后,在本地计算机上手动运行脚本。
(如果你们有什么好的解决方法,欢迎评论区留言交流~)

   总结
Chris追崇信息自动化处理,而这个项目是他实践自己想法的行动之一。
目前,视频排序的指标还是比较粗糙,可以进一步完善,比如定义“喜欢/不喜欢”之间的比例。
搜索词之间也存在许多依存关系。如果视频没有标题或文字描述,那么新设计的代码则无法找到这些视频。
新写的代码运行起来还很慢。考虑到每周只运行一次,因此作者没有在优化速度上投入太多精力。
接下来,作者计划构建一个界面,让用户可以快速输入搜索词与搜索时间段,让用户不需要登录YouTube就能观看视频。
通过智能数字极简主义,相信我们有可能通过提高生产力、重新夺回属于我们的时间。
原文链接:
https://towardsdatascience.com/i-created-my-own-youtube-algorithm-to-stop-me-wasting-time-afd170f4ca3a


<section data-brushtype="text" style="padding-right: 0em;padding-left: 0em;white-space: normal;letter-spacing: 0.544px;color: rgb(62, 62, 62);font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;widows: 1;word-spacing: 2px;caret-color: rgb(255, 0, 0);text-align: center;"><strong style="color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;font-size: 14px;"><strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;">—</span></strong>完<strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;font-size: 14px;"><strong style="font-size: 16px;letter-spacing: 0.544px;"><span style="letter-spacing: 0.5px;">—</span></strong></span></strong></span></strong></section><pre><pre><section style="letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;"><section powered-by="xiumi.us"><section style="margin-top: 15px;margin-bottom: 25px;opacity: 0.8;"><section><section style="letter-spacing: 0.544px;"><section powered-by="xiumi.us"><section style="margin-top: 15px;margin-bottom: 25px;opacity: 0.8;"><section><section style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-size: 16px;font-family: 微软雅黑;caret-color: red;">为您推荐</span></strong></span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;">一文了解深度推荐算法的演进</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;">吃透空洞卷积(Dilated Convolutions)<br  /></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;"><span style="font-size: 14px;">13个算法工程师必须掌握的PyTorch Tricks</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;"><span style="font-size: 14px;">吴恩达上新:生成对抗网络(GAN)专项课程</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;">从SGD到NadaMax,十种优化算法原理及实现</section></section></section></section></section></section></section></section></section>

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

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享