我创建了YouTube算法的替代方法,以免浪费时间

2020-11-24 05:29:22

我喜欢看YouTube视频,以切实的方式改善生活。不幸的是,YouTube算法不同意。它喜欢喂我点击诱饵和其他垃圾。

因此,我开始执行一项任务:我可以编写代码来自动找到有价值的视频,从而消除对YouTube算法的依赖吗?

我从可视化我想要该工具执行的操作开始。我想要的东西是(i)根据对我的可能相关性对视频进行排名,并且(ii)自动向我发送建议的视频,我可以从中选择。

我认为,如果可以批量确定每周要观看的视频并消除无限滚动YouTube浏览的视频,我可以大大提高工作效率。

我知道我需要YouTube API来获取视频信息(什么是API?)。然后,我将创建一个处理该信息以对视频进行排名的公式。对于最后一步,我计划使用AWS Lambda设置一封自动发送给自己的电子邮件,该电子邮件将列出排名靠前的视频。

我想找到一些指标,可以根据视频对我的兴趣来对视频进行排名。

我在这里阅读了You​​Tube的文档,发现您可以在视频级别(标题,发布时,多少观看次数,缩略图等)和频道级别(订阅者数量,评论,观看次数,频道播放列表,等等)。

看到这一点,我非常有信心可以使用它来定义指标并对视频进行排名。

我通过此处的开发人员控制台获取了API密钥,并将其复制到了我的Python脚本中。

这使您可以初始化API调用并使用以下代码行检索结果:

这将返回一个JSON对象,我可以对其进行分析以找到适当的信息。例如,要查找发布日期,我可以对结果进行索引,如下所示:

这里有一个有用的视频系列,它会引导您完成使用YouTube API的过程。

现在,我可以查询适当的信息,我需要使用获得的值对视频进行排序,以使它们对我感兴趣。

这是一个棘手的问题。优质影片是什么构成的?是视图计数吗?有多少评论?频道的订阅人数?

我决定从总观看次数入手,作为合理的一级代理来评估视频的价值。从理论上讲,有趣或解释充分的视频将获得积极的受众反馈,得到更多的提升,从而获得更多观看次数。

但是,有几件事并未考虑总观看次数:

首先,如果频道吸引了大量观众,则与较小的频道相比,获得可比的观看次数要容易得多。其中一些可能反映出更多的经验可以带来更好的视频,但是我不想打折来自较小频道的可能高质量的视频。来自拥有10,000个订阅者的频道的100,000个观看视频可能比来自拥有100万个订阅者频道的100,000个观看视频更好。

其次,由于错误的原因,例如点击诱饵标题或缩略图,或存在争议,视频可能会获得很多观看次数。我个人对这些类型的视频不感兴趣。

我仅根据观看人数与订阅者的比率(即,将观看次数除以订阅者人数)测试排名。

当我查看结果时,其中一些看起来很有希望。但是,我确实注意到了一个问题:对于订阅者人数很少的视频,得分会大大放大并浮出水面。

我玩了各种各样的阈值,这些阈值似乎很好地过滤了这些低分辨率低视角视频。我在几个不同的主题上测试了代码,并开始获得不错的结果。

但是,我注意到了另一个问题:发行时间较长的视频获得更多观看次数的机会更大。他们只是需要更长的时间来积累它们。

我的计划是每周运行一次此代码,因此我决定将搜索范围限制为最近7天发布的视频。

我还将“发布后的天数”添加到了排名指标中。我决定将之前的得分除以天数,以使最终指标与视频的播放时间成正比。

我对代码进行了进一步测试,发现我一直在确定想要观看的精彩视频。我对公式的不同组成部分进行了不同的变化和加权处理,但是发现它是一门不精确的科学,因此我选择了以下公式,发现均衡的简单性和有效性:

首先,我使用查询词“医学院”进行了测试。我得到以下结果:

然后,我去了YouTube,手动搜索了有关医学院和医学院的视频。我发现我的工具已经捕获了所有我有兴趣观看的工具。特别是,名叫凯文·贾巴(Kevin Jabbal)的医生录制的第二个视频很受欢迎。

我在另一个搜索字词上进行了测试; “生产力”,并再次对结果感到满意:

第二个视频有点流氓,而不是我想要的视频类型。但是我想不出一种简单的方法来筛选这些视频,这些视频是由于搜索字词的其他含义而被选中的。

几个月前,OpenAI分享了一个非常有趣的新神经网络,称为“ GPT-3”。我决定使用“ GPT-3”作为搜索字词测试我的视频查找器,并找到了以下视频:

这是一部只有数千名订阅者的创作者的有趣视频。

如果我在YouTube.com上进行了相同的搜索,则必须滚动浏览所有大型频道上有关GPT-3的视频,然后才能最终找到位于第31位的上述视频。

使用我编写的视频搜索器代码,以新颖的视角查找这些有趣的视频要容易得多。

在过去的几个月中,我根据自己的兴趣尝试了多个不同的搜索字词,例如“人工智能”,“医学AI”和“ Python编程”。毫无疑问,视频搜索器建议的前五名视频中至少有一个有趣的视频。

使用搜索字词,搜索期和API密钥从YouTube提取视频信息

我想要一种自动运行此脚本的方法,因此决定使用AWS Lambda(无服务器平台)。 Lambda使您可以编写处于休眠状态的代码,直到被触发为止(例如,每周一次,或基于事件)。

我理想的工作流程是每周使用Lambda自动向自己发送视频列表的电子邮件。这样一来,我就可以挑选过去一周想要观看的视频,而不必再访问YouTube主页。

这是我第一次使用Lambda,我尝试尽一切办法,只是无法让所有导入的库同时工作。要执行,代码需要boto3电子邮件客户端,用于API调用的OAuth,用于存储结果的Pandas和许多子依赖项。通常,安装这些软件包非常简单,但是在Lambda上则存在额外的挑战。首先,上传有内存限制,因此我需要压缩库并在上传后解压缩。其次,事实证明,AWS Lambda使用自定义linux,这使得导入正确的,交叉兼容的库变得更加棘手。第三,我的Mac在其虚拟环境中表现异常。

在花了大约10到15个小时来搜寻StackOverFlow,上传和重新上传不同的代码库并咨询了几个朋友之后,我仍然无法运行它。所以最终,令我沮丧的是,我决定放弃。 (如果您有什么好主意,请告诉我!)

因此,我选择了方案B:我每周(在自动发送电子邮件提示后)在本地计算机上手动运行一次脚本。老实说,这是世界的尽头。

总而言之,这是一个非常有趣的项目。我学习了如何使用YouTube API,熟悉了AWS Lambda并创建了一个可以继续使用的工具。

只要我遵守纪律不要点击太多的“后续”链接,使用我的代码来决定观看哪些视频确实可以提高我的工作效率。我可能会错过一些有趣的视频,但我的目的并不是要全面捕捉所有值得观看的优秀视频(我认为这是不可能的)。相反,我想提高我观看的视频的质量标准。

这个项目只是我有关自动化信息处理的许多想法之一。我相信,通过智能数字极简主义,我们有巨大的潜力来提高生产力并重新夺回我们的时间。

如果您有兴趣加入我的旅程,可以关注我的邮件列表和You​​Tube频道。