利用 Milvus 搭建基于图的推荐系统( 二 )

2. PinSage 模型处理利用 PinSage 模型获取 pins 的 embeddings,本文主要是获取电影数据的特征向量 。首先根据构建的二分图 g 和自定义的电影特征向量维度(默认 256 维)生成 PinSage 模型,再利用 PyTorch 训练该模型,然后通过训练好的模型生成 4000 条电影数据的特征向量 h_item 。
# Define the modelmodel = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)opt = torch.optim.Adam(model.parameters(), lr=args.lr)# Get the item embeddingsfor blocks in dataloader_test: for i in range(len(blocks)): blocks[i] = blocks[i].to(device) h_item_batches.Append(model.get_repr(blocks))h_item = torch.cat(h_item_batches, 0)3. 数据加载将 PinSage 模型生成的电影特征向量 h_item 导入 Milvus 并返回对应的 ID;将电影的 ID 和对应的电影数据信息导入 MySQL 结构化数据库 。
# Load data to Milvus and MySQLstatus, ids = milvus.insert(milvus_table, h_item)load_movies_to_mysql(milvus_table, ids_info)4. 查询根据用户偏好的电影 ID 在 Milvus 中获取对应的特征向量( embeddings ),然后利用返回的特征向量在 Milvus 中进行相似度检索,根据返回的相似结果 ID 在 MySQL 数据库中查找对应的电影信息 。
# Get embeddings that users like_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)# Get the information with similar movies_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"results = cursor.execute(sql).fetchall()5. 系统推荐最终,根据查询的结果为用户提供相似电影的推荐 。综上就是推荐系统的主要流程,具体搭建步骤参考 Milvus-Bootcamp:https://github.com/milvus-io/bootcamp/tree/0.10.0/solutions/graph_based_recommend
 
| 系统展示该项目也提供了 FastAPI 接口和前端展示,通过模拟用户登录电影视频 APP 并勾选自己喜欢的电影,从而推荐用户可能感兴趣的电影 。

利用 Milvus 搭建基于图的推荐系统

文章插图
 
| 总结基于图的卷积神经网络 PinSage 通过 pins-broards 二分图结构生成 pins 的高质量 embeddings 用于推荐任务 。而本文利用 MovieLens 数据集构建 users-movies 二分图,再利用 DGL 开源包结合 PinSage 模型生成电影的特征向量,再将此特征向量加载至 Milvus 特征向量相似度搜索引擎,之后根据用户偏好在 Milvus 中检索,得出相似的特征向量以实现向用户推荐电影的功能 。
本文使用的 Milvus 特征向量相似度搜索引擎可以对接各种深度学习平台,并运用于众多 AI 领域 。Milvus 充分利用现代处理器的并行计算能力,可以在单台通用服务器上完成对十亿级数据的毫秒级搜索,助力用户高效完成非结构化数据检索 。
 
参考资料
  1. https://patentimages.storage.googleapis.com/0e/96/31/98058cb476cd77/CN105913296A.pdf
  2. Graph Convolutional Neural Networks for Web-Scale Recommender Systems, arxiv: 1806.01973
  3. https://medium.com/pinterest-engineering/pinsage-a-new-graph-convolutional-neural-network-for-web-scale-recommender-systems-88795a107f48
  4. https://docs.dgl.ai/en/latest/
  5. http://files.grouplens.org/datasets/movielens/ml-1m.zip




推荐阅读