• 基于Hacker News的内容热度推荐算法


    近期公司产品需要做一个内容推荐的功能,但限于人员和能力有限,经过调研,确定了一个简单相对我们可以实现的方案。一篇文章产生,随着用户浏览、点赞、分享、收藏、评论,热度逐渐攀升,进入榜单到推荐页面,但随着时间的推移,这篇文章也不能永久的霸占榜单,让后面新产生的文章没有机会到推荐页,因此也就有了时间衰减的因素,从而可以让榜单能够动态的变化,除了上面基本的原理以外,还需要人为干预因素,通过加权或者降权的方式来影响排名。

    因子

    1. 用户活跃度(以积分的形式)
    2. 浏览量
    3. 点赞数
    4. 收藏数
    5. 评论数
    6. 分享数
    7. 时间衰减
    8. 平台编辑推荐(人为因素介入干预)

    基本原理

    初始热度 Hinit

    与最后的推荐指数呈正相关(注意不是成正比),影响其的因素有:

    • 创作者:暂时以用户活跃度来界定
    • 内容属性:以篇幅、类别来区分

    互动热度 Hinteract

    与最后的推荐指数呈正相关(注意不是成正比),用户行为数据是决定一篇文章是否热门的重要因素,通过对这些数据评级来进行调整行为分:

    比如: 浏览+1分,点赞+3分,评论+8分,收藏+10分,分享+15分。

    时间衰减 Htime

    与最后的推荐指数呈负相关(注意不是成反比)

    大部分内容属于一次性消费品,用户看过也就过了,若推荐榜单总是那么几条, 可能很快就觉得乏味 ,从而转向别的产品。所以我们自然希望内容能不断更新,而若只看初始热度+互动热度,那么后来者必定很难超越前者。

    所以还必须考虑一个因素就是时间衰减,通常这个也不是线性衰减,往往是一个指数函数:即过了一定时间后,持续衰减,热度直到无限趋于0

    权重 Hweight

    运营或编辑人为干预来调整权重也很重要,毕竟算法是死的,人是活的,虽然大部分都遵循这样一个规律,但也不排除偶然或者极端情况,比如恶意刷榜,这时候就需要人为的干预

    图形曲线:

    总结公式

    参数解释:

    Hinit : 初始热度值,可以以用户活跃度来衡量,比如以积分的形式,积分积累的途径有:

    1. 发文章
    2. 发笔记
    3. 发动态
    4. 提问题
    5. 回答问题
    6. 评论
    7. 系统、平台编辑推荐

    在其他条件一定的情况下,初始热度越高,其最终热度也就越高

    Hinteract:互动热度值,根据用户行为数据来衡量,参考点有以下几项:

    1. 浏览量
    2. 点赞量
    3. 评论量
    4. 收藏量
    5. 分享量

    在其他条件一定的情况下,互动热度越高,其最终热度也就越高

    Htime:时间衰减因子,也就是从提交到现在的时间(以小时计),加2是为了防止最新发表的会导致分母过小 ,这个值可调,在前期平台人数较少时调整大一些,在后期人数增长起来后,可以调整的小一些,比如,因为用户对平台资源有一个消化时间。并不是一发出来就有数据的。

    G:重力因子,它决定了热度随时间下降的速度,前期平台人员较少时,相对应得发的资源也会比较少,这时可以把G调小一点,减缓时间推移对热度下降的影响,后期平台人员增多时,相对应的资源也会增加,这时可以把G调大一点,加速时间推移对热度下降的影响。比如:1.2-1.8

    Hweight: 加减权重,初始值可以为0,在某些偶然或者极端情况下需要人为干预的时候,可以动态调整其值,使其能够及时的控制其热度。

    反作弊

    1. 可以通过权重来干预
    2. 可以制定社区规则来动态调整Hinit
  • 相关阅读:
    Bootstrap 中CSS媒体查询分辨率 @media(min-width)
    29. 一道简单背包题
    为中小企业的网络推广策略解析:扩大品牌知名度和曝光度
    vue 实现前台用户登录
    江南爱窗帘十大品牌 | 主卧用什么窗帘最好 主卧窗帘颜色搭配有技巧
    Kettle:跨库(SQLServer->PostgreSQL)同步多张表数据的详细设计过程
    Python 概念集合浅谈
    如何快速学习AdsPower RPA(1)——简单、进阶部分
    UG\NX二次开发 在资源栏(左侧面板)中添加按钮
    以太坊知识攻略:新手必看的25个专业术语
  • 原文地址:https://blog.csdn.net/kuangni5808/article/details/125511306