class="hljs-ln-code"> class="hljs-ln-line">func countArcHot(t *api.Stat, ptime int64) int64 { class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line"> if t == nil { class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> return 0 class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line"> } class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> hot := float64(t.Coin)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Fav)*0.3 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Danmaku)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Reply)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.View)*0.25 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Like)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Share)*0.6 class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line"> if ptime >= time.Now().AddDate(0, 0, -1).Unix() && ptime <= time.Now().Unix() { class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line"> hot *= 1.5 class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="15"> class="hljs-ln-code"> class="hljs-ln-line"> } class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="16"> class="hljs-ln-code"> class="hljs-ln-line"> return int64(math.Floor(hot)) class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="17"> class="hljs-ln-code"> class="hljs-ln-line">} class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="18"> class="hljs-ln-code"> class="hljs-ln-line"> class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="19"> class="hljs-ln-code"> class="hljs-ln-line"> class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="20"> class="hljs-ln-code"> class="hljs-ln-line">func countArtHot(t *model.Meta) int64 { class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="21"> class="hljs-ln-code"> class="hljs-ln-line"> if t.Stats == nil { class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="22"> class="hljs-ln-code"> class="hljs-ln-line"> return 0 class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="23"> class="hljs-ln-code"> class="hljs-ln-line"> } class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="24"> class="hljs-ln-code"> class="hljs-ln-line"> hot := float64(t.Stats.Coin)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="25"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Stats.Favorite)*0.3 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="26"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Stats.Reply)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="27"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Stats.View)*0.25 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="28"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Stats.Like)*0.4 + class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="29"> class="hljs-ln-code"> class="hljs-ln-line"> float64(t.Stats.Share)*0.6 class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="30"> class="hljs-ln-code"> class="hljs-ln-line"> if int64(t.PublishTime) >= time.Now().AddDate(0, 0, -1).Unix() && int64(t.PublishTime) <= time.Now().Unix() { class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="31"> class="hljs-ln-code"> class="hljs-ln-line"> hot *= 1.5 class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="32"> class="hljs-ln-code"> class="hljs-ln-line"> } class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="33"> class="hljs-ln-code"> class="hljs-ln-line"> return int64(math.Floor(hot)) class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="34"> class="hljs-ln-code"> class="hljs-ln-line">} class="hide-preCode-box">
class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
接下来就是对这段代码的解读:
首先像大多数的推荐算法一样,小破站的视频推荐也是通过对各项数据进行加权求得视频权重然后在进行再区分,提高视频出现概率;
我们能帮助提高视频在哪些地方的出现概率呢?
① b站『搜索』时出现的默认结果页面
② 对该视频话题感兴趣的其他用户的首页
③ 任何会有推荐视频的地方,比如用户看完一个视频后网站自动推荐一组视频

其中影响权重的主要是以下因素:
视频是: 硬币、收藏、弹幕、评论、播放量、点赞数、分享数、更新时间。
专栏文章是:硬币、收藏、评论、阅读量、点赞数、分享数、更新时间。

总结:
- 视频多了一个弹幕加成。
- 在2个内容里,分享都占到了最高权重,有0.6,这个可以理解,大部分平台都是分享权重无限高。
- 播放量和阅读量真的是弟弟,两边都是最低权重,不过相比评论这些二次互动,权重低可以理解。
- 评论比收藏的权重要高,这个有点特殊。因为不少平台是收藏权重大于评论的。为什么呢?因为一般来说,很多人看见内容都会评论,但是只有感觉特别好的内容,才会收藏。
收藏权重高,意味着重视内容质量,更重视大家觉得好的干货。
评论权重高,则意味着注重互动,更重视能吸引大家讨论的内容。
目前B站在代码上的思路来看,更重视能引发讨论热议的内容。
那么对于我们来说这段代码有什么实际意义呢?
在如今的流量时代,高曝光就意味着能有更多的人看到,从而转化为 高流量、高粉丝,高收益
如果你是UP主 :
那么想要提高自己视频/文章的曝光度,尽可能增加 分享,评论,弹幕的数量 会是更有效的方法,而去刷播放量则意义不大(这样就很好的解释了为什么有些UP老是骗弹幕 ~)
如果你是用户 :
点赞、硬币、阅读量 可能更多的影响的是你所看UP的收益,想要为喜欢的UP增加曝光不如多刷几条弹幕和评论。
如何搞定自己的首页推荐内容 ——— 对视频点击不感兴趣能极大的减少相关话题的权重。
首页看到不感兴趣的视频,首页视频缩略图下面右边按钮点击,选择不感兴趣,调教一段时间就好了。
如果有什么要补充的,欢迎下方👇评论区留言。
1份赞许 = 100分的认可,如果感觉还不错,点个赞👍 支持一下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 👌 我的博客 ,期待在这里与你相遇 ~
好文推荐: 20秒 一键配置 VSCode (Visual Studio Code) C/C++开发环境 !
一道微软面试题引出的 int与unsigned隐式转换问题
Facebook前身 哈佛“选美”网站Facemash核心算法 --- ELO等级分制度(附源码)
>>
评论记录:
回复评论: