前言 iii
第 1章 推荐系统 1
1.1 推荐系统是什么 1
1.1.1 京东商城 3
1.1.2 亚马逊 4
1.1.3 YouTube 6
1.2 推荐系统整体架构 8
1.3 推荐系统算法概述 9
1.3.1 召回算法 10
1.3.2 排序算法 14
1.4 周边配套系统 16
1.4.1 机器学习平台 18
1.4.2 特征平台 18
1.4.3 模型服务平台 19
1.4.4 A/B测试平台 19
1.5 总结 20
第 一部分 召回算法
第 2章 协同过滤 22
2.1 算法应用 24
2.2 算法原理 25
2.2.1 打分机制 26
2.2.2 物品相似度 31
2.3 算法实现 33
2.3.1 步骤1:数据源读取 34
2.3.2 步骤2:聚合用户行为 34
2.3.3 步骤3:局部物品相似度 35
2.3.4 步骤4和步骤5:全局物品相似度 36
2.3.5 步骤6:Top N 37
2.4 算法优化 37
2.4.1 无效用户过滤 38
2.4.2 热门惩罚 38
2.5 完整代码 39
2.6 准实时更新 42
2.6.1 数据准备 43
2.6.2 实时数据取数逻辑 44
2.6.3 准实时更新相似度 44
2.7 总结 45
第3章 关联规则 47
3.1 关联规则 48
3.1.1 定义 49
3.1.2 频繁项集 50
3.2 Apriori算法 51
3.2.1 频繁项集生成 51
3.2.2 关联规则生成 53
3.3 FPGrowth 54
3.3.1 FP树 54
3.3.2 逻辑 54
3.3.3 举例 55
3.3.4 运行 66
3.3.5 完整代码 68
3.3.6 数据集 69
3.3.7 源码分析 70
3.3.8 算法优化 76
3.4 总结 77
第4章 Word2Vec 78
4.1 词向量示例 80
4.2 数据准备 81
4.2.1 词汇表 82
4.2.2 训练数据 82
4.3 算法原理 83
4.3.1 模型结构 85
4.3.2 前向传播 86
4.3.3 反向传播 88
4.3.4 算法优化 89
4.4 源码分析 91
4.4.1 负采样概率表 91
4.4.2 sigmoid函数优化 93
4.5 算法实战 93
4.5.1 数据源 94
4.5.2 运行 94
4.5.3 相似度计算 95
4.6 LSH 算法 96
4.6.1 散列 96
4.6.2 算法逻辑 98
4.6.3 时间复杂度分析 102
4.6.4 错误率分析 102
4.6.5 召回率分析 104
4.7 Word2Vec与LSH 106
4.8 总结 107
第5章 深度学习双塔召回 108
5.1 向量化 109
5.2 双塔模型 110
5.2.1 数据准备 112
5.2.2 模型训练 112
5.2.3 模型对外服务 113
5.3 HNSW算法 115
5.3.1 二分查找 115
5.3.2 有序链表 117
5.3.3 跳表 118
5.3.4 HNSW算法 121
5.4 双塔模型与HNSW算法 129
5.5 负样本策略 131
5.6 总结 132
第6章 召回模型的离线评估 133
6.1 推荐任务类型 133
6.2 混淆矩阵 134
6.2.1 准确率 135
6.2.2 精确率 136
6.2.3 召回率 136
6.2.4 F1分数 137
6.2.5 @k 138
6.3 nDCG 139
6.3.1 CG 139
6.3.2 DCG 140
6.3.3 nDCG 140
6.3.4 @k 141
6.4 其他指标 142
6.4.1 MRR 142
6.4.2 MAP 142
6.4.3 多样性 143
6.4.4 覆盖度 144
6.4.5 信息熵 144
6.5 代码实现 144
6.5.1 实现逻辑 145
6.5.2 完整代码 146
6.6 总结 149
第二部分 排序算法
第7章 特征工程和特征选择 153
7.1 特征类型 155
7.1.1 类别特征 155
7.1.2 数值特征 155
7.1.3 序列特征 156
7.2 特征工程 156
7.2.1 特征样例 156
7.2.2 特征工程 159
7.2.3 TensorFlow特征列 164
7.3 特征选择 165
7.4 总结 167
第8章 传统机器学习排序算法 168
8.1 数据和模型 168
8.1.1 极大似然估计 169
8.1.2 最大后验概率估计 169
8.2 模型训练流程 170
8.3 手写逻辑回归 171
8.3.1 数据准备 172
8.3.2 数据读取 173
8.3.3 模型训练 173
8.3.4 完整代码 174
8.3.5 算法优缺点 177
8.4 手写因式分解机 178
8.4.1 完整代码 180
8.4.2 算法优缺点 183
8.5 其他经典排序算法 184
8.6 Q & A 185
8.7 总结 186
第9章 深度学习从训练到对外服务 188
9.1 深度学习简介 188
9.2 经典模型结构 191
9.2.1 Wide & Deep 191
9.2.2 Deep Interest Network 192
9.2.3 Behavior Sequence Transformer 194
9.3 建模流程 195
9.3.1 数据准备 197
9.3.2 特征工程 202
9.3.3 模型搭建 209
9.3.4 模型训练 213
9.3.5 模型导出 215
9.3.6 模型服务 216
9.4 再谈双塔模型 219
9.5 总结 220
第 10章 Listwise Learning To Rank从原理到实现 221
10.1 Listwise基本概念 222
10.1.1 page view 222
10.1.2 relevance 223
10.1.3 Listwise 223
10.2 损失函数 224
10.2.1 permutation probability 224
10.2.2 top one probability 226
10.2.3 交叉熵损失函数 227
10.3 ListNet 228
10.3.1 数据准备 229
10.3.2 模型搭建 236
10.3.3 模型训练、导出和服务 243
10.3.4 优化方向 244
10.4 总结 244
第 11章 排序算法的离线评估和在线评估 246
11.1 离线评估 246
11.1.1 ROC 曲线 247
11.1.2 ROC 曲线下的面积 249
11.1.3 PR 曲线 254
11.1.4 GAUC 256
11.2 在线评估 257
11.2.1 A/B测试简介 257
11.2.2 朴素分流方案 258
11.2.3 分层分流方案 260
11.2.4 可信度评估 262
11.3 在线离线不一致 267
11.3.1 特征不一致 267
11.3.2 数据分布不一致 268
11.3.3 模型与业务目标不一致 268
11.3.4 验证集设计不合理 268
11.4 总结 270
第 12章 推荐算法建模最佳实践 271
12.1 深度学习调参 272
12.1.1 学习率 272
12.1.2 batch size 279
12.1.3 epoch 279
12.1.4 隐藏层数 280
12.1.5 隐藏节点数 280
12.1.6 激活函数 280
12.1.7 权重初始化 280
12.1.8 优化器 281
12.1.9 其他实践 281
12.2 现实数据问题 281
12.2.1 类别失衡 282
12.2.2 位置偏差 286
12.2.3 海量数据下的调参 287
12.2.4 其他实践 288
12.3 总结 288
第三部分 工程实践
第 13章 冷启动问题 290
13.1 冷启动概述 291
13.2 用户冷启动 292
13.2.1 热门排行榜 292
13.2.2 上下文信息 294
13.2.3 其他策略 295
13.3 物品冷启动 296
13.3.1 基于内容的过滤 296
13.3.2 推荐策略 299
13.4 系统冷启动 301
13.5 总结 306
第 14章 增量更新和迁移学习 307
14.1 离线训练 307
14.1.1 数据流向 307
14.1.2 更新方式 308
14.2 在线训练 310
14.2.1 数据流向 310
14.2.2 样本生成 312
14.2.3 延迟反馈 314
14.3 迁移学习 317
14.4 总结 320
第 15章 分布式TensorFlow 321
15.1 分布式的理由 321
15.2 并行方式 322
15.2.1 模型并行 323
15.2.2 数据并行 324
15.3 参数共享与更新 325
15.3.1 同步更新 326
15.3.2 异步更新 327
15.4 分布式训练架构 329
15.4.1 Parameter Server架构 329
15.4.2 Ring All Reduce架构 331
15.5 单机代码移植 334
15.5.1 数据准备 334
15.5.2 模型搭建 337
15.5.3 模型训练 337
15.5.4 模型导出 340
15.6 分布式训练框架 340
15.6.1 基于Kubernetes的分布式训练框架 340
15.6.2 基于Flink的分布式训练框架 344
15.7 总结 345
第 16章 示例:推荐算法训练代码框架设计 346
16.1 问题 347
16.2 解题思路 348
16.2.1 数据问题 348
16.2.2 训练问题 349
16.3 详细设计 350
16.3.1 配置解析 351
16.3.2 数据读取 352
16.3.3 模型搭建 352
16.3.4 完整流程 353
16.4 代码实现 353
16.4.1 配置解析 354
16.4.2 特征处理 359
16.5 总结 362
第 17章 回顾和探索 363
17.1 回顾 363
17.2 探索 364
17.2.1 数据 364
17.2.2 算法 366
17.2.3 平台 367
17.2.4 安全 367
17.3 总结 368