Files
1818web-hoduan/广场作品排序推荐算法说明.md
2025-11-14 17:41:15 +08:00

248 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 广场作品排序推荐算法说明
## 📊 当前排序算法(简单版)
### 1. 最新排序 (latest)
```sql
ORDER BY pw.create_time DESC
```
- **逻辑**: 按发布时间倒序
- **优点**: 简单直接,新作品优先展示
- **缺点**: 忽略作品质量,优质老作品难以被发现
### 2. 热门排序 (hot)
```sql
ORDER BY pw.like_count DESC, pw.create_time DESC
```
- **逻辑**: 先按点赞数倒序,再按时间倒序
- **优点**: 高质量作品排前面
- **缺点**:
- 老作品积累点赞多,新作品难出头
- 没有时间衰减,不符合"热度"概念
- 只考虑点赞,忽略浏览、评论等互动
---
## 🚀 优化方案:智能推荐算法
### 方案一:时间衰减热度算法(推荐)
#### 热度公式
```
热度分 = (点赞权重 × 点赞数 + 浏览权重 × 浏览数) / (发布时间距今小时数 + 2)^衰减系数
```
**参数设置**:
- 点赞权重: 10
- 浏览权重: 1
- 衰减系数: 1.5
- 时间基数: 2 (避免除零,新作品有初始优势)
**示例计算**:
```
作品A: 100赞, 1000浏览, 发布24小时
热度 = (10×100 + 1×1000) / (24 + 2)^1.5 = 2000 / 132.3 ≈ 15.1
作品B: 50赞, 500浏览, 发布2小时
热度 = (10×50 + 1×500) / (2 + 2)^1.5 = 1000 / 8 = 125
作品B虽然数据少但因为新鲜度高热度分更高
```
#### SQL实现
```sql
SELECT pw.*,
(10 * pw.like_count + 1 * pw.view_count) /
POW(TIMESTAMPDIFF(HOUR, pw.create_time, NOW()) + 2, 1.5) as hot_score
FROM plaza_work pw
WHERE pw.status = 'published' AND pw.audit_status = 'approved'
ORDER BY hot_score DESC
```
### 方案二:威尔逊得分算法(适合评分系统)
如果未来加入评分功能,可使用威尔逊得分:
```
威尔逊下界 = (p + z²/2n - z × √(p(1-p)/n + z²/4n²)) / (1 + z²/n)
其中:
- p = 好评率 (点赞数 / (点赞数 + 踩数))
- n = 总投票数
- z = 置信度系数 (95%置信度时 z=1.96)
```
### 方案三:多维度评分算法
#### 综合评分公式
```
总分 = 质量分 × 40% + 热度分 × 30% + 新鲜度分 × 20% + 互动分 × 10%
```
**各维度计算**:
1. **质量分** (0-100):
```
质量分 = MIN(点赞率 × 100, 100)
点赞率 = 点赞数 / MAX(浏览数, 1)
```
2. **热度分** (0-100):
```
热度分 = MIN((点赞数 × 10 + 浏览数) / 平台平均热度 × 50, 100)
```
3. **新鲜度分** (0-100):
```
新鲜度分 = MAX(100 - 发布小时数 × 2, 0)
```
4. **互动分** (0-100):
```
互动分 = MIN((点赞数 + 评论数 × 3) × 2, 100)
```
---
## 🎯 推荐的实施方案
### 第一阶段:实现时间衰减热度算法
修改 `PlazaWorkMapper.java`:
```java
@Select("<script>" +
"SELECT pw.*, u.nickname, u.avatar_url, " +
" <choose>" +
" <when test='sortBy == \"hot\"'>" +
" (10 * pw.like_count + 1 * pw.view_count) / " +
" POW(TIMESTAMPDIFF(HOUR, pw.create_time, NOW()) + 2, 1.5) as score " +
" </when>" +
" <otherwise>" +
" UNIX_TIMESTAMP(pw.create_time) as score " +
" </otherwise>" +
" </choose>" +
"FROM plaza_work pw " +
"LEFT JOIN user u ON pw.user_id = u.id " +
"WHERE pw.status = 'published' AND pw.audit_status = 'approved' " +
" AND pw.is_public = 1 AND pw.is_deleted = 0 " +
"<if test='taskType != null and taskType != \"\"'>" +
" AND pw.task_type = #{taskType} " +
"</if>" +
"ORDER BY score DESC " +
"LIMIT #{offset}, #{size}" +
"</script>")
List<Map<String, Object>> findPublicWorksList(
@Param("taskType") String taskType,
@Param("sortBy") String sortBy,
@Param("offset") int offset,
@Param("size") int size
);
```
### 第二阶段:添加智能推荐排序
增加新的排序方式 `recommend`
```java
// DTO中添加
public enum SortType {
LATEST, // 最新
HOT, // 热门(时间衰减)
RECOMMEND, // 智能推荐(多维度)
QUALITY // 高质量(点赞率)
}
```
### 第三阶段:个性化推荐
基于用户历史行为(浏览、点赞的作品类型)推荐相似作品:
1. 统计用户最喜欢的任务类型task_type
2. 统计用户最喜欢的模型model_name
3. 提取用户点赞作品的标签
4. 计算作品与用户偏好的匹配度
---
## 📝 实施建议
### 立即实施(基础优化)
✅ 实现时间衰减热度算法
✅ 添加高质量排序(按点赞率)
✅ 优化数据库索引
### 短期计划1-2周
🔄 添加多维度评分算法
🔄 实现推荐排序
🔄 添加排序参数配置化
### 长期计划1-2个月
⏳ 个性化推荐系统
⏳ 机器学习推荐模型
⏳ A/B测试不同算法效果
---
## 🔧 审核接口补充说明
### 当前审核接口功能
1. ✅ 查询待审核列表
2. ✅ 单个审核
3. ✅ 批量审核
4. ✅ 审核统计
5. ✅ 审核历史
### 可能需要的补充接口
#### 1. 撤销审核(管理员误操作)
```java
POST /admin/plaza/audit/revoke
{
"workNo": "WORK-xxx",
"reason": "误操作,需要重新审核"
}
```
#### 2. 审核详情查询(含完整上下文)
```java
GET /admin/plaza/audit/detail/{workNo}
// 返回:作品信息 + 作者信息 + 历史审核记录
```
#### 3. 快捷审核一键通过前N个
```java
POST /admin/plaza/audit/quick-approve
{
"count": 10, // 通过最早的10个待审核作品
"taskType": "text_to_image" // 可选:指定类型
}
```
#### 4. 违规关键词检测AI辅助审核
```java
GET /admin/plaza/audit/keyword-check/{workNo}
// 返回:敏感词检测结果,辅助人工审核
```
#### 5. 审核员工作量统计
```java
GET /admin/plaza/audit/admin-stats?adminId=1&startTime=xxx&endTime=xxx
// 返回:某审核员的审核数量、通过率等
```
---
## 💡 是否需要补充以下功能?
请告诉我您需要:
1. **优化排序算法** - 实现时间衰减热度算法?
2. **补充审核接口** - 需要哪些额外的审核功能?
3. **个性化推荐** - 是否需要基于用户行为的推荐?
4. **违规检测** - 是否需要AI辅助审核敏感词过滤
我可以立即为您实现!