27,727
社区成员




每位博主都希望自己的内容得到最大的曝光,热榜则是一个曝光最大途径。那么CSDN的热榜算法究竟是什么?又经历了什么样的变迁史呢?以下内容来自博主幻灰龙 ,欢迎大家进言献策。
时间衰减因子(TTL) 归一化下,从1开始随着博文创建时间衰减,可以从 TTL 的曲线变化看到0-72个小时内因子的衰减,新公式需要跑下数据验证后再上线:
https://www.wolframalpha.com/input/?i=1.52%2F%28log%28x%2B4%29%29%5E1.3%2Cx%3E%3D0%2Cx%3C%3D12
公式是:1.52/(log(x+4))^1.3,x>=0,x<=12
其中x表示博文创建后经过了多少个6小时,72小时一共有12个衰减点,这个衰减频次可以根据同样的原理调整,通过这个方式也可以同时解决夜晚大家睡觉时博文热度被衰减的问题
其中1.52是因子归一化到1-0的调整常量,1.52 = 1/(1/(log(0+4))^1.3),如果公式的其他系数做了调整,重算一下这个常量即可。
增加了最低阅读量过滤,阅读量太低的直接不参与计算,刚创建的文章应该在其他渠道有一些冷启动的过程。但是阅读量是一个容易被刷的数据,该数据并不参与后续计算。
CSDN 的榜单有很多个,包含这些:
周排名
历史贡献排名
总排名
新晋博主
企业博客排名
领域排名
热榜排名
其中热榜总是存在一些问题,典型的现象有:
存在博文霸榜时间过长的问题。
收藏/点赞/评论刷量数据对榜单的影响过大的问题。
博文过于追求博文长度的问题。
标题党的风气问题
太多同质化的入门文章。
领域过于集中在少数几个语言上的问题。
…
我们再分析下这些问题反映的问题是什么:
博文应该能上榜,但是应该有半衰期。
博文的评论区应该有正常的交流和讨论,为了上榜而做的水评实际上降低了文章的内容质量(评论区)和社区整体的评论质量。
收藏说明这个文章对有些用户有用,但收藏不应该是一个「热」的体现,至少权重不应过大。
如果博文的长度是一个KPI,写作者可以通过复制粘贴低水平的入门材料,迅速包装出「重复的低水平的长文章」,那对作者和读者来说,都是一个低质量的内容。太长的博文也并不适合读者阅读。
标题里充斥广告和博眼球的低质量文本,正常的技术博文反而得不到上榜单机会。
内容的同质化和“过热”,那么其他的稀缺内容就总是会没有机会获得上榜机会。
综合来说,让高质量的博客获得更多相关的读者,提高生态质量,打击标题党, 平衡各种领域,适度考虑阅读量和热度。是热榜算法的改进目标。
设计热榜算法,考虑几个不同的维度。
单一交互数据的归一化
不同交互数据映射到可以比较互相比较的数量级
避免单一交互数据对结果的绝对影响
同一个内容的数据的得分,随着时间衰减
同一个作者的得分,在时间窗口期内不应该重复上榜
标题的质量(例如标题党降权)
内容的质量(例如内容长度过长降权)
内容不应分布在少数几个过热的领域,例如都是 Python/Java
衡量稀缺度
参考成熟的算法
综合上述分析,引入的热榜算法的机制如下:
其中,t i t l e s c o r e titlescoretitlescore 和 c o n t e n t s c o r e contentscorecontentscore 分别是AI服务计算标题质量分和内容质量分。主要使用 NLP 技术对内容数据做打分。
一个软件要持续更新才会流水不腐。热榜也是一种得分计算,是一种指标数据,这些公式本身也是一个「软件」。因此,在保持基本原理不变的情况下,根据线上真实数据的反馈情况,定期采取微调策略,不断改进,推荐出高质量的内容,平衡各领域,打击低质量内容,形成良币驱逐劣币的技术氛围,这是热榜算法的目标。