推荐系统学习笔记¶
这个项目用 MovieLens 作为共同数据集,把推荐系统里常见的算法路线串起来。
文档站点:https://billzi2016.github.io/Recommender-Systems/
MovieLens 好用,是因为它同时有用户 ID、电影 ID、评分、时间戳和电影类型。只靠这些字段,就可以从邻居推荐做起,再走到 embedding、特征交叉、序列模型和图模型。
这里不堆名词。每一节尽量回答四个问题:
- 这个方法当初想解决什么问题?
- 它最核心的想法是什么?
- 放到 MovieLens 上具体怎么用?
- 初学者第一版代码应该先写什么?
建议先看 MovieLens 数据集,再看 入门路线。
运行实验¶
先安装根目录依赖:
pip install -r requirements.txt
实验 01:传统统计¶
./01-traditional-statistics/item-cf/run.sh --sample-ratings none
./01-traditional-statistics/user-cf/run.sh --sample-ratings none
./01-traditional-statistics/matrix-factorization/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
【非主线】none 表示使用全量 MovieLens 32M。想先快速试跑时,再传较小采样:
./01-traditional-statistics/item-cf/run.sh --sample-ratings 2000000
./01-traditional-statistics/item-cf/run.sh --sample-ratings 5000000
./01-traditional-statistics/matrix-factorization/run.sh --sample-ratings 2000000 --num-workers 8 --save-checkpoints --checkpoint-every 0
上面的矩阵分解命令只保存 checkpoints/best.pt。实验报告会写入 .pt 文件大小。
【非主线】如果你想额外保留几个中间 checkpoint,可以这样跑:
./01-traditional-statistics/matrix-factorization/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 20 --keep-checkpoints 3
完全不想写 .pt 时,加 --no-save-checkpoints。
PyTorch 实验默认 --num-workers 8。如果机器负载太高,可以调小。
PyTorch 实验默认会复用已有的 checkpoints/best.pt。检测到这个文件时,脚本会跳过训练,直接进入评估和 report 生成。明确想重新训练时,再加 --force-train。
实验 02:召回¶
./02-retrieval/two-tower-tfrs/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
实验 03:特征交叉¶
./03-feature-crossing/fm/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
./03-feature-crossing/deepfm/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
./03-feature-crossing/xdeepfm/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
实验 04:深度精排¶
./04-deep-ranking/ncf/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
./04-deep-ranking/wide-and-deep/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
./04-deep-ranking/dcn/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
实验 05:序列推荐¶
./05-sequential-recommendation/gru4rec/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
./05-sequential-recommendation/sasrec/run.sh --sample-ratings 2000000 --num-workers 8 --save-checkpoints --checkpoint-every 0
【非主线】SASRec 的全量序列训练更重,因为它会对所有电影做 full softmax。如果你明确想跑完整 MovieLens 32M,再用:
./05-sequential-recommendation/sasrec/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
实验 06:图推荐¶
./06-graph-recommendation/lightgcn/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
./06-graph-recommendation/ngcf/run.sh --sample-ratings none --num-workers 8 --save-checkpoints --checkpoint-every 0
每个实验都会生成:
report.md:英文实验报告report.zh.md:中文实验报告
这些报告也会通过 MkDocs 链接到文档站点。