类似小红书,每个人看到的主题都是不一样的。
核心思路:行为分权重 + 权重衰减 + 内容负反馈 + tag 邻接图谱 + 看过衰减而不是永久后置1. 行为分(替换统一 + 1)
给不同交互打不同增量,不是全部 + 1
- 点击进入:+0.3(轻度兴趣)
- 看完(读到结尾 / 停留达标):+0.5
- 点赞 / 收藏:+1.0
- 评论 / 分享:+1.5
- 快速划走、5 秒内退出:对应 tag -0.4(负反馈)
每个行为,给这条内容绑定的所有 tag,更新用户 - tag 的兴趣分
score(user, tag)2. 分数带时间衰减(最重要)
用户 - tag 分数不是永久累加:
比如每 7 天,所有 tag 分数 × 0.85
👉 很久之前偶然点开的 tag,权重慢慢降下去,不会一直绑架推荐;兴趣是最近的行为说了算3. 构建 Tag 关联图谱(tag→tag 共现)
统计:经常一起出现的 tag(比如:银发健康|AI 睡眠|子女账号)
当用户银发健康分数高,自动给关联 tag 注入少量 “间接兴趣分”
解决:只推已点过 tag,无法拓展新内容的茧房问题不需要复杂图算法:预计算 tag 共现表,定时离线统计就行
4. 已读内容:不是直接扔最后,是降权因子
给每条内容一个
read_penalty:- 刚看过:×0.2(大幅压低)
- 3 天前看过:×0.6
- 14 天前看过:×0.9(几乎恢复正常,允许重新刷到更新同主题)
同作者、同系列新内容,不继承旧内容的阅读惩罚,避免误伤同赛道新帖
5. 排序公式(直接能用)
内容得分 = SUM( 用户tag分 × 内容tag权重 ) × 新鲜度系数 × 阅读惩罚系数额外加入:
- 新鲜度:新帖自带加分(防止老内容霸榜)
- 多样性兜底:每 N 条插入一条「弱关联但热门」内容,强制破茧房
6. 脏 tag 防护
内容 tag 分主 tag(1~3 个)+ 辅助 tag
只有主 tag 参与兴趣分计算;辅助 tag 只用来检索,不加权重,防止乱打 tag 刷流量这个方案,完全基于 tag,你原有逻辑可以平滑迁移,代码改动可控,适合你做 BBS / 社区。
主楼