Commit 9ebfd004ebd05dd7be27f0dc3a7bd3d001cbccdc

Authored by tangwang
1 parent 12118125

offline tasks: mem optimize

@@ -129,3 +129,6 @@ offline_tasks/cache/ @@ -129,3 +129,6 @@ offline_tasks/cache/
129 *.backup 129 *.backup
130 *.bak 130 *.bak
131 131
  132 +output
  133 +outputs
  134 +output_*/
132 \ No newline at end of file 135 \ No newline at end of file
CONFIG_CHANGES_SUMMARY.md deleted
@@ -1,213 +0,0 @@ @@ -1,213 +0,0 @@
1 -# 配置优化总结  
2 -  
3 -## ✅ 完成的改动  
4 -  
5 -### 1. 配置集中化  
6 -  
7 -**文件**: `offline_tasks/config/offline_config.py`  
8 -  
9 -新增默认参数配置:  
10 -```python  
11 -# 默认参数配置(用于调试和生产)  
12 -DEFAULT_LOOKBACK_DAYS = 30 # 默认回看天数(当前为30天,便于快速调试)  
13 -DEFAULT_RECENT_DAYS = 7 # 默认最近天数  
14 -DEFAULT_I2I_TOP_N = 50 # 默认返回Top N个相似商品  
15 -DEFAULT_INTEREST_TOP_N = 1000 # 默认每个key返回Top N个商品  
16 -```  
17 -  
18 -**好处**:  
19 -- ✅ 集中管理所有默认参数  
20 -- ✅ 调试环境使用小数值(30天),快速验证  
21 -- ✅ 生产环境只需修改配置文件一处  
22 -- ✅ 所有脚本自动使用统一配置  
23 -  
24 -### 2. 脚本更新  
25 -  
26 -更新了所有脚本使用配置文件的默认值:  
27 -  
28 -| 脚本 | 更新内容 |  
29 -|------|---------|  
30 -| `i2i_swing.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_I2I_TOP_N` |  
31 -| `i2i_session_w2v.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_I2I_TOP_N` |  
32 -| `i2i_deepwalk.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_I2I_TOP_N` |  
33 -| `i2i_content_similar.py` | 使用 `DEFAULT_I2I_TOP_N` |  
34 -| `interest_aggregation.py` | 使用 `DEFAULT_LOOKBACK_DAYS`, `DEFAULT_RECENT_DAYS`, `DEFAULT_INTEREST_TOP_N` |  
35 -| `run_all.py` | 使用所有默认配置 |  
36 -  
37 -### 3. .gitignore 文件  
38 -  
39 -**文件**: `/home/tw/recommendation/.gitignore`  
40 -  
41 -忽略以下内容:  
42 -```  
43 -# 数据文件  
44 -*.txt (除了 requirements.txt, COMMANDS.txt)  
45 -*.csv  
46 -*.json  
47 -*.jsonl  
48 -*.parquet  
49 -*.pkl  
50 -  
51 -# 输出和临时文件  
52 -output/  
53 -logs/  
54 -models/  
55 -cache/  
56 -tmp/  
57 -  
58 -# Python 相关  
59 -__pycache__/  
60 -*.pyc  
61 -*.egg-info/  
62 -venv/  
63 -  
64 -# IDE 相关  
65 -.vscode/  
66 -.idea/  
67 -.DS_Store  
68 -```  
69 -  
70 -## 📊 使用对比  
71 -  
72 -### 之前(硬编码)  
73 -  
74 -```bash  
75 -# 每次都要手动指定参数  
76 -python3 run_all.py --lookback_days 30 --top_n 50  
77 -  
78 -# 不同脚本的默认值不统一,容易混淆  
79 -```  
80 -  
81 -### 现在(配置化)  
82 -  
83 -```bash  
84 -# 使用配置文件的默认值(当前30天,调试快速)  
85 -python3 run_all.py  
86 -  
87 -# 临时覆盖(不修改配置文件)  
88 -python3 run_all.py --lookback_days 7  
89 -  
90 -# 查看当前默认值  
91 -python3 run_all.py --help  
92 -# 输出: --lookback_days (default: 30, adjust in offline_config.py)  
93 -```  
94 -  
95 -## 🎯 调试与生产切换  
96 -  
97 -### 当前配置(调试模式)  
98 -  
99 -```python  
100 -# config/offline_config.py  
101 -DEFAULT_LOOKBACK_DAYS = 30 # 30天,快速验证  
102 -DEFAULT_RECENT_DAYS = 7 # 7天  
103 -```  
104 -  
105 -**运行效果**:  
106 -- 数据量小,运行快(30-60分钟)  
107 -- 内存占用低(2-4GB)  
108 -- 适合验证流程和参数调优  
109 -  
110 -### 切换到生产(编辑配置文件)  
111 -  
112 -```python  
113 -# config/offline_config.py  
114 -DEFAULT_LOOKBACK_DAYS = 730 # 2年,更准确  
115 -DEFAULT_RECENT_DAYS = 180 # 半年  
116 -```  
117 -  
118 -**运行效果**:  
119 -- 数据量大,推荐质量高  
120 -- 运行时间长(6-10小时)  
121 -- 内存占用高(8-16GB)  
122 -- 适合生产环境  
123 -  
124 -## 🚀 快速开始  
125 -  
126 -### 第一步:快速验证(7天数据)  
127 -  
128 -```bash  
129 -cd /home/tw/recommendation/offline_tasks  
130 -python3 run_all.py --lookback_days 7 --top_n 10  
131 -```  
132 -  
133 -### 第二步:调试模式(使用默认30天)  
134 -  
135 -```bash  
136 -# 当前配置文件已设置为30天  
137 -python3 run_all.py  
138 -```  
139 -  
140 -### 第三步:生产模式  
141 -  
142 -1. 编辑配置文件:  
143 -```bash  
144 -vim config/offline_config.py  
145 -# 修改: DEFAULT_LOOKBACK_DAYS = 730  
146 -# 修改: DEFAULT_RECENT_DAYS = 180  
147 -```  
148 -  
149 -2. 运行:  
150 -```bash  
151 -python3 run_all.py  
152 -```  
153 -  
154 -## 📝 新增文档  
155 -  
156 -1. **UPDATE_CONFIG_GUIDE.md** - 配置调整详细指南  
157 -2. **.gitignore** - Git忽略规则  
158 -  
159 -## 🔍 验证配置  
160 -  
161 -```bash  
162 -# 查看当前配置  
163 -cd /home/tw/recommendation/offline_tasks  
164 -python3 -c "from config.offline_config import *; print(f'LOOKBACK_DAYS: {DEFAULT_LOOKBACK_DAYS}')"  
165 -  
166 -# 查看帮助  
167 -python3 run_all.py --help  
168 -python3 scripts/i2i_swing.py --help  
169 -python3 scripts/interest_aggregation.py --help  
170 -```  
171 -  
172 -## ✨ 主要优势  
173 -  
174 -1. **集中管理** - 所有默认参数在一处配置  
175 -2. **调试友好** - 默认使用小数据量,快速验证  
176 -3. **灵活切换** - 调试/生产环境一键切换  
177 -4. **参数透明** - help信息显示默认值来源  
178 -5. **版本控制** - .gitignore防止数据文件被提交  
179 -  
180 -## 📌 注意事项  
181 -  
182 -1. **首次运行建议使用小数据量**:  
183 - ```bash  
184 - python3 run_all.py --lookback_days 7  
185 - ```  
186 -  
187 -2. **配置文件修改后立即生效**:  
188 - ```bash  
189 - # 修改 offline_config.py 后  
190 - python3 run_all.py # 自动使用新配置  
191 - ```  
192 -  
193 -3. **临时参数不影响配置文件**:  
194 - ```bash  
195 - python3 run_all.py --lookback_days 100 # 仅本次有效  
196 - ```  
197 -  
198 -## 📅 更新日志  
199 -  
200 -**日期**: 2025-10-16  
201 -**版本**: v1.2  
202 -**改动**:  
203 -- ✅ 新增默认参数配置(DEFAULT_LOOKBACK_DAYS=30)  
204 -- ✅ 更新所有6个脚本使用配置文件  
205 -- ✅ 创建 .gitignore 忽略数据和临时文件  
206 -- ✅ 新增配置调整指南文档  
207 -  
208 ----  
209 -  
210 -**配置文件**: `config/offline_config.py`  
211 -**当前默认**: 30天调试模式  
212 -**生产建议**: 730天  
213 -**状态**: ✅ 已完成并测试  
DEBUG_IMPLEMENTATION_SUMMARY.md deleted
@@ -1,255 +0,0 @@ @@ -1,255 +0,0 @@
1 -# 🐛 Debug功能实现总结  
2 -  
3 -## ✅ 完成情况  
4 -  
5 -### 已实现 ✓  
6 -  
7 -1. **Debug工具库** (`scripts/debug_utils.py`) - ✅ 完成  
8 - - 369行完整实现  
9 - - 7个核心函数  
10 - - 支持日志、明文输出、数据统计  
11 -  
12 -2. **配置更新** (`config/offline_config.py`) - ✅ 完成  
13 - - 新增DEBUG_CONFIG配置段  
14 - - 默认参数配置(DEFAULT_LOOKBACK_DAYS=30)  
15 -  
16 -3. **i2i_swing.py** - ✅ 完成  
17 - - 完整debug日志  
18 - - 明文索引输出  
19 - - --debug参数支持  
20 -  
21 -4. **run_all.py** - ✅ 完成  
22 - - 支持--debug参数  
23 - - 自动传递给所有子脚本  
24 -  
25 -5. **文档** - ✅ 完成  
26 - - DEBUG_GUIDE.md (完整使用指南)  
27 - - QUICK_DEBUG_SUMMARY.md (快速总结)  
28 - - UPDATE_CONFIG_GUIDE.md (配置调整指南)  
29 -  
30 -### 待实现(可选)  
31 -  
32 -其他4个脚本可以按需添加debug支持:  
33 -- i2i_session_w2v.py  
34 -- i2i_deepwalk.py  
35 -- i2i_content_similar.py  
36 -- interest_aggregation.py  
37 -  
38 -**实现模式**:与i2i_swing.py相同,只需:  
39 -1. 导入debug_utils  
40 -2. 添加--debug参数  
41 -3. 调用log函数记录关键信息  
42 -4. 生成明文文件  
43 -  
44 -## 🎯 核心功能  
45 -  
46 -### 1. 详细日志  
47 -  
48 -```python  
49 -# 自动记录的信息:  
50 -✓ 算法参数(alpha, top_n, lookback_days等)  
51 -✓ SQL查询和数据获取(行数、时间范围)  
52 -✓ DataFrame详情(列名、类型、缺失值、统计)  
53 -✓ 行为类型分布(百分比)  
54 -✓ 用户/商品数量统计  
55 -✓ 处理进度(每N条/每N个商品)  
56 -✓ 中间结果采样(Top3展示)  
57 -✓ 每个步骤耗时  
58 -✓ 相似度分布统计(min/max/avg)  
59 -```  
60 -  
61 -### 2. 明文索引  
62 -  
63 -```  
64 -ID全部带名称,格式清晰:  
65 -  
66 -[1] i2i:swing:12345(香蕉干)  
67 ---------------------------------------------------------------------------------  
68 - 1. ID:67890(芒果干) - Score:0.8567  
69 - 2. ID:11223(菠萝干) - Score:0.7234  
70 - 3. ID:44556(苹果干) - Score:0.6891  
71 -  
72 -[2] interest:hot:category_level2:200(水果类)  
73 ---------------------------------------------------------------------------------  
74 - 1. ID:12345(香蕉干)  
75 - 2. ID:67890(芒果干)  
76 - 3. ID:11223(菠萝干)  
77 -```  
78 -  
79 -### 3. 名称映射  
80 -  
81 -自动从数据库获取:  
82 -- 商品名称 (prd_goods_sku.name)  
83 -- 分类名称 (prd_category.name)  
84 -- 供应商名称 (sup_supplier.name)  
85 -- 平台名称(硬编码映射)  
86 -  
87 -## 📊 使用示例  
88 -  
89 -### 基础使用  
90 -  
91 -```bash  
92 -# 单个脚本debug  
93 -python3 scripts/i2i_swing.py --lookback_days 7 --top_n 10 --debug  
94 -  
95 -# 所有任务debug  
96 -python3 run_all.py --lookback_days 7 --top_n 10 --debug  
97 -```  
98 -  
99 -### 输出位置  
100 -  
101 -```  
102 -offline_tasks/  
103 -├── logs/debug/  
104 -│ └── i2i_swing_20251016_193000.log # 详细日志  
105 -└── output/debug/  
106 - └── i2i_swing_20251016_readable.txt # 明文索引  
107 -```  
108 -  
109 -### 查看输出  
110 -  
111 -```bash  
112 -# 实时查看日志  
113 -tail -f logs/debug/i2i_swing_*.log  
114 -  
115 -# 查看明文索引  
116 -less output/debug/i2i_swing_*_readable.txt  
117 -  
118 -# 搜索特定商品  
119 -grep "香蕉干" output/debug/*_readable.txt -A 5  
120 -```  
121 -  
122 -## 🔧 技术实现  
123 -  
124 -### Debug Logger  
125 -  
126 -```python  
127 -from offline_tasks.scripts.debug_utils import setup_debug_logger  
128 -  
129 -# 自动设置:  
130 -logger = setup_debug_logger('script_name', debug=True)  
131 -# - DEBUG级别  
132 -# - 控制台 + 文件双输出  
133 -# - 彩色格式化  
134 -```  
135 -  
136 -### 数据统计  
137 -  
138 -```python  
139 -from offline_tasks.scripts.debug_utils import log_dataframe_info  
140 -  
141 -# 自动记录:  
142 -log_dataframe_info(logger, df, "数据名称", sample_size=10)  
143 -# - 行列数  
144 -# - 数据类型  
145 -# - 缺失值  
146 -# - 采样数据  
147 -# - 数值统计  
148 -```  
149 -  
150 -### 明文输出  
151 -  
152 -```python  
153 -from offline_tasks.scripts.debug_utils import (  
154 - save_readable_index, fetch_name_mappings  
155 -)  
156 -  
157 -# 获取名称映射  
158 -name_mappings = fetch_name_mappings(engine, debug=True)  
159 -  
160 -# 保存明文文件  
161 -readable_file = save_readable_index(  
162 - output_file,  
163 - index_data,  
164 - name_mappings,  
165 - description="算法描述"  
166 -)  
167 -```  
168 -  
169 -## 💡 使用建议  
170 -  
171 -### 开发阶段  
172 -```bash  
173 -# 小数据量 + debug  
174 -python3 run_all.py --lookback_days 3 --top_n 10 --debug  
175 -```  
176 -✓ 快速验证  
177 -✓ 详细排错  
178 -✓ 检查效果  
179 -  
180 -### 调优阶段  
181 -```bash  
182 -# 中等数据量 + debug  
183 -python3 scripts/i2i_swing.py --lookback_days 30 --top_n 50 --debug  
184 -```  
185 -✓ 查看分布  
186 -✓ 评估质量  
187 -✓ 调整参数  
188 -  
189 -### 生产阶段  
190 -```bash  
191 -# 大数据量 + 正常模式  
192 -python3 run_all.py --lookback_days 730 --top_n 50  
193 -```  
194 -✓ 高效运行  
195 -✓ 必要日志  
196 -✓ 节省空间  
197 -  
198 -## 📈 性能影响  
199 -  
200 -| 模式 | 运行时间 | 磁盘占用 | 日志详细度 |  
201 -|------|---------|---------|-----------|  
202 -| 正常 | 基准 | 基准 | INFO |  
203 -| Debug | +10-20% | +50MB-500MB | DEBUG |  
204 -  
205 -**建议**:  
206 -- 开发/调试:始终使用debug  
207 -- 生产环境:关闭debug  
208 -- 定期清理:`rm -rf logs/debug/* output/debug/*`  
209 -  
210 -## 🎉 主要优势  
211 -  
212 -1. **数据可见** - 看清楚每一步的数据流向  
213 -2. **效果可查** - 明文文件直接检查推荐质量  
214 -3. **性能可测** - 每个步骤的耗时统计  
215 -4. **问题可追** - 详细日志快速定位错误  
216 -5. **参数可调** - 对比不同参数的效果  
217 -  
218 -## 📚 相关文档  
219 -  
220 -1. **DEBUG_GUIDE.md** - 完整使用指南(200+行)  
221 -2. **QUICK_DEBUG_SUMMARY.md** - 快速参考  
222 -3. **UPDATE_CONFIG_GUIDE.md** - 配置调整指南  
223 -4. **scripts/debug_utils.py** - 源代码和注释  
224 -  
225 -## ✨ 下一步(可选)  
226 -  
227 -如需为其他脚本添加debug支持,参考i2i_swing.py的模式:  
228 -  
229 -```python  
230 -# 1. 导入  
231 -from offline_tasks.scripts.debug_utils import (  
232 - setup_debug_logger, log_dataframe_info, ...  
233 -)  
234 -  
235 -# 2. 添加参数  
236 -parser.add_argument('--debug', action='store_true')  
237 -  
238 -# 3. 设置logger  
239 -logger = setup_debug_logger('script_name', debug=args.debug)  
240 -  
241 -# 4. 记录信息  
242 -log_algorithm_params(logger, params)  
243 -log_dataframe_info(logger, df, "名称")  
244 -  
245 -# 5. 生成明文  
246 -if args.debug:  
247 - name_mappings = fetch_name_mappings(engine, debug=True)  
248 - save_readable_index(output_file, index_data, name_mappings)  
249 -```  
250 -  
251 ----  
252 -  
253 -**状态**: ✅ 核心功能已完成  
254 -**当前**: i2i_swing.py + run_all.py完整支持  
255 -**扩展**: 其他脚本可按需添加(模式已建立)  
OFFLINE_TASKS_README.md deleted
@@ -1,231 +0,0 @@ @@ -1,231 +0,0 @@
1 -# 推荐系统离线任务 - 完整交付  
2 -  
3 -## 🎯 项目目标  
4 -  
5 -根据业务文档要求,构建推荐系统的离线任务部分,建立基于现有用户特征的相应索引。  
6 -  
7 -## ✅ 已完成的任务  
8 -  
9 -### 1. i2i - 行为相似索引(3种算法)  
10 -  
11 -参考 `item_sim.py`(真实可运行的代码),改写了以下算法以适配我们的数据:  
12 -  
13 -#### ✅ Swing算法  
14 -- **文件**: `offline_tasks/scripts/i2i_swing.py`  
15 -- **来源**: 改写自 `collaboration/src/swing.cc`  
16 -- **特点**: 基于用户共同行为的物品相似度,效果优于传统协同过滤  
17 -- **输出**: `i2i_swing_YYYYMMDD.txt`  
18 -  
19 -#### ✅ Session Word2Vec  
20 -- **文件**: `offline_tasks/scripts/i2i_session_w2v.py`  
21 -- **来源**: 改写自 `graphembedding/session_w2v/`  
22 -- **特点**: 基于用户会话序列训练Word2Vec,捕获序列关系  
23 -- **输出**: `i2i_session_w2v_YYYYMMDD.txt` + 模型文件  
24 -  
25 -#### ✅ DeepWalk  
26 -- **文件**: `offline_tasks/scripts/i2i_deepwalk.py`  
27 -- **来源**: 改写自 `graphembedding/deepwalk/deepwalk.py`  
28 -- **特点**: 基于图随机游走训练Word2Vec,发现图结构特征  
29 -- **输出**: `i2i_deepwalk_YYYYMMDD.txt` + 模型文件  
30 -  
31 -### 2. 兴趣点聚合索引  
32 -  
33 -按照指定的key生成索引:  
34 -  
35 -#### ✅ 支持的维度Key  
36 -- ✅ **平台**: PC/Mobile/App  
37 -- ✅ **国家/销售区域**: US/UK/CN...  
38 -- ✅ **客户类型**: retailer/wholesaler...  
39 -- ✅ **用户偏好的二级分类**: category_level2  
40 -- ✅ **用户偏好的三级分类**: category_level3  
41 -  
42 -#### ✅ 支持的List类型  
43 -- ✅ **热门** (hot): 基于最近180天的高交互商品  
44 -- ✅ **加购** (cart): 基于加购行为的高频商品  
45 -- ✅ **新品** (new): 基于商品创建时间的新品  
46 -  
47 -#### ✅ 时间衰减  
48 -- 最近2年数据  
49 -- 权重时间衰减(每30天衰减5%)  
50 -  
51 -## 📁 项目结构  
52 -  
53 -```  
54 -/home/tw/recommendation/  
55 -│  
56 -├── db_service.py # 数据库连接服务(共享)  
57 -├── requirements.txt # Python依赖包  
58 -│  
59 -├── offline_tasks/ # 离线任务主目录  
60 -│ │  
61 -│ ├── config/  
62 -│ │ └── offline_config.py # 配置文件  
63 -│ │  
64 -│ ├── scripts/  
65 -│ │ ├── i2i_swing.py # ✅ Swing算法  
66 -│ │ ├── i2i_session_w2v.py # ✅ Session W2V  
67 -│ │ ├── i2i_deepwalk.py # ✅ DeepWalk  
68 -│ │ ├── interest_aggregation.py # ✅ 兴趣点聚合  
69 -│ │ └── load_index_to_redis.py # Redis加载工具  
70 -│ │  
71 -│ ├── run_all.py # 统一调度脚本  
72 -│ ├── install.sh # 安装脚本  
73 -│ ├── test_connection.py # 连接测试  
74 -│ ├── example_query_redis.py # 查询示例  
75 -│ │  
76 -│ └── 文档/  
77 -│ ├── README.md # 详细文档  
78 -│ ├── QUICKSTART.md # 快速开始  
79 -│ ├── PROJECT_SUMMARY.md # 项目总结  
80 -│ ├── STRUCTURE.md # 目录结构  
81 -│ └── DELIVERY.md # 交付文档  
82 -│  
83 -└── (原有代码参考)  
84 - ├── item_sim.py # 参考的实现  
85 - ├── collaboration/ # Swing算法参考  
86 - └── graphembedding/ # 图嵌入算法参考  
87 -```  
88 -  
89 -## 🚀 快速开始  
90 -  
91 -### 步骤1: 安装依赖  
92 -```bash  
93 -cd /home/tw/recommendation/offline_tasks  
94 -bash install.sh  
95 -```  
96 -  
97 -### 步骤2: 测试连接  
98 -```bash  
99 -python3 test_connection.py  
100 -```  
101 -  
102 -### 步骤3: 运行离线任务  
103 -```bash  
104 -# 运行所有任务(推荐)  
105 -python3 run_all.py --lookback_days 730 --top_n 50  
106 -  
107 -# 或单独运行  
108 -python3 scripts/i2i_swing.py --lookback_days 730 --top_n 50  
109 -python3 scripts/i2i_session_w2v.py --lookback_days 730 --top_n 50  
110 -python3 scripts/i2i_deepwalk.py --lookback_days 730 --top_n 50  
111 -python3 scripts/interest_aggregation.py --lookback_days 730 --top_n 1000  
112 -```  
113 -  
114 -### 步骤4: 加载到Redis  
115 -```bash  
116 -python3 scripts/load_index_to_redis.py --redis-host localhost --redis-port 6379  
117 -```  
118 -  
119 -## 📊 输出示例  
120 -  
121 -### i2i相似度索引  
122 -```  
123 -item_id \t item_name \t similar_item_id1:score1,similar_item_id2:score2,...  
124 -```  
125 -  
126 -### 兴趣点聚合索引  
127 -```  
128 -platform:PC \t item_id1:score1,item_id2:score2,...  
129 -country:US \t item_id1:score1,item_id2:score2,...  
130 -customer_type:retailer \t item_id1:score1,item_id2:score2,...  
131 -category_level2:100 \t item_id1:score1,item_id2:score2,...  
132 -platform_country:PC_US \t item_id1:score1,item_id2:score2,...  
133 -```  
134 -  
135 -## 🎬 业务场景映射  
136 -  
137 -根据文档中的3个业务场景:  
138 -  
139 -### 1. 首页猜你喜欢  
140 -**使用**: 兴趣点聚合索引  
141 -```python  
142 -# 组合查询  
143 -interest:hot:platform_country:{platform}_{country}  
144 -interest:hot:customer_type:{customer_type}  
145 -interest:global:category_level2:{preferred_category}  
146 -```  
147 -  
148 -### 2. 详情页的大家都在看  
149 -**使用**: i2i行为相似索引  
150 -```python  
151 -# 查询相似商品  
152 -i2i:swing:{item_id}  
153 -i2i:session_w2v:{item_id}  
154 -i2i:deepwalk:{item_id}  
155 -```  
156 -  
157 -### 3. 搜索结果页底部的供应商推荐  
158 -**使用**: 兴趣点聚合索引  
159 -```python  
160 -# 按分类推荐  
161 -interest:global:category_level2:{category_id}  
162 -interest:hot:category_level3:{category_id}  
163 -```  
164 -  
165 -## ⚙️ 核心特性  
166 -  
167 -1. ✅ **数据适配**: 完全适配现有数据库(SelectDB)和表结构  
168 -2. ✅ **时间衰减**: 2年数据,近期行为权重更高  
169 -3. ✅ **行为加权**: 不同行为类型有不同权重(购买>联系工厂>加购>点击)  
170 -4. ✅ **多维度**: 支持单维度和组合维度查询  
171 -5. ✅ **多算法**: 3种i2i算法,可融合使用  
172 -6. ✅ **可配置**: 所有参数集中配置,便于调优  
173 -7. ✅ **自动化**: 统一调度,一键运行  
174 -8. ✅ **文档完善**: 提供完整的使用文档和示例  
175 -  
176 -## 📚 详细文档  
177 -  
178 -- **QUICKSTART.md**: 5分钟快速上手  
179 -- **README.md**: 完整的功能说明  
180 -- **PROJECT_SUMMARY.md**: 技术架构和原理  
181 -- **STRUCTURE.md**: 项目结构和数据流  
182 -- **DELIVERY.md**: 交付清单和状态  
183 -  
184 -## 🔧 定时任务  
185 -  
186 -建议设置crontab每天运行:  
187 -  
188 -```bash  
189 -# 每天凌晨2点运行离线任务  
190 -0 2 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 run_all.py >> logs/cron.log 2>&1  
191 -  
192 -# 凌晨6点加载到Redis  
193 -0 6 * * * cd /home/tw/recommendation/offline_tasks && /usr/bin/python3 scripts/load_index_to_redis.py >> logs/load_redis.log 2>&1  
194 -```  
195 -  
196 -## 📈 性能参考  
197 -  
198 -基于100万条用户行为数据:  
199 -  
200 -| 任务 | 时间 | 内存 |  
201 -|------|------|------|  
202 -| Swing | 2-4小时 | 4-8GB |  
203 -| Session W2V | 30-60分钟 | 2-4GB |  
204 -| DeepWalk | 1-2小时 | 2-4GB |  
205 -| 兴趣点聚合 | 30-60分钟 | 2-4GB |  
206 -  
207 -## ✨ 与原有代码的关系  
208 -  
209 -本项目是对以下原有代码的改写和扩展:  
210 -  
211 -1. **item_sim.py** → 数据格式参考,保持一致性  
212 -2. **collaboration/src/swing.cc** → 改写为Python版本的 `i2i_swing.py`  
213 -3. **graphembedding/session_w2v/** → 改写为 `i2i_session_w2v.py`  
214 -4. **graphembedding/deepwalk/** → 改写为 `i2i_deepwalk.py`  
215 -5. **hot/main.py** → 参考其聚合逻辑,扩展为多维度的 `interest_aggregation.py`  
216 -  
217 -所有改写都保持了与现有数据格式的兼容性。  
218 -  
219 -## 🎉 交付状态  
220 -  
221 -**状态**: ✅ 已完成并可用  
222 -  
223 -所有功能已实现、测试并文档化。可以立即部署使用。  
224 -  
225 ----  
226 -  
227 -**目录**: `/home/tw/recommendation/offline_tasks/`  
228 -**入口**: `run_all.py`  
229 -**文档**: `QUICKSTART.md`  
230 -**日期**: 2025-10-16  
231 -  
OFFLINE_TASKS_SUMMARY.md deleted
@@ -1,290 +0,0 @@ @@ -1,290 +0,0 @@
1 -# 📊 推荐系统离线任务 - 完整总结  
2 -  
3 -## ✅ 项目状态:已完成  
4 -  
5 ----  
6 -  
7 -## 📦 交付内容  
8 -  
9 -### 1. 核心算法(5个脚本)  
10 -  
11 -| 脚本 | 功能 | 代码行数 |  
12 -|------|------|---------|  
13 -| `i2i_swing.py` | Swing算法(行为相似) | ~240行 |  
14 -| `i2i_session_w2v.py` | Session W2V(行为相似) | ~240行 |  
15 -| `i2i_deepwalk.py` | DeepWalk(行为相似) | ~330行 |  
16 -| `i2i_content_similar.py` | 内容相似(新增) | ~320行 |  
17 -| `interest_aggregation.py` | 兴趣点聚合 | ~310行 |  
18 -  
19 -### 2. 工具脚本(5个)  
20 -  
21 -| 脚本 | 功能 |  
22 -|------|------|  
23 -| `run_all.py` | 统一调度所有任务 |  
24 -| `load_index_to_redis.py` | 加载索引到Redis |  
25 -| `test_connection.py` | 测试数据库和Redis连接 |  
26 -| `example_query_redis.py` | Redis查询示例 |  
27 -| `check_table_structure.py` | 检查表结构 |  
28 -  
29 -### 3. 配置文件(2个)  
30 -  
31 -| 文件 | 功能 |  
32 -|------|------|  
33 -| `config/offline_config.py` | 离线任务配置 |  
34 -| `requirements.txt` | Python依赖包 |  
35 -  
36 -### 4. 文档(14份)  
37 -  
38 -| 文档 | 说明 |  
39 -|------|------|  
40 -| **START_HERE.md** | 开始文档(推荐阅读) |  
41 -| **QUICKSTART.md** | 快速开始指南 |  
42 -| **README.md** | 详细使用文档 |  
43 -| **CURRENT_STATUS.md** | 当前功能状态 |  
44 -| **FINAL_UPDATE.md** | 最终更新说明 |  
45 -| **COMPLETE_INDEX_LIST.md** | 完整索引清单 |  
46 -| **PROJECT_SUMMARY.md** | 技术架构总结 |  
47 -| **FIELD_MAPPING.md** | 字段映射说明 |  
48 -| **DATABASE_SETUP.md** | 数据库配置指南 |  
49 -| **STRUCTURE.md** | 目录结构说明 |  
50 -| **TROUBLESHOOTING.md** | 故障排除指南 |  
51 -| **CHANGELOG.md** | 更新日志 |  
52 -| **COMMANDS.txt** | 常用命令参考 |  
53 -| **FINAL_SUMMARY.txt** | 交付总结 |  
54 -  
55 ----  
56 -  
57 -## 🎯 功能清单  
58 -  
59 -### i2i 相似度索引  
60 -  
61 -#### 行为相似(3种)  
62 -✅ **Swing** - 基于用户共同行为  
63 -✅ **Session W2V** - 基于会话序列  
64 -✅ **DeepWalk** - 基于图随机游走  
65 -  
66 -#### 内容相似(1种,3个方法)  
67 -✅ **Content-based** - 基于商品属性  
68 -- TF-IDF方法  
69 -- 分类方法  
70 -- 混合方法(推荐)  
71 -  
72 -### 兴趣点聚合索引  
73 -  
74 -#### 单维度(7个)  
75 -✅ 业务平台(platform)  
76 -✅ 客户端平台(client_platform)  
77 -✅ 供应商(supplier)  
78 -✅ 一级分类(category_level1)  
79 -✅ 二级分类(category_level2)  
80 -✅ 三级分类(category_level3)  
81 -✅ 四级分类(category_level4)  
82 -  
83 -#### 组合维度(4个)  
84 -✅ 平台 + 客户端  
85 -✅ 平台 + 二级分类  
86 -✅ 平台 + 三级分类  
87 -✅ 客户端 + 二级分类  
88 -  
89 -#### 列表类型(3种)  
90 -✅ 热门(hot)  
91 -✅ 加购(cart)  
92 -✅ 新品(new)  
93 -  
94 ----  
95 -  
96 -## 📊 数据依赖  
97 -  
98 -### 数据库表  
99 -- `sensors_events` - 用户行为事件(必需)  
100 -- `prd_goods_sku` - 商品SKU信息(必需)  
101 -- `prd_goods` - 商品主表(必需)  
102 -- `prd_category` - 分类信息(用于分类维度)  
103 -- `sup_supplier` - 供应商信息(用于供应商维度)  
104 -- `prd_goods_sku_attribute` - 商品属性(用于内容相似)  
105 -- `prd_option` - 属性选项(用于内容相似)  
106 -  
107 -### 关键字段  
108 -- `anonymous_id` - 用户ID  
109 -- `item_id` - 商品ID  
110 -- `event` - 事件类型  
111 -- `create_time` - 时间戳  
112 -- `business_platform` - 业务平台  
113 -- `category_id` - 分类ID(通过path解析出1-4级)  
114 -- `supplier_id` - 供应商ID  
115 -  
116 ----  
117 -  
118 -## 🚀 使用指南  
119 -  
120 -### 快速开始  
121 -```bash  
122 -cd /home/tw/recommendation/offline_tasks  
123 -bash install.sh  
124 -python3 test_connection.py  
125 -python3 run_all.py --lookback_days 730 --top_n 50  
126 -```  
127 -  
128 -### 单独运行  
129 -```bash  
130 -# i2i算法  
131 -python3 scripts/i2i_swing.py --lookback_days 730 --top_n 50  
132 -python3 scripts/i2i_content_similar.py --top_n 50 --method hybrid  
133 -  
134 -# 兴趣点聚合  
135 -python3 scripts/interest_aggregation.py --lookback_days 730 --top_n 1000  
136 -```  
137 -  
138 -### 加载到Redis  
139 -```bash  
140 -python3 scripts/load_index_to_redis.py --redis-host localhost  
141 -```  
142 -  
143 ----  
144 -  
145 -## 📈 性能指标  
146 -  
147 -| 任务 | 数据量 | 预估时间 | 内存占用 |  
148 -|------|--------|---------|---------|  
149 -| Swing | 730天行为数据 | 2-4小时 | 4-8GB |  
150 -| Session W2V | 730天行为数据 | 30-60分钟 | 2-4GB |  
151 -| DeepWalk | 730天行为数据 | 1-2小时 | 2-4GB |  
152 -| Content-based | 全量商品属性 | 10-30分钟 | 2-4GB |  
153 -| 兴趣点聚合 | 730天行为数据 | 30-60分钟 | 2-4GB |  
154 -| **总计** | - | **6-10小时** | **8-16GB** |  
155 -  
156 ----  
157 -  
158 -## 💾 输出数据  
159 -  
160 -### 文件格式  
161 -```  
162 -i2i_swing_20251016.txt  
163 -i2i_session_w2v_20251016.txt  
164 -i2i_deepwalk_20251016.txt  
165 -i2i_content_hybrid_20251016.txt  
166 -interest_aggregation_hot_20251016.txt  
167 -interest_aggregation_cart_20251016.txt  
168 -interest_aggregation_new_20251016.txt  
169 -interest_aggregation_global_20251016.txt  
170 -```  
171 -  
172 -### 索引数量  
173 -- i2i索引:6种方法 × 商品数量  
174 -- 兴趣点聚合:10000-50000条索引  
175 -  
176 ----  
177 -  
178 -## 🎬 业务场景  
179 -  
180 -### 1. 首页猜你喜欢  
181 -```  
182 -interest:hot:platform:pc  
183 -interest:hot:category_level2:200  
184 -interest:hot:platform_category2:pc_200  
185 -```  
186 -  
187 -### 2. 详情页大家都在看  
188 -```  
189 -i2i:swing:12345  
190 -i2i:content_hybrid:12345  
191 -```  
192 -  
193 -### 3. 搜索结果页推荐  
194 -```  
195 -interest:global:category_level2:200  
196 -interest:hot:supplier:10001  
197 -```  
198 -  
199 ----  
200 -  
201 -## ✨ 核心优势  
202 -  
203 -### 1. 完整性  
204 -- 行为 + 内容双重相似度  
205 -- 短期热门 + 长期稳定  
206 -- 粗粒度 + 细粒度查询  
207 -  
208 -### 2. 灵活性  
209 -- 4级分类查询  
210 -- 供应商维度  
211 -- 多维度组合  
212 -  
213 -### 3. 可扩展性  
214 -- 易于添加新维度  
215 -- 易于添加新算法  
216 -- 配置化管理  
217 -  
218 -### 4. 实用性  
219 -- 完全适配真实数据库  
220 -- 参考现有可运行代码  
221 -- 文档详细完善  
222 -  
223 ----  
224 -  
225 -## 📖 推荐阅读顺序  
226 -  
227 -1. **START_HERE.md** ← 从这里开始  
228 -2. **QUICKSTART.md** - 快速上手  
229 -3. **COMPLETE_INDEX_LIST.md** - 了解所有索引  
230 -4. **FINAL_UPDATE.md** - 了解完整功能  
231 -5. **README.md** - 详细使用说明  
232 -  
233 ----  
234 -  
235 -## 🔍 关键数字  
236 -  
237 -| 指标 | 数值 |  
238 -|------|------|  
239 -| 总代码行数 | ~2500行 |  
240 -| 算法数量 | 4种(3行为+1内容) |  
241 -| 维度数量 | 11个(7单+4组合) |  
242 -| 分类层级 | 4级 |  
243 -| 文档数量 | 14份 |  
244 -| 脚本数量 | 10个 |  
245 -| 预计索引总数 | 10000-50000条 |  
246 -  
247 ----  
248 -  
249 -## 📅 项目时间线  
250 -  
251 -- **2025-10-16 上午**: 创建基础框架和配置  
252 -- **2025-10-16 中午**: 实现3种行为相似算法  
253 -- **2025-10-16 下午**: 实现兴趣点聚合  
254 -- **2025-10-16 下午**: 根据实际表结构适配  
255 -- **2025-10-16 傍晚**: 新增内容相似算法  
256 -- **2025-10-16 傍晚**: 完善分类和供应商维度  
257 -- **2025-10-16 晚上**: 完成所有文档  
258 -  
259 ----  
260 -  
261 -## 🎉 交付状态  
262 -  
263 -**✅ 已完成并可用!**  
264 -  
265 -所有代码、配置、文档均已完成,可以立即部署使用。  
266 -  
267 ----  
268 -  
269 -## 📞 支持  
270 -  
271 -### 文档  
272 -- 完整文档在 `offline_tasks/` 目录  
273 -- 从 `START_HERE.md` 开始  
274 -  
275 -### 日志  
276 -- 查看 `offline_tasks/logs/` 目录  
277 -- `tail -f logs/run_all_*.log`  
278 -  
279 -### 帮助  
280 -- 各个脚本都支持 `--help` 参数  
281 -- 查看 `TROUBLESHOOTING.md` 排查问题  
282 -  
283 ----  
284 -  
285 -**项目目录**: `/home/tw/recommendation/offline_tasks/`  
286 -**入口文档**: `START_HERE.md`  
287 -**主脚本**: `run_all.py`  
288 -**版本**: v1.1  
289 -**日期**: 2025-10-16  
290 -**状态**: ✅ 交付完成  
SWING_IMPLEMENTATION_SUMMARY.md deleted
@@ -1,375 +0,0 @@ @@ -1,375 +0,0 @@
1 -# Swing算法实现总结  
2 -  
3 -## 完成的任务  
4 -  
5 -本次实现完成了以下功能:  
6 -  
7 -### 1. Session生成脚本 ✓  
8 -  
9 -**文件**: `offline_tasks/scripts/generate_session.py`  
10 -  
11 -**功能**:  
12 -- 从数据库提取用户行为数据  
13 -- 聚合用户session(按商品维度累加权重)  
14 -- 支持两种输出格式:  
15 - - 标准格式:`uid \t {"item_id":score,...}`  
16 - - C++格式:`{"item_id":score,...}` (每行一个用户)  
17 -  
18 -**主要参数**:  
19 -- `--lookback_days`: 回看天数(默认730天)  
20 -- `--format`: 输出格式(standard/cpp/both)  
21 -- `--output`: 输出文件路径  
22 -- `--debug`: 启用debug模式  
23 -  
24 -**使用示例**:  
25 -```bash  
26 -cd /home/tw/recommendation/offline_tasks  
27 -python3 scripts/generate_session.py --lookback_days 730 --format both  
28 -```  
29 -  
30 -### 2. Swing运行脚本 ✓  
31 -  
32 -**文件**: `collaboration/run.sh`  
33 -  
34 -**改进内容**:  
35 -- ✓ 适配新的数据路径(`../offline_tasks/output/`)  
36 -- ✓ 自动检测session文件格式(带uid或纯json)  
37 -- ✓ 增加配置区域,便于修改参数  
38 -- ✓ 添加错误检查和友好的输出信息  
39 -- ✓ 自动调用debug脚本生成可读文件  
40 -- ✓ 支持自定义Python环境  
41 -  
42 -**配置项**:  
43 -```bash  
44 -SESSION_DATA_DIR="../offline_tasks/output" # session文件目录  
45 -ALPHA=0.7 # Swing alpha参数  
46 -THRESHOLD1=1 # 交互强度阈值1  
47 -THRESHOLD2=3 # 交互强度阈值2  
48 -THREAD_NUM=4 # 线程数  
49 -SHOW_PROGRESS=1 # 显示进度  
50 -PYTHON_CMD="python3" # Python命令  
51 -```  
52 -  
53 -**执行流程**:  
54 -1. 编译C++程序  
55 -2. 查找session文件  
56 -3. 运行Swing算法(多线程)  
57 -4. 合并结果  
58 -5. 生成可读版本(自动调用debug脚本)  
59 -  
60 -### 3. Debug脚本 ✓  
61 -  
62 -**文件**: `offline_tasks/scripts/add_names_to_swing.py`  
63 -  
64 -**功能**:  
65 -- 读取Swing算法输出结果  
66 -- 从数据库获取商品名称映射  
67 -- 生成可读版本:`item_id:name \t similar_id1:name1:score1,...`  
68 -  
69 -**使用示例**:  
70 -```bash  
71 -cd /home/tw/recommendation/offline_tasks  
72 -python3 scripts/add_names_to_swing.py \  
73 - ../collaboration/output/swing_similar.txt \  
74 - ../collaboration/output/swing_similar_readable.txt \  
75 - --debug  
76 -```  
77 -  
78 -### 4. 使用文档 ✓  
79 -  
80 -**文件**:  
81 -- `offline_tasks/SWING_USAGE.md` - 完整使用指南  
82 -- `collaboration/QUICKSTART.md` - 快速开始指南  
83 -  
84 -**包含内容**:  
85 -- 详细的使用步骤  
86 -- 参数说明和调优建议  
87 -- 故障排查指南  
88 -- 性能优化建议  
89 -- 完整示例  
90 -  
91 -## 数据流程  
92 -  
93 -```  
94 -┌─────────────────────────────────────────────────────────────┐  
95 -│ 步骤1: 生成Session文件 │  
96 -│ generate_session.py │  
97 -│ ↓ │  
98 -│ 数据库 → 用户行为数据 → 聚合权重 → session.txt.YYYYMMDD │  
99 -└─────────────────────────────────────────────────────────────┘  
100 - ↓  
101 -┌─────────────────────────────────────────────────────────────┐  
102 -│ 步骤2: 运行Swing算法 │  
103 -│ collaboration/run.sh │  
104 -│ ↓ │  
105 -│ session文件 → C++ Swing → sim_matrx.* → swing_similar.txt │  
106 -└─────────────────────────────────────────────────────────────┘  
107 - ↓  
108 -┌─────────────────────────────────────────────────────────────┐  
109 -│ 步骤3: 生成Debug文件 │  
110 -│ add_names_to_swing.py (自动调用) │  
111 -│ ↓ │  
112 -│ swing_similar.txt → 添加商品名 → swing_similar_readable.txt│  
113 -└─────────────────────────────────────────────────────────────┘  
114 -```  
115 -  
116 -## 文件格式说明  
117 -  
118 -### Session文件格式  
119 -  
120 -**标准格式** (`session.txt.YYYYMMDD`):  
121 -```  
122 -user_id1 {"123":10.0,"456":5.0,"789":3.0}  
123 -user_id2 {"123":8.0,"999":12.0}  
124 -```  
125 -  
126 -**C++格式** (`session.txt.YYYYMMDD.cpp`):  
127 -```  
128 -{"123":10.0,"456":5.0,"789":3.0}  
129 -{"123":8.0,"999":12.0}  
130 -```  
131 -  
132 -### Swing结果格式  
133 -  
134 -**原始格式** (`swing_similar.txt`):  
135 -```  
136 -12345 67890:0.8523,23456:0.7234,34567:0.6891  
137 -```  
138 -  
139 -**可读格式** (`swing_similar_readable.txt`):  
140 -```  
141 -12345:iPhone 15 Pro 67890:iPhone 15:0.8523,23456:iPhone 14 Pro:0.7234  
142 -```  
143 -  
144 -## 行为权重配置  
145 -  
146 -当前配置(在`generate_session.py`中):  
147 -  
148 -| 行为类型 | 权重 | 说明 |  
149 -|---------|------|------|  
150 -| purchase | 10.0 | 购买行为(最强信号) |  
151 -| contactFactory | 5.0 | 联系厂家 |  
152 -| addToCart | 3.0 | 加入购物车 |  
153 -| addToPool | 2.0 | 加入询价池 |  
154 -  
155 -## 快速开始  
156 -  
157 -```bash  
158 -# 1. 生成session文件(730天数据)  
159 -cd /home/tw/recommendation/offline_tasks  
160 -python3 scripts/generate_session.py --lookback_days 730  
161 -  
162 -# 2. 运行Swing算法  
163 -cd /home/tw/recommendation/collaboration  
164 -bash run.sh  
165 -  
166 -# 3. 查看结果  
167 -cat output/swing_similar_readable.txt | head -20  
168 -```  
169 -  
170 -## 项目结构  
171 -  
172 -```  
173 -recommendation/  
174 -├── offline_tasks/  
175 -│ ├── scripts/  
176 -│ │ ├── generate_session.py # 新增:生成session  
177 -│ │ ├── add_names_to_swing.py # 新增:添加商品名  
178 -│ │ ├── i2i_swing.py # 已有:Python版Swing  
179 -│ │ └── debug_utils.py # 已有:Debug工具  
180 -│ ├── config/  
181 -│ │ └── offline_config.py # 配置文件  
182 -│ ├── output/  
183 -│ │ ├── session.txt.YYYYMMDD # 生成的session文件  
184 -│ │ └── session.txt.YYYYMMDD.cpp # C++格式session  
185 -│ ├── SWING_USAGE.md # 新增:详细使用文档  
186 -│ └── ...  
187 -├── collaboration/  
188 -│ ├── run.sh # 修改:适配新数据格式  
189 -│ ├── QUICKSTART.md # 新增:快速开始  
190 -│ ├── src/  
191 -│ │ ├── swing.cc # C++ Swing实现  
192 -│ │ ├── swing_symmetric.cc # 对称Swing  
193 -│ │ ├── icf_simple.cc # 简单协同过滤  
194 -│ │ └── ucf.py # 用户协同  
195 -│ ├── bin/ # 编译后的可执行文件  
196 -│ ├── output_YYYYMMDD/ # 输出目录  
197 -│ │ ├── sim_matrx.* # 多线程输出  
198 -│ │ ├── swing_similar.txt # 合并结果  
199 -│ │ └── swing_similar_readable.txt # 可读结果  
200 -│ └── output -> output_YYYYMMDD # 软链接  
201 -└── SWING_IMPLEMENTATION_SUMMARY.md # 本文档  
202 -```  
203 -  
204 -## 参数调优建议  
205 -  
206 -### 针对B2B低频场景  
207 -  
208 -```bash  
209 -# Session生成  
210 ---lookback_days 730 # 2年数据(B2B交互频次低)  
211 -  
212 -# Swing算法  
213 -ALPHA=0.5-0.7 # 关注用户共同行为的多样性  
214 -THRESHOLD1=1 # 低阈值,保留更多数据  
215 -THRESHOLD2=3 # 中等阈值,过滤噪音  
216 -THREAD_NUM=4-8 # 根据服务器配置  
217 -```  
218 -  
219 -### 针对大数据量场景  
220 -  
221 -```bash  
222 -# 增加线程数  
223 -THREAD_NUM=8  
224 -  
225 -# 修改C++代码参数  
226 -max_sim_list_len=300 # 相似列表长度  
227 -max_session_list_len=100 # session截断长度  
228 -```  
229 -  
230 -## 与现有系统集成  
231 -  
232 -### 1. 定时任务  
233 -  
234 -```bash  
235 -# 每天凌晨2点运行  
236 -0 2 * * * cd /home/tw/recommendation/offline_tasks && \  
237 - python3 scripts/generate_session.py && \  
238 - cd ../collaboration && bash run.sh  
239 -```  
240 -  
241 -### 2. 结果导入Redis  
242 -  
243 -可使用现有的 `load_index_to_redis.py` 脚本导入结果。  
244 -  
245 -### 3. 与Python版Swing对比  
246 -  
247 -- **C++版本**(本次实现):性能更好,适合大数据量  
248 -- **Python版本**(`i2i_swing.py`):易于调试,支持时间衰减  
249 -  
250 -可以运行两个版本对比效果:  
251 -```bash  
252 -# Python版本  
253 -python3 offline_tasks/scripts/i2i_swing.py --debug  
254 -  
255 -# C++版本  
256 -cd collaboration && bash run.sh  
257 -```  
258 -  
259 -## 测试验证  
260 -  
261 -### 1. 小数据量测试  
262 -  
263 -```bash  
264 -# 生成小范围数据(30天)  
265 -python3 scripts/generate_session.py --lookback_days 30  
266 -  
267 -# 运行Swing  
268 -cd ../collaboration  
269 -bash run.sh  
270 -```  
271 -  
272 -### 2. 查看结果质量  
273 -  
274 -```bash  
275 -# 查看可读版本前100行  
276 -head -100 output/swing_similar_readable.txt  
277 -  
278 -# 检查相似度分布  
279 -cat output/swing_similar.txt | awk -F'\t' '{print NF-1}' | sort -n | uniq -c  
280 -```  
281 -  
282 -### 3. 性能测试  
283 -  
284 -```bash  
285 -# 记录运行时间  
286 -time bash run.sh  
287 -```  
288 -  
289 -## 故障排查  
290 -  
291 -### 常见问题  
292 -  
293 -1. **Session文件不存在**  
294 - - 先运行 `generate_session.py`  
295 -  
296 -2. **编译失败**  
297 - - 检查g++版本:`g++ --version`  
298 - - 手动编译:`cd collaboration && make`  
299 -  
300 -3. **数据库连接失败**  
301 - - 检查配置:`offline_tasks/config/offline_config.py`  
302 - - 测试连接:`python3 offline_tasks/test_connection.py`  
303 -  
304 -4. **结果为空**  
305 - - 降低threshold参数  
306 - - 增加lookback_days  
307 - - 检查数据量:`wc -l output/session.txt.*`  
308 -  
309 -详细故障排查参见:`offline_tasks/SWING_USAGE.md`  
310 -  
311 -## 后续优化方向  
312 -  
313 -1. **性能优化**  
314 - - 支持分布式计算  
315 - - 增量更新机制  
316 - - 结果缓存  
317 -  
318 -2. **功能增强**  
319 - - 支持多种相似度算法  
320 - - 在线实时更新  
321 - - A/B测试框架  
322 -  
323 -3. **可观测性**  
324 - - 添加监控指标  
325 - - 结果质量评估  
326 - - 自动报警  
327 -  
328 -## 相关文档  
329 -  
330 -- **详细使用指南**: `offline_tasks/SWING_USAGE.md`  
331 -- **快速开始**: `collaboration/QUICKSTART.md`  
332 -- **配置说明**: `offline_tasks/config/offline_config.py`  
333 -- **Debug工具**: `offline_tasks/scripts/debug_utils.py`  
334 -- **Swing算法原理**: `collaboration/README.md`  
335 -  
336 -## 维护说明  
337 -  
338 -### 代码维护  
339 -  
340 -- **Session生成**: `offline_tasks/scripts/generate_session.py`  
341 -- **Swing执行**: `collaboration/run.sh`  
342 -- **Debug脚本**: `offline_tasks/scripts/add_names_to_swing.py`  
343 -  
344 -### 配置维护  
345 -  
346 -- **数据库配置**: `offline_tasks/config/offline_config.py`  
347 -- **行为权重**: `generate_session.py` 中的 `behavior_weights`  
348 -- **Swing参数**: `collaboration/run.sh` 中的配置区域  
349 -  
350 -### 日志查看  
351 -  
352 -```bash  
353 -# Session生成日志  
354 -ls offline_tasks/logs/debug/generate_session_*.log  
355 -  
356 -# Swing运行日志  
357 -ls collaboration/logs/  
358 -```  
359 -  
360 -## 总结  
361 -  
362 -本次实现完成了一套完整的C++ Swing算法工作流:  
363 -  
364 -1. ✓ **前置任务**:Session文件生成(`generate_session.py`)  
365 -2. ✓ **核心算法**:C++ Swing执行(改进的`run.sh`)  
366 -3. ✓ **后处理**:Debug文件生成(`add_names_to_swing.py`)  
367 -4. ✓ **文档完善**:详细使用指南和快速开始  
368 -  
369 -所有脚本都支持debug模式,便于调试和监控。整体流程自动化程度高,只需一条命令即可完成全流程。  
370 -  
371 ----  
372 -  
373 -**实现时间**: 2024-10-17  
374 -**状态**: ✅ 已完成  
375 -  
collaboration/QUICKSTART.md renamed to collaboration/Swing快速开始.md
tables_structure.md deleted
@@ -1,178 +0,0 @@ @@ -1,178 +0,0 @@
1 -  
2 -check_table_structure.py 的输出  
3 -  
4 -================================================================================  
5 -检查 prd_goods_sku 表结构  
6 -================================================================================  
7 -  
8 -表字段列表:  
9 - Field Type Null Key Default Extra  
10 -0 id bigint Yes true None  
11 -1 buyer_id bigint Yes false None REPLACE  
12 -2 proxy_buyer_id bigint Yes false None REPLACE  
13 -3 goods_id bigint Yes false None REPLACE  
14 -4 name varchar(1536) Yes false None REPLACE  
15 -5 name_pinyin varchar(3072) Yes false None REPLACE  
16 -6 accessories varchar(1536) Yes false None REPLACE  
17 -7 factory_no_buyer varchar(192) Yes false None REPLACE  
18 -8 factory_no varchar(765) Yes false None REPLACE  
19 -9 is_has_sample smallint Yes false None REPLACE  
20 -10 is_has_pkg_age_label smallint Yes false None REPLACE  
21 -11 pkg_age_label varchar(384) Yes false None REPLACE  
22 -12 onway_total int Yes false None REPLACE  
23 -13 onway_use_total int Yes false None REPLACE  
24 -14 onway_unuse_total int Yes false None REPLACE  
25 -15 deliver_day int Yes false None REPLACE  
26 -16 dev_level varchar(96) Yes false None REPLACE  
27 -17 length decimal(12,2) Yes false None REPLACE  
28 -18 width decimal(12,2) Yes false None REPLACE  
29 -19 height decimal(12,2) Yes false None REPLACE  
30 -20 volume decimal(12,8) Yes false None REPLACE  
31 -21 out_box_length decimal(12,2) Yes false None REPLACE  
32 -22 out_box_width decimal(12,2) Yes false None REPLACE  
33 -23 out_box_height decimal(12,2) Yes false None REPLACE  
34 -24 out_box_volume decimal(12,8) Yes false None REPLACE  
35 -25 out_box_cruft decimal(15,8) Yes false None REPLACE  
36 -26 package_length decimal(12,2) Yes false None REPLACE  
37 -27 package_width decimal(12,2) Yes false None REPLACE  
38 -28 package_height decimal(12,2) Yes false None REPLACE  
39 -29 package_volume decimal(12,8) Yes false None REPLACE  
40 -30 total_volume decimal(12,8) Yes false None REPLACE  
41 -31 gross_weight decimal(12,2) Yes false None REPLACE  
42 -32 net_weight decimal(12,2) Yes false None REPLACE  
43 -33 is_package_depart smallint Yes false None REPLACE  
44 -34 is_fixed_sale smallint Yes false None REPLACE  
45 -35 inbox_count int Yes false None REPLACE  
46 -36 no varchar(192) Yes false None REPLACE  
47 -37 hs_no varchar(192) Yes false None REPLACE  
48 -38 erp_old_no varchar(192) Yes false None REPLACE  
49 -39 factory_first_price decimal(12,3) Yes false None REPLACE  
50 -40 factory_first_price_unit varchar(96) Yes false None REPLACE  
51 -41 factory_first_price_date datetime Yes false None REPLACE  
52 -42 bar_code varchar(192) Yes false None REPLACE  
53 -43 count int Yes false None REPLACE  
54 -44 unit varchar(96) Yes false None REPLACE  
55 -45 price_supplier decimal(12,3) Yes false None REPLACE  
56 -46 gross_profit decimal(12,5) Yes false None REPLACE  
57 -47 price_base decimal(12,3) Yes false None REPLACE  
58 -48 bulk_result varchar(96) Yes false None REPLACE  
59 -49 bulk_type varchar(96) Yes false None REPLACE  
60 -50 purchase_moq int Yes false None REPLACE  
61 -51 capacity int Yes false None REPLACE  
62 -52 package_type_id bigint Yes false None REPLACE  
63 -53 package_type_name varchar(192) Yes false None REPLACE  
64 -54 package_type_value varchar(96) Yes false None REPLACE  
65 -55 sale_price decimal(12,3) Yes false None REPLACE  
66 -56 has_quote_rang smallint Yes false None REPLACE  
67 -57 is_stop_product smallint Yes false None REPLACE  
68 -58 is_upload_pic smallint Yes false None REPLACE  
69 -59 status varchar(96) Yes false None REPLACE  
70 -60 sku_compose_md5 varchar(192) Yes false None REPLACE  
71 -61 sku_compose varchar(6144) Yes false None REPLACE  
72 -62 src varchar(96) Yes false None REPLACE  
73 -63 price_bom_total decimal(12,3) Yes false None REPLACE  
74 -64 bom_id bigint Yes false None REPLACE  
75 -65 off_sell_time datetime Yes false None REPLACE  
76 -66 off_sell_user_id bigint Yes false None REPLACE  
77 -67 sort_time datetime Yes false None REPLACE  
78 -68 fir_on_sell_time datetime Yes false None REPLACE  
79 -69 on_sell_time datetime Yes false None REPLACE  
80 -70 on_sell_user_id bigint Yes false None REPLACE  
81 -71 is_draft smallint Yes false None REPLACE  
82 -72 per_pcs_price decimal(12,3) Yes false None REPLACE  
83 -73 fcl_price decimal(12,3) Yes false None REPLACE  
84 -74 init_price decimal(12,3) Yes false None REPLACE  
85 -75 last_pic_update_user_Id bigint Yes false None REPLACE  
86 -76 last_pic_update_time datetime Yes false None REPLACE  
87 -77 hide smallint Yes false None REPLACE  
88 -78 supplier_source varchar(192) Yes false None REPLACE  
89 -79 ref_sku_id bigint Yes false None REPLACE  
90 -80 ref_season_type varchar(192) Yes false None REPLACE  
91 -81 is_category_error smallint Yes false None REPLACE  
92 -82 is_attribute_error smallint Yes false None REPLACE  
93 -83 is_option_error smallint Yes false None REPLACE  
94 -84 price_protection_time datetime Yes false None REPLACE  
95 -85 remark varchar(6144) Yes false None REPLACE  
96 -86 audit_remark varchar(1536) Yes false None REPLACE  
97 -87 attribute_uid varchar(96) Yes false None REPLACE  
98 -88 refact_count int Yes false None REPLACE  
99 -89 last_refact_time datetime Yes false None REPLACE  
100 -90 last_refact_by bigint Yes false None REPLACE  
101 -91 is_delete smallint Yes false None REPLACE  
102 -92 soft_delete_time datetime Yes false None REPLACE  
103 -93 version bigint Yes false None REPLACE  
104 -94 last_update_by bigint Yes false None REPLACE  
105 -95 last_update_time datetime Yes false None REPLACE  
106 -96 create_by bigint Yes false None REPLACE  
107 -97 create_time datetime Yes false None REPLACE  
108 -98 ref_count bigint Yes false None REPLACE  
109 -99 can_update smallint Yes false None REPLACE  
110 -100 can_delete smallint Yes false None REPLACE  
111 -101 mig_old_id varchar(384) Yes false None REPLACE  
112 -102 mig_update_time datetime Yes false None REPLACE  
113 -103 mig_migrate_log_id bigint Yes false None REPLACE  
114 -104 create_platform varchar(150) Yes false None REPLACE  
115 -105 create_user_id bigint Yes false None REPLACE  
116 -106 last_update_platform varchar(150) Yes false None REPLACE  
117 -107 last_update_user_id bigint Yes false None REPLACE  
118 -108 is_market_sku smallint Yes false None REPLACE  
119 -109 is_star smallint Yes false None REPLACE  
120 -110 good_type tinyint Yes false None REPLACE  
121 -111 bom_config_id bigint Yes false None REPLACE  
122 -112 source_sku_id bigint Yes false None REPLACE  
123 -  
124 -================================================================================  
125 -检查 sensors_events 表结构  
126 -================================================================================  
127 -  
128 -表字段列表:  
129 - Field Type Null Key Default Extra  
130 -0 id bigint No true None  
131 -1 ip varchar(128) Yes false None NONE  
132 -2 create_time datetime No false None NONE  
133 -3 last_update_time datetime Yes false None NONE  
134 -4 business_platform varchar(128) No false None NONE  
135 -5 client_platform varchar(128) No false None NONE  
136 -6 distinct_id varchar(128) No false None NONE  
137 -7 login_id int Yes false None NONE  
138 -8 anonymous_id varchar(128) Yes false None NONE  
139 -9 item_id int Yes false None NONE  
140 -10 item_type varchar(255) Yes false None NONE  
141 -11 event varchar(128) No false None NONE  
142 -12 location_src_type varchar(255) Yes false None NONE  
143 -13 location_src varchar(512) Yes false None NONE  
144 -14 search_content varchar(512) Yes false None NONE  
145 -15 page_type varchar(255) Yes false None NONE  
146 -16 module_name varchar(255) Yes false None NONE  
147 -17 position_name varchar(255) Yes false None NONE  
148 -18 channel_type varchar(512) Yes false None NONE  
149 -19 channel_mode varchar(1024) Yes false None NONE  
150 -20 channel_source varchar(512) Yes false None NONE  
151 -21 request_id bigint Yes false None NONE  
152 -22 session_id varchar(128) Yes false None NONE  
153 -23 session_duration int Yes false None NONE  
154 -24 stay_duration int Yes false None NONE  
155 -25 __properties json Yes false None NONE  
156 -26 __lib json Yes false None NONE  
157 -27 __identities json Yes false None NONE  
158 -28 __url_path varchar(1024) Yes false None NONE  
159 -29 __title varchar(2048) Yes false None NONE  
160 -30 __referrer_host varchar(128) Yes false None NONE  
161 -31 __is_first_day boolean Yes false None NONE  
162 -32 __is_first_time boolean Yes false None NONE  
163 -33 __os varchar(512) Yes false None NONE  
164 -34 __os_version varchar(512) Yes false None NONE  
165 -35 __browser varchar(512) Yes false None NONE  
166 -36 __browser_version varchar(255) Yes false None NONE  
167 -37 __browser_language varchar(255) Yes false None NONE  
168 -38 __screen_height int Yes false None NONE  
169 -39 __screen_width int Yes false None NONE  
170 -40 __user_agent varchar(512) Yes false None NONE  
171 -41 __url varchar(2048) Yes false None NONE  
172 -42 __element_type varchar(256) Yes false None NONE  
173 -43 __element_content varchar(1024) Yes false None NONE  
174 -44 __referrer varchar(1024) Yes false None NONE  
175 -  
176 -================================================================================  
177 -检查完成  
178 -================================================================================