文章插图
电影推荐系统 demo 界面
【利用 Milvus 搭建基于图的推荐系统】推荐系统[1](Recommender System,RS)能够根据用户的偏好主动为用户推荐商品或项目 。它通过用户的历史数据来发掘用户兴趣偏好,从而将用户可能感兴趣的物品推送给用户,一个设计出色的推荐系统能够为企业带来可观的经济效益 。一个完整的推荐系统的组成必须包括三个要素:用户模型、推荐对象模型、推荐算法 。其中推荐算法是推荐系统的核心 。目前,较成熟的推荐算法主要有:基于协同过滤的推荐、隐含语义模型、基于图模型的推荐、组合推荐等 。本文将为大家介绍如何利用 Milvus 搭建基于图的推荐系统 。
| 主要技术
基于图的卷积神经网络
- PinSage
文章插图
该算法的目标是利用 pins-broards 二分图结构,生成 pins 的高质量 embeddings 用于推荐任务,如相关 pins 推荐 。PinSage 的关键创新点主要有[3]:
- 动态卷积:传统的 GCN 算法对特征矩阵与全图进行卷积;PinSage 算法对节点周围的邻域进行采样,通过动态构建计算图来执行高效的局部卷积 。
- 采样构造卷积:对节点的全部邻域上执行卷积会导致庞大的计算图,因此需要借助采样减小计算量 。传统的 GCN 算法检查 K-hop 图邻域;而 PinSage 通过模拟随机游走将访问量最高的设为重要邻域,并基于此构造卷积 。
- 高效 MapReduce:对于局部卷积的节点通常有重复计算的问题,这是由于节点的 K-hop 邻域之间的重叠引起的 。PinSage 对每个聚合步骤,将所有节点做映射而无需重复的计算,然后将其连接并发送至相应上层节点,最后进行归约以获取上层节点的 embeddings 。
- DGL
文章插图
Milvus 向量相似度搜索引擎
前面介绍了基于 DGL 运用 PinSage 模型可以轻松获取高质量的 embeddings,那么接下来就需要对 embeddings 做相似度搜索,从而找出用户可能感兴趣的项目推荐给用户 。Milvus[5]是一款开源向量相似度搜索引擎,支持使用多种 AI 模型将非结构化数据向量化,并为向量数据提供搜索分析服务,可广泛应用于图像处理、机器视觉、自然语言处理、语音识别、推荐系统以及新药发现 。具体实现方式是:
- 通过深度学习模型将非结构化数据转化为特征向量,并导入 Milvus 库 。
- 对特征向量进行存储并建立索引 。
- 接收到用户的向量搜索请求后,返回与输入向量相似的结果 。
文章插图
| 系统搭建系统介绍
接下来将介绍如何利用 Milvus 搭建基于图的推荐系统,如下图所示,系统主要包含数据预处理、PinSage 模型、数据加载、查询和系统推荐:
文章插图
1. 数据预处理本文搭建的推荐系统使用开放的 MovieLens[5]百万数据集(ml-1m),包含 6,000 位用户对 4,000 部电影的 1,000,000 条评价,由 GroupLens Research 实验室搜集整理 。原始数据中包含电影的数据信息,用户特征信息,以及用户对电影的评分 。本文利用 MovieLens 数据集中用户看过的电影记录来构建一个具有分类特征的结构图:users-movies 二分图 g 。
# Build graphgraph_builder = PandasGraphBuilder()graph_builder.add_entities(users, 'user_id', 'user')graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')g = graph_builder.build()
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- laravel入门:环境搭建
- 帆布帐篷的搭建方法是什么
- 利用这个 USB ID 仓库识别更多 Linux 上的设备
- 用云服务器搭建VPN,构建自己的企业专线
- 接口测试很难吗?学会JMeter+Ant接口自动化搭建及实践
- Ubuntu18.04搭建jumpserver
- Java环境搭建,环境变量配置
- CentOS7下搭建Jellyfin个人流媒体服务器
- 教你利用 PHP 实现微服务
- nginx系列:常用利用shell统计日志