最近在学习智能推荐这块的内容,以前从来没有接触过,而且对数学、算法这类的知识是有所欠缺的,所以学习起来可能会费力些,所以就基于百度AI平台做一些demo
我理解的智能推荐
一共3个部分,分别是 用户信息、项目(Item)信息、用户和内容关联信息,拿常见的电影喜好预测来说,用户信息是网站用户,项目信息是电影,而内容关联信息是用户给电影的打分,通过把大量的用户特征+项目特征,和真实评分放到一起,可以通过一些模型来学习这些用户的喜好,其实就是把某一类用户的特征总结出来,发现他们喜欢什么类型的电影。
为什么选择PaddleRec
在算法和机器学习领域,我属于小白,而通过体验了一些关于机器学习的附带产品后,感觉百度AI还是非常不错的,例如它的图像处理等,而且主要是Ai Studio有一键部署的坏境和免费的GPU训练,并且也有很多前辈写好的代码和说明。
下面就把在AI Studio平台学习的过程分享出来,我在百度平台开源的项目地址在 https://aistudio.baidu.com/aistudio/projectdetail/4508155
项目概述
本项目的代码是基于 告别电影荒,手把手教你训练符合自己口味的私人电影推荐助手 这个官方项目,但是这个时间过去1年多,代码和环境也在不断的更新,而且由于老的项目中还有一些BUG,所以,就结合了另外2个项目,整合了一个新的项目。分别是 基于深度学习的商品推荐系统 和 PaddleRec与Milvus深度结合,手把手带你体验工业级推荐系统召回速度
这个项目非常非常初级,如果你从来没有接触过相关业务领域,倒是可以试试。
重要:请先仔细阅读上面3个项目的文档,否则可能会导致无法运行本项目 !!!
修改的部分
以下是我针对原项目进行的修改,可能会有遗漏,大体的项目结构目录是没变化的。(也可以通过git命令看下修改里似乎)
- 从github重新clone了PaddleRec的代码
- 所有的pip库安装在 ~/external-libraries/ 下
- 由于项目挂载了自带的数据集,所以在数据处理部分,把下载数据,改成从挂载目录cp
- 增加了部分代码注释,也并不知道自己的理解对不对
- 修改了 to_milvus.py 的插入 milvus 的代码,修改为 milvus_tools 下带的工具
- 将原项目 ~ 下的在线服务的代码都放到了 ~/service/ 下
重建电影推荐Demo的过程
demo目录 是指 ~/PaddleRec/models/demo/movie_recommand
避免出现库引用错误,可以先
export PYTHONPATH=$PYTHONPATH:/home/aistudio/external-libraries/:/home/aistudio/service/proto:/home/aistudio/service/milvus_tool
由于发布版本文件大小限制,demo目录下训练好的模型、原始数据集已经删除。
训练
- 调整 recall/user.yaml 的参数,进行训练,保存在demo目录的 user_model/ 下
- 调整 recall/movie.yaml 的参数,进行训练,保存在demo目录的 movie_model/ 下
- 调整 rank/config.yaml 的参数,进行训练,保存在output_model_rank/下
这几个训练都是静态图,并且使用 user_inference=True 保存了推理模型
转换模型为 PaddleSering 可用的模型
这一步我的理解可能有误,因为最终需要启动在线服务,要转换一下模型结构
python -m paddle_serving_client.convert --dirname ./user_model/4/ --model_filename rec_inference.pdmodel --params_filename rec_inference.pdiparams --serving_server="serving_server/movie_server" --serving_client="serving_client/movie_client"
分别转换用户模型、电影模型、排序模型在serving_server下面的不同目录中
提取电影的特征向量
也就是 get_movie_vectors.py 文件,读取之前准备好的 movies.dat 文件,并提取向量,保存在movie_vectors.txt 中
处理在线服务需要的文件
- 把 user.dat 、movies.dat、movie_vectors.txt 放到 ~/servie/
- 把 demo 目录中的serving_server/user_server 下的文件放到 ~/service/user_vector_model
- 把 demo 目录中的serving_server/rank_server 下的文件放到 ~/service/rank_model
- 或者修改service下recall、rank、等文件中读取对应文件的路径,上面3个也可以不做
启动redis和milvus服务
在get_data.sh 中可以解压存在的,或者下载 redis和milvus,并且启动,安装好之后,我的代码中是注释了安装过程。
除第一次外,不需要运行 to_redis、to_milvus
启动5个服务
运行 start_server.sh ,也可以分开单独运行