嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频
编译 | 陈彩娴
喜欢在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
嫌弃YouTube推荐算法,这位小哥决定自己动手写代码来推荐视频相关推荐
- 拜访了这位小哥的GitHub后,我失眠了!
之前很早就有耳闻过一个名叫John Washam的外国小哥自学编程的励志故事,还曾一度登上GitHub热度榜. 他的故事说来也挺励志.为了让自己从一个非CS科班的自学党蜕变成Google的软件工程师, ...
- 在线试玩,在体感游戏中打败泰森,这位小哥破解了任天堂「拳无虚发」
视学算法报道 编辑:张倩.陈萍 加入体感控制,这位小哥破解了原版任天堂的拳击格斗游戏「拳无虚发」. 在经典红白机上玩拳击游戏是很多人的童年回忆,其中就包括任天堂 1987 年发布的拳击格斗游戏--「P ...
- 如何提高PyTorch“炼丹”速度?这位小哥总结了17种方法,可直接上手更改的那种...
杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 如何提升PyTorch"炼丹"速度? 最近,有一位名叫Lorenz Kuhn的小哥,分享了他在炼丹过程中总结的17种投入 ...
- Hulu(北京)推荐算法负责人周涵宁:怎样应对基于深度学习的视频推荐系统...
本文仅用于学习和交流目的,不得用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 周涵宁,本科毕业于清华大学自动化系,于 ...
- 广告推荐算法(group auc)评价指标及Spark实现代码
我们曾经有这样的疑惑,那就是训练样本,AUC得到提升.当将新模型放到线上后,却发现实际效果却没有老模型好,这时候很多人就开始疑惑了. 在机器学习算法中,很多情况我们都是把auc当成最常用的一个评价 ...
- 推荐算法(四)——经典模型 DeepFM 模型详解及代码实践
目录 1 介绍 2 模型结构 3 实验结果 4 总结 5 代码实践 1 介绍 DeepFM 是华为诺亚方舟实验室在 2017 年提出的模型. 论文传送门: A Factorization-Machin ...
- 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!
今天栈长给大家推荐一款代码神器,人工智能帮你写代码,简直爽的不行,关键还是免费的,一起来看看. 简介 Codota 是一款优秀的 AI 代码自动完成工具,可以帮助我们极大的提高开发效率. 官网:htt ...
- 前端写代码的推荐工具
有朋友,经常问到web前端开发写代码用那个软件好?今天在这里统一回答下,主流的web前端开发写代码的软件有这些Webstorm.Vscode.Sublime Text.HBuilder.Dreamwe ...
- 麦克风监听是否真的存在?有位小哥做了个实验...
"我妈给我买了点心,我就看着上面的字念:蔓越莓松饼.手机上从来没有搜过,然后松饼就出现在了我的淘宝首页上,真的把我吓到了!" 网友"王辛藏的小口袋"日前发微博如 ...
最新文章
- Windows Server 2008R2使用web方式修改域账户密码
- 宝塔如何备份网站_学习织梦网站必需会的一件事:织梦网站数据备份
- 阿里巴巴机器学习系列课程
- oracle 循环语句总结(breakcontinue)
- html.parser python_python模块之HTMLParser
- C语言 typedef - C语言零基础入门教程
- python中seaborn_python的seaborn模块
- leetcode题解162-寻找峰值
- 1.12_count_sort_计数排序
- 很多人认为,因为我们是平民,做生意试不了错,输不起,试错成本太高
- 蓝桥杯 BASIC-17 基础练习 矩阵乘法
- IntelliJ IDEA功能和惊喜赠品
- 【转】程序员的十种级别
- Android 输入法问题 解决三星s5830i或华为低端机输入法崩溃问题
- idea + tomcat中文乱码处理
- 基于PageRank的社交网络用户影响力
- Clonezilla克隆还原系统
- zotero+坚果云安装记录
- 微信H5页面图片无法显示问题
- 定义一个点(point)类表示二维空间的点(x,y)
热门文章
- jsp ajax动态添加数据,jquery Ajax实现Select动态添加数据
- 老码农90%的程序猿都是瞎努力,这份路线教你成为高手!
- 最新NLP架构的直观解释:多任务学习– ERNIE 2.0(附链接)| CSDN博文精选
- 要活102年,阿里凭借的是什么?
- 重磅!AI Top 30+案例评选正式启动
- 李理:为什么说人工智能可以实现?
- 吴恩达deeplearning.ai最后一课上线,下一次得等多少年?
- 元旦福利 | Python、机器学习、TensorFlow 图书送一波
- AI一分钟 | 马斯克:我不是中本聪,我自己的比特币都丢了;商汤科技再获阿里巴巴15亿元投资,内部消息称C轮还有更大巨头入股
- 我司Spring Boot 项目打包 + Shell 脚本部署详细总结,太有用了!