推荐系统如何运行?
推荐系统由算法驱动,这些算法起初只是帮助人类筛选不需要的电子邮件。1990 年,发明者 Doug Terry 使用协同过滤算法从垃圾邮件中筛选出理想的电子邮件。用户只需 "喜欢 "或 "讨厌 "某封电子邮件,并与其他对类似邮件内容做同样处理的人合作,就能快速训练计算机,以确定哪些邮件要推送到用户的收件箱,哪些邮件要封存到垃圾邮件文件夹。
一般来说,推荐系统是向用户提供相关建议的算法。建议可以是观看的电影、阅读的书籍、购买的产品,也可以是任何其他内容,这取决于具体场景或行业。这些算法就在我们身边,影响着我们从 Youtube、亚马逊、Netflix 等大型科技公司消费的内容和购买的产品。
设计精良的推荐系统可以成为重要的创收工具、降低成本和差异化竞争手段。得益于开源技术和不断下降的计算成本,定制化推荐系统从未像现在这样容易获得。本文将介绍如何使用开源向量数据库 Milvus、图卷积神经网络(GCN)PinSage、用于图深度学习的可扩展 python 软件包深度图库(DGL)以及 MovieLens 数据集来构建基于图的推荐系统。
跳转到
推荐系统如何运行?
构建推荐系统有两种常见的方法:协同过滤和基于内容的过滤。尽管推荐系统的复杂程度和构建方式各不相同,但它们通常包括三个核心要素:
- 用户模型:推荐系统需要对用户特征、偏好和需求进行模型化。许多推荐系统的建议都是基于用户隐式或显式的项目级输入。
- 对象模型:推荐系统还需要建立物品模型,以便根据用户画像进行物品推荐。
- 推荐算法:任何推荐系统的核心组成部分都是为其推荐提供动力的算法。常用的算法包括协同过滤、隐含语义模型、基于图的模型、组合推荐等。
从高层次上讲,依赖于协同过滤的推荐系统会根据用户过去的行为(包括来自相似用户的行为输入)建立一个模型,以预测用户可能感兴趣的内容。基于内容过滤的系统则使用基于项目特征的离散、预定义标签来推荐类似项目。
协作过滤的一个例子是 Spotify 上的个性化电台,它基于用户的收听历史、兴趣、音乐库等。该电台会播放用户没有保存或以其他方式表示感兴趣的音乐,但其他具有类似品味的用户通常会播放这些音乐。基于内容过滤的例子是基于特定歌曲或艺术家的广播电台,它利用输入的属性来推荐类似的音乐。
构建推荐系统的工具
在本示例中,从零开始构建基于图的推荐系统需要借助以下工具:
Pinsage:图卷积网络
PinSage是一种随机漫步图卷积网络,能够为包含数十亿对象的网络规模图中的节点学习嵌入。该网络由在线图钉板公司Pinterest 开发,用于向用户提供专题视觉推荐。
Pinterest 用户可以将自己感兴趣的内容 "钉 "到 "板 "上,"板 "是被钉内容的 Collections。该公司拥有超过4.78 亿月活跃用户(MAU)和超过2400 亿保存对象,用户数据量巨大,必须建立新技术才能跟上。
1.png
PinSage 利用图钉-板块双向图从图钉中生成高质量的 Embeddings,用于向用户推荐视觉上相似的内容。传统的 GCN 算法会对特征矩阵和整个图进行卷积,与之不同的是,PinSage 会对附近的节点/图钉进行采样,并通过动态构建计算图来执行更高效的局部卷积。
对节点的整个邻域进行卷积会产生一个庞大的计算图。为了减少资源需求,传统的 GCN 算法通过聚合节点 k 跳邻域的信息来更新节点的表示。PinSage 模拟随机行走,将经常访问的内容设置为关键邻域,然后在此基础上构建卷积。
由于 k 跳邻域常常存在重叠,对节点进行局部卷积会导致重复计算。为了避免这种情况,在每个聚合步骤中,PinSage 会映射所有节点,而不进行重复计算,然后将它们链接到相应的上层节点,最后检索上层节点的 Embeddings。
深度图库用于图上深度学习的可扩展 python 软件包
dgl-framework-building-graph-based-recommender-milvus.png
Deep Graph Library(DGL)是一个 Python 包,旨在现有深度学习框架(如 PyTorch、MXNet、Gluon 等)之上构建基于图的神经网络模型。DGL 包含一个用户友好的后台界面,可以轻松植入基于张量并支持自动生成的框架。上文提到的 PinSage 算法经过优化,可与 DGL 和 PyTorch 配合使用。
Milvus:为人工智能和相似性搜索构建的开源向量数据库
Milvus 是如何工作的?
Milvus 是一个开源向量数据库,用于支持向量相似性搜索和人工智能(AI)应用。在高层次上,使用 Milvus 进行相似性搜索的工作原理如下:
- 深度学习模型用于将非结构化数据转换为特征向量,并将其导入 Milvus。
- Milvus 对特征向量进行存储和索引。
- 根据请求,Milvus 会搜索并返回与输入向量最相似的向量。
使用 Milvus 构建基于图的推荐系统
beike-intelligent-house-platform-diagram.jpg
3 构建基于图的推荐系统.png
使用 Milvus 构建基于图的推荐系统包括以下步骤:
第 1 步:数据预处理
数据预处理包括将原始数据转换成更易于理解的格式。本示例使用的开放数据集 MovieLens[5] (m1-1m),包含 6000 名用户对 4000 部电影的 100 万个评分。这些数据由 GroupLens 收集,包括电影描述、电影评分和用户特征。
请注意,本示例中使用的 MovieLens 数据集只需进行最低限度的数据清理或组织。但是,如果您使用的是不同的数据集,则可能会有所不同。
要开始构建推荐系统,请使用 MovieLens 数据集中的历史用户-电影数据构建用户-电影双向图,以便进行分类。
graph_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()
第 2 步:使用 PinSage 训练模型
使用 PinSage 模型生成的 Pin 的嵌入向量是获取的电影信息的特征向量。根据双向图 g 和自定义的电影特征向量维度(默认为 256-d)创建 PinSage 模型。然后,用 PyTorch 训练模型,获得 4000 部电影的 h_item embeddings。
# Define the model
model = 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 embeddings
for 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 中,Milvus 会返回相应的 ID。将 ID 和相应的电影信息导入 MySQL。
# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)
步骤 4:进行向量相似性搜索
根据电影 ID 在 Milvus 中获取相应的 Embeddings,然后使用 Milvus 对这些 Embeddings 进行相似性搜索。然后,在 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启动营。
Milvus 不仅能为推荐系统提供动力
Milvus 是一个强大的工具,能够为大量人工智能和向量相似性搜索应用提供动力。要了解有关该项目的更多信息,请查看以下资源:
- 构建推荐系统的工具
- 使用 Milvus 构建基于图的推荐系统
- Milvus 不仅能为推荐系统提供动力
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word