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