【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法


文章目录

  • 【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法
    • 1. 论文信息
    • 2. 算法介绍
    • 3. 创新点小结
    • 4. 实验效果
    • 5. 算法结论
    • 6. 代码实现
    • 7. 问题及优化方向
      • 1. 冷启动问题
      • 2. 稀疏性问题
      • 3. 可解释性
      • 4. 多样性和新颖性
      • 5. 扩展性和实时性
      • 6. 多目标优化
      • 7. 个性化和上下文感知
      • 8. 抗干扰和安全性
    • 后记


1. 论文信息

Amazon.com 推荐系统:基于Item-to-Item的协同过滤

@article{linden2003amazon,
title={Amazon. com recommendations: Item-to-item collaborative filtering},
author={Linden, Greg and Smith, Brent and York, Jeremy},
journal={IEEE Internet computing},
volume={7},
number={1},
pages={76–80},
year={2003},
publisher={IEEE}
}

在这里插入图片描述
在这里插入图片描述
在2017年,当国际学术期刊《IEEE Internet Computing》庆祝其成立20周年时,编辑委员会决定从其出版历史中选出一篇最能经受住“时间考验”的论文。经过激烈的讨论,最终这项荣誉给到了2003年由当时亚马逊研究员Greg Linden、Brent Smith和Jeremy York撰写的一篇论文《Amazon.com Recommendations Item-to-Item Collaborative Filtering》。

2. 算法介绍

作为全球知名的电商平台Amazon,很早就开始在其平台上大规模应用机器学习算法进行在线产品的推荐。这其中,协同过滤(Collaborative Filtering)是最常见且基础的一种在线产品推荐方法。

协同推荐有多种不同的方法,通常归为两大类:基于用户的协同推荐(User-based Collaborative Filtering, UserCF) 与 基于商品得协同推荐(Item-based Collaborative Filtering, ItemCF)。 两者的原理和区别对比,简要梳理如下:

**基于用户的协同过滤**(User-based Collaborative Filtering)
- 原理:通过分析用户之间的相似度来找到目标用户的相似用户群体,然后根据这些相似用户的喜好为用户进行推荐。
- 适用场景:适用于用户个性化兴趣不太明显,且时效性较强的领域,例如新闻推荐。
- 优点:能够捕捉用户的动态兴趣变化,对新用户也能产生不错的推荐效果。
- 缺点:随着用户数量的增加,计算用户相似度的开销会急剧上升,对于用户兴趣分布不均匀的情况,可能无法找到足够多的相似用户。
- 推荐重点:寻找具有相似兴趣的用户群体,推荐这些群体中受欢迎的商品。

基于商品的协同过滤(Item-based Collaborative Filtering)
- 原理:通过分析商品之间的相似度来为用户推荐与他们之前喜欢的商品相似的其他商品。
- 适用场景:适用于商品相似性较高的情况,对于解决数据稀疏和冷启动问题有较好的效果。
- 优点:计算效率相对较高,尤其是当用户量较大时,因为商品的数量通常远少于用户的数量。
- 缺点:可能无法很好地捕捉到用户兴趣的变化,且对于新商品可能难以立即产生推荐。
- 推荐重点:基于用户过去喜欢的商品,推荐相似的商品。

对比
- 用户规模:User-based CF随着用户数量的增加,计算相似度的开销会急剧上升,而Item-based CF由于商品数量通常少于用户数量,计算效率相对较高。
- 新用户/新商品:User-based CF对于新用户也能产生不错的推荐效果,而Item-based CF对于新商品可能难以立即产生推荐。
- 兴趣变化:User-based CF能够捕捉用户的动态兴趣变化,而Item-based CF可能无法很好地做到这一点。
- 冷启动问题:Item-based CF对于解决数据稀疏和冷启动问题有较好的效果,而User-based CF在面对数据稀疏或冷启动问题时可能效果较差。
- 实时性:User-based CF适用于时效性较强的推荐,如新闻推荐,而Item-based CF更适用于商品相似性较高的情况。

基于用户的协同过滤采用基于其他用户(顾客)的偏好来预测给定用户(顾客)的偏好。这些工作的研究重点集中在挖掘和找到与当前用户相似的其他用户集合,并且基于这些相似用户的购买信息来对当前用户进行推荐。
在这里插入图片描述
不过,亚马逊的研究者在论文《Amazon.com Recommendations Item-to-Item Collaborative Filtering》中颠倒了这个概念,找到了一种不同的方法来做这件事,这种方法在在线推荐的扩展性和质量特性方面都更好。这种更好的方法是将产品推荐 基于产品之间的相关性,而不是顾客之间的相似性。这里,相关性的概念 仍然来自于顾客的购买历史:如果购买A的顾客非常可能购买B,那么商品B就与商品A相关。

该项算法的详细工作原理如下:
(1) 构建相似商品表
首先构建一个相似商品表,这个表里面记录哪些商品经常被一起购买。 构建方法如下:

  1. 遍历商品目录:
    对相似商品表中的每个商品 I i I_{i} Ii,算法遍历所有购买过 I i I_{i} Ii的用户 C C C;
  2. 记录共同购买:
    对于每个这样的用户 C C C,算法查看他们还购买了其他哪些商品 I j I_{j} Ij,并记录下来;
  3. 计算相似度:
    对每个商品 I j I_{j} Ij,算法计算 I i I_{i} Ii I j I_{j} Ij之间的相似度。这里相似度的计算可以是任意方法,比如常用的余弦相似度。

(2)相似度计算
相似度的计算通常使用余弦相似度公式,该公式通过计算两个向量之间的夹角的余弦值来确定它们的相似度。在这种情况下,向量是商品,而向量的维度是购买这些商品的顾客集合。
similarity ( I i , I j ) = ∑ c ∈ U 1 ( c 购买 I i ) × 1 ( c 购买 I j ) ∑ c ∈ U 1 ( c 购买 I i ) × ∑ c ∈ U 1 ( c 购买 I j ) \text{similarity}(I_{i}, I_{j}) = \frac{\sum_{c \in U} 1(c \text{购买}I_{i}) \times 1(c \text{购买}I_{j})}{\sqrt{\sum_{c \in U}1(c \text{购买}I_{i})} \times \sqrt{\sum_{c \in U}1(c \text{购买}I_{j})} } similarity(Ii,Ij)=cU1(c购买Ii) ×cU1(c购买Ij) cU1(c购买Ii)×1(c购买Ij)
这里 U U U是所有购买商品得用户集合, 1 1 1是指示函数,在条件成立时为1,否则为0。

(3)生成推荐结果
在上面(2)计算得到每个商品 I i I_{i} Ii的所有相似商品 I j I_{j} Ij的相似度后,按照相似度或者推荐需要选择TopK的结果,作为商品 I i I_{i} Ii的推荐列表。

商品到商品得协同过滤除了改进推荐的思路,而且还提供了显著的计算优势。找到一个与给定访客购买历史最相似的顾客群体,将需要在亚马逊整个顾客数据库中比较购买历史。这在单次网站访问中将是非常耗时的。然而,由于商品之间的相似性计算是可以提前在离线阶段计算,并且可以直接通过offline-to-online的方式加载到在线,采用KV表或者倒排索引的方式,直接进行在线快速查询,因此在线应用时的计算性能更优。

总的来说,该算法的优势:

  • 实时推荐:由于相似商品表是预先计算好的,因此生成推荐的过程非常快,可以实时完成。
  • 可扩展性:算法的在线部分仅依赖于用户购买或评分的商品数量,而不是整个目录的大小或总客户数量,因此可以很好地扩展到大规模数据集。
  • 质量保证:算法推荐高度相关的相似商品,因此推荐质量很高。

3. 创新点小结

文章的主要创新点是提出了一种新的推荐算法——基于Item-to-Item的协同过滤(item-to-item collaborative filtering)。与传统的协同过滤算法相比,这种算法在在线计算时,其规模与客户数量和产品目录中的物品数量无关。这种算法能够实时产生推荐,并且能够扩展到庞大的数据集,同时生成高质量的推荐。

4. 实验效果

  • 数据集规模:亚马逊拥有超过2900万客户和数百万目录商品。
  • 性能:算法的在线部分——查找用户购买和评分的相似商品——其规模与目录大小或总客户数量无关;它仅依赖于用户购买或评分的商品数量。因此,即使对于非常大的数据集,算法也非常快速。
  • 推荐质量:与传统的协同过滤相比,该算法即使在用户数据有限的情况下也能表现良好,能够基于仅有的两三个商品产生高质量的推荐。

5. 算法结论

推荐算法为大型零售商提供了一种有效的目标营销形式,通过为每个客户创造个性化的购物体验。对于像亚马逊这样的大型零售商来说,一个好的推荐算法需要在非常大的客户基础和产品目录上具有可扩展性,生成在线推荐的时间只需不到一秒,并且能够立即对用户数据的变化做出反应,为所有用户提供引人注目的推荐,无论他们购买和评分的数量如何。与其他算法不同,基于商品的协同过滤能够应对这一挑战。

6. 代码实现

import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from scipy.sparse import csr_matrix

def generate_user_item_matrix(ratings):
    """
    生成用户-商品矩阵
    """
    unique_users = set(ratings['user_id'])
    unique_items = set(ratings['item_id'])
    
    user_item_matrix = csr_matrix((len(unique_users), len(unique_items)), dtype=np.float32)
    for _, row in ratings.iterrows():
        user_id = unique_users.index(row['user_id'])
        item_id = unique_items.index(row['item_id'])
        user_item_matrix[user_id, item_id] = row['rating']
    
    return user_item_matrix, unique_users, unique_items

def calculate_item_similarity(user_item_matrix):
    """
    计算商品之间的相似度
    """
    similarity_matrix = cosine_similarity(user_item_matrix)
    return pd.DataFrame(similarity_matrix, index=user_item_matrix.columns, columns=user_item_matrix.columns)

def get_recommendations(item_similarity, user_item_matrix, user_id, item_id, num_recommendations=5):
    """
    为用户生成推荐
    """
    user_ratings = user_item_matrix.getrow(user_id).toarray().ravel()
    item_index = list(user_item_matrix.columns).index(item_id)
    similar_items = item_similarity[item_index]
    scores = similar_items.dot(user_ratings).diagonal()
    scores_list = list(enumerate(scores))
    scores_list = sorted(scores_list, key=lambda x: x[1], reverse=True)
    recommended_items = [x[0] for x in scores_list[num_recommendations:]]
    return recommended_items

# 示例数据
ratings = pd.DataFrame({
    'user_id': [1, 1, 2, 2, 3, 3, 4, 4],
    'item_id': [1, 2, 1, 3, 2, 3, 1, 3],
    'rating': [5, 3, 4, 2, 5, 1, 4, 5]
})

# 生成用户-商品矩阵
user_item_matrix, unique_users, unique_items = generate_user_item_matrix(ratings)

# 计算商品相似度
item_similarity = calculate_item_similarity(user_item_matrix)

# 获取推荐
user_id_to_test = 1
item_id_to_test = 1
recommendations = get_recommendations(item_similarity, user_item_matrix, user_id_to_test, item_id_to_test)

print(f"Recommended items for user {user_id_to_test} based on their rating of item {item_id_to_test}: {recommendations}")

7. 问题及优化方向

虽然亚马逊所提的ItemCF方法很经典,也被大量的公司应用,但是在实际做业务时,通常还是会面临一些问题,需要做优化改造。简要说下,主要有以下几个问题及优化点:

这篇论文提出的基于商品的协同过滤算法虽然在很多方面都非常有效,但它也有一些潜在的不足和改进空间。以下是一些可能的优化方向:

1. 冷启动问题

不足:新用户或新商品(冷启动问题)可能没有足够的交互数据来生成准确的推荐。
优化方向:可以结合内容基础的推荐方法,利用商品之间的内容信息相似性(如类别、标签、描述、图像内容等)来为新用户或新商品生成初步推荐。

2. 稀疏性问题

不足:在大规模数据集中,用户-商品交互矩阵通常是稀疏的,这意味着很多潜在的推荐机会没有被捕捉到。
优化方向:一种思路是可以通过增加更多的用户和商品特征来增加数据的密度,例如用户的浏览历史、搜索记录等。另外一种思路则是对交互用户的定义进行广义化,做泛个性化推荐,例如从单一的用户到用户人群、用户国家,从而将单一用户上的行为转换到人群或者国家的行为,那么可以在人群或者国家粒度上做item-to-item的协同推荐。

3. 可解释性

不足:协同过滤算法通常被认为是“黑箱”模型,因为它们不提供推荐解释。
优化方向:可以结合规则基础或解释性的模型来提供推荐解释,增加用户对推荐系统的信任。

4. 多样性和新颖性

不足:算法可能会推荐流行的商品,而忽视了长尾中的新颖或多样性商品。
优化方向:可以通过引入多样性和新颖性的指标来优化推荐列表,确保推荐不仅流行而且多样和新颖。

5. 扩展性和实时性

不足:虽然算法在处理大规模数据集时表现良好,但在数据持续增长的情况下,维护相似商品表的成本可能会很高。
优化方向:可以探索增量更新相似商品表的方法,而不是从头开始重新计算,以提高算法的扩展性和实时性。利用流式数据处理技术,在线增量更新相似商品表,从而提升数据的时效性。

6. 多目标优化

不足:算法主要优化的是点击率或转化率,可能忽视了其他重要的业务指标。
优化方向:可以同时考虑多个业务目标,如提高用户满意度、增加用户留存等,通过多目标优化来提升整体的业务效果。

7. 个性化和上下文感知

不足:算法可能没有充分考虑用户的上下文信息,如时间、地点、情绪状态等。
优化方向:可以引入上下文感知的推荐,根据用户的实时上下文信息来调整推荐策略。通常比较直接的做法是研发深度个性化推荐算法模型。

8. 抗干扰和安全性

不足:推荐系统可能容易受到恶意攻击或操纵,如通过注入虚假数据来影响推荐结果。
优化方向:可以引入对抗训练和数据清洗的方法来提高算法的鲁棒性和安全性。在工业应用中,通常会对行为用户进行异常检测,在数据预处理阶段,将短时间内有特别多交互行为的异常用户的行为记录信息剔除,从而提升数据质量。

总的来说,虽然基于商品的协同过滤算法在亚马逊等电商平台上取得了巨大成功,但是上述优化方向,可以进一步提高算法的性能和适用性,以适应不断变化的业务需求和用户行为,当然相关的研究论文实际已经有大量的工作聚集在解决上面的这些问题。


后记

如果觉得我的博客对您有用,欢迎打赏支持!三连击(点赞、收藏、关注和评论)不迷路,我将持续为您带来计算机人工智能前沿技术(尤其是AI相关的大语言模型,深度学习和计算机视觉相关方向)最新学术论文及工程实践方面的内容分享,助力您更快更准更系统地了解 AI前沿技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows 系统安装 Hadoop 详细教程

Hadoop 是一个分布式系统基础架构,在大数据处理领域有着广泛的应用。在 Windows 系统上安装 Hadoop 虽然相对复杂一些,但只要按照步骤来,也可以顺利完成。本文将详细介绍在 Windows 系统下安装 Hadoop 的过程。 一、准备工作 下载 Hadoop 安装…

如何快速使用Cesium完成项目

要快速使用Cesium完成项目,可以按照以下步骤进行: 学习基础知识: 首先,了解Cesium的基本概念和功能。可以通过阅读Cesium的官方文档和一些入门教程来掌握基础知识。例如,可以参考“Cesium速成教程:一小时入…

记录一下方便的条件编译

1. 需要准备: 1-1、npm i cross-env -D 是跨平台的自定义编译 1-2、构造工具:vite/webpack > vite: import.meta.env.VITE_NODE_ENV > webpack:process.env.NODE_ENV这里使用vite为例子 1-3、 package.json 2. 思路与步骤 首先我们知道 axio…

前端开发转行做渗透测试,通过挖漏洞来赚钱

最近,一个做运维的朋友在学渗透测试。他说,他公司请别人做渗透测试的费用是 2w/人天,一共2周。2周 10w 的收入,好香~ 于是,我也对渗透测试产生了兴趣。开始了探索之路~ 什么是渗透测试 渗透测试这名字听起来有一种敬…

网络自动化02:基于xlsx传入设备信息与所需执行备份配置命令,使用netmiko自动化登录分发

这是这个系列第二篇 本文将仅简单介绍使用xlsx导入设备信息,并使用netmiko配置 目录 环境设备信息表格式单线程代码解释代码逻辑分析函数解析 逻辑调用图逻辑说明 遇到的问题写在最后 环境 所有设备均能与我执行Python脚本的环境互通,同时均拥有独立的ip…

Knowledge-refined Denoising Network for Robust Recommendation

Knowledge-refined Denoising Network for Robust Recommendation(Sigir23) 摘要 知识图(KG)包含丰富的边信息,是提高推荐性能和可解释性的重要组成部分。然而,现有的知识感知推荐方法直接在KG和用户-项目…

数据结构 之 图的 最小生成树(十二)

提示:本篇难点: 生成树概念的理解 重点:是普利姆算法、克鲁斯卡尔算法构造最小生成树 超超超重点的是 普利姆和克鲁斯卡尔构造最小生成树的算法,这部分可能需要同学们自行去学习了。 一定要理解后用代码能够实现这两个算法已经了解…

如何清空回收站后在 Windows 11/10 中恢复已删除的文件

这篇文章将解释如何将已删除的文件、文件夹和其他项目从回收站还原或恢复到原始位置。有时,我们最终会删除重要的文件和文件夹,然后我们不知道如何将它们恢复到原来的位置。但是您不必担心,因为这篇针对初学者的帖子将详细指导您完成所有步骤…

Axios 请求超时设置无效的问题及解决方案

文章目录 Axios 请求超时设置无效的问题及解决方案1. 引言2. 理解 Axios 的超时机制2.1 Axios 超时的工作原理2.2 超时错误的处理 3. Axios 请求超时设置无效的常见原因3.1 配置错误或遗漏3.2 超时发生在建立连接之前3.3 使用了不支持的传输协议3.4 代理服务器或中间件干扰3.5 …

不懂知识图谱的你,正在失去转行做AI产品经理的机会

伴随着AI这块新的投资风口,新兴企业对AI人才的需求也是激增。所以,你准备好了么? 一、AI来了,你被OUT了,有人却已在快车道上了 给你讲个恐怖的故事:我今年,32岁了!三十岁左右是一生…

Generating /run/initramfs/rdsosreport.txt

Linux中遇到Generating /run/initramfs/rdsosreport.txt 第一步:首先输入 ls /dev/mapper 第二步:输入 xfs_repair /dev/mapper/centos-root -L 第三步:重启reboot 不说原因了,直接上解决方式: 第一步:首先…

纯CSS实现UI设计中常见的丝带效果(5)

原文传送门:纯CSS实现UI设计中常见的丝带效果 网页中的丝带效果在设计中扮演着多重角色,其作用可以归纳为以下几个方面: 视觉吸引与装饰 增强视觉吸引力:丝带效果以其独特的形态和色彩,能够迅速吸引用户的注意力&…

OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR

文章目录 一、信用卡数字识别1.1 模板匹配1.2 匹配多个对象1.3 处理数字模板1.4 预处理卡片信息,得到4组数字块。1.5 遍历数字块,将卡片中每个数字与模板数字进行匹配 二、人脸检测2.1人脸检测算法原理2.2 OpenCV中的人脸检测流程 三、车牌识别3.1 安装t…

音视频入门基础:FLV专题(21)——FFmpeg源码中,获取FLV文件音频信息的实现(上)

由于本文篇幅较长,分为上、中、下三篇。 一、引言 通过FFmpeg命令可以获取到FLV文件的音频压缩编码格式、音频采样率、通道数、音频码率信息: ./ffmpeg -i XXX.flv 而由《音视频入门基础:FLV专题(9)——Script Tag简…

深度学习之降维和聚类

1 降维和聚类 1.1 图解为什么会产生维数灾难 ​ 假如数据集包含10张照片,照片中包含三角形和圆两种形状。现在来设计一个分类器进行训练,让这个分类器对其他的照片进行正确分类(假设三角形和圆的总数是无限大),简单的…

什么是 L0、L1、L2 和 L3 区块链层以及为什么需要它们

区块链的 L 层越来越多地出现在新闻中(例如,A16z 投资基金正在投资以太坊Optimism上的 L2 解决方案,或者 Orbs 的 L3 解决方案将其解决方案扩展到 TON 区块链)。 层的概念是区块链的一种分类,对于快速了解特定项目如何…

数据分析可视化:散点图矩阵与雷达图的生成

目录 一、经营数据绘制散点图矩阵1.代码解释2.代码说明3.注意事项 二、雷达图1.代码解释2.代码说明3. 注意事项4. 运行代码 总结 一、经营数据绘制散点图矩阵 import seaborn as sns import pandas as pd rc {font.sans-serif:Arial Unicode MS,axes.unicode_minus:False} sn…

硅谷甄选(9)SKU模块

SKU模块 8.1 SKU静态 <template><el-card><el-table border style"margin: 10px 0px"><el-table-column type"index" label"序号" width"80px"></el-table-column><el-table-columnlabel"名称…

ubuntu 异常 断电 日志 查看

sudo less /var/log/syslog 搜 Linux version

解决rabbitmq-plugins enable rabbitmq_delayed_message_exchange :plugins_not_found

问题&#xff1a;我是在docker-compose环境部署的 services:rabbitmq:image: rabbitmq:4.0-managementrestart: alwayscontainer_name: rabbitmqports:- 5672:5672- 15672:15672environment:RABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes:- ./rabbitmq/…