计算内容热度的算法解释

13,464 阅读5分钟

定义一个内容的热度

什么样的一个内容是热门的呢?这其实是一个相对的概念,面对不同的需求,它的表达是不同的。

H=W+I(T+1)GH = \frac{W + I}{(T+1)^{G}}

其中:

  • HH:内容的热度
  • WW:内容质量的数值表达,例如一篇文章质量可以定义成文章的点赞数,也可以根据产品需要定义为其他
  • II:新内容的初始质量,具体含义后续解释中会理解
  • GG:重力 Gravity,或者说是一个内容变得不再热门的速度,重力越大,一个内容刷新的就越快
  • TT:时间

可以看到热度 HH 在这样的公式中有 4 个变量即 H(W,I,T,G)H(W,I,T,G),此公式与 Hacker News、Reddit 相同,只是定义内容质量 WW 时用的逻辑不一样。

1)热度HH与时间TT的关系

首先,我们看一个比较简单的关系,就是热度与时间的关系:

  • WW:100
  • II:10
  • GG:1.5
  • TT:时间

H=100+10(T+1)1.5H = \frac{100+10}{(T+1)^{1.5}}

热度与时间的关系

很清楚,时间越大,热度越低。

2)热度HH与初始质量II、时间TT的关系

  • WW:0
  • II:[2, 4, 6]
  • GG:1.5
  • TT:时间

热度与初始质量、时间的关系

我们能够看到,对于不同的初始质量 II,内容的初始热度是不同的,在后续的时间衰减中,如果其他数值不变,那么初始质量越高则内容热度越大。

3)热度HH与初始质量II、重力GG、时间TT的关系

  • WW:0
  • II:[2, 4, 6]
  • GG:[1.5, 1.2, 1.8]
  • TT:时间

热度与初始质量、重力、时间的关系

面对不同的重力,即使初始质量高,重力大时其热度衰减很快。

4)热度HH与质量WW、初始质量II、重力GG、时间TT的关系

  • WW:[90, 190, 90]
  • II:10
  • GG:[1.5, 1.5, 1.8]
  • TT:时间

热度与质量、初始质量、重力、时间的关系

我们看到三个交点:

  • AAW=90W=90G=1.5G=1.5I=10I=10的交点

解释:一个内容质量 90 的内容,在 AA 交点,即约 3.64 单位时间之后其热度低于一个全新的初始热度为 10 的内容。

  • BBW=190W=190G=1.5G=1.5I=10I=10的交点
  • CCW=90W=90G=1.8G=1.8I=10I=10的交点

解释:一个内容质量 190 的内容,在 6.36 单位时间之后,其热度低于任意新内容。而一个内容质量为 90 的内容,如果重力为 1.8,那么仅在 2.59 单位时间后其热度低于任意新内容。

我们可以看到如下结论:

  1. 初始质量 II 越高,老内容的热度更快的被最新生产的内容超越
  2. 一个内容的质量 WW 越高,此内容热度高于新内容的时间越长
  3. 重力 GG 越高,内容热度衰减越快,老内容的热度更快被新生产的内容超越

因此,在确定的初始质量 II 及重力 GG 下,一个内容可以获得的 WW 决定了其热度及被新内容超越的时间。

5)质量数值WW与时间TT线性正相关的假设

假设一个内容质量的数值表达与时间正相关,例如我们用一个文章的点赞量表达其质量,那么在一个限定的时间里,其时间越长,点赞量越高:

W(T)=c×TW(T) = c\times{T}

cc 代表了一个新内容获得质量 WW 的速度,也就是一个新内容获得点赞的速度,那么

  • WWc×Tc\times{T}
  • II:10
  • GG:1.5
  • TT:时间

H=c×T+10(T+1)1.5H = \frac{c\times{T}+10}{(T+1)^{1.5}}

其中我们测试了三个 cc 分别是:20、25、30

当质量与时间线性正相关时,热度与时间的关系

我们看到三个交点:

  • AAW=20×TW=20\times{T}I=10I=10的交点
  • BBW=25×TW=25\times{T}I=10I=10的交点
  • CCW=30×TW=30\times{T}I=10I=10的交点

解释:cc 越大,说明单位时间里一个内容可以获得的质量越高,也就是说明这个内容本身更受欢迎。对于交点 AA 来讲,此内容在 1.62 个单位时间后,即使保持着 20×T20\times{T} 增长质量的速度,依然会被一个新内容的热度超越。而从 CC 交点可以看到,如果其 WW 增长速度为 30×T30\times{T},那么在 6.46 个单位时间后才会被新内容的热度超越。

6)质量数值WW与时间TT对数正相关的假设

当然上面的假设有一个问题是,一个文章的质量表达很难和时间长期正相关,也就是说,文章存在时间越长,往往后续获得的点赞会降低。因此,我们可以假设WWTT是对数相关的关系:

W(T)=c×logd(T+1)W(T) = c\times{\log_{d}{(T+1)}}

  • cc:获得点赞的速度
  • dd:随着时间迁移,获得点赞速度开始衰减的系数

当质量与时间对数正相关时,热度与时间的关系

我们看到三个交点:

  • AAW=20×log2(T+1)W=20\times{\log_{2}{(T+1)}}I=10I=10的交点
  • BBW=20×log1.5(T+1)W=20\times{\log_{1.5}{(T+1)}}I=10I=10的交点
  • CCW=20×TW=20\times{T}I=10I=10的交点

解释:对比 AACC 我们可以看到,因为质量数值的增长随着时间变少,因而 AA 内容更快地被新内容超越。

内容热度在掘金里的使用

H=W+I(T+1)GH = \frac{W + I}{(T+1)^{G}}

  • HH:即一个内容的热度 rankIndexArticle
  • WW:即一个内容的 hotIndexArticle 是一个文章阅读数、评论数、点赞数加权求和的数值
  • II:即一个内容初始的数值 rankIndexUser 是文章作者的影响因子
    • 影响因子与作者本身的历史掘力值相关
  • GG:一个衰减的重力参数
  • TT:文章自发布以来的时长

作为掘金社区,我们希望将更多好内容带给读者,从数值上,我们希望总和的 WW 变高,同时平衡其与 TT 之间的关系,即新内容获得的流量,与一个好内容获得流量之间交点的时间长度。

  • cc:一篇文章本身的质量表达,多快获得点赞、获得阅读,即点击率、点赞率
  • dd:点赞率、点击率随着文章存在时间是否会衰减,衰减得多块

说人话:一个获得了 1000 个点赞、10000 个阅读、100 个评论的内容,在计算规则下什么情况会被一篇新文章的热度超越。而整个社区的热度计算,是一个动态优化的问题。

不同问题下的参数调整

  • 新内容太多,近期热门的不足
    1. 降低初始数值 II
    2. 降低衰减重力 GG
    3. 提高内容质量的加权数值 cc
  • 内容都是热门的,新东西看不到
    1. 提高初始数值 II
    2. 提高衰减重力 GG
    3. 降低加权 cc
  • 一会儿是一个老的热门的,一会儿是一个特别新的
    1. GG 较小的同时,II 过大