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 张)    ← 全局热门

来源说明

  1. 标签匹配:从用户偏好标签匹配的图片中取前 100 张
  2. 上传者偏好:从用户偏好上传者的图片中取前 30 张
  3. 协同过滤:找出与当前用户偏好最相似的前 10 个用户,收集他们点赞的图片(30 张)
  4. 热门兜底:全局热门图片(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生成