Skip to content

About

CrowdQ-Net - 基于深度强化学习的众包任务推荐系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CrowdQ-Net

基于深度强化学习的众包任务推荐系统

项目概述

本项目使用 DQN 系列模型解决众包平台上的任务推荐问题,分别实现两个子目标:

  1. 最大化参与者(Worker)利益 — 让 worker 找到感兴趣、匹配度高、报酬好的任务
  2. 最大化请求者(Requester)利益 — 让发布者获得更高质量的回答

核心创新

  • Shared Scorer 架构:参数共享的 Q-Network,消除"槽位记忆"问题
  • 周期时间编码:hour_sin/cos 替代 hour_norm,捕捉时间周期性
  • 动态特征:progress/need/urgency 反映项目实时状态
  • Worker-Project Affinity:基于历史偏好的亲和度计算

项目结构

CrowdQ-Net/
├── src/                          # 源代码
│   ├── data_loader.py            # 数据加载与特征工程
│   ├── env.py                    # Gymnasium RL 环境
│   ├── train.py                  # SB3 DQN/PPO/A2C 训练
│   ├── train_shared_scorer.py    # Shared Scorer DQN 训练
│   ├── shared_scorer.py          # Shared Scorer Q-Network
│   └── evaluate.py               # 评估脚本
├── run.py                        # 主入口
├── diagnose.py                   # Q 值诊断脚本
├── data/                         # 数据文件
│   └── data/
│       ├── worker_quality.csv    # Worker 质量数据
│       ├── project_list.csv      # Project 列表
│       ├── project/              # Project 详情
│       └── entry/                # Entry 数据
├── results/                      # 实验结果
├── INIT.md                       # 项目定义
├── AGENTS.md                     # 技术决策
├── PLAN.md                       # 执行计划
├── RESEARCH.md                   # 调研结果
├── IMPROVEMENT_PLAN.md           # 改进计划
├── EXPERIMENT_LOG.md             # 实验日志 V1
├── EXPERIMENT_LOG_V2.md          # 实验日志 V2
├── EXPERIMENT_LOG_V3.md          # 实验日志 V3
└── 实验报告.md                    # 实验报告

快速开始

环境配置

# 创建 conda 环境
conda create -n crowdq-net python=3.11
conda activate crowdq-net

# 安装依赖
pip install torch gymnasium stable-baselines3 pandas numpy matplotlib python-dateutil tensorboard

运行实验

# Worker 侧优化(DQN)
python run.py --reward worker --algorithm dqn --timesteps 50000

# Requester 侧优化(DQN)
python run.py --reward requester --algorithm dqn --timesteps 50000

# Shared Scorer DQN(最佳)
python run.py --reward requester --algorithm shared_scorer --timesteps 30000 \
    --max_projects 10 --gamma 0.5 --lr 0.001

# Shared Scorer DQN(改进版)
python run.py --reward requester --algorithm shared_scorer --timesteps 30000 \
    --max_projects 10 --gamma 0.5 --lr 0.001 --hidden_dim 64

查看结果

# 查看 TensorBoard 日志
tensorboard --logdir results/

# 查看实验结果
cat results/shared_scorer_requester_*/results.json

实验结果

最佳结果

指标 Worker 侧 Requester 侧
match_rate 10.3% 16.20%
lift over 1/K +0.3% +6.20%
模型 SB3 DQN Shared Scorer DQN

关键发现

  1. 架构改进最关键:Shared Scorer 的 lift 是 MLP 的 ~1.5 倍
  2. γ 是关键超参数:γ=0.5 对 Requester 侧效果显著
  3. hidden_dim=64 最优:较小网络更适合此问题
  4. 结果对 seed 敏感:3 seed 平均 lift=+2.72%
  5. 特征工程存在协同效应:单独有害的特征组合后可能有益
  6. 更多训练/更深网络/难负样本均无效

实验总览

我们进行了44+个实验,系统性地探索了不同配置下的模型性能:

阶段 实验数量 主要发现
基线实验 6 K=10时lift接近0
Shared Scorer 4 架构改进提升lift +2.72%
借鉴改进 7 特征协同效应
超参数调优 15 hidden_dim=64最优
组合实验 12 γ=0.7/0.9较好

技术细节

MDP 建模

要素 Worker 侧 Requester 侧
状态 worker 特征 + project 特征 + affinity 同左
动作 从候选 project 中选一个 同左
奖励 award_value score/quality

特征工程

Worker 特征(5 维):

  • worker_quality, history_count, award_rate, recency, preferred_category

Project 特征(16 维):

  • category, sub_category, industry, entry_count, feedback
  • days_remaining, days_elapsed, is_active, title_length, entry_density
  • is_weekend, hour_sin, hour_cos, progress, need, urgency

Affinity(1 维):

  • worker 与 project 的历史偏好匹配度

Shared Scorer 架构

输入: [K * 22] flat vector
  ↓ reshape
[K, 22] — 每行是一个 (worker, project, affinity) 对
  ↓ scorer MLP(参数共享)
[K, 1] — 每个候选 project 的 Q 值
  ↓ squeeze
[K] — 输出 K 个 Q 值

文档

参考文献

  1. Shan, Y., et al. "An End-to-End Deep RL Framework for Task Arrangement in Crowdsourcing Platforms." arXiv:1911.01030, 2019.
  2. Mnih, V., et al. "Human-level control through deep reinforcement learning." Nature, 2015.
  3. Van Hasselt, H., et al. "Deep Reinforcement Learning with Double Q-learning." AAAI, 2016.
  4. Wang, Z., et al. "Dueling Network Architectures for Deep Reinforcement Learning." ICML, 2016.

许可证

本项目仅用于学术研究目的。

About

CrowdQ-Net - 基于深度强化学习的众包任务推荐系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages