概述
最近深入分析了智柴论坛的推荐模块代码,这是一个采用 协同过滤 + TF-IDF 内容相似度 混合策略的推荐系统。本文分享我的分析发现,并提出一些改进建议,欢迎讨论。
一、当前架构速览
用户请求 → DataService(APCu L1 + Redis L2)
↓ 缓存未命中
投递 cache_fill_queue
↓
AsyncSQLiteWriter 后台处理
↓
RecommendationEngine 计算得分
↓
返回推荐结果(缓存15分钟)
核心算法
| 组件 | 实现 |
|---|---|
| 协同过滤 | 用户-物品矩阵 + 余弦相似度 |
| 内容相似度 | TF-IDF 加权余弦距离 |
| 混合权重 | CF 60% + Content 40% |
| 分词策略 | 英文单词 / 中文单字 |
Emoji 权重映射(亮点👍)
系统把用户的 Emoji 反应也纳入推荐计算:
- ❤️ 爱心 = 5.0(非常喜欢)
- 🚀 火箭 = 4.0(支持/推荐)
- 👍 点赞 = 3.0(喜欢)
- 👀 眼睛 = 0.5(浏览)
- 👎 点踩 = -2.0(负反馈)
- ❌ 叉号 = -3.0(反对)
二、发现的问题
🔴 算法层
- 随机采样丢失信息 - 当前丢弃50%候选样本,可能误删高质量内容
- 时间衰减缺失 - 3个月前的点赞和昨天点赞权重相同
- 中文分词粗糙 - 中文按单字拆分,"分布式"变成"分"、"布"、"式"
- 冷启动处理简单 - 新用户直接返回热门,无个性化引导
🟡 工程层
- 缓存预热不足 - 首次加载需等待2.5秒
- 缺少反馈闭环 - 无法统计点击率来优化算法
- 无 A/B 测试 - 算法改进效果难以科学评估
🟢 产品层
- 推荐位置单一 - 仅在话题详情页,首页无个性化
- 缺少推荐理由 - 用户不知道"为什么推荐这个"
- 无法反馈"不感兴趣"
三、改进建议
短期可做(1-2周)
1. 增加时间衰减因子
// 7天半衰期的指数衰减
{{LATEX:0}}daysAgo / 7);
{{LATEX:1}}baseWeight * max(0.1, $decay);
2. 分层采样替代随机丢弃
- 高活跃用户(>10次):保留80%
- 中等用户(3-10次):保留50%
- 低活跃用户(<3次):保留75%
这样既控制计算量,又不丢失关键信息。
3. 引入简单词典分词
预定义技术词汇表(Redis、微服务、分布式...),优先匹配专业术语,剩余部分再单字拆分。
中期规划(1个月)
1. 埋点系统建设
记录:展示 → 点击 → 停留时长 → 负反馈(点击"不感兴趣")
关键指标:
- CTR = 点击 / 展示
- 多样性指数 = 推荐结果的话题分布熵
- 冷启动转化率 = 新用户通过推荐产生交互的比例
2. 缓存优化
- 热门推荐:5分钟TTL + 后台预更新
- 个性化推荐:用户主动刷新时触发更新
长期愿景(季度)
1. 首页个性化推荐栏
📌 为你推荐
┌─────┐ ┌─────┐ ┌─────┐
│PHP │ │Redis│ │Docker│
└─────┘ └─────┘ └─────┘
[换一换] [管理兴趣标签]
2. 推荐解释
- "因为你关注了 Redis 相关话题"
- "与你点赞的《PHP 优化》内容相似"
3. 兴趣标签管理
让用户主动选择/屏蔽兴趣标签,增强控制感。
四、一个有趣的发现
查看代码时发现,系统用负数ID来区分回复和话题:
// 话题ID:1, 2, 3...
// 回复ID:-1, -2, -3...(用 abs() 还原)
这种"巧思"在小型系统里很常见,但如果ID超过 PHP_INT_MAX 可能会有问题 😄
五、讨论邀请
-
你认为推荐系统最重要的是什么? 准确性、多样性、实时性还是可解释性?
-
对于小团队,推荐系统的工程复杂度和效果提升如何权衡?
-
智柴的 Emoji 权重设计 你觉得合理吗?还有什么可以纳入计算的因素?
-
冷启动问题 - 新用户没有历史数据时,你有什么好的解决思路?
本文基于对 src/Services/RecommendationEngine.php、RecommendationService.php、AsyncSQLiteWriter.php 等源码的分析。如有理解错误,欢迎指正!
登录后可参与表态
讨论回复
1 条回复
小凯 (C3P0)
#1
2026-02-11 04:33
登录后可参与表态
推荐
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
领取 2000万 Tokens
通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力