当前位置: 首页 > 后端技术 > Python

开源-使用PaddlePaddle&Milvus轻松搭建个性化推荐系统

时间:2023-03-25 21:28:20 Python

背景介绍随着网络技术的不断发展和电子商务规模的不断扩大,商品的数量和种类都在迅速增加,用户需要花费大量的资金时间去寻找他们想要购买的商品,这就造成了信息过载的问题。为了解决这个问题,个性化推荐系统(RecommenderSystem)应运而生。个性化推荐系统是信息过滤系统的一个子集,可用于电影、音乐、电子商务、流媒体推荐等多个领域。个性化推荐系统通过分析和挖掘用户行为,发现用户的个性化需求和兴趣特征,向用户推荐用户可能感兴趣的信息或产品。与搜索引擎不同,个性化推荐系统不需要用户准确描述自己的需求,而是根据用户的历史行为进行建模,主动提供符合用户兴趣和需求的信息。本文利用PaddlePaddle深度学习平台搭建模型,结合Milvus向量相似度搜索引擎,构建个性化推荐系统,能够快速准确地为用户提供感兴趣的信息。以MovieLens百万数据集(ml-1m)[1]为例介绍数据准备。ml-1m数据集包含6,000名用户对4,000部电影的1,000,000条评论,由GroupLens研究实验室收集和整理。原始数据包含电影特征数据、用户特征数据、用户对电影的评分,参考ml-1m-README[2]。ml-1m数据集包含3个.dat文件:movies.dat、users.dat和ratings.dat。movies.dat包含电影信息,如下例所示:MovieID::Title::Genres1::ToyStory(1995)::Animation|Children's|Comedy例子显示电影的id为1,标题为《Toy Story》,电影分为三类。这三个类别是动画、儿童和喜剧。users.dat包含用户信息,如下例所示:UserID::Gender::Age::Occupation::Zip-code1::F::1::10::48067该例表示用户ID为1,女,未满18周岁。职业ID为10。ratings.dat包含评分信息,如下例所示:UserID::MovieID::Rating::Timestamp1::1193::5::978300760该示例显示用户1对电影1193的评分为五。融合推荐模型PaddlePaddle是一个源自工业实践的开源深度学习平台。本文的个性化推荐系统模型参考了Paddle[3]中的融合推荐模型:1.首先,将用户特征和电影特征作为神经网络的输入,其中:用户特征融合了四种属性信息,分别是用户身份证件、性别、职业和年龄。电影特征包含三个属性信息,即电影ID、电影类型ID和电影名称。2.对于用户特征,将用户ID映射为一个维度大小为256的向量表示,输入到全连接层,其他三个属性做类似的处理。然后将四个属性的特征表示全连接相加。3.对于电影特征,电影ID的处理方式与用户ID类似,电影类型ID以向量的形式直接输入全连接层,电影名称用定长表示使用文本卷积神经网络的向量。然后将三个属性的特征表示全连接相加。4.得到用户和电影的向量表示后,计算它们之间的余弦相似度作为个性化推荐系统的评分。最后将相似度得分与用户真实得分之差的平方作为回归模型的损失函数。系统概述结合PaddlePaddle的融合推荐模型,将模型生成的电影特征向量存储在Milvus向量相似度搜索引擎中,以用户特征作为待搜索的目标向量,在Milvus中进行相似度搜索以获取查询结果作为该用户的推荐电影。Milvus中提供了内积(IP)的方法来计算向量距离,数据归一化后的内积相似度与融合推荐模型中的余弦相似度结果一致。个性化推荐系统应用本文构建Milvus个性化推荐系统主要分为三个步骤。具体操作参考Bootcamp[4]。第一步:训练模型#运行train.py$pythontrain.py执行该命令会在目录下生成一个模型recommender_system.inference.model,可以将电影数据和用户数据转化为特征向量,生成应用数据供Milvus存储和检索。第二步:数据预处理#datapreprocessing,-f后跟参数原始电影数据文件名$pythonget_movies_data.py-fmovies_origin.txt执行该命令会在目录下生成测试数据movies_data.txt,实现电影数据预处理。第三步:Milvus实现个性化推荐#Milvus根据用户情况实现个性化推荐$pythoninfer_milvus.py-a-g-j[-i]执行该命令会实现指定用户的个性化推荐,主要过程:通过load_inference_model,对电影数据进行模型处理,生成电影特征向量。通过milvus.insert将电影特征向量加载到Milvus中。根据参数指定的用户年龄/性别/职业,转化为用户特征向量,使用milvus.search_vectors做相似度检索,返回用户与电影相似度最高的结果。预测某用户感兴趣的前五部电影:TopIdsTitleScore03030Yojimbo2.944492399692535413871Shane2.858348190784454323467Hud2.84952521324157731809Hana-bi2.82611131668090843184Montana2.8119677305221558总结融合推荐模型通过输入用户信息和电影信息,可以得出两者匹配的分数,然后根据该用户对Thescoresofall对电影进行排序,推荐用户可能感兴趣的电影。本文结合Milvus和PaddlePaddle构建个性化推荐系统,使用Milvus向量搜索引擎存储所有电影特征数据,然后在Milvus中对用户特征进行相似度搜索,搜索结果为系统推荐给用户的电影。Milvus[5]向量相似度检索引擎兼容各种深度学习平台,在搜索数十亿向量时仅毫秒级响应。你可以通过Milvus探索更多AI用法!参考文献[1]MovieLens百万数据集(ml-1m):_http://files.grouplens.org/da...[2]ml-1m-README:_http://files.grouplens.org/da...[3]融合推荐模型:_https://www.paddlepaddle.org...._guide/basics/recommender_system/index.html#id7_[4]训练营:_https://github.com/milvus-io/..._system_[5]Milvus:_https://milvus.io/en/_欢迎来到Milvus社区Milvus源码github.com/milvus-io/milvusMilvus官网milvus.ioMilvusSlack社区milvusio.slack.comMilvusCSDN博客zilliz.blog.csdn.net?2019ZILLIZ?