STRUCTURE.md
11.9 KB
项目目录结构
/home/tw/recommendation/
│
├── db_service.py # 数据库连接服务(共享模块)
├── requirements.txt # Python依赖包列表
│
├── offline_tasks/ # 【离线任务主目录】
│ │
│ ├── config/ # 配置目录
│ │ └── offline_config.py # 离线任务配置文件
│ │ - 数据库配置
│ │ - Redis配置
│ │ - 算法参数配置
│ │ - 时间配置
│ │
│ ├── scripts/ # 脚本目录
│ │ ├── i2i_swing.py # Swing算法实现
│ │ │ 输出: i2i_swing_YYYYMMDD.txt
│ │ │
│ │ ├── i2i_session_w2v.py # Session Word2Vec算法
│ │ │ 输出: i2i_session_w2v_YYYYMMDD.txt
│ │ │ session_w2v_model_YYYYMMDD.model
│ │ │
│ │ ├── i2i_deepwalk.py # DeepWalk算法
│ │ │ 输出: i2i_deepwalk_YYYYMMDD.txt
│ │ │ deepwalk_model_YYYYMMDD.model
│ │ │ item_graph_YYYYMMDD.txt
│ │ │
│ │ ├── interest_aggregation.py # 兴趣点聚合索引生成
│ │ │ 输出: interest_aggregation_hot_YYYYMMDD.txt
│ │ │ interest_aggregation_cart_YYYYMMDD.txt
│ │ │ interest_aggregation_new_YYYYMMDD.txt
│ │ │ interest_aggregation_global_YYYYMMDD.txt
│ │ │
│ │ └── load_index_to_redis.py # 索引加载到Redis
│ │
│ ├── output/ # 输出目录(自动创建)
│ │ ├── i2i_swing_*.txt # Swing算法输出
│ │ ├── i2i_session_w2v_*.txt # Session W2V输出
│ │ ├── i2i_deepwalk_*.txt # DeepWalk输出
│ │ ├── interest_aggregation_* # 兴趣点聚合输出
│ │ ├── *.model # 训练的模型文件
│ │ └── item_graph_*.txt # 物品图结构
│ │
│ ├── logs/ # 日志目录(自动创建)
│ │ ├── run_all_*.log # 总调度日志
│ │ ├── load_redis.log # Redis加载日志
│ │ └── cron.log # 定时任务日志
│ │
│ ├── run_all.py # 【主调度脚本】
│ │ 统一运行所有离线任务
│ │
│ ├── install.sh # 安装脚本
│ │ 自动安装依赖和初始化
│ │
│ ├── test_connection.py # 连接测试脚本
│ │ 测试数据库和Redis连接
│ │
│ ├── example_query_redis.py # Redis查询示例
│ │ 演示如何查询索引
│ │
│ ├── README.md # 详细文档
│ ├── QUICKSTART.md # 快速开始指南
│ ├── PROJECT_SUMMARY.md # 项目总结
│ └── STRUCTURE.md # 本文档
│
├── item_sim.py # 原有的物品相似度脚本(参考)
├── hot/ # 原有的热门商品模块(参考)
├── collaboration/ # 原有的协同过滤模块(参考)
└── graphembedding/ # 原有的图嵌入模块(参考)
数据流向图
┌─────────────────┐
│ 数据源 │
│ (SelectDB) │
└────────┬────────┘
│
│ SQL查询
│
▼
┌─────────────────────────────────────────────────────────┐
│ 离线任务处理 │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Swing算法 │ │ Session W2V │ │ DeepWalk算法 │ │
│ │ │ │ │ │ │ │
│ │ 用户行为共现 │ │ 会话序列 │ │ 图随机游走 │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └─────────────────┴─────────────────┘ │
│ │ │
│ │ i2i相似度索引 │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 输出文件(.txt) │ │
│ └─────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 兴趣点聚合 │ │
│ │ │ │
│ │ 按维度分组: 平台/国家/客户类型/分类 │ │
│ │ 按类型分组: 热门/加购/新品/全局 │ │
│ │ 时间衰减 + 行为权重 │ │
│ └────────────────────┬─────────────────────────────┘ │
│ │ │
│ │ 多维度索引 │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 输出文件(.txt) │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
│ 加载
▼
┌─────────────────┐
│ Redis │
│ (在线索引) │
└────────┬────────┘
│
│ 查询
▼
┌─────────────────┐
│ 在线推荐服务 │
│ │
│ - 详情页推荐 │
│ - 首页推荐 │
│ - 搜索推荐 │
└──────────────────┘
核心模块说明
1. 配置模块
文件: config/offline_config.py
职责:
- 数据库连接配置
- Redis连接配置
- 算法超参数配置
- 行为权重配置
- 时间范围配置
2. i2i相似度模块
2.1 Swing算法
文件: scripts/i2i_swing.py
输入: 用户行为数据(user_id, item_id, event_type, create_time)
核心逻辑:
# 对于物品i和j,计算它们的Swing相似度
for user_u in common_users:
for user_v in common_users:
common_items = items_u ∩ items_v
sim(i, j) += 1 / (alpha + |common_items|)
输出: i2i_swing_YYYYMMDD.txt
item_id \t item_name \t similar_item_id1:score1,similar_item_id2:score2,...
2.2 Session Word2Vec
文件: scripts/i2i_session_w2v.py
输入: 用户会话序列
核心逻辑:
- 按时间间隔切分用户会话
- 训练Word2Vec模型
- 计算物品向量相似度
输出:
i2i_session_w2v_YYYYMMDD.txtsession_w2v_model_YYYYMMDD.model
2.3 DeepWalk
文件: scripts/i2i_deepwalk.py
输入: 用户-物品交互数据
核心逻辑:
- 构建物品共现图
- 执行随机游走生成序列
- 训练Word2Vec模型
- 计算物品向量相似度
输出:
i2i_deepwalk_YYYYMMDD.txtdeepwalk_model_YYYYMMDD.modelitem_graph_YYYYMMDD.txt
3. 兴趣点聚合模块
文件: scripts/interest_aggregation.py
输入: 用户行为数据 + 用户特征
核心逻辑:
# 按维度聚合
for each behavior:
weight = behavior_weight * time_weight
aggregations[dimension_key][item_id] += weight
# 排序并输出top N
for dimension_key, items in aggregations:
output top_n items sorted by weight
维度组合:
- 单维度: platform, country, customer_type, category_level2, category_level3
- 组合维度: platform_country, platform_customer, country_customer, platform_country_customer
列表类型:
- hot: 最近180天高交互
- cart: 加购行为
- new: 新品(最近90天上架)
- global: 全局(所有数据)
输出:
interest_aggregation_hot_YYYYMMDD.txtinterest_aggregation_cart_YYYYMMDD.txtinterest_aggregation_new_YYYYMMDD.txtinterest_aggregation_global_YYYYMMDD.txt
4. Redis加载模块
文件: scripts/load_index_to_redis.py
职责: 将生成的索引文件加载到Redis
Redis Key格式:
- i2i索引:
i2i:{algorithm}:{item_id} - 兴趣点索引:
interest:{list_type}:{dimension_key}
示例:
i2i:swing:123456 -> "234567:0.8523,345678:0.7842,..."
interest:hot:platform:PC -> "12345:98.52,23456:87.34,..."
5. 统一调度模块
文件: run_all.py
职责: 按顺序运行所有离线任务
执行流程:
- 运行Swing算法
- 运行Session W2V
- 运行DeepWalk
- 运行兴趣点聚合
- 记录日志和统计
使用场景映射
| 业务场景 | 使用的索引 | Redis Key示例 |
|---|---|---|
| 详情页 - 大家都在看 | i2i相似度 | i2i:swing:{item_id} |
| 首页 - 猜你喜欢 | 兴趣点聚合 | interest:hot:platform_country:{platform}_{country} |
| 搜索 - 相关推荐 | 兴趣点聚合 + i2i | interest:global:category_level2:{cat_id} |
| 购物车 - 可能喜欢 | 兴趣点聚合(cart) | interest:cart:customer_type:{type} |
| 新品推荐 | 兴趣点聚合(new) | interest:new:platform:{platform} |
配置调优参数
时间相关
LOOKBACK_DAYS: 730 (2年)RECENT_DAYS: 180 (热门商品统计)NEW_DAYS: 90 (新品定义)decay_factor: 0.95 (时间衰减)
算法相关
- Swing
alpha: 0.5 - W2V
vector_size: 128 - W2V
window_size: 5 - DeepWalk
num_walks: 10 - DeepWalk
walk_length: 40
输出相关
- i2i
top_n: 50 - 兴趣点
top_n: 1000
性能优化要点
- Swing算法: 使用C++版本可提升10倍性能
- 并行化: 将不同算法分配到不同机器
- 增量更新: 只更新变化的部分
- 数据采样: 调试时使用采样数据
- 批量加载: Redis使用pipeline批量加载
监控指标
- 任务执行时间
- 生成索引数量
- Redis内存占用
- 推荐点击率
- 推荐转化率