【电商搜索】现代工业级电商搜索技术-亚马逊-经典的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_matrixdef 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_itemsdef 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前沿技术

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

computed拦截v-model

一&#xff0c;问题 在父组件和子组件中都使用v-model会打破单项数据流。 二&#xff0c;方法 基于上述问题采用computed拦截v-model <!-- 父组件 --> <template><div><my-component v-model"form"></my-component></div> &l…

Django中分组查询(annotate 和 aggregate 使用)

在 Django 中&#xff0c;aggregate() 和 annotate() 是两个常用的聚合函数。它们都可以用来对一组查询结果进行聚合操作&#xff0c;但它们的作用是有所不同的。 aggregate() 是用于聚合整个查询集的结果&#xff0c;通常用于返回一个值&#xff0c;例如计算查询集中所有结果…

Java - 数组实现大顶堆

题目描述 实现思路 要实现一个堆&#xff0c;我们首先要了解堆的概念。 堆是一种完全二叉树&#xff0c;分为大顶堆和小顶堆。 大顶堆&#xff1a;每个节点的值都大于或等于其子节点的值。 小顶堆&#xff1a;每个节点的值都小于或等于其子节点的值。 完全二叉树&#xff…

简单汇编教程10 数组

目录 实践&#xff1a;相加连续的数 数组是在内存中连续的一串变量。我这样说&#xff0c;可能你已经想到的大致的定义了&#xff1a; NUMBERS DW 34, 45, 56, 67, 75, 89 现在我们就定义了一个Number数组&#xff0c;里面存放的连续的六个数字&#xff1a;34, 45, 56, …

快速上手 Rust——实用示例

Rust 跨平台应用开发第一章&#xff1a;快速上手 Rust——实用示例 1.3 实用示例 在这一节中&#xff0c;我们将通过一系列实用的示例来帮助您更好地理解 Rust 的特性&#xff0c;并展示如何在实际项目中使用这些特性。示例将涵盖文件操作、网络请求、并发编程、命令行工具以…

人工智能与数据安全:Facebook如何应对隐私挑战

在数字时代&#xff0c;数据隐私和安全成为了用户和企业关注的核心问题。作为全球最大的社交媒体平台之一&#xff0c;Facebook面临着日益严峻的隐私挑战。近年来&#xff0c;频繁发生的数据泄露事件和对用户隐私的质疑&#xff0c;使得Facebook在保护用户数据方面倍感压力。为…

2024年ABS分区更新,聚焦管理科学领域新动态

2024学术期刊指南简介 2024年10月30日&#xff0c;英国商学院协会&#xff08;Chartered Association of Business Schools&#xff09;发布了最新的《学术期刊指南&#xff08;Academic Journal Guide&#xff09;》&#xff08;以下简称“《指南》”&#xff09;&#xff0c…

基于用户体验的在线相册管理平台创新设计与实现

基于用户体验的在线相册管理平台创新设计与实现 摘要 随着互联网和智能设备的普及&#xff0c;照片数量剧增&#xff0c;传统相册管理方式难以满足需求&#xff0c;在线相册管理平台应运而生。本文对在线相册管理平台的设计与实现进行了深入研究。首先剖析了平台所采用的 B/S…

解读!中国人工智能大模型技术白皮书!

近期&#xff0c;中国人工智能协会发布了《中国人工智能大模型技术白皮书》&#xff0c;系统梳理了大模型技术演进&#xff0c;深入探讨关键技术要素&#xff0c;并剖析当前挑战及未来展望。我为大家做了简要总结&#xff0c;并附上原文供深入阅读。 目录 第 1 章 大模型技术概…

深度学习笔记之BERT(一)BERT的基本认识

深度学习笔记之BERT——BERT的基本认识 引言回顾&#xff1a;Transformer的策略回顾&#xff1a;Word2vec的策略和局限性 BERT \text{BERT} BERT的基本理念抽象的双向BERT的预训练策略 预训练与微调 引言 从本节开始&#xff0c;将介绍 BERT \text{BERT} BERT系列模型以及其常…

二:Linux学习笔记(第一阶段)-- Linux命令

目录 Linux注意事项&#xff1a; Linux目录 Linux系统基础命令 1. 文件和目录操作 2. 文件查看和编辑 3. 文件权限和所有权 4. 系统信息 5. 网络命令 6. 文件查找 7. 压缩和解压缩 8. 系统管理 Linux注意事项&#xff1a; 严格区分大小写一切皆文件windows下的程序不…

flask websocket服务搭建,flask-sock 和 flask-socketio

flask websocket服务搭建&#xff0c;flask-sock 和 flask-socketio 首先说下socket、socketio 和 websockets 之间的区别 socket是网络上运行的两个程序之间的双向通信链路的一个端点。这是一个非常低级的东西&#xff0c;其他一切都是在 TCP 套接字之上实现的。 WebSocket …

基于 Java 语言双代号网络图自动绘制系统

基于Java语言双代号网络图自动绘制系统研究与实现 一、摘要 网络计划技术已被广泛应用于工业、农业、国防、科学研究等多个领域中的项目计划与管理&#xff0c;以缩短项目周期&#xff0c;提高资源的利用效率。在网络计划技术中&#xff0c;绘制网络图是网络计划技术的基础工…

多模态大模型微调实践!PAI+LLaMA Factory搭建AI导游

一、引言 AI的快速发展推动了各行各业的智能化转型和创新&#xff0c;随之而来的是对AI应用的迫切需求。 如何微调大模型、高效搭建AI应用成为了开发者们广泛关注的技术方向。阿里云人工智能平台PAI&#xff0c;联合开源低代码大模型微调框架LLaMA Factory &#xff0c;共同打…

设计模式-单例模型(单件模式、Singleton)

单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…

metasploit/modules/auxiliary 有哪些模块,以及具体使用案例

Metasploit框架的auxiliary模块涵盖了许多不同的功能&#xff0c;包括扫描、枚举、信息收集和漏洞探测等。以下是一些常见的auxiliary模块及其使用案例&#xff1a; 1. 端口扫描 auxiliary/scanner/portscan/tcp&#xff1a;TCP端口扫描。 use auxiliary/scanner/portscan/tcp…

基于SSM+微信小程序的社团登录管理系统(社团1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…

DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏

知识点 1、Java安全-Druid监控-未授权访问&信息泄漏 2、Java安全-Swagger接口-文档导入&联动批量测试 2、Java安全-JWT令牌攻防-空算法&未签名&密匙提取 Java安全-Druid监控-未授权访问&信息泄漏 Druid是阿里巴巴数据库事业部出品&#xff0c;为监控而…

SMO算法 公式推导

min ⁡ α 1 2 ∑ i 1 N ∑ j 1 N α i α j y i y j K ( x i ⋅ x j ) − ∑ i 1 N α i s.t. ∑ i 1 N α i y i 0 0 ≤ α i ≤ C , i 1 , 2 , ⋯ , N (9-69) \begin{aligned} & \min_{\alpha} \quad \frac{1}{2} \sum_{i1}^{N} \sum_{j1}^{N} \alpha_i \alpha_j…

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

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