Commit 223145fe165efeed8b4e8540cf01a709bd00aaee

Authored by tangwang
1 parent c59dd0b0

补充部分任务明文版本输出

offline_tasks/CHANGELOG_DEBUG_MODE.md deleted
@@ -1,176 +0,0 @@ @@ -1,176 +0,0 @@
1 -# 离线推荐任务 - Debug模式功能更新  
2 -  
3 -## 更新日期  
4 -2025-10-22  
5 -  
6 -## 更新内容  
7 -  
8 -为所有离线推荐任务添加了debug模式支持,使得所有任务都能够生成明文可读文件,方便查看推荐效果。  
9 -  
10 -## 修改的文件  
11 -  
12 -### 1. 脚本文件  
13 -  
14 -#### ✅ 新增debug支持的脚本  
15 -  
16 -1. **scripts/i2i_content_similar.py**  
17 - - 添加 `--debug` 参数支持  
18 - - 添加 `--top_n` 参数支持  
19 - - 导入 `save_readable_index` 和 `fetch_name_mappings` 函数  
20 - - 修改 `generate_similarity_index` 函数,支持传入 `top_n` 参数  
21 - - 在debug模式下生成两个可读文件:  
22 - - `output/debug/i2i_content_name_YYYYMMDD_readable.txt`  
23 - - `output/debug/i2i_content_pic_YYYYMMDD_readable.txt`  
24 -  
25 -2. **scripts/i2i_item_behavior.py**  
26 - - 导入 `save_readable_index` 函数  
27 - - 在debug模式下生成可读文件:  
28 - - `output/debug/i2i_item_behavior_YYYYMMDD_readable.txt`  
29 -  
30 -#### ✅ 已有debug支持的脚本(保持不变)  
31 -  
32 -以下脚本已经支持debug模式,无需修改:  
33 -  
34 -1. **scripts/i2i_swing.py** ✓  
35 -2. **scripts/i2i_session_w2v.py** ✓  
36 -3. **scripts/i2i_deepwalk.py** ✓  
37 -4. **scripts/interest_aggregation.py** ✓  
38 -5. **scripts/tag_category_similar.py** ✓ (有自己的实现)  
39 -  
40 -### 2. 调度脚本  
41 -  
42 -#### run.sh  
43 -- 更新 Task 4 (内容相似度),添加 `--top_n $TOP_N $DEBUG_MODE` 参数  
44 -- 确保所有任务都统一使用 `$DEBUG_MODE` 变量  
45 -  
46 -### 3. 文档文件  
47 -  
48 -#### 新增文档  
49 -  
50 -1. **DEBUG_MODE_USAGE.md**  
51 - - 完整的debug模式使用说明  
52 - - 包含所有支持debug模式的任务列表  
53 - - 使用方法和示例  
54 - - 性能影响说明  
55 - - 故障排查指南  
56 -  
57 -2. **CHANGELOG_DEBUG_MODE.md** (本文件)  
58 - - 记录此次更新的详细内容  
59 -  
60 -## 功能特性  
61 -  
62 -### Debug模式输出格式  
63 -  
64 -所有任务在开启debug模式后,都会在 `output/debug/` 目录生成对应的可读文件,格式统一为:  
65 -  
66 -```  
67 -================================================================================  
68 -明文索引文件  
69 -生成时间: 2025-10-22 14:30:25  
70 -描述: i2i:task_name  
71 -总索引数: XXXXX  
72 -================================================================================  
73 -  
74 -[1] i2i:task_name:item_id (商品名称)  
75 ---------------------------------------------------------------------------------  
76 - 1. ID:similar_id_1(相似商品1名称) - Score:0.8520  
77 - 2. ID:similar_id_2(相似商品2名称) - Score:0.7845  
78 - 3. ID:similar_id_3(相似商品3名称) - Score:0.7321  
79 - ...  
80 -```  
81 -  
82 -### 现在所有任务都支持的可读文件  
83 -  
84 -| 任务 | 标准输出文件 | 可读文件 |  
85 -|------|-------------|---------|  
86 -| Swing算法 | `i2i_swing_YYYYMMDD.txt` | `debug/i2i_swing_YYYYMMDD_readable.txt` |  
87 -| Session W2V | `i2i_session_w2v_YYYYMMDD.txt` | `debug/i2i_session_w2v_YYYYMMDD_readable.txt` |  
88 -| DeepWalk | `i2i_deepwalk_YYYYMMDD.txt` | `debug/i2i_deepwalk_YYYYMMDD_readable.txt` |  
89 -| 内容相似度(名称) | `i2i_content_name_YYYYMMDD.txt` | `debug/i2i_content_name_YYYYMMDD_readable.txt` |  
90 -| 内容相似度(图片) | `i2i_content_pic_YYYYMMDD.txt` | `debug/i2i_content_pic_YYYYMMDD_readable.txt` |  
91 -| Item行为相似度 | `i2i_item_behavior_YYYYMMDD.txt` | `debug/i2i_item_behavior_YYYYMMDD_readable.txt` |  
92 -| Tag分类相似度 | `tag_category_similar_YYYYMMDD.txt` | `debug/tag_category_similar_YYYYMMDD_readable.txt` |  
93 -| 兴趣聚合(热门) | `interest_hot_YYYYMMDD.txt` | `debug/interest_hot_YYYYMMDD_readable.txt` |  
94 -| 兴趣聚合(购物车) | `interest_cart_YYYYMMDD.txt` | `debug/interest_cart_YYYYMMDD_readable.txt` |  
95 -| 兴趣聚合(新品) | `interest_new_YYYYMMDD.txt` | `debug/interest_new_YYYYMMDD_readable.txt` |  
96 -| 兴趣聚合(全局) | `interest_global_YYYYMMDD.txt` | `debug/interest_global_YYYYMMDD_readable.txt` |  
97 -  
98 -## 使用方法  
99 -  
100 -### 全局开启/关闭debug模式  
101 -  
102 -编辑 `run.sh`,修改 `DEBUG_MODE` 变量:  
103 -  
104 -```bash  
105 -DEBUG_MODE="--debug" # 开启debug模式  
106 -# 或  
107 -DEBUG_MODE="" # 关闭debug模式  
108 -```  
109 -  
110 -### 单独运行任务  
111 -  
112 -```bash  
113 -# i2i内容相似度  
114 -python3 scripts/i2i_content_similar.py --top_n 50 --debug  
115 -  
116 -# i2i行为相似度  
117 -python3 scripts/i2i_item_behavior.py --lookback_days 180 --top_n 50 --debug  
118 -```  
119 -  
120 -## 验证  
121 -  
122 -所有修改已通过以下验证:  
123 -  
124 -1. ✅ Python语法检查 (`python3 -m py_compile`)  
125 -2. ✅ Linter检查 (无错误)  
126 -3. ✅ 代码逻辑审查  
127 -4. ✅ 与现有debug模式实现保持一致  
128 -  
129 -## 向后兼容性  
130 -  
131 -- ✅ 不传 `--debug` 参数时,行为与之前完全一致  
132 -- ✅ 标准输出文件格式不变  
133 -- ✅ 所有现有脚本和调度任务继续正常工作  
134 -  
135 -## 性能影响  
136 -  
137 -- 不开启debug模式:无性能影响  
138 -- 开启debug模式:任务时间增加约10-20%(主要用于查询商品名称)  
139 -  
140 -## 后续建议  
141 -  
142 -1. 定期清理 `output/debug/` 目录,避免占用过多磁盘空间  
143 -2. 在生产环境建议关闭debug模式,仅在需要检查效果时开启  
144 -3. 可以考虑添加自动清理脚本,保留最近N天的debug文件  
145 -  
146 -## 文件清单  
147 -  
148 -### 修改的文件  
149 -- `scripts/i2i_content_similar.py`  
150 -- `scripts/i2i_item_behavior.py`  
151 -- `run.sh`  
152 -  
153 -### 新增的文件  
154 -- `DEBUG_MODE_USAGE.md`  
155 -- `CHANGELOG_DEBUG_MODE.md`  
156 -  
157 -## 测试建议  
158 -  
159 -运行以下命令测试debug模式是否正常工作:  
160 -  
161 -```bash  
162 -# 测试i2i_content_similar  
163 -cd /home/tw/recommendation/offline_tasks  
164 -python3 scripts/i2i_content_similar.py --top_n 10 --debug  
165 -  
166 -# 测试i2i_item_behavior  
167 -python3 scripts/i2i_item_behavior.py --lookback_days 30 --top_n 10 --debug  
168 -  
169 -# 检查是否生成了可读文件  
170 -ls -lh output/debug/*_readable.txt  
171 -```  
172 -  
173 -## 总结  
174 -  
175 -此次更新确保了所有离线推荐任务都具有统一的debug模式支持,使得开发和运维人员能够更方便地查看和验证推荐效果,提高了系统的可维护性和可观测性。  
176 -  
offline_tasks/CHANGES_SUMMARY.md deleted
@@ -1,102 +0,0 @@ @@ -1,102 +0,0 @@
1 -# 更新总结 - 2025-10-22  
2 -  
3 -## 1. 修改 tag_category_similar.py 脚本  
4 -  
5 -### 主要变更  
6 -- **SQL查询修改**:从只查询分类名称改为同时查询分类ID和名称  
7 - - 修改前:`GROUP_CONCAT(pc_1.name) AS '商品信息'`  
8 - - 修改后:`GROUP_CONCAT(DISTINCT CONCAT(pc_1.id, ':', pc_1.name)) AS '商品信息'`  
9 -  
10 -- **数据处理修改**:解析ID和名称对,建立ID到名称的映射  
11 - ```python  
12 - cat_id_to_name = {}  
13 - for cat_pair in categories:  
14 - if ':' in cat_pair:  
15 - cat_id, cat_name = cat_pair.split(':', 1)  
16 - cat_id_to_name[cat_id] = cat_name  
17 - unique_cats.add(cat_id)  
18 - ```  
19 -  
20 -- **输出格式修改**:  
21 - - **主输出文件**(`output/tag_category_similar_YYYYMMDD.txt`):只包含ID  
22 - - 格式:`category_id \t similar_id1:score1,similar_id2:score2,...`  
23 - - **Debug文件**(`output/debug/tag_category_similar_YYYYMMDD_readable.txt`):包含ID+名称  
24 - - 格式:`category_id:category_name \t similar_id1:similar_name1:score1,...`  
25 -  
26 -### 输出示例  
27 -  
28 -**主文件(用于Redis加载):**  
29 -```  
30 -123 456:0.8123,789:0.7654,234:0.6543  
31 -```  
32 -  
33 -**Debug文件(便于人工查看):**  
34 -```  
35 -================================================================================  
36 -明文索引文件  
37 -生成时间: 2025-10-22 HH:MM:SS  
38 -描述: tag_category_similar (分类相似度)  
39 -总索引数: 708  
40 -================================================================================  
41 -  
42 -123:BB夹/一字夹 456:横夹:0.8123,789:橡皮筋/发圈:0.7654,234:抓夹:0.6543  
43 -```  
44 -  
45 -## 2. 更新详细设计文档  
46 -  
47 -### 修改位置  
48 -文件:`offline_tasks/doc/详细设计文档.md`  
49 -章节:📊 数据量统计  
50 -  
51 -### 变更内容  
52 -- 基于真实输出文件统计了实际数据量  
53 -- 更新了所有索引类型的准确数量和大小  
54 -- 添加了 `tag_category_similar` 索引统计  
55 -- 更新了Redis内存占用预估(从180MB更新为400MB)  
56 -  
57 -### 实际数据统计(2025-10-22)  
58 -  
59 -| 索引类型 | 索引数量 | 单条平均大小 | 总大小 | 更新频率 |  
60 -|---------|---------|---------|--------|---------|  
61 -| i2i_deepwalk | 48,376 | ~780B | 36MB | 每天 |  
62 -| i2i_session_w2v | 50,990 | ~840B | 41MB | 每天 |  
63 -| i2i_content_name | 127,720 | ~830B | 101MB | 每周 |  
64 -| i2i_content_pic | 0 | - | 0 | 每周 |  
65 -| i2i_item_behavior | 178,775 | ~750B | 128MB | 每天 |  
66 -| interest_hot | 14,001 | ~520B | 6.9MB | 每天 |  
67 -| interest_cart | 15,563 | ~670B | 10MB | 每天 |  
68 -| interest_new | 6,463 | ~500B | 3.1MB | 每天 |  
69 -| interest_global | 17,533 | ~660B | 11MB | 每天 |  
70 -| tag_category_similar | 708 | ~930B | 630KB | 每周 |  
71 -| **总计** | **~460,000** | - | **~338MB** | - |  
72 -  
73 -## 3. 需要执行的操作  
74 -  
75 -要应用这些更改,需要重新运行脚本:  
76 -  
77 -```bash  
78 -cd /home/tw/recommendation/offline_tasks  
79 -python scripts/tag_category_similar.py --debug  
80 -```  
81 -  
82 -这将生成:  
83 -- `output/tag_category_similar_20251022.txt` - ID格式的主文件  
84 -- `output/debug/tag_category_similar_20251022_readable.txt` - 可读格式的调试文件  
85 -  
86 -## 4. 影响分析  
87 -  
88 -### 向后兼容性  
89 -- ⚠️ **破坏性变更**:主输出文件格式从名称改为ID  
90 -- 需要更新所有使用该文件的下游系统(特别是Redis加载脚本)  
91 -  
92 -### 优势  
93 -1. ✅ ID格式更稳定,不受名称变更影响  
94 -2. ✅ 数据更准确,避免名称重复问题  
95 -3. ✅ 保留可读版本便于调试和验证  
96 -4. ✅ 与其他索引文件格式保持一致  
97 -  
98 -### 建议  
99 -- 更新Redis加载脚本,使其能够处理category ID  
100 -- 在API层做ID到名称的转换(如需要)  
101 -- 保持debug文件生成,便于问题排查  
102 -  
offline_tasks/DEBUG_MODE_USAGE.md deleted
@@ -1,125 +0,0 @@ @@ -1,125 +0,0 @@
1 -# Debug模式使用说明  
2 -  
3 -## 概述  
4 -  
5 -所有推荐任务脚本都支持 `--debug` 参数,开启后会在 `output/debug/` 目录下生成可读的明文索引文件,方便查看推荐效果。  
6 -  
7 -## 支持Debug模式的任务  
8 -  
9 -| 任务名称 | 脚本文件 | 输出文件 | 可读文件位置 |  
10 -|---------|---------|---------|-------------|  
11 -| Swing算法 | `i2i_swing.py` | `i2i_swing_YYYYMMDD.txt` | `output/debug/i2i_swing_YYYYMMDD_readable.txt` |  
12 -| Session W2V | `i2i_session_w2v.py` | `i2i_session_w2v_YYYYMMDD.txt` | `output/debug/i2i_session_w2v_YYYYMMDD_readable.txt` |  
13 -| DeepWalk | `i2i_deepwalk.py` | `i2i_deepwalk_YYYYMMDD.txt` | `output/debug/i2i_deepwalk_YYYYMMDD_readable.txt` |  
14 -| 内容相似度(名称) | `i2i_content_similar.py` | `i2i_content_name_YYYYMMDD.txt` | `output/debug/i2i_content_name_YYYYMMDD_readable.txt` |  
15 -| 内容相似度(图片) | `i2i_content_similar.py` | `i2i_content_pic_YYYYMMDD.txt` | `output/debug/i2i_content_pic_YYYYMMDD_readable.txt` |  
16 -| Item行为相似度 | `i2i_item_behavior.py` | `i2i_item_behavior_YYYYMMDD.txt` | `output/debug/i2i_item_behavior_YYYYMMDD_readable.txt` |  
17 -| Tag分类相似度 | `tag_category_similar.py` | `tag_category_similar_YYYYMMDD.txt` | `output/debug/tag_category_similar_YYYYMMDD_readable.txt` |  
18 -| 兴趣聚合 | `interest_aggregation.py` | `interest_*_YYYYMMDD.txt` | `output/debug/interest_*_YYYYMMDD_readable.txt` |  
19 -  
20 -## 使用方法  
21 -  
22 -### 方法1: 通过run.sh全局开启  
23 -  
24 -在 `run.sh` 中设置:  
25 -  
26 -```bash  
27 -DEBUG_MODE="--debug" # 开启debug模式  
28 -# 或  
29 -DEBUG_MODE="" # 关闭debug模式  
30 -```  
31 -  
32 -然后运行:  
33 -  
34 -```bash  
35 -bash run.sh  
36 -```  
37 -  
38 -### 方法2: 单独运行某个任务  
39 -  
40 -#### 示例1: 运行Session W2V (已支持debug模式)  
41 -  
42 -```bash  
43 -python3 scripts/i2i_session_w2v.py --lookback_days 400 --top_n 50 --debug  
44 -```  
45 -  
46 -#### 示例2: 运行DeepWalk (已支持debug模式)  
47 -  
48 -```bash  
49 -python3 scripts/i2i_deepwalk.py --lookback_days 400 --top_n 50 --debug  
50 -```  
51 -  
52 -#### 示例3: 运行内容相似度 (新增debug模式)  
53 -  
54 -```bash  
55 -python3 scripts/i2i_content_similar.py --top_n 50 --debug  
56 -```  
57 -  
58 -#### 示例4: 运行Item行为相似度 (新增debug模式)  
59 -  
60 -```bash  
61 -python3 scripts/i2i_item_behavior.py --lookback_days 180 --top_n 50 --debug  
62 -```  
63 -  
64 -#### 示例5: 运行兴趣聚合 (已支持debug模式)  
65 -  
66 -```bash  
67 -python3 scripts/interest_aggregation.py --lookback_days 400 --top_n 1000 --debug  
68 -```  
69 -  
70 -## 可读文件格式  
71 -  
72 -可读文件格式示例:  
73 -  
74 -```  
75 -================================================================================  
76 -明文索引文件  
77 -生成时间: 2025-10-22 14:30:25  
78 -描述: i2i:session_w2v  
79 -总索引数: 50990  
80 -================================================================================  
81 -  
82 -[1] i2i:session_w2v:12345 (商品名称)  
83 ---------------------------------------------------------------------------------  
84 - 1. ID:23456(相似商品1名称) - Score:0.8520  
85 - 2. ID:34567(相似商品2名称) - Score:0.7845  
86 - 3. ID:45678(相似商品3名称) - Score:0.7321  
87 - ...  
88 -```  
89 -  
90 -## 性能影响  
91 -  
92 -- **不开启debug模式**: 只生成标准索引文件,速度最快  
93 -- **开启debug模式**: 会额外查询数据库获取商品名称,生成可读文件,任务时间会增加约10-20%  
94 -  
95 -## 注意事项  
96 -  
97 -1. **磁盘空间**: 可读文件通常比标准索引文件大2-3倍,请确保有足够的磁盘空间  
98 -2. **数据库负载**: debug模式会额外查询商品名称,在高并发场景下建议关闭  
99 -3. **文件位置**: 所有可读文件都保存在 `output/debug/` 目录  
100 -4. **定期清理**: 建议定期清理旧的debug文件,避免占用过多磁盘空间  
101 -  
102 -## 快速检查命令  
103 -  
104 -查看最新生成的可读文件:  
105 -  
106 -```bash  
107 -# 列出所有可读文件  
108 -ls -lh output/debug/*_readable.txt  
109 -  
110 -# 查看某个可读文件的前50行  
111 -head -50 output/debug/i2i_session_w2v_20251022_readable.txt  
112 -  
113 -# 统计可读文件数量  
114 -ls output/debug/*_readable.txt | wc -l  
115 -```  
116 -  
117 -## 故障排查  
118 -  
119 -如果没有生成可读文件,检查:  
120 -  
121 -1. 是否传递了 `--debug` 参数  
122 -2. `output/debug/` 目录是否存在且有写权限  
123 -3. 查看日志文件确认是否有错误信息  
124 -4. 检查数据库连接是否正常(需要查询商品名称)  
125 -  
offline_tasks/FIXES_SUMMARY.md deleted
@@ -1,211 +0,0 @@ @@ -1,211 +0,0 @@
1 -# 离线任务修复总结  
2 -  
3 -## 修复日期  
4 -2025-10-21  
5 -  
6 -## 问题和解决方案  
7 -  
8 -### 1. Task 5 和 Task 6: ModuleNotFoundError: No module named 'db_service'  
9 -  
10 -**问题**:  
11 -- `i2i_item_behavior.py` 和 `tag_category_similar.py` 无法导入 `db_service` 模块  
12 -- 所有脚本都使用了丑陋的 `sys.path.append()` hack  
13 -  
14 -**解决方案**:  
15 -- 将 `db_service.py` 移动到 `offline_tasks/` 根目录(Python 运行根目录)  
16 -- 删除所有脚本中的 `sys.path.append()` 代码  
17 -- 在 `run.sh` 中设置 `PYTHONPATH=/home/tw/recommendation/offline_tasks`  
18 -- 现在所有脚本都使用标准导入:`from db_service import create_db_connection`  
19 -  
20 -**影响的文件**:  
21 -- `db_service.py` (移动到 offline_tasks 根目录)  
22 -- `run.sh` (添加 PYTHONPATH 设置)  
23 -- 所有 scripts/ 目录下的 12 个 Python 脚本 (清理了 sys.path 代码)  
24 -  
25 ----  
26 -  
27 -### 2. Task 3: DeepWalk 内存溢出 (OOM Kill - 退出码 137)  
28 -  
29 -**问题**:  
30 -- DeepWalk 在"构建物品图"步骤时被系统杀死  
31 -- 处理 348,043 条记录时内存消耗超过 35GB 限制  
32 -- 原实现使用纯 Python 构建图,效率低  
33 -  
34 -**解决方案**:  
35 -1. **复用高效实现**: 将 `graphembedding/deepwalk/` 的实现移动到 `offline_tasks/deepwalk/`  
36 - - 使用 Alias 采样算法,比纯 Python 快 5-10 倍  
37 - - 使用 joblib 多进程并行,避免 GIL  
38 - - 使用 networkx 的高效图结构  
39 -  
40 -2. **完全重构** `i2i_deepwalk.py`:  
41 - - 只负责数据适配(从数据库生成边文件)  
42 - - 复用 `DeepWalk` 类进行随机游走  
43 - - 添加内存保护:限制每个用户最多 100 个物品(按权重排序)  
44 -  
45 -3. **流程优化**:  
46 - ```  
47 - 数据库数据 → 边文件 → DeepWalk 随机游走 → Word2Vec 训练 → 相似度生成  
48 - ```  
49 -  
50 -**新增文件**:  
51 -- `offline_tasks/deepwalk/deepwalk.py` - DeepWalk 核心实现(Alias 采样)  
52 -- `offline_tasks/deepwalk/alias.py` - Alias 采样算法  
53 -  
54 -**性能提升**:  
55 -- 内存使用降低 60-70%  
56 -- 速度提升 3-5 倍  
57 -- 不会再被 OOM Kill  
58 -  
59 ----  
60 -  
61 -## 最终架构  
62 -  
63 -### 文件结构  
64 -```  
65 -offline_tasks/ (Python 根目录,通过 PYTHONPATH 设置)  
66 - ├── db_service.py ✓  
67 - ├── config/  
68 - │ └── offline_config.py ✓  
69 - ├── deepwalk/ ✓  
70 - │ ├── deepwalk.py (高效实现)  
71 - │ └── alias.py (Alias 采样)  
72 - ├── scripts/  
73 - │ ├── debug_utils.py  
74 - │ ├── fetch_item_attributes.py  
75 - │ ├── generate_session.py  
76 - │ ├── i2i_swing.py  
77 - │ ├── i2i_session_w2v.py  
78 - │ ├── i2i_deepwalk.py ✓ (重构)  
79 - │ ├── i2i_content_similar.py  
80 - │ ├── i2i_item_behavior.py ✓ (修复)  
81 - │ ├── tag_category_similar.py ✓ (修复)  
82 - │ └── interest_aggregation.py  
83 - └── run.sh ✓ (设置 PYTHONPATH)  
84 -```  
85 -  
86 -### 导入规范  
87 -所有脚本使用标准导入,无 `sys.path` hack:  
88 -  
89 -```python  
90 -# 标准导入  
91 -from db_service import create_db_connection  
92 -from config.offline_config import DB_CONFIG, OUTPUT_DIR  
93 -from scripts.debug_utils import setup_debug_logger  
94 -from deepwalk.deepwalk import DeepWalk  
95 -```  
96 -  
97 -### run.sh 配置  
98 -```bash  
99 -#!/bin/bash  
100 -  
101 -# 设置 Python 路径,让脚本能找到 db_service, config, deepwalk 等模块  
102 -export PYTHONPATH=/home/tw/recommendation/offline_tasks:$PYTHONPATH  
103 -  
104 -cd /home/tw/recommendation/offline_tasks  
105 -# ... 其他代码  
106 -```  
107 -  
108 ----  
109 -  
110 -## 测试  
111 -  
112 -### 运行测试脚本  
113 -```bash  
114 -cd /home/tw/recommendation/offline_tasks  
115 -./test_fixes.sh  
116 -```  
117 -  
118 -### 测试单个任务  
119 -```bash  
120 -cd /home/tw/recommendation/offline_tasks  
121 -  
122 -# 测试 Task 5  
123 -python3 scripts/i2i_item_behavior.py --lookback_days 400 --top_n 50 --debug  
124 -  
125 -# 测试 Task 6  
126 -python3 scripts/tag_category_similar.py --lookback_days 400 --top_n 50 --debug  
127 -  
128 -# 测试 Task 3 (建议先用较小参数测试)  
129 -python3 scripts/i2i_deepwalk.py --lookback_days 200 --top_n 30 --num_walks 5 --walk_length 20 --save_model --save_graph --debug  
130 -```  
131 -  
132 -### 运行完整流程  
133 -```bash  
134 -cd /home/tw/recommendation/offline_tasks  
135 -bash run.sh  
136 -```  
137 -  
138 ----  
139 -  
140 -## DeepWalk 参数调优建议  
141 -  
142 -### 内存充足 (>50GB 可用)  
143 -```bash  
144 ---lookback_days 400  
145 ---num_walks 10  
146 ---walk_length 40  
147 ---top_n 50  
148 -```  
149 -  
150 -### 内存有限 (30-50GB)  
151 -```bash  
152 ---lookback_days 200  
153 ---num_walks 5  
154 ---walk_length 30  
155 ---top_n 50  
156 -```  
157 -  
158 -### 内存紧张 (<30GB)  
159 -```bash  
160 ---lookback_days 100  
161 ---num_walks 3  
162 ---walk_length 20  
163 ---top_n 30  
164 -```  
165 -  
166 -### run.sh 推荐配置  
167 -修改 `run.sh` 第 164 行(根据实际内存情况调整):  
168 -```bash  
169 -# 内存优化版本 (推荐)  
170 -run_task "Task 3: DeepWalk" \  
171 - "python3 scripts/i2i_deepwalk.py --lookback_days 200 --top_n 50 --num_walks 5 --walk_length 30 --save_model --save_graph $DEBUG_MODE"  
172 -```  
173 -  
174 ----  
175 -  
176 -## 代码质量提升  
177 -  
178 -1. ✅ **移除所有 `sys.path` hack** - 使用标准 Python 模块导入  
179 -2. ✅ **清晰的模块结构** - offline_tasks 作为 Python 根目录  
180 -3. ✅ **更好的代码复用** - 复用 graphembedding/deepwalk 的高效实现  
181 -4. ✅ **内存优化** - 添加保护机制,避免 OOM  
182 -5. ✅ **性能提升** - 使用 Alias 采样和多进程并行  
183 -  
184 ----  
185 -  
186 -## 注意事项  
187 -  
188 -1. **PYTHONPATH**: 必须在 `offline_tasks/` 目录下运行脚本,或者设置 `PYTHONPATH`  
189 -2. **临时文件**: DeepWalk 会在 `output/temp/` 生成临时文件,运行完会自动清理  
190 -3. **日志**: 所有 debug 日志在 `logs/debug/` 目录  
191 -4. **内存监控**: run.sh 会持续监控内存,超过 35GB 会自动终止进程  
192 -  
193 ----  
194 -  
195 -## 验证清单  
196 -  
197 -✅ 所有 `sys.path.append()` 已清理  
198 -✅ `db_service.py` 在 offline_tasks 根目录  
199 -✅ `deepwalk/` 已移动到 offline_tasks  
200 -✅ `run.sh` 设置了 PYTHONPATH  
201 -✅ 所有脚本语法检查通过  
202 -✅ 所有导入语句正确  
203 -✅ i2i_deepwalk.py 已重构  
204 -  
205 ----  
206 -  
207 -## 下一步  
208 -  
209 -1. 运行 `bash run.sh` 测试完整流程  
210 -2. 根据实际运行情况调整 DeepWalk 参数  
211 -3. 监控内存使用情况,必要时进一步优化  
offline_tasks/IMPORT_FIXES.md deleted
@@ -1,96 +0,0 @@ @@ -1,96 +0,0 @@
1 -# Import 修复报告  
2 -  
3 -## 修复日期  
4 -2025-10-21  
5 -  
6 -## 修复内容  
7 -  
8 -### 添加缺失的 `import os`  
9 -  
10 -以下文件缺少 `import os` 导入,已全部修复:  
11 -  
12 -1. ✅ **add_names_to_swing.py** - 添加了 `import os`  
13 -2. ✅ **generate_session.py** - 规范化了导入(从 `import json,os` 改为单独的 `import os`)  
14 -3. ✅ **i2i_session_w2v.py** - 添加了 `import os`  
15 -4. ✅ **i2i_swing.py** - 添加了 `import os`  
16 -5. ✅ **interest_aggregation.py** - 添加了 `import os`  
17 -6. ✅ **tag_category_similar.py** - 添加了 `import os`  
18 -  
19 -## 验证结果  
20 -  
21 -### 所有脚本状态  
22 -  
23 -```  
24 -✓ add_names_to_swing.py  
25 -✓ debug_utils_backup.py  
26 -✓ debug_utils.py  
27 -✓ fetch_item_attributes.py  
28 -✓ generate_session.py  
29 -✓ i2i_content_similar.py  
30 -✓ i2i_deepwalk.py  
31 -✓ i2i_item_behavior.py  
32 -✓ i2i_session_w2v.py  
33 -✓ i2i_swing.py  
34 -✓ interest_aggregation.py  
35 -✓ load_index_to_redis.py  
36 -✓ tag_category_similar.py  
37 -```  
38 -  
39 -### 编译检查  
40 -  
41 -所有核心任务脚本编译通过,无语法错误。  
42 -  
43 -**注意**: `test_es_connection.py` 有语法错误(第183行),但这是测试文件,不影响主要任务运行。  
44 -  
45 -## 最终结构检查  
46 -  
47 -```  
48 -✓ db_service.py 存在于 offline_tasks/ 根目录  
49 -✓ config/offline_config.py 存在  
50 -✓ deepwalk 模块完整 (deepwalk.py + alias.py)  
51 -✓ run.sh 已设置 PYTHONPATH  
52 -✓ 共 14 个脚本文件  
53 -✓ 所有使用 os 模块的文件都已正确导入  
54 -```  
55 -  
56 -## 导入规范  
57 -  
58 -所有脚本现在遵循标准导入规范:  
59 -  
60 -```python  
61 -# 标准库导入  
62 -import os  
63 -import json  
64 -import argparse  
65 -from datetime import datetime  
66 -from collections import defaultdict  
67 -  
68 -# 第三方库导入  
69 -import pandas as pd  
70 -import numpy as np  
71 -from gensim.models import Word2Vec  
72 -  
73 -# 本地模块导入  
74 -from db_service import create_db_connection  
75 -from config.offline_config import DB_CONFIG, OUTPUT_DIR  
76 -from scripts.debug_utils import setup_debug_logger  
77 -from deepwalk.deepwalk import DeepWalk  
78 -```  
79 -  
80 -## 完成清单  
81 -  
82 -- [x] 所有缺少 `import os` 的文件已修复  
83 -- [x] 所有核心脚本编译通过  
84 -- [x] 导入语句规范化  
85 -- [x] 文件结构验证完成  
86 -- [x] PYTHONPATH 设置正确  
87 -  
88 -## 可以运行了!  
89 -  
90 -```bash  
91 -cd /home/tw/recommendation/offline_tasks  
92 -bash run.sh  
93 -```  
94 -  
95 -所有 Task 3, Task 5, Task 6 的问题都已解决!  
96 -  
offline_tasks/i2i_content_pic_analysis.md deleted
@@ -1,167 +0,0 @@ @@ -1,167 +0,0 @@
1 -# i2i_content_pic 零产出原因分析  
2 -  
3 -## 📋 问题描述  
4 -  
5 -`output/i2i_content_pic_20251022.txt` 文件大小为0字节,没有产生任何图片向量相似度索引数据。  
6 -  
7 -## 🔍 原因分析  
8 -  
9 -### 1. ES数据检查结果  
10 -  
11 -**检查命令:**  
12 -```bash  
13 -curl -u "essa:4hOaLaf41y2VuI8y" "http://localhost:9200/spu/_count" \  
14 - -H 'Content-Type: application/json' \  
15 - -d '{"query": {"exists": {"field": "embedding_pic_h14"}}}'  
16 -```  
17 -  
18 -**结果:**  
19 -```json  
20 -{"count": 0}  
21 -```  
22 -  
23 -### 2. ES Mapping 检查  
24 -  
25 -**字段定义存在:**  
26 -```json  
27 -{  
28 - "embedding_pic_h14": {  
29 - "type": "nested",  
30 - "properties": {  
31 - "url": {  
32 - "type": "text"  
33 - },  
34 - "vector": {  
35 - "type": "dense_vector",  
36 - "dims": 1024,  
37 - "index": true,  
38 - "similarity": "dot_product"  
39 - }  
40 - }  
41 - }  
42 -}  
43 -```  
44 -  
45 -### 3. 脚本执行情况  
46 -  
47 -从日志 `logs/debug/i2i_content_similar_20251022_015349.log` 可以看到:  
48 -  
49 -- **活跃商品数:** 172,049 个  
50 -- **名称向量索引产出:** 127,511 个商品  
51 -- **图片向量索引产出:** 0 个商品  
52 -  
53 -脚本正常运行,但因为ES中没有图片向量数据,所以在代码的以下位置被跳过:  
54 -  
55 -```python  
56 -# i2i_content_similar.py 第183-192行  
57 -elif vector_field == 'embedding_pic_h14':  
58 - pic_data = item_data.get('embedding_pic_h14')  
59 - if pic_data and isinstance(pic_data, list) and len(pic_data) > 0:  
60 - query_vector = pic_data[0].get('vector') if isinstance(pic_data[0], dict) else None  
61 - else:  
62 - query_vector = None  
63 -  
64 -if not query_vector:  
65 - continue # 跳过没有向量的商品  
66 -```  
67 -  
68 -## 🎯 结论  
69 -  
70 -**核心原因:** Elasticsearch索引中没有任何商品的图片向量(`embedding_pic_h14`)数据。  
71 -  
72 -这不是代码问题,而是**数据缺失问题**。图片向量数据尚未生成或导入到ES中。  
73 -  
74 -## 💡 解决方案  
75 -  
76 -### 方案1:生成图片向量数据(推荐)  
77 -  
78 -需要开发或运行图片向量生成流程:  
79 -  
80 -1. **采集商品图片**  
81 - - 从商品数据库获取图片URL  
82 - - 下载或访问图片资源  
83 -  
84 -2. **生成图片向量**  
85 - - 使用图像embedding模型(如CLIP H/14)  
86 - - 将图片转换为1024维向量  
87 -  
88 -3. **导入ES**  
89 - - 更新商品文档,添加 `embedding_pic_h14` 字段  
90 - - 格式:`[{"url": "图片URL", "vector": [1024维向量]}]`  
91 -  
92 -### 方案2:暂时禁用图片向量索引  
93 -  
94 -如果短期内无法生成图片向量,可以:  
95 -  
96 -**修改 `i2i_content_similar.py`:**  
97 -  
98 -```python  
99 -# 第280-286行,注释掉图片向量索引生成  
100 -# log_processing_step(logger, "生成基于图片向量的相似索引")  
101 -# pic_result = generate_similarity_index(  
102 -# es, active_items, 'embedding_pic_h14', 'pic', logger  
103 -# )  
104 -# pic_output = os.path.join(OUTPUT_DIR, f'i2i_content_pic_{date_str}.txt')  
105 -# save_index_file(pic_result, es, pic_output, logger)  
106 -  
107 -logger.info("⚠️ 跳过图片向量索引生成(ES中无图片向量数据)")  
108 -```  
109 -  
110 -**修改 `load_index_to_redis.py`:**  
111 -  
112 -```python  
113 -# 第87行,从加载列表中移除 content_pic  
114 -i2i_types = ['swing', 'session_w2v', 'deepwalk', 'content_name'] # 移除 'content_pic'  
115 -```  
116 -  
117 -### 方案3:检查是否有其他图片向量字段  
118 -  
119 -如果图片向量使用了其他字段名,需要:  
120 -  
121 -1. 检查ES mapping中是否有其他图片相关的向量字段  
122 -2. 更新脚本中的字段名配置  
123 -  
124 -## 📊 当前数据统计  
125 -  
126 -| 向量类型 | ES中有数据的商品数 | 索引产出数 | 状态 |  
127 -|---------|------------------|-----------|------|  
128 -| 名称向量 (embedding_name_zh) | ~172,000 | 127,511 | ✅ 正常 |  
129 -| 图片向量 (embedding_pic_h14) | 0 | 0 | ❌ 无数据 |  
130 -  
131 -## 🔄 后续建议  
132 -  
133 -1. **确认业务需求:** 是否真的需要基于图片的相似推荐?  
134 -2. **评估优先级:** 图片向量生成的成本和收益  
135 -3. **制定计划:** 如果需要,制定图片向量生成的技术方案和时间表  
136 -4. **更新文档:** 在相关文档中说明 `i2i_content_pic` 的状态  
137 -  
138 -## ⚙️ 检查脚本  
139 -  
140 -可以使用以下脚本快速检查ES中的向量数据情况:  
141 -  
142 -```bash  
143 -#!/bin/bash  
144 -echo "=== ES向量数据检查 ==="  
145 -echo ""  
146 -echo "1. 名称向量 (embedding_name_zh):"  
147 -curl -s -u "essa:4hOaLaf41y2VuI8y" "http://localhost:9200/spu/_count" \  
148 - -H 'Content-Type: application/json' \  
149 - -d '{"query": {"exists": {"field": "embedding_name_zh"}}}' | python3 -m json.tool  
150 -  
151 -echo ""  
152 -echo "2. 图片向量 (embedding_pic_h14):"  
153 -curl -s -u "essa:4hOaLaf41y2VuI8y" "http://localhost:9200/spu/_count" \  
154 - -H 'Content-Type: application/json' \  
155 - -d '{"query": {"exists": {"field": "embedding_pic_h14"}}}' | python3 -m json.tool  
156 -  
157 -echo ""  
158 -echo "3. 总商品数:"  
159 -curl -s -u "essa:4hOaLaf41y2VuI8y" "http://localhost:9200/spu/_count" | python3 -m json.tool  
160 -```  
161 -  
162 -保存为 `check_es_vectors.sh` 并执行:  
163 -```bash  
164 -chmod +x check_es_vectors.sh  
165 -./check_es_vectors.sh  
166 -```  
167 -