从B站源码里探索推荐算法的奥义

news/2024/5/20 0:10:27 标签: 算法, 推荐算法, 安全, 数据分析, 数据挖掘

这两天闲来无事,回顾了一下前几年B站沸沸扬扬的代码泄露事件,大致翻阅了一些泄露的代码发现了一些有意思的事情,其中就包括 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站的推荐和加权算法

抱着吃瓜的心理在翻看后台代码时,发现了这么一段代码,注意上面的注释。

//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.6
    if 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.6
    if 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增加曝光不如多刷几条弹幕和评论。

如何搞定自己的首页推荐内容 ——— 对视频点击不感兴趣能极大的减少相关话题的权重。

首页看到不感兴趣的视频,首页视频缩略图下面右边按钮点击,选择不感兴趣,调教一段时间就好了。

转载:https://blog.csdn.net/qq_41523096/article/details/104339825


http://www.niftyadmin.cn/n/1425745.html

相关文章

Python3 字符串转ASCII码、字符串转16进制

字符串与ASCII码转换 #ascii转字符串 a_ascii 97 b chr(a_ascii) print(b) >a#字符串转ascii abc a x ord(abc) print(x) >97对于一个长的字符串使用如下&#xff1a; import numpy as npstr hello worldascii np.fromstring(str, dtypenp.uint8)print(ascii) &g…

【图解RSA加密算法】RSA非对称密码算法的Python实现保姆级教程 | 物联网安全 | 信息安全

系列索引&#xff1a;【图解安全加密算法】加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 文章目录一、什么是RSA加密算法二、RSA算法原理三、具体要求四、代码实现五、实验结果与心得体会一、什么是RSA加密算法 RSA加密算法是一种非对称加密算法。在公开密…

*生成水印

生成水印(添加图片,生成文字或图)问题1.只能为jpg格式的加水印2.目标图大小不同写的字怎么控制大小和位置3.想在右下角加字或图,怎么控制 添加水印package test;import java.io.*;import com.sun.image.codec.jpeg.*;import java.awt.*;import java.awt.image.BufferedImage;im…

*hibernate 双向关联和查询技巧

转贴:http://blog.csdn.net/caoyinghui1986/archive/2008/06/15/2549386.aspx 多对一的 双向关联关系使用连接表的双向关联 多对多 例子: 三个表一个关联表PRODUCTS&#xff08;产品表&#xff09; 和 CATEGORIES(类别表)一对多 PRODUCT_SUPPLY 为 SUPPLIERS&#…

【图解SHA1杂凑算法】SHA1杂凑算法的Python实现保姆级教程 | 物联网安全 | 信息安全

系列索引&#xff1a;【图解安全加密算法】加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 起初写实验时找到的代码大多基于c/c&#xff0c;python可参考的资料很少&#xff0c;所以借着这次实验的机会把自己走过坑分享一下&#xff0c;希望对大家有所帮助&am…

代理模式

学习spring 之前java中的几个模式是很重要的 其中一个就是代理模式。下面用几个简单的例子来理解一下这个模式。以及它的应用。 1.基础讲解java.lang.reflect 提供类和接口&#xff0c;以获得关于类和对象的反射信息。 Proxy 提供用于创建动态代理类和实例的静态方法&#x…

【图解DSA数字签名算法】DSA签名算法的Python实现 | 物联网安全 | 信息安全

系列索引&#xff1a;【图解安全加密算法】加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 DSA数字签名算法基于SHA1哈希算法&#xff0c;关于SHA1的实现看另一篇文章。 文章目录一、什么是DSA二、DSA签名算法流程&#xff08;1&#xff09;DSA 签名过程&…

MySQL 错误代码以及出错信息对照大全

0101 属于其他进程的专用标志。0102 标志已经设置&#xff0c;无法关闭。0103 无法再次设置该标志。0104 中断时无法请求专用标志。0105 此标志先前的所有权已终止。0106 请将软盘插入驱动器 %1。0107 后续软盘尚未插入&#xff0c;程序停止。0108 磁盘正在使用或已由其他进程锁…