编译 | 陈彩娴

喜欢在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推荐算法,这位小哥决定自己动手写代码来推荐视频相关推荐

  1. 拜访了这位小哥的GitHub后,我失眠了!

    之前很早就有耳闻过一个名叫John Washam的外国小哥自学编程的励志故事,还曾一度登上GitHub热度榜. 他的故事说来也挺励志.为了让自己从一个非CS科班的自学党蜕变成Google的软件工程师, ...

  2. 在线试玩,在体感游戏中打败泰森,这位小哥破解了任天堂「拳无虚发」

    视学算法报道 编辑:张倩.陈萍 加入体感控制,这位小哥破解了原版任天堂的拳击格斗游戏「拳无虚发」. 在经典红白机上玩拳击游戏是很多人的童年回忆,其中就包括任天堂 1987 年发布的拳击格斗游戏--「P ...

  3. 如何提高PyTorch“炼丹”速度?这位小哥总结了17种方法,可直接上手更改的那种...

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 如何提升PyTorch"炼丹"速度? 最近,有一位名叫Lorenz Kuhn的小哥,分享了他在炼丹过程中总结的17种投入 ...

  4. Hulu(北京)推荐算法负责人周涵宁:怎样应对基于深度学习的视频推荐系统...

    本文仅用于学习和交流目的,不得用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 周涵宁,本科毕业于清华大学自动化系,于 ...

  5. 广告推荐算法(group auc)评价指标及Spark实现代码

    我们曾经有这样的疑惑,那就是训练样本,AUC得到提升.当将新模型放到线上后,却发现实际效果却没有老模型好,这时候很多人就开始疑惑了. ​ 在机器学习算法中,很多情况我们都是把auc当成最常用的一个评价 ...

  6. 推荐算法(四)——经典模型 DeepFM 模型详解及代码实践

    目录 1 介绍 2 模型结构 3 实验结果 4 总结 5 代码实践 1 介绍 DeepFM 是华为诺亚方舟实验室在 2017 年提出的模型. 论文传送门: A Factorization-Machin ...

  7. 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!

    今天栈长给大家推荐一款代码神器,人工智能帮你写代码,简直爽的不行,关键还是免费的,一起来看看. 简介 Codota 是一款优秀的 AI 代码自动完成工具,可以帮助我们极大的提高开发效率. 官网:htt ...

  8. 前端写代码的推荐工具

    有朋友,经常问到web前端开发写代码用那个软件好?今天在这里统一回答下,主流的web前端开发写代码的软件有这些Webstorm.Vscode.Sublime Text.HBuilder.Dreamwe ...

  9. 麦克风监听是否真的存在?有位小哥做了个实验...

    "我妈给我买了点心,我就看着上面的字念:蔓越莓松饼.手机上从来没有搜过,然后松饼就出现在了我的淘宝首页上,真的把我吓到了!" 网友"王辛藏的小口袋"日前发微博如 ...

最新文章

  1. Windows Server 2008R2使用web方式修改域账户密码
  2. 宝塔如何备份网站_学习织梦网站必需会的一件事:织梦网站数据备份
  3. 阿里巴巴机器学习系列课程
  4. oracle 循环语句总结(breakcontinue)
  5. html.parser python_python模块之HTMLParser
  6. C语言 typedef - C语言零基础入门教程
  7. python中seaborn_python的seaborn模块
  8. leetcode题解162-寻找峰值
  9. 1.12_count_sort_计数排序
  10. 很多人认为,因为我们是平民,做生意试不了错,输不起,试错成本太高
  11. 蓝桥杯 BASIC-17 基础练习 矩阵乘法
  12. IntelliJ IDEA功能和惊喜赠品
  13. 【转】程序员的十种级别
  14. Android 输入法问题 解决三星s5830i或华为低端机输入法崩溃问题
  15. idea + tomcat中文乱码处理
  16. 基于PageRank的社交网络用户影响力
  17. Clonezilla克隆还原系统
  18. zotero+坚果云安装记录
  19. 微信H5页面图片无法显示问题
  20. 定义一个点(point)类表示二维空间的点(x,y)

热门文章

  1. jsp ajax动态添加数据,jquery Ajax实现Select动态添加数据
  2. 老码农90%的程序猿都是瞎努力,这份路线教你成为高手!
  3. 最新NLP架构的直观解释:多任务学习– ERNIE 2.0(附链接)| CSDN博文精选
  4. 要活102年,阿里凭借的是什么?
  5. 重磅!AI Top 30+案例评选正式启动
  6. 李理:为什么说人工智能可以实现?
  7. 吴恩达deeplearning.ai最后一课上线,下一次得等多少年?
  8. 元旦福利 | Python、机器学习、TensorFlow 图书送一波
  9. AI一分钟 | 马斯克:我不是中本聪,我自己的比特币都丢了;商汤科技再获阿里巴巴15亿元投资,内部消息称C轮还有更大巨头入股
  10. 我司Spring Boot 项目打包 + Shell 脚本部署详细总结,太有用了!