PICFLOW 推荐引擎
PICFLOW 推荐引擎 v3.0
推荐引擎位于 services/ 目录,由 5 个类组成,采用六因子评分算法。
六因子评分公式
综合得分 =
标签匹配数 (归一化) × 35%
+ 标签权重和 (归一化) × 15%
+ 上传者偏好 (归一化) × 15%
+ 协同过滤 (归一化) × 15%
+ 新鲜度 × 10%
+ 热度 (归一化) × 10%
权重说明
| 因子 | 权重 | 说明 |
|---|---|---|
| 标签匹配数 | 35% | 图片标签与用户偏好标签的交集数量 |
| 标签权重和 | 15% | 匹配标签的偏好权重之和 |
| 上传者偏好 | 15% | 对图片上传者的偏好权重 |
| 协同过滤 | 15% | 相似用户喜欢的内容 |
| 新鲜度 | 10% | 发布时间越近得分越高 |
| 热度 | 10% | likes_count × 2 + views_count × 0.5 |
候选收集 (4 个来源)
候选池 (最多 240 张) =
Tag Match (100 张) ← 标签匹配
+ Uploader Pref (30 张) ← 偏好上传者
+ Collaborative (30 张) ← 协同过滤
+ Hot Fallback (80 张) ← 全局热门
来源说明
- 标签匹配:从用户偏好标签匹配的图片中取前 100 张
- 上传者偏好:从用户偏好上传者的图片中取前 30 张
- 协同过滤:找出与当前用户偏好最相似的前 10 个用户,收集他们点赞的图片(30 张)
- 热门兜底:全局热门图片(80 张),解决冷启动问题
偏好学习
更新时机
每次用户行为发生时更新偏好:
| 行为 | 标签权重变化 | 上传者权重变化 |
|---|---|---|
| 点赞 | +1 | +2 |
| 浏览 >= 3s | +1 | +1 |
| 浏览 >= 10s | +2 | +2 |
| 浏览 >= 30s | +3 | +3 |
衰减机制
约每 50 次浏览事件后,所有权重按 ~5% 衰减,确保旧偏好逐渐淡化。
多样性保障
DiversityFilter 确保推荐结果不会过度集中于某一分类:
- 规则:同一分类最多出现
ceil(limit / 4)张 - 若某分类不足,从其他分类中补充
- 保证用户看到多样化的内容
示例:请求 20 张推荐 → 同一分类最多 5 张
冷启动处理
新用户(无浏览/点赞记录):
- 直接返回 Hot Fallback 结果
- 初次浏览后开始建立偏好
- 通常 3-5 次浏览后开始产生个性化推荐
管理后台测试
访问 /admin/recommendation.php:
- 选择测试用户
- 设置推荐参数
- 查看每张图片的各因子得分
- 可视化评分构成
- 调试和优化推荐效果
📝 本文由AI生成