网站自己怎么建设,微信公众平台登录界面,足球比赛直播哪里看,济南市莱芜区都市网【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法 文章目录 【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法1. 论文信息2. 算法介绍3. 创新点小结4. 实验效果5. 算法结论6. 代码实现7. 问题及优化方向1. 冷启动问题2. 稀…【电商搜索】现代工业级电商搜索技术-亚马逊-经典的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) 构建相似商品表 首先构建一个相似商品表这个表里面记录哪些商品经常被一起购买。 构建方法如下 遍历商品目录 对相似商品表中的每个商品 I i I_{i} Ii算法遍历所有购买过 I i I_{i} Ii的用户 C C C;记录共同购买 对于每个这样的用户 C C C算法查看他们还购买了其他哪些商品 I j I_{j} Ij并记录下来计算相似度 对每个商品 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)∑c∈U1(c购买Ii) ×∑c∈U1(c购买Ij) ∑c∈U1(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)), dtypenp.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, indexuser_item_matrix.columns, columnsuser_item_matrix.columns)def get_recommendations(item_similarity, user_item_matrix, user_id, item_id, num_recommendations5):为用户生成推荐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, keylambda x: x[1], reverseTrue)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(fRecommended 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前沿技术。