b站源码拜读-推荐算法实现原理

参考博客

首先像大多数的 推荐算法 一样,小破站的视频推荐也是通过对各项数据进行加权求得视频权重然后在进行再区分,提高视频出现概率;

其中影响权重的主要是以下因素:

视频是: 硬币、收藏、弹幕、评论、播放量、点赞数、分享数、更新时间。

专栏文章是:硬币、收藏、评论、阅读量、点赞数、分享数、更新时间。

视频多了一个弹幕加成。 在2个内容里,分享都占到了最高权重,有0.6,这个可以理解,大部分平台都是分享权重无限高。 播放量和阅读量真的是弟弟,两边都是最低权重,不过相比评论这些二次互动,权重低可以理解。 评论比收藏的权重要高,这个有点特殊。因为不少平台是收藏权重大于评论的。为什么呢?因为一般来说,很多人看见内容都会评论,但是只有感觉特别好的内容,才会收藏。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

//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))
}