这两天闲来无事,回顾了一下年前B站沸沸扬扬的代码泄露事件,大致翻阅了一些泄露的代码发现了一些有意思的事情,其中就包括 B站视频推荐 加权部分算法 的相关代码。
不过后期 B站官方辟谣说是老版本代码,并且已经进行相应的防御措施,但是后端大体的架构还是不会变化太多,所以就仁者见仁智者见智了,仅供吃瓜参考。
姊妹篇: B站 (哔哩哔哩) 泄露源码中的有趣片段(彩蛋)
首先回顾一下B站源码泄露事件始末
北京时间 2019年4月22日下午16点左右,一个名叫“openbilibili”的用户在Github上创建了“go-common”代码库,而那显然就是B站网站后台工程源码。B站在技术圈炸锅,其后端源码被恶意“开源”,被上传至 GitHub 供全球用户下载。
通俗一点来解释,这就好像是有人把你家的房子图纸发在了微博上,门在哪锁在哪甚至钥匙在哪都标得一清二楚。虽然单凭这个还不至于让所有人都能进你家门,但其实也足够头疼了。
结果就是截至北京时间17:04,该项目已获得6597个标星。fork数量已经突破6000(这个操作会将被Fork的代码仓库中所有的信息,包括源代码、原仓库中的issus、历史提交等全部复制到你的账号中),issues已经成了弹幕,场面已经失控。
最终B站官方也是就此做出了 “回应”,这一代码库已被GitHub「封杀」,微博上已经看不到此事的踪影,知乎上关于该事件的话题也基本被删。
不过总的来说次此泄露对B站的影响也是不可估量的,也是导致了B站股价直接下跌4%.
有关B站的推荐和加权算法
抱着吃瓜的心理在翻看后台代码时,发现了这么一段代码,注意上面的注释。
//countArcHot 视频=硬币*0.4+收藏*0.3+弹幕*0.4+评论*0.4+播放*0.25+点赞*0.4+分享*0.6 最新视频(一天内发布)提权[总值*1.5]
func countArcHot(t *api.Stat, ptime int64) int64 {if t == nil {return 0}hot := float64(t.Coin)*0.4 +float64(t.Fav)*0.3 +float64(t.Danmaku)*0.4 +float64(t.Reply)*0.4 +float64(t.View)*0.25 +float64(t.Like)*0.4 +float64(t.Share)*0.6if ptime >= time.Now().AddDate(0, 0, -1).Unix() && ptime <= time.Now().Unix() {hot *= 1.5}return int64(math.Floor(hot))
}// countArtHot 专栏=硬币*0.4+收藏*0.3+评论*0.4+阅读*0.25+点赞*0.4+分享*0.6 最新专栏(一天内发布)提权[总值*1.5]
func countArtHot(t *model.Meta) int64 {if t.Stats == nil {return 0}hot := float64(t.Stats.Coin)*0.4 +float64(t.Stats.Favorite)*0.3 +float64(t.Stats.Reply)*0.4 +float64(t.Stats.View)*0.25 +float64(t.Stats.Like)*0.4 +float64(t.Stats.Share)*0.6if int64(t.PublishTime) >= time.Now().AddDate(0, 0, -1).Unix() && int64(t.PublishTime) <= time.Now().Unix() {hot *= 1.5}return int64(math.Floor(hot))
}
接下来就是对这段代码的解读:
首先像大多数的推荐算法一样,小破站的视频推荐也是通过对各项数据进行加权求得视频权重然后在进行再区分,提高视频出现概率;
我们能帮助提高视频在哪些地方的出现概率呢?
① b站『搜索』时出现的默认结果页面
② 对该视频话题感兴趣的其他用户的首页
③ 任何会有推荐视频的地方,比如用户看完一个视频后网站自动推荐一组视频
其中影响权重的主要是以下因素:
视频是: 硬币、收藏、弹幕、评论、播放量、点赞数、分享数、更新时间。
专栏文章是:硬币、收藏、评论、阅读量、点赞数、分享数、更新时间。
总结:
- 视频多了一个弹幕加成。
- 在2个内容里,分享都占到了最高权重,有0.6,这个可以理解,大部分平台都是分享权重无限高。
- 播放量和阅读量真的是弟弟,两边都是最低权重,不过相比评论这些二次互动,权重低可以理解。
- 评论比收藏的权重要高,这个有点特殊。因为不少平台是收藏权重大于评论的。为什么呢?因为一般来说,很多人看见内容都会评论,但是只有感觉特别好的内容,才会收藏。
收藏权重高,意味着重视内容质量,更重视大家觉得好的干货。
评论权重高,则意味着注重互动,更重视能吸引大家讨论的内容。
目前B站在代码上的思路来看,更重视能引发讨论热议的内容。
那么对于我们来说这段代码有什么实际意义呢?
在如今的流量时代,高曝光就意味着能有更多的人看到,从而转化为 高流量、高粉丝,高收益
如果你是UP主 :
那么想要提高自己视频/文章的曝光度,尽可能增加 分享,评论,弹幕的数量 会是更有效的方法,而去刷播放量则意义不大(这样就很好的解释了为什么有些UP老是骗弹幕 ~)
如果你是用户 :
点赞、硬币、阅读量 可能更多的影响的是你所看UP的收益,想要为喜欢的UP增加曝光不如多刷几条弹幕和评论。
如何搞定自己的首页推荐内容 ——— 对视频点击不感兴趣能极大的减少相关话题的权重。
首页看到不感兴趣的视频,首页视频缩略图下面右边按钮点击,选择不感兴趣,调教一段时间就好了。
如果有什么要补充的,欢迎下方👇评论区留言。
1份赞许 = 100分的认可,如果感觉还不错,点个赞👍 支持一下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 👌 我的博客 ,期待在这里与你相遇 ~
好文推荐: 20秒 一键配置 VSCode (Visual Studio Code) C/C++开发环境 !
一道微软面试题引出的 int与unsigned隐式转换问题
Facebook前身 哈佛“选美”网站Facemash核心算法 --- ELO等级分制度(附源码)