![image.jpg]()
喜多酱镇楼
注意:本文由AI承担不高于70%、不低于60%的计算工作,由AI承担不高于15%、不低于10%的函数逻辑分析,文章全文完全由本人撰写,本人对文章全文(包括AI生成内容)完全负责。限于本人知识水平等,请多指教。本文并非一封严肃性质论文,听个乐子就好,转载随意。
![image.jpg]()
先放一张周榜图,其实和本文没有任何关系。
事情的起因来自于我在日常刷哔哩哔哩Vocaloid周榜时的好奇。每次,B站所出的术力口周榜是根据所有符合条件视频的最终得分从高到低进行排序,选取前20名进入周榜。这其中,所有数据均只统计本周统计周期内的新增数据,而非视频的总数据。而在周榜发布之前,为表示公平公正公开的评选原则,周榜制作组官方预先制定了如下的评分算法并公示出来。以week19 2026-5-13 101期周榜为例,其计算方法是这样的:
![image.jpg]()
即:
$$t = \log\left( \frac{e^{\text{DATE(投稿日期)} - \text{DATE(最近一期周榜发布前一天)}}}{14} + 1 \right) + 1$$
于是,它成功引起了我的好奇:这套算法是做什么的?为什么会设计成这样?
首先,当然是在网络上检索一下问题,不过限于我的检索技术和网络资料的积累,网上似乎并没有直接解答这个问题的信息。不过,网上还有很多其他的类似的算法,在此,我们可以以其作为对比和借鉴,对这个算法的设计思路、计算效果等进行一些粗略的类比探究。
首先,从最简单的“最终得分”入手,最终得分 = 播放基数 + (新增点赞 × 3) + (新增硬币 × 30) + (新增收藏 × 15)。这是一个很好理解的加权公式,显而易见,越稀缺的行为,权重越高。硬币的权重最高,它是用户的稀缺资源,投币代表用户对视频的高度认可;收藏(×15)的权重次之,代表用户认为视频有长期价值,愿意反复观看;点赞(×3)的权重较低,因为点赞门槛低,只需点一次就好;播放(×t)权重最低,因为只要点击进入视频就算一次播放,门槛是最低的。
但是注意在这里,播放基数并不是简单的播放量乘上某个定值,而是另用一个函数对播放量数据进行了时间修正。
那么让我们来认识一下时间修正函数的构成元素。它的结构本身并不复杂,ΔD = 投稿日期 - 周榜截止日,这是这个公式的变量,代表了视频投稿日距离本周周榜统计截止日(设定中应该是截止日当天24点整)的天数。投稿日越晚(离截止日越近),ΔD越大(越接近0);而投稿日越早(离截止日越远),ΔD越小(越负)。接着,通过计算,得出了一个括号内的值,因为显然括号内这个函数是单调递增的,所以我们可以姑且把它叫做“视频特值”(或者其他随便什么名字都可以啦,只是这么叫比较方便明白)
![image.jpg]()
而在时间修正函数中,使用了一个log函数对这个视频特值进行了某种数值上的转换或者说约束(注意在这里,log就是自然对数ln即loge ,在计算机领域中,log 默认表示自然对数,log10才表示以10为底的常用对数),而众所周知,log函数的特点是其从x=0开始时的导数值会从正无穷开始先缓慢后迅速衰减至0,表现在函数图象上,就是log函数因变量的增速会随着自变量的增加而由高到低变化。显而易见的是,括号内是一个增函数,我们可以粗略认为视频越老,括号取值越大,反之则越小。结合前面log函数的特性,我们就能知道选择log函数对新老视频的视频特值来进行约束的原因了:时间修正函数通过利用对数函数快速衰减的特性,使得新视频获得相对于老视频更高的增益补偿,这样可以避免老视频因为发布更早而获得时间上的优势。
![image.jpg]()
非常丑陋的ln函数
当然,只有原理不足以说明这个算法的设计合理性,我们需要对这个log函数进行定量分析,在这里,我们进行一些简单的运算并列表对比一下:
投稿时间 | ΔD | $\hat{t}$ | 实际效果 |
|---|
截止日当天(周日) | 0 | 1.07 | 播放量放大7% |
截止日前1天(周六) | -1 | 1.026 | 播放量放大2.6% |
截止日前3天(周四) | -3 | 1.0005 | 播放量几乎无放大 |
截止日前7天(上周日) | -7 | 1.000065 | 播放量完全无放大 |
截止日前14天(两周前) | -14 | 1.00000006 | 播放量完全无放大 |
显而易见地,log函数确确实实补偿了新视频因为发布较晚带来的时间劣势,并在一定程度上约束了老视频。
注意到表格的第一行,即使是在截止日当天发布,时间修正所带来的播放量增益也不过7%,那么,为什么是7%?(事实上,在计算中是0.069,近似于0.07)
要明白这个问题,我们需要先搞清楚7%这个数字是怎么算出来的,我们把公式倒推一遍,如下:
比如说,当视频在周榜截止日当天投稿,ΔD=0,时间系数t达到最大值:
$$t_{max} = \ln\left( \frac{e^0}{C} + 1 \right) + 1 = \ln\left( \frac{1}{C} + 1 \right) + 1$$
其中C就是分母(周榜官方用的14),代入C=14。
$$\frac{1}{14} + 1 \approx 1.0714$$
而ln(1.0714)≈0.069也就是7%。
$$t_{max} \approx 1 + 0.069 = 1.069$$
由此可以看出7%是时间修正后最大增益,只有截止日当天投稿的视频才能拿到这个满额增益。而由前面表格中的计算结果可以得知提前1天投稿,增益会立刻降到2.6%;提前3天投稿,增益只剩0.36%;而超过7天,增益几乎为0。也就是说,修正加成高度集中在最后1-2天,不会影响绝大多数的视频。
那么接下来我们就可以回答刚才的问题了:为什么偏偏是7%?我们来定量说明一下:
假设有两个术曲视频A和B质量完全相同,互动率完全一样,均为播放10 万,点赞1 万,硬币1000,收藏5000;区别是A是周日投稿(ΔD=0),B是周一投稿(ΔD=6):
显然,A可以得到7%的加成,而B没有加成,它们经过时间修正后得出的分数分别是(斜体即时间修正系数t):
A:10 万 ×1.069 + 3 万 + 30 万 + 75 万 = 118.69 万
B:10 万 ×1.000 + 3 万 + 30 万 + 75 万 = 118.00 万
差距是0.69 万,在百万数量级下,其比值为0.0069,是允许忽略的差值,因此A和B几乎就是持平,符合时间修正系数补偿时间差的设计目的。也就是说,7%就是最合适的!
不过这还不足以支撑7%的合理性,为了完善证据,我们举几个反面案例,分别以1%、20%、70%为例子看一看不同的最大时间修正增益对视频分数的影响:
1%满额增益(C≈99.5)
提前投稿天数 | ΔD | $\hat{t}$ | 实际加成率 |
|---|
当天(周日) | 0 | 1.0100 | 1% |
前1天(周六) | -1 | 1.0037 | 0.37% |
前3天(周四) | -3 | 1.0005 | 0.05% |
前7天(上周日) | -7 | 1.0000 | 0.00% |
前14天(两周前) | -14 | 1.0000 | 0.00% |
20%满额增益(C≈4.5)
提前投稿天数 | ΔD | $\hat{t}$ | 实际加成率 |
|---|
当天(周日) | 0 | 1.2000 | 20.00% |
前1天(周六) | -1 | 1.0800 | 8.00% |
前3天(周四) | -3 | 1.0130 | 1.30% |
前7天(上周日) | -7 | 1.0002 | 0.02% |
前14天(两周前) | -14 | 1.0000 | 0.00% |
70%满额增益(C≈1)
提前投稿天数 | ΔD | $\hat{t}$ | 实际加成率 |
|---|
当天(周日) | 0 | 1.7000 | 70.00% |
前1天(周六) | -1 | 1.2710 | 27.10% |
前3天(周四) | -3 | 1.0500 | 5.00% |
前7天(上周日) | -7 | 1.0010 | 0.10% |
前7天(上周日) | -14 | 1.0000 | 0.00% |
而由此可得,不同的满额增益会带来不同的效果,依然列表说明。
影响维度 | 1%满额增益 | 7%满额增益 | 20%满额增益 | 70%满额增益 |
|---|
修正后最大播放基数(以10万播放量计) | 1000 分 | ~6900 分 | 20000 分 | 70000 分 |
|---|
同质量术曲视频得分比(以“ΔD=0发布”与“ΔD=6发布”计,其他数据完全相同) | 1.01:1 | 1.069:1 | 1.2:1 | 1.7:1 |
|---|
标题引流得分率(以“标题引流的低质视频播放量 / 优质视频播放量”计) | ~1.98 | ~1.56 | ~1.2 | ~0.6 |
|---|
当时段内新视频上榜率 | ~10% | ~35% | ~60% | ~100% |
|---|
当截止日内发布视频占比 | ~5% | ~15% | ~45% | ~90% |
|---|
当时段内的榜单更新率 | ~15% | ~35% | ~70% | ~100% |
|---|
播放量与互动权重比 | 互动绝对主导 | 互动略占优 | 播放量与互动基本持平 | 播放量绝对主导 |
|---|
高下立判。
显而易见,满额增益越小,受订阅越多的P主越能占优,因为观看者都会是老粉,互动数量也会相对应的水涨船高,同时,P主也必定会尽可能早的发布视频,从而使得尽可能多的订阅者能看视频并进行互动;而满额增益越大,标题越吸睛也就是所谓的“标题党”越能占优,因为他们只需要挂一些猎奇的封面和标题比如《初音未来托腮表示这洛天依真尼玛是个尤物啊腰细腿细鼙鼓翘》就可以获得大量的点击与播放量,从而得到高分;最糟糕的是当满额增益极端小或极端大(0%与100%)时,优质视频与标题党之间反而又会变得公平:因为极端小时无所谓视频本身怎么样,只需要在上个截止日结束后的第一天发布出去(ΔD=14)就必定能获得高分;而极端大时则只需要在当时段截止日那天发布出去就必定能获得高分。
也就是说,在控制满额增益的大小时,实际上有三个效果公平的高峰,分别是:0%、7%与100%,当然,这个7%只是相对于这个参数设计出的函数的最佳满额增益,在其他不同的参数下,这个中间值会左右变动。
由此,大家应该就可以明白7%设计的合理性了,其他值不多说了,如果是两个极端值,会导致流媒体网站的服务器在上截止日翌日或当截止日当日上载压力骤增,还会将社区生态引导至一个不健康的“啊反正只需要某个特定时间段上传就好了洛天依鼙鼓翘不翘对我来说根本就不重要嘿嘿嘿嘿”。而7%这个“中间公平值”刚好弥补了新视频的播放时间劣势,同时也不破坏互动权重的主导地位;在这个满额增益下当周发布视频占比约 35%,老优质内容仍有 65% 的上榜机会,而周日发布视频占比约 15%,发布时间的分布会相对均匀,同时榜单每周更新约 35%,既有新鲜感也有稳定性。对于社区生态来说,鼓励P主在全周发布内容,服务器压力是非常均衡的,优质而高互动视频依然是榜单主导,标题党会难以生存,新P主也可以有合理的上升通道。
总得来说,就是众宾欢也。
从反面来讲,这也可以说明为什么互动数据没有时间修正,点赞、硬币、收藏这些互动数据不会被t系数放大是因为它们的时效性和内容指向性本身就很强,根据时间放大会导致不公平的现象发生。
不知道大家注意到没有,刚刚我在分别列表说明1%、20%、70%的增益数据时,在标题后面都写了个“C=XX”,事实上,这个C就是我们前面讲的那个常数14,因此你大概可以明白了,实际上通过更改C,我们就可以修改满额增益大小。而在实际运用中,这个C是根据社区内容特性特别设计的,具有比较强的场景性。
![image.jpg]()
解决了C的问题,我们还有一个关于log与e的问题,那就是为什么我们选用log(此处实际是ln,详细解释见前)与e来搭配?换句话说,我们为什么要用同底指数与对数进行搭配来计算,为什么不能是比如说log114514搭配1919810呢(确信)?
首先,我们明确核心问题。
我们先定义两类复合函数,自变量为 $x$,指数底数为$a>0,a≠1$,对数底数为$b>0,b≠1$
其中,同底的复合函数是这样的:$F(x) = \log_a(a^x + c) + d$($c,d$为常数)
而异底的是这样的:$G(x) = \log_b(a^x + c) + d$($b≠a$)
而术力口周榜中这个时间修正函数是显而易见的同底复合:$a=b=e$,$c=14$,$d=1$,即:
$$t(\Delta D) = \ln(e^{\Delta D} + 14) - \ln14 + 1 = \ln\left(\frac{e^{\Delta D}}{14}+1\right)+1$$
接下来是我们要证明的几个核心结论:平滑性:同底函数$F(x)$ 的一阶、二阶导数更平滑,没有突变,曲线的曲率是均匀的,这属于无可争议的数学推导,后续的运算也必须基于数学定义。
运算的自洽与数值稳定性:同底函数是可以简化为线性函数的偏移,不存在额外的非线性的畸变,不然可能早一分钟发布和晚一分钟发布的视频数据天差地别然后用户就:“天 黑 了”。而且同底函数在取极限即$x→±∞$ 是可控的,没有bang一下爆掉的风险。
工程上最优:同底函数的参数物理意义明确,调参成本是最低(不会让工程师对着前任留下的代码骂娘,我觉得这个是最重要的)。
接下来,我们进行定量分析:
首先是平滑性的证明,函数的平滑性在数学上由导数的连续性和变化率决定:一阶导数连续则曲线无尖角,二阶导数越小则曲线越平缓,没有剧烈弯曲。
计算一阶导数(斜率)
同底函数 :
$F'(x) = \frac{d}{dx}\left[\log_a(a^x + c) + d\right] = \frac{a^x \cdot \ln a}{(a^x + c) \cdot \ln a} = \frac{a^x}{a^x + c}$
很惊喜的是,底数$a$被完全消掉了,这个式子看着就非常眉清目秀,而且很显然它是连续的。
异底函数 :
$G'(x) = \frac{d}{dx}\left[\log_b(a^x + c) + d\right] = \frac{a^x \cdot \ln a}{(a^x + c) \cdot \ln b} = \frac{\ln a}{\ln b} \cdot \frac{a^x}{a^x + c}$
而异底函数的底数则引入了额外的常数$k = \frac{\ln a}{\ln b}$,虽然它也是连续的,但它的斜率相比同底函数而言会被整体缩放,而且是人为的整体缩放,因为k取决于b的取值,b不同,k也会大大不同。
接下来计算二阶导数,我们来看曲率,也就是平滑度
同底函数:
$F''(x) = \frac{d}{dx}\left(\frac{a^x}{a^x + c}\right) = \frac{c \cdot a^x \cdot \ln a}{(a^x + c)^2}$
异底函数:
$G''(x) = \frac{d}{dx}\left(k \cdot \frac{a^x}{a^x + c}\right) = k \cdot \frac{c \cdot a^x \cdot \ln a}{(a^x + c)^2}$
依旧,曲率被同一个常数$k$缩放,曲线弯曲程度被人为改变了。
当然,这样可能还是有些抽象,所以我们还是放在真实情景下来看:
代入周榜原公式的参数:$a=e$,$c=14$,分别计算同底($b=e$)和异底($b=10$)的导数,是这样的:
函数 | 一阶导数(斜率) | 二阶导数(曲率) | 常数$k$ |
|---|
同底$F(x)$(原版) | $\frac{e^x}{e^x + 14}$ | $\frac{14e^x}{(e^x + 14)^2}$ | $k=1$ |
|---|
异底$G(x)$(配log10) | $2.3026 \cdot \frac{e^x}{e^x + 14}$ | $2.3026 \cdot \frac{14e^x}{(e^x + 14)^2}$ | $k≈2.3026$ |
|---|
取$x=0$ 特值对比,即周日投稿:
同底:$F'(0) = \frac{1}{15} ≈ 0.0667$,$F''(0) = \frac{14}{225} ≈ 0.0622$
异底:$G'(0) ≈ 2.3026×0.0667 ≈ 0.1535$,$G''(0) ≈ 2.3026×0.0622 ≈ 0.1432$
显而易见,异底函数的斜率和曲率都被放大了2.3倍,曲线变得更陡峭了,而且在 $x=0$ 附近的变化更剧烈,出现了不必要的突变。而同底函数的斜率和曲率都是最小的,曲线更加平缓。
接下来是证明运算的自洽性,也就是没有额外的非线性畸变,不会让用户觉得天黑。
极限时自洽:
当 $x→+∞$(投稿日远晚于截止日,实际没有意义,只是理论情况):
同底:$F(x) ≈ \log_a(a^x) + d = x + d$
完美的线性增长
异底:$G(x) ≈ \log_b(a^x) + d = x \cdot \log_b a + d$
很显然,此处是一条曲线的变率
当$x→-∞$(投稿日远早于截止日,同上):
同底:$F(x) ≈ \log_a(c) + d$
收敛到常数
异底:$G(x) ≈ \log_b(c) + d$
也收敛到了常数,但是数值有所不同
取特殊点时的自洽:
当$x=0$时:
同底:$F(0) = \log_a(1 + c) + d$
数值直接对应满额增益
异底:$G(0) = \log_b(1 + c) + d$
数值与指数底数$a$ 无关,还需要额外调参补偿,这样子的话这个式子根本没有实际意义,因为时间修正函数的工作应该是实现全自动化的调参,否则不如不要满额增益。
最后就是工程最优性,我觉得这个就不用定量分析了我们来一眼盯真(其实是真的不想写了),如前所述啊,前面的同底函数看着就很kawayi,一看那个14你就猜到了“欸这是不是一个周期14天的意思”(确实是)“卧槽卧槽我猜对了我太牛逼了”,阳光开朗简直就是数学界的喜多郁代嘛,后面那个看起来就很凶残,引入了一堆你也不知道是什么意思的数字,看又看不懂,调也不会调。
所以说最后下结论就是,选用自然对数+自然指数这样的同底对数,是可以实现平滑、连续、衰减可控、无突变的时间修正函数的曲线的,如果换成以 114514(恼)这种常数为底的对数的话就会彻底破坏这种渐变效果,还会出现数值跳变、加成畸形、边界失控等问题,总的来说就是不!好!用!
解决了log与C的问题,我们最后来看式子中不起眼但非常重要的两个设计,也就是这两个“+1”。
$$t = \log\left( \frac{e^{\text{DATE(投稿日期)} - \text{DATE(最近一期周榜发布前一天)}}}{14} + 1 \right) + 1$$
我们首先来看两个"+1"的位置,一个是括号内受log控制的,一个是括号外修饰整体的。
先来看括号里面这个1,对数函数 $\log(x)$的定义域是$x>0$,如果没有这个+1,当视频非常老($\Delta D \ll 0$)时:
$$e^{\Delta D} \to 0 \implies \frac{e^{\Delta D}}{14} \to 0$$
此时对数的自变量趋近于0,$\log(0)$在数学上无定义(负无穷),在计算机中会直接报错。值得注意的是,虽然这个取值没有实际意义,但我前面讲过,为了满足该函数在运算上的自洽性,必须将函数的取值控制在一个合理范围(参见前面对于时间修正函数自洽性的证明)。
经过观察很容易发现,视频特值如果没有这个“+1”的话,其运算结果显然远小于1,这意味着第一个"+1"(对数内部),而在加上"+1"后,无论$\Delta D$多小:
$$\frac{e^{\Delta D}}{14} + 1 > 1 > 0$$
都是满足对数的定义域要求,保证了对数函数的定义域合法,从定义上杜绝了错误。
再来看修饰$log(视频特值)$的常数,还是取特值。
当视频非常老($\Delta D \to -\infty$)时:
$$\frac{e^{\Delta D}}{14} + 1 \to 1 \implies \log(1) = 0$$
也就是说,对数项的最小值是0,不会出现负数。
这也就意味着:老视频充其量是没有增益,但绝对不会被打折扣。而如果没有这个"+1",老视频的播放量会被乘以一个小数甚至是0(当视频极端老,$\Delta D \to -\infty$),相当于因为视频发布时间早而给予了惩罚,这显然是不公平的。
那么,可不可以用其他常数代替"+1"呢?
理论上是可以的,但是同样会破坏函数的参数设计。比如用"+2"代替内部的"+1",要保持7%的最大加成,分母就需要从14改成约6.5,有没有似曾相识的感觉?是的,这样子做其实效果和我们前面通过更改常数C来修改时间修正满额增益是一样的,此时分母的实际意义(14天的周期)同样会消失,又变成了纯数值调参。而+1是唯一能让分母同时对应最大加成和衰减周期两个物理意义的常数,这也是运算自洽性的体现。更改两个修饰常数的证明过程与前面更改常数C的反证过程其实是殊途同归的。
那么以上就解释完了我们这个计算方法的所有设计思路,不得不说设计出这个函数的人真的很厉害啊,整个式子是非常富有美感的,所有参数都是一体的,紧密关联。
而事实上,我们在了解完这个函数后,还可以进行一些延伸思考。甚至于以此思路反向推断其他网站的排序算法。
以科创网为例,众所周知科创网会在首页的幻灯片部分贴出10条较为热门而优质的帖子(其实有些时候写的不咋地的文章也会上榜,所以我也不太确定是按照什么来决定上榜的,在此我们姑且这样认为,有不对的替换一下就好了)。而假设科创网的内部同样有一套类似于这样的排序算法运作,那么参照术力口周榜的这个算法,我们或许可以猜测一下这个社区的排序算法是什么样子的?它具有哪些特点?它的最大加成是比较高还是比较低?
首先,基于科创网的平台特点来看,科创网本身是以具有严肃性质的学术类文章为主流,因此我们相信科创网对于帖子的优质程度的权重是大于互动数的,比如如果有人发了一篇有争议性质的劣质文章,那么它的互动数量大概会增加,但这改变不了它劣质的事实,为了榜单的公平性,科创网当然应该调低满额增益,比如说1%~3%左右的样子(参加前面的不同满额增益下的列表对比),而如果这个榜单还具有时效性的话(比如隔一段时间就彻底清场然后重新排序),那么kcer们的发布时间大概率会倾向于早期发布。也就是说,科创网的论坛文章上传压力大概会集中于每次榜单更新的时间。从管理员的角度来看就是榜单的修正系数函数中的常数C会相对于术力口榜单更高(大约在80到120左右)
其次是科创网的时间修正系数,如果科创网榜单还对劣质文章有惩罚措施的话,大概率会调低最外层的修饰常数1,取在一个劣质文章与优质文章在发布数量上的频率估计出的概率以下。从而保证优质文章与劣质文章以这个修饰常数为分界线而走向被惩罚与奖励的两条路,优者更优,劣者更劣。
而相反,对于微博与抖音这种大众化、泛娱乐化的社区,因为其快节奏、热度导向型的社区生态的特点,大概率会拥有更低的常数C和更高的修饰常数1,从而对高互动、高热度但不一定优质的视频大加奖励,登上热搜。
文章最后再提出一个小小的思考题,私以为如果以此类函数作为模板的话,是否在某个陌生网站上可以抓取大量其发布内容的信息(优质性、互动数、发布时间、标题与内容胜出比等等等等),对比榜单的上榜信息,从而定性甚至定量反推出其榜单逻辑,从而把握网站的推荐算法信息呢?