协同过滤和矩阵分解
基于用户、基于物品的协同过滤,矩阵分解,都依赖对用户物品关系矩阵的利用,这里面常常要涉及的工作有下面几种。
-
KNN 相似度计算;
-
SVD 矩阵分解;
-
SVD++ 矩阵分解;
-
ALS 矩阵分解;
-
BPR 矩阵分解;
-
低维稠密向量近邻搜索。
可以做这些工作的开源工具有下面几种。
c2c9d45939566395b3936d25a422e4ef.png
这里面的工作通常是这样:
基础协同过滤算法,通过计算矩阵的行相似和列相似得到推荐结果。
矩阵分解,得到用户和物品的隐因子向量,是低维稠密向量,进一步以用户的低维稠密向量在物品的向量中搜索得到近邻结果,作为推荐结果,因此需要专门针对低维稠密向量的近邻搜索。
同样,除非数据量达到一定程度,比如过亿用户以上,否则你要慎重选择分布式版本,非常不划算。
模型融合
模型融合这部分,有线性模型、梯度提升树模型
886d6963721480a73a7f6a16ae77f759.png
线性模型复杂在模型训练部分,这部分可以离线批量进行,而线上预测部分则比较简单,可以用开源的接口,也可以自己实现。
其他工具Bandit 算法比较简单,自己实现不难。
至于深度学习部分,则主要基于 TensorFlow 完成。
存储、接口相关开源项目和其他互联网服务开发一样。完整推荐系统这里也梳理一下有哪些完整的推荐系统开源项目,可以作为学习和借鉴。
所谓完整的推荐系统是指:包含推荐算法实现、存储、接口。
910ca0b2f233ce2c9c855a21ae71815e.png
这里的推荐系统算法部分以 Python 和 C++ 为主,甚至一些 Python 项目,底层也都是用 C++ 开发而成。
倾向于选择各个模块的开源项目,再将其组合集成为自己的推荐系统。
这样做的好处是有下面几种。
-
单个模块开源项目容易入手,学习成本低,性能好;
-
自己组合后更容易诊断问题,不需要的不用开发;
-
单个模块的性能和效果更有保证












网友评论