推荐系统_推荐系统实践 - CSDN
推荐系统 订阅
推荐系统是利用 [1]  电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。为了解决这些问题,个性化推荐系统应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。 展开全文
推荐系统是利用 [1]  电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。为了解决这些问题,个性化推荐系统应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。
信息
外文名
Recommender system
定    义
电商网站向客户提供商品信息建议
中文名
推荐系统
应    用
电子商务
推荐系统背景简介
互联网的出现和普及给用户带来了大量的信息,满足了用户在信息时代对信息的需求,但随着网络的迅速发展而带来的网上信息量的大幅增长,使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,这就是所谓的 [2]  信息超载(informationoverload)问题。解决信息超载问题一个非常有潜力的办法是 [3]  推荐系统,它是根据用户的信息需求、兴趣等,将用户感兴趣的信息、产品等推荐给用户的个性化信息推荐系统。和搜索引擎相比推荐系统通过研究用户的兴趣偏好,进行个性化计算,由系统发现用户的兴趣点,从而引导用户发现自己的信息需求。一个好的推荐系统不仅能为用户提供个性化的服务,还能和用户之间建立密切关系,让用户对推荐产生依赖。推荐系统现已广泛应用于很多领域,其中最典型并具有良好的发展和应用前景的领域就是电子商务领域。同时学术界对推荐系统的研究热度一直很高,逐步形成了一门独立的学科。 推荐系统有3个重要的模块:用户建模模块、推荐对象建模模块、推荐算法模块。通用的推荐系统模型流程如图。推荐系统把用户模型中兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。
收起全文
精华内容
参与话题
  • 推荐系统综述:初识推荐系统

    万次阅读 多人点赞 2019-07-11 11:21:39
    4.推荐方式和效果评估 4.1 评分预测 4.2 TopN推荐 5. 推荐算法 5.1 基于用户行为推荐 5.1.1基于用户的协同过滤(User-Based CF) 5.1.2基于物品的协同过滤(Item-Based CF) 5.1.3隐语义模型(Latent Factor ...

     

    目录

    1. 引言

    2. 发展历史

    3. 研究现状

    4. 推荐方式和效果评估

    4.1 评分预测

    4.2 TopN推荐

    5. 推荐算法

    5.1 基于用户行为推荐

    5.1.1 基于用户的协同过滤(User-Based CF)

    5.1.2 基于物品的协同过滤(Item-Based CF)

    5.1.3 隐语义模型(Latent Factor Model)

    5.2 基于内容推荐

    5.3 混合推荐

    6. 总结和展望

    参考文献


    1. 引言

    随着信息技术和互联网技术的发展,人们从信息匮乏时代步入了信息过载时代,在这种时代背景下,人们越来越难从大量的信息中找到自身感兴趣的信息,信息也越来越难展示给可能对它感兴趣的用户,而推荐系统的任务就是连接用户和信息,创造价值。

    设想用户想买一本《Recommender Systems An Introduction》,用户只需要走进一家书店,寻找这本书即可。通过互联网,用户可以打开当当,在搜索框中输入书名,然后就可以找到用户想要购买的书籍,这两种方式都需要用户有明确的目的,如购买《Recommender Systems An Introduction》或某一类别的书籍。

    但是,当用户没有明确目标时,比如寻找感兴趣的音乐,用户只能通过一些预先设定的类别或标签去寻找他可能感兴趣的音乐,但面对如此之多音乐,用户很难在短时间内找出真正感兴趣的音乐。这时就需要一个自动化的工具,来分析用户曾经收听的音乐,进而寻找出用户可能感兴趣的音乐推荐给用户,这就是个性化推荐系统的工作。

    作为一种信息过滤系统,推荐系统具有以下两个最显著的特性:

    (1)主动化。从用户角度考虑,门户网站和搜索引擎都是解决信息过载的有效方式,但它们都需要用户提供明确需求,当用户无法准确描述自己的需求时,这两种方式就无法为用户提供精确的服务了。而推荐系统不需要用户提供明确的需求,而是通过分析用户和物品的数据,对用户和物品进行建模,从而主动为用户推荐他们感兴趣的信息。

    (2)个性化。推荐系统能够更好的发掘长尾信息,即将冷门物品推荐给用户。热门物品通常代表绝大多数用户的兴趣,而冷门物品往往代表一小部分用户的个性化需求,在电商平台火热的时代,由冷门物品带来的营业额甚至超过热门物品,发掘长尾信息是推荐系统的重要研究方向。

    目前,推荐系统已广泛应用于诸多领域,其中最典型的便是电子商务领域。同时,伴随着机器学习、深度学习的发展,工业界和学术界对推荐系统的研究热情更加高涨,形成了一门独立的学科。

    2. 发展历史

    推荐系统是互联网时代的一种信息检索工具,自上世纪90年代起,人们便认识到了推荐系统的价值,经过了二十多年的积累和沉淀,推荐系统逐渐成为一门独立的学科在学术研究和业界应用中都取得了很多成果。

    1994 年明尼苏达大学GroupLens研究组推出第一个自动化推荐系统 GroupLens[1]。提出了将协同过滤作为推荐系统的重要技术,这也是最早的自动化协同过滤推荐系统之一。

    1997 年 Resnick 等人[2]首次提出推荐系统(recommendersystem,RS)一词,自此,推荐系统一词被广泛引用,并且推荐系统开始成为一个重要的研究领域。

    1998年亚马逊(Amazon.com)上线了基于物品的协同过滤算法,将推荐系统推向服务千万级用户和处理百万级商品的规模,并能产生质量良好的推荐。

    2003年亚马逊的Linden等人发表论文,公布了基于物品的协同过滤算法[3],据统计推荐系统的贡献率在20%~30%之间[4]。

    2005年Adomavicius 等人的综述论文[5] 将推荐系统分为3个主要类别,即基于内容的推荐、基于协同过滤的推荐和混合推荐的方法,并提出了未来可能的主要研究方向。

    2006 年10月,北美在线视频服务提供商 Netflix 宣布了一项竞赛,任何人只要能够将它现有电影推荐算法 Cinematch 的预测准确度提高10%,就能获得100万美元的奖金。该比赛在学术界和工业界引起了较大的关注,参赛者提出了若干推荐算法,提高推荐准确度,极大地推动了推荐系统的发展。

    2007年第一届ACM 推荐系统大会在美国举行,到2017年已经是第11届。这是推荐系统领域的顶级会议,提供了一个重要的国际论坛来展示推荐系统在不同领域的最近研究成果、系统和方法。

    2016年,YouTube发表论文[6],将深度神经网络应用推荐系统中,实现了从大规模可选的推荐内容中找到最有可能的推荐结果。

    近年来,推荐系统被广泛的应用于电子商务推荐、个性化广告推荐、新闻推荐等诸多领域,如人们经常使用的淘宝、今日头条、豆瓣影评等产品。

    3. 研究现状

    经过二十多年的积累和沉淀,推荐系统成功应用到了诸多领域,RecSys会议上最常提及的应用落地场景为:在线视频、社交网络、在线音乐、电子商务、互联网广告等,这些领域是推荐系统大展身手的舞台,也是近年来业界研究和应用推荐系统的重要实验场景。

    伴随着推荐系统的发展,人们不仅仅满足于分析用户的历史行为对用户进行建模,转而研究混合推荐模型,致力于通过不同的推荐方法来解决冷启动、数据极度稀疏等问题,国内知名新闻客户端今日头条采用了内容分析、用户标签、评估分析等方法打造了拥有上亿用户的推荐引擎。

    移动互联网的崛起为推荐系统提供了更多的数据,如移动电商数据[6]、移动社交数据、地理数据[7]等,成为了社交推荐的新的尝试。

    随着推荐系统的成功应用,人们越来越多的关注推荐系统的效果评估和算法的健壮性、安全性等问题。2015年,Alan Said 等人在RecSys会议上发表论[8],阐述了一种清晰明了的推荐结果评价方式,同年,FrankHopfgartner等人发表论文[9],讨论了基于流式数据的离线评价方式和对照试验,掀起了推荐算法评估的研究热潮。

    近年来,机器学习和深度学习等领域的发展,为推荐系统提供了方法指导。RecSys会议自2016年起开始举办定期的推荐系统深度学习研讨会,旨在促进研究和鼓励基于深度学习的推荐系统的应用。

    2017年AlexandrosKaratzoglou等人在论文[10]中介绍了深度学习在推荐系统中的应用,描述了基于深度学习的内容推荐和协同过滤推荐方法,深度学习成为当前推荐系统研究的热点。

    4. 推荐方式和效果评估

    推荐系统在为用户推荐物品时通常有两种方式:

    4.1 评分预测

    此方法一般通过学习用户对物品的历史评分,预测用户可能会为他没有进行评分的物品打多少分,通常用于在线视频、音乐等服务的推荐。

    评分预测的效果评估一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。对于测试集T中的一个用户u和物品i,令rui是用户u对物品i的实际评分,而ȓui是推荐系统给出的预测评分,则RMSE定义为:

    MAE定义为:

    4.2 TopN推荐

    此方法一般不考虑评分,而是为用户提供一个个性化推荐列表,通过预测用户对物品的兴趣度对列表进行排序,选取其中前N个物品推荐给用户,通常用于电子商务、社交网络、互联网广告推荐。

    TopN推荐一般通过准确率(precision)、召回率(recall)和F1值(平衡分数)度量。令R(u)是为用户推荐的物品列表,T(u)是用户在测试集上的行为列表。

    召回率定义为:

    准确率定义为:

    F1值定义为:

    5. 推荐算法

    根据推荐系统使用数据的不同,推荐算法可分为基于用户行为推荐、基于内容推荐、基于社交网络推荐等。

    主流的推荐系统算法可以分为协同过滤推荐(Collaborative Filtering Recommendation)、基于内容推荐(Content-basedRecommendation)和混合推荐三种。

    5.1 基于用户行为推荐

    用户行为蕴藏着很多模式,著名的“啤酒和尿布”的故事就是用户行为模式的良好体现。基于用户行为推荐的主要思想是利用已有用户的历史行为数据(显式反馈或隐式反馈),预测当前用户可能感兴趣的物品,其中显式反馈主要为用户评分,隐式反馈主要包括浏览、搜索等。

    基于用户行为的推荐算法也称为协同过滤算法(Collaborative Filtering Recommendation),是推荐领域应用最广泛的算法,该算法不需要预先获得用户或物品的特征数据,仅依赖于用户的历史行为数据对用户进行建模,从而为用户进行推荐。协同过滤算法主要包括基于用户的协同过滤(User-Based CF)、基于物品的协同过滤(Item-Based CF)、隐语义模型(Latent Factor Model)等。其中基于用户和物品的协同过滤是通过统计学方法对数据进行分析的,因此也称为基于内存的协同过滤或基于邻域的协同过滤;隐语义模型是采用机器学习等算法,通过学习数据得出模型,然后根据模型进行预测和推荐,是基于模型的协同过滤。

    5.1.1 基于用户的协同过滤(User-Based CF)

    基于用户的协同过滤(下文简称UserCF)的基本思想为:给用户推荐和他兴趣相似的用户感兴趣的物品。当需要为一个用户A(下文称A)进行推荐时,首先,找到和A兴趣相似的用户集合(用U表示),然后,把集合U中用户感兴趣而A没有听说过(未进行过操作)的物品推荐给A。算法分为两个步骤:首先,计算用户之间的相似度,选取最相似的N个用户,然后,根据相似度计算用户评分。

    (1)用户相似度

    用户相似度计算基于用户的协同过滤算法的重要内容,主要可以通过余弦相似度、杰卡德系数等方式进行计算。

    假设:给定用户u和v,令N(u)表示用户u有过正反馈的物品集合,令N(v)为用户v有过正反馈的物品集合,则用户u和v之间的相似度可以通过如下方式计算:

    余弦相似度:

    杰卡德系数:

    (2)用户评分

    得到用户相似度后,可以根据如下公式计算用户评分:

    其中r(u, i)代表用户u对物品i的评分,S(u)为与用户u最相似的N个用户,N(i)为对物品i进行过操作的用户集合, 为用户u与用户v的相似度, 为用户v对物品i的评分。

    UserCF的推荐结果反映了用户所在的一个兴趣群体中的热门物品,更加社会化但缺乏个性化, 能够满足物品的时效性,在新闻推荐领域能够发挥很大的作用。用户的兴趣在一段时间内是相对固定的,因此用户相似度矩阵不会实时进行更新,存在新用户的冷启动问题。

    5.1.2 基于物品的协同过滤(Item-Based CF)

    基于物品的协同过滤(下文简称ItemCF)是目前应用最为广泛的算法,该算法的基本思想为:给用户推荐和他们以前喜欢的物品相似的物品,这里所说的相似并非从物品的内容角度出发,而是基于一种假设:喜欢物品A的用户大多也喜欢物品B代表着物品A和物品B相似。基于物品的协同过滤算法能够为推荐结果做出合理的解释,比如电子商务网站中的“购买该物品的用户还购买了…”。ItemCF的计算步骤和UserCF大致相同:首先,计算物品相似度,选出最相似的N个物品,然后根据相似度计算用户评分。

    (1)物品相似度

    假设:N(i)为喜欢物品i的用户结合,N(j)为喜欢物品j的用户集合,则物品相似度计算公式可以定义为:

    上述公式将物品i和物品j的相似度定义为:同时喜欢物品i、j的用户数占只喜欢物品i用户数的比例,但如果物品j十分热门,大部分用户都很喜欢,那么就会造成所有物品都和j有较高的相似度,因此可以对计算公式进行如下改进:

    改进后的相似度计算公式惩罚了物品j的热门度,在一定程度上减少了热门物品为相似度带来的影响。

    (2)用户评分

    得到物品相似度后,可以根据如下公式计算用户评分:

    其中r(u, i)代表用户u对物品i的评分,S(i)代表和物品i最相似的N个物品,N(u)为用户u曾经感兴趣的物品集合, 为物品i和物品j的相似度, 为用户u对物品i的评分。

    ItemCF的推荐结果更加个性化,反映了用户的个人兴趣,对挖掘长尾物品有很大帮助,被广泛应用于电子商务系统。在物品数较多时,物品相似度计算效率较差,因此通常以一定的时间间隔离线进行计算,然后将物品相似度数据缓存在内存中,这样一来,便可以根据用户的新行为实时向用户做出推荐。ItemCF同样存在新用户冷启动问题。

    5.1.3 隐语义模型(Latent Factor Model)

    隐语义模型方法是目前应用最为广泛的协同过滤算法之一,在显式反馈(如评分)推荐系统中,能够达到很好的精度。它的基本思想是通过机器学习方法从用户-物品评分矩阵中分解为两个低阶矩阵,表示对用户兴趣和物品的隐含分类特征,通过隐含特征预测用户评分。训练过程中通常采用随机梯度下降(SGD)算法最小化损失函数,最后通过模型预测用户评分。矩阵分解(Matrix Factorization)是隐语义模型最成功的一种实现,假设训练数据为M个用户对N个物品的评分矩阵Rm,n,早期矩阵分解算法BasicSvd步骤如下:

    (1)给定假设函数

    其中k表示矩阵分解的隐含特征数,p和q是两个矩阵,作为模型的参数,分别表示用户、物品与k个隐含特征之间的关系。

    (2)最小化损失函数

    其中u为用户,i为物品,R为训练数据评分矩阵,H为预测评分矩阵,通过随机梯度下降最小化cost函数,得到矩阵p和q。在最小化的过程中,还需要添加正则项防止过度拟合。

    (3)通过用户、物品和隐含特征的关系矩阵p、q预测用户评分。

    在算法的演进过程中,还出现了FunkSVD[11]、SVD++等矩阵分解算法,它们在隐含特征的基础上考虑了用户评分习惯、历史访问等多种因素,在一些场景中取得了更为精确的结果。

    矩阵分解算法采用机器学习的最优化方法训练模型,计算的空间复杂度较小,在评分预测推荐中的精度较高,能够自动挖掘用户和物品的特征,有非常好的扩展性,可以灵活地考虑额外因素。矩阵分解的训练过程需要扫描整个评分矩阵,在用户量和物品数很大的情况下比较费时,但可以离线进行训练,在线进行评分预测,达到推荐的实时性。

    5.2 基于内容推荐

    基于内容推荐的基本思想是为用户推荐与他感兴趣的内容相似的物品,比如用户喜欢励志类电影,那么系统会直接为他推荐《阿甘正传》这部电影,这个过程综合考虑了用户兴趣和电影内容,因此不需要提供用户的历史行为数据,这能够很好地解决新用户的冷启动问题。基于内容推荐的关键问题是对用户兴趣特征和物品特征进行建模,主要方法由向量空间模型、线性分类、线性回归等。

    基于内容推荐需要预先提供用户和物品的特征数据,比如电影推荐系统,需要提供用户感兴趣的电影类别、演员、导演等数据作为用户特征,还需要提供电影的内容属性、演员、导演、时长等数据作为电影的特征,这些需要进行预处理的数据在实际应用中往往有很大的困难,尤其是多媒体数据(视频、音频、图像等),在预处理过程中很难对物品的内容进行准确的分类和描述,且在数据量很大的情况下,预处理效率会很低下。针对以上不足,[25]提出了基于标签的推荐方法,可以由专家或用户为物品打标签,实现对物品的分类。

    基于内容产生的推荐往往和用户已经处理的物品具有很大的相似度,不利于用户在推荐系统中获得惊喜,这也是推荐系统的一个重要研究方向。

    5.3 混合推荐

    推荐算法虽然都可以为用户进行推荐,但每一种算法在应用中都有不同的效果。UserCF的推荐结果能够很好的在广泛的兴趣范围中推荐出热门的物品,但却缺少个性化;ItemCF能够在用户个人的兴趣领域发掘出长尾物品,但却缺乏多样性;基于内容推荐依赖于用户特征和物品特征,但能够很好的解决用户行为数据稀疏和新用户的冷启动问题;矩阵分解能够自动挖掘用户特征和物品特征,但却缺乏对推荐结果的解释,因此,每种推荐方法都各有利弊,相辅相成。

    实际应用的推荐系统通常都会使用多种推荐算法,比如使用基于内容或标签的推荐算法来解决新用户的冷启动问题和行为数据稀疏问题,在拥有了一定的用户行为数据后,根据业务场景的需要综合使用UserCF、ItemCF、矩阵分解或其他推荐算法进行离线计算和模型训练,通过采集用户的社交网络数据、时间相关数据、地理数据等综合考虑进行推荐,保证推荐引擎的个性化,提高推荐引擎的健壮性、实时性、多样性和新颖性。让推荐系统更好地为用户服务。

    6. 总结和展望

    本文首先回顾了推荐系统发展的历史,并分析了当前推荐系统的研究现状,其次阐述了主要的推荐方式和推荐结果的评估指标,最后分析了主流的推荐算法以及它们各自的优缺点。

    推荐系统的发展一方面精确的匹配了用户与信息,降低了人们在信息过载时代获取信息的成本,但由推荐系统主导的内容分发,如新闻推荐等,也为用户带来了消极影响。2017年9月19日,人民日报点名批评国内知名内容分发平台今日头条,强调别以技术之名糊弄网民和群众,可见推荐系统的发展不仅需要满足用户多元化、个性化的需求,而且需要对信息进行严格的监管和过滤,提高推荐系统的健壮性。近年来,RecSys会议上越来越多地收录了关于用户隐私、推荐引擎健壮性、信息过滤等方面的论文,这是未来推荐系统发展的一个重要研究方向。

    目前,深度神经网络发展迅速,为推荐系统提供了新的特征提取、排序方法,越来越多的推荐引擎将深度神经网络与传统的推荐算法进行了结合,用于解决数据稀疏、推荐排序等问题,深度神经网络和推荐系统的结合将是推荐系统未来的主要研究方向。

    综上所述,推荐系统是一个庞大的信息系统,它不仅仅只依赖于推荐引擎的工作,而且依赖于业务系统、日志系统等诸多方面,并结合了网络安全、数据挖掘等多个研究领域,能够为企业和用户带来价值,是一个值得深入研究的领域。

    参考文献

    [1] Resnick P,Iacovou N, Suchak M, et al. GroupLens: an open architecture for collaborativefiltering of netnews[C] Proceedings of the 1994 ACM Conference on ComputerSupported Cooperative Work, Oct 22-26, 1994. New York, NY, USA: ACM, 1994:175-186.

    [2] Resnick P, Varian H R. Recommender systems[J].Communications of the ACM, 1997, 40(3): 56-58.

    [3] G. Linden, B. Smith, and J. York, “Amazon.comRecommendations: Item-to-Item Collaborative Filtering,” IEEE InternetComputing, vol. 7, no. 1, 2003, pp. 76–80.

    [4] Linden G, Smith B, York J. Amazon.comrecommendations: item-to-item collaborative filtering[J]. IEEE Internet Computing,2003, 7(1): 76-80.

    [5] Adomavicius G, Tuzhilin A. Toward the nextgeneration of recommender systems: a survey of the state-of-the-art and possibleextensions[J]. IEEE Transactions on Knowledge and Data Engineering, 2005,17(6): 734-749.

    [6] Cremonesi P, Tripodi A, Turrin R. Cross-DomainRecommender Systems.[C] IEEE, International Conference on Data MiningWorkshops. IEEE, 2012:496-503.

    [7] Huiji Gao, Jiliang Tang, Huan Liu. Personalizedlocation recommendation on location-based social networks[J]. 2014:399-400.

    [8] Said A. Replicable Evaluation of RecommenderSystems[C] ACM Conference on Recommender Systems. ACM, 2015:363-364.

    [9] Hopfgartner F, Kille B, Heintz T, et al.Real-time Recommendation of Streamed Data[C] ACM Conference on RecommenderSystems. ACM, 2015:361-362.

    [10] Karatzoglou A, Hidasi B. Deep Learning forRecommender Systems[C] the Eleventh ACM Conference. ACM, 2017:396-397.

    [11] Simon Funk. Funk-SVD [EB/OL]. http://sifter.org/~simon/journal/20061211.html,2006-12-11

    [12] 朱扬勇, 孙婧. 推荐系统研究进展[J]. 计算机科学与探索, 2015, 9(5):513-525.

    [13] 杨阳, 向阳, 熊磊. 基于矩阵分解与用户近邻模型的协同过滤推荐算法[J]. 计算机应用, 2012,32(2):395-398.

    [14] 项亮. 推荐系统实践[M]. 北京: 人民邮电出版社, 2012.

    展开全文
  • 协同过滤算法是推荐系统中最重要也是最常用的算法之一,本课程以项目实现为主,讲解基于商品的协同过滤算法应用,通过不断对算法进行优化,提升推荐结果的准确率与召回率。
  • 推荐系统总结

    万次阅读 多人点赞 2018-09-02 17:43:47
    一、推荐系统结构 二、推荐引擎算法(Algorithm) 1、协同过滤推荐算法 1.1 关系矩阵与矩阵计算 1.1.1 用户与用户(U-U矩阵) 1.1.2 物品与物品(V-V矩阵) 1.1.3 用户与物品(U-V矩阵) 1.1.4 奇异值分解(SVD) ...

    一、推荐系统结构


    尽管不同的网站使用不同的推荐系统,但是总的来说,几乎所有的推荐系统的结构都是类似的,都由线上和线下两部分组成。线下部分包括后台的日志系统和推荐算法系统,线上部分就是我们看到的前台页面展示。线下部分通过学习用户资料和行为日志建立模型,在新的上下文背景之下,计算相应的推荐内容,呈现于线上页面中。

    二、推荐引擎算法(Algorithm)

    1、协同过滤推荐算法

    1.1 关系矩阵与矩阵计算

    1.1.1 用户与用户(U-U矩阵)

    使用原理:Pearson相关系数主要用于度量两个变量 i 和 j 之间的相关性,取值范围是+1(强正相关)到-1(强负相关)

    算法输入:用户行为日志。
    算法输出:基于协同的用户相似度矩阵。

    A. 从用户行为日志中获取用户与物品之间的关系数据,即用户对物品的评分数据。
    B. 对于n个用户,依次计算用户1与其他n-1个用户的相似度;再计算用户2与其他n-2个用户的相似度。
    对于其中任意两个用户 i 和 j :

    a) 查找两个用户共同评价过的物品集;
    b) 分别计算用户 i 和对物品 j 的平均评价和;
    c) 计算用户间相似度,得到用户 i 和 j 的相似度。

    C. 将计算得到的相似度结果存储于数据库中。

    1.1.2 物品与物品(V-V矩阵)

    使用原理:将物品的评价数值抽象为n维用户空间中的列向量 和,使用修正的余弦相似度

    算法输入:用户行为日志。
    算法输出:基于协同的物品相似度矩阵。

    A. 从用户行为日志中获取用户与物品之间的关系数据,即用户对物品的评分数据。
    B.对于n个物品,依次计算物品1与其他n-1个物品的相似度;再计算物品2与其他n-2个物品的相似度。
    对于其中任意两个物品 i 和 j:

    a)查找对物品 i 和 j 共同评价过的用户集;
    b)分别计算用户对物品 i 和 j 的平均评价和;
    c) 计算物品间相似度,得到物品 i 和 j 的相似度。

    C. 将计算得到的相似度结果存储于数据库中。

    1.1.3 用户与物品(U-V矩阵)

    1.1.4 奇异值分解(SVD)

    SVD将给定矩阵分解为3个矩阵的乘积:

    式中,矩阵为对角阵,其对角线上的值 为矩阵M的奇异值,按大小排列,代表着矩阵M的重要特征。将SVD用在推荐系统上,其意义是将一个系数的评分矩阵M分解为表示用户特性的U矩阵,表示物品特性的V矩阵,以及表示用户和物品相关性的矩阵。

    1.1.5 主成分分析(PCA)

    在推荐系统中,对于有较多属性的物品(物品的信息用向量 表示)可用PCA处理进行降维,将m×n的物品矩阵转化为m×k的新矩阵。
    主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

    目标:PCA目标是使用使用另一组基去重新描绘得到的数据空间,新的基要尽可能揭示原有数据的关系。
    本质:实际上是K-L变换(卡洛南-洛伊(Karhunen-Loeve)变换),又名:最优正交变换

    有了K-L变换(最优正交变换 )的知识做铺垫后,接下来提供PCA具体的计算过程
    1、数据标准化
    为什么要进行数据标准化,最主要的原因是消除量纲(即单位)带来的差异。常见的数据标准化方法有 0-1标准化,最大最小标准化。
    2、计算协方差矩阵
    设标准化的数据矩阵为X,则协方差矩阵cov(X,X)=1nXTX
    3、求取协方差矩阵的特征值和特征向量
    在matlab或者python里面都有相应的求特征值和特征向量的函数
    4、对特征值从大到小排序,依据主元贡献率贺主元个数得到相应的的特征向量

    1.2 基于记忆的协同过滤算法

    1.2.1 基于用户的协同过滤算法


    举个简单的例子,我们知道樱桃小丸子喜欢葡萄、草莓、西瓜和橘子,而我们通过某种方法了解到小丸子和花伦有相似的喜好,所以我们会把小丸子喜欢的而花伦还未选择的水果(葡萄和橘子)推荐给花伦。

    基于用户的协同过滤算法主要包含以下两个步骤:

    A. 搜集用户和物品的历史信息,计算用户u和其他用户的相似度,找到和目标用户Ui兴趣相似的用户集合N(u)

    B.找到这个集合中用户喜欢的,且目标用户还没有听说过的物品推荐给目标用户。

    适用性

    由于需计算用户相似度矩阵,基于用户的协同过滤算法适用于用户较少的场合; 由于时效性较强,该方法适用于用户个性化兴趣不太明显的领域。

    1.2.2 基于物品的协同过滤算法

    基于物品的协同过滤算法是目前业界应用最多的算法。无论是亚马逊网,还是Netflix、Hulu、Youtube,其推荐算法的基础都是该算法。

    基于物品的协同过滤算法给用户推荐那些和他们之前喜欢的物品相似的物品。比如,我们知道樱桃小丸子和小玉都喜欢葡萄和西瓜,那么我们就认为葡萄和西瓜有较高的相似度,在花伦选择了西瓜的情况下,我们会把葡萄推荐给花伦。

    ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。

    基于物品的协同过滤算法主要分为两步:

    A.对于目标用户及其待评分的物品,根据用户对物品的历史偏好数据,计算物品与其他已评分物品之间的相似度 Sim(j,i),找到与物品相似度的物品合集N(u);

    B. 根据所有物品 N(u) 的评分情况,选出N(u)中目标用户可能喜欢的且没有观看过的推荐给目标用户并预测评分。

    适用性

    适用于物品数明显小于用户数的场合; 长尾物品丰富,用户个性化需求强烈的领域。

    U-CF与I-CF比较

    1.3 基于模型的协同过滤算法

    1.3.1 基于隐语义模型的协同过滤算法(LFM)

    主要用于:填充用户打分矩阵的缺失值
    思路来源:应该有一些隐藏的因素(不一定是人可以理解的)影响用户的评分,找到隐藏因子,可以对U和I进行关联;假定隐藏因子的个数小于U和I的数目,,因为如果每个User都关联一个独立的隐藏因子,那就没法预测了;



    其实是使用ALS(交替最小二乘法)


    隐语义模型的进一步优化(例如y=kx+b比y=kx拥有更好的拟合能力)

    离线计算的空间复杂度

    基于邻域的方法需要维护一张离线的相关表。在离线计算相关表的过程中,如果用户/物品数很多,将会占据很大的内存。而LFM在建模过程中,可以很好地节省离线计算的内存。

    离线计算的时间复杂度

    在一般情况下,LFM的时间复杂度要稍微高于UserCF和ItemCF,这主要是因为该算法需要多次迭代。但总体上,这两种算法在时间复杂度上没有质的差别。

    在线实时推荐

    UserCF和ItemCF在线服务算法需要将相关表缓存在内存中,然后可以在线进行实时的预测。LFM在给用户生成推荐列表时,需要计算用户对所有物品的兴趣权重,然后排名,不太适合用于物品数非常庞大的系统,如果要用,我们也需要一个比较快的算法给用户先计算一个比较小的候选列表,然后再用LFM重新排名。另一方面,LFM在生成一个用户推荐列表时速度太慢,因此不能在线实时计算,而需要离线将所有用户的推荐结果事先计算好存储在数据库中。因此,LFM不能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化。

    推荐解释

    ItemCF算法支持很好的推荐解释,它可以利用用户的历史行为解释推荐结果。但LFM无法提供这样的解释,它计算出的隐类虽然在语义上确实代表了一类兴趣和物品,却很难用自然语言描述并生成解释展现给用户。

    1.3.2 基于朴素贝叶斯分离的推荐算法

    贝叶斯

    适用性

    朴素贝叶斯分类实现起来比较简单,准确率高,但是分类的时候需要学习全部样本的信息。因此,朴素贝叶斯分类适用于数据量不大,类别较少的分类问题。

    2、基于内容的推荐算法(CB)

    2.1 基础CB推荐算法

    基础CB推荐算法利用物品的基本信息和用户偏好内容的相似性进行物品推荐。通过分析用户已经浏览过的物品内容,生成用户的偏好内容,然后推荐与用户感兴趣的物品内容相似度高的其他物品。

    比如,用户近期浏览过冯小刚导演的电影“非诚勿扰”,主演是葛优;那么如果用户没有看过“私人订制”,则可以推荐给用户。因为这两部电影的导演都是冯小刚,主演都有葛优。

    算法流程

    算法输入:物品信息,用户行为日志。
    算法输出:初始推荐结果。

    A.物品表示:每个物品使用特征向量表示;
    B. 从用户行为日志中,获取该用户所浏览、收藏、评价、分享的物品集合M,根据物品集合M中物品的特征数据,可以学到用户的内容偏好;
    C.保存Top-K个物品到初始推荐结果中。

    适用场景

    适用于基础CB架构的搭建,尤其是对新上线物品会马上被推荐非常有效,被推荐的机会与老的物品是相同的。

    2.2 基于TF-IDF的CB推荐算法

    TF-IDF在CB推荐算法中的应用于在CF推荐算法中的应用极为相似,唯一不同的是:
    CF推荐算法中的KNN是根据用户对物品的评分来计算物品间相似度的,而TF-IDF在CB推荐算法是根据【物品的词语的TF-ID值构成的向量】来计算相似度的;

    TF-IDF是自然语言处理领域中计算文档中词或短语的权值的方法,是词频(Term Frequency, TF)和逆转文档频率(Inverse Document Frequency, IDF)的乘积。
    TF指的是某一个给定的词语在该文件中出现的次数,IDF是一个词语普遍重要性的度量;

    算法原理

    TF-IDF算法基于这样一个假设:若一个词语在目标文档中出现的频率高而在其他文档中出现的频率低,那么这个词语就可以用来区分出目标文档。

    算法流程

    算法输入:物品信息,用户行为日志。
    算法输出:初始推荐结果。

    A. 物品表示:向量表示 描述物品的词语的TF-IDF值;
    B.使用上面的向量计算物品的相似度,保存Top-K个物品到初始推荐结果中;
    C. 从用户行为日志中,获取该用户所浏览、收藏、评价、分享的物品集合M,根据物品集合M中物品的特征数据,可以学到用户的内容偏好;
    例如:

    2.3 基于KNN的CB推荐算法

    KNN在CB推荐算法中的应用于在CF推荐算法中的应用极为相似,唯一不同的是:
    CF推荐算法中的KNN是根据用户对物品的评分来计算物品间相似度的,而CB推荐算法中KNN是根据物品画像来计算相似度的;
    所以对于后者来说,如何通过物品画像来计算物品间的相似度是算法中的关键步骤。
    相似度的计算可以使用余弦相似度或Pearson相关系数的计算方法。

    2.4 基于Rocchio的CB推荐算法

    2.5 基于决策树的CB推荐算法

    基于决策树的推荐算法在训练阶段会生成一个显示的决策模型。决策树可以通过训练数据构建并有效判断一个新的物品是否可能受到欢迎。当物品的特征属性较少时,采用决策树算法能够取得不错的效果,另外,决策树学习的思想也比较容易被理解,在物品推荐时的可解释性较好。

    2.6 基于线性分类的CB推荐算法

    将基于内容的物品推荐问题视为分类问题时,可以采用多种机器学习方法。从一个更抽象的角度上看,大部分学习方法致力于找到一个可以准确区分用户喜欢和不喜欢的物品的线性分类模型系数。

    将物品数据用n维特征向量来表示,线性分类器试图在给定的物品特征空间中找到一个能够将物品正确分类的平面,一类点尽可能在平面的某一边(喜欢),另一类在平面的另一边(不喜欢)。

    2.7 基于朴素贝叶斯的CB推荐算法

    3、 基于知识的推荐算法

    3.1 概述

    基于知识(Knowledge-based, KB)的推荐算法,是区别于基于CB和基于CF的常见推荐方法。如果说CB和CF像通用搜索引擎的话,KB好比某个领域的垂直搜索引擎,可以提供该领域的特殊需求,包括专业性的优质特征,帮助提高搜索引擎在特定领域的服务。
    基于知识的推荐,也更容易满足主观个性化需求。例如,对于VIP用户,如果配置好了偏好,就可以为其提供更加精准的推荐服务。

    3.2 约束知识与约束推荐算法

    如今网上购物所能涵盖的物品越来越丰富,人们逐渐发现推荐系统的CF和CB推荐算法并不能很好地适应某些特殊物品的推荐需求。例如,更新换代非常快的而人们又通常不会经常更换的电子产品。对于这些产品来说,其各方面的性能参数在几年间就会有很大变化,代表历史偏好的用户画像并不能很好地反映用户当前的购买需求,于是就需要推荐系统将用户当前的需求作为重要信息参考源。
    人们发现可以利用物品的参数特征等属性形成约束知识,再将用户对物品的特定刻画为约束条件,然后经过对物品集合的约束满足问题的求解,就可以得到用户所期望的物品了。

    创建推荐任务

    推荐任务是以元组(R,I)的形式表示出来,其中用集合 R 表示目标用户对物品的特定需求,即对物品的约束条件,用集合 I 表示一个物品集合。推荐的任务就是从集合 I 中确定出能够满足集合 R 要求的物品。

    3.3 关联知识与关联推荐算法

    算法原理

    关联知识以关联规则为表现形式,用以描述数据库中数据之间关联性的知识。在推荐系统领域,可以通过对用户画像中关联规则的挖掘分析来分析用户的习惯,发现物品之间的关联性,并利用这种关联性指导系统做出推荐。

    算法流程

    算法输入:n个用户画像。
    算法输出:针对目标用户u的Top-N推荐列表。

    A. 从系统中的n个用户画像中挖掘出所有的强关联规则,建立集合以表示目标用户u尚未观看但极有可能感兴趣的物品。

    B.再次使用置信度对集合中的物品进行高低排序。

    C.取出排序列表中的前N个物品构成Top-N推荐列表。

    适用场景

    由于对系统中全体用户的画像进行规则关联挖掘意义不明显且计算量大,所以基于关联规则的推荐算法常与CF推荐算法混合使用。在这类混合方案中,使用了CF推荐算法中的最近邻算法将用户画像数目n限定在目标用户的最邻近范围内,使得关联规则挖掘算法处理的数据规模被有针对性地限定在一定范围内。

    4、 混合推荐算法

    各种推荐方法都有优缺点,为了扬长补短,在实际中常常采用混合推荐。
    研究和应用最多的是内容推荐和协同过滤推荐的组合。最简单的做法就是分别用基于内容的方法和协同过滤推荐方法去产生一个推荐预测结果,然后用某方法组合其结果。
    组合推荐一个最重要原则就是通过组合后要能避免或弥补各自推荐技术的弱点。

    4.1 加权式

    加权多种推荐技术结果:

    4.2 切换式

    根据问题背景和实际情况或要求决定变换采用不同的推荐技术。

    4.3 混杂式

    同时采用多种推荐技术给出多种推荐结果为用户提供参考。

    4.4 特征组合


    4.5 特征补充

    一种技术产生附加的特征信息嵌入到另一种推荐技术的特征输入中。

    4.6 级联式

    三、推荐系统评估

    1、打分系统-评分误差率

    2、Top-N推荐系统

    2.1 准确率

    2.2 召回率

    2.3、覆盖率

    2.4、多样性

    2.5、其他(新颖度、惊喜度、信任度、实时性)

    展开全文
  • 推荐系统核心精讲

    千人学习 2020-07-20 10:39:10
    本课程是推荐系统的入门课程,主要从推荐系统背景介绍、推荐算法、推荐系统工程、推荐产品形态、实战等五个部分对推荐系统做初略的介绍。在背景介绍部分,会讲解推荐系统的技能要求、推荐系统的价值与应用场景、推荐...
  •  最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的:    而对于刚接触这个领域的我来说,是这样的:    在深坑外围徘徊了一周后,我整理了一些...

      ◆ ◆ ◆

      序言

      最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的:

      

      而对于刚接触这个领域的我来说,是这样的:

      

      在深坑外围徘徊了一周后,我整理了一些推荐系统的基本概念以及一些有代表性的简单的算法,作为初探总结,也希望能抛砖引玉,给同样想入坑的伙伴们提供一些思路。

      ◆ ◆ ◆

      什么是推荐系统

      1. 什么是推荐系统?

      推荐系统是啥?

      如果你是个多年电商(剁手)党,你会说是这个:

      

      如果你是名充满文艺细胞的音乐发烧友,你会答这个:

      

      如果你是位活跃在各大社交平台的点赞狂魔,你会答这个:

      

      没错,猜你喜欢、个性歌单、热点微博,这些都是推荐系统的输出内容。从这些我们就可以总结出,推荐系统到底是做什么的。

      目的1. 帮助用户找到想要的商品(新闻/音乐/……),发掘长尾

      帮用户找到想要的东西,谈何容易。商品茫茫多,甚至是我们自己,也经常点开淘宝,面对眼花缭乱的打折活动不知道要买啥。在经济学中,有一个著名理论叫长尾理论(The Long Tail)。

      

      套用在互联网领域中,指的就是最热的那一小部分资源将得到绝大部分的关注,而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费,也让很多口味偏小众的用户无法找到自己感兴趣的内容。

      目的2. 降低信息过载

      互联网时代信息量已然处于爆炸状态,若是将所有内容都放在网站首页上用户是无从阅读的,信息的利用率将会十分低下。因此我们需要推荐系统来帮助用户过滤掉低价值的信息。

      目的3. 提高站点的点击率/转化率

      好的推荐系统能让用户更频繁地访问一个站点,并且总是能为用户找到他想要购买的商品或者阅读的内容。

      目的4. 加深对用户的了解,为用户提供定制化服务

      可以想见,每当系统成功推荐了一个用户感兴趣的内容后,我们对该用户的兴趣爱好等维度上的形象是越来越清晰的。当我们能够精确描绘出每个用户的形象之后,就可以为他们定制一系列服务,让拥有各种需求的用户都能在我们的平台上得到满足。

      ◆ ◆ ◆

      推荐算法

      算法是什么?我们可以把它简化为一个函数。函数接受若干个参数,输出一个返回值。

      

      算法如上图,输入参数是用户和item的各种属性和特征,包括年龄、性别、地域、商品的类别、发布时间等等。经过推荐算法处理后,返回一个按照用户喜好度排序的item列表。

      推荐算法大致可以分为以下几类[1]:

    • 基于流行度的算法

    • 协同过滤算法

    • 基于内容的算法

    • 基于模型的算法

    • 混合算法

      2.1 基于流行度的算法

      基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。

      

      这种算法的优点是简单,适用于刚注册的新用户。缺点也很明显,它无法针对用户提供个性化的推荐。基于这种算法也可做一些优化,比如加入用户分群的流行度排序,例如把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

      2.2 协同过滤算法

      协同过滤算法(Collaborative Filtering, CF)是很常用的一种算法,在很多电商网站上都有用到。CF算法包括基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。

      基于用户的CF原理如下:

    1. 分析各个用户对item的评价(通过浏览记录、购买记录等);

    2. 依据用户对item的评价计算得出所有用户之间的相似度;

    3. 选出与当前用户最相似的N个用户;

    4. 将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。

      示意图如下:

      

      基于物品的CF原理大同小异,只是主体在于物品:

    1. 分析各个用户对item的浏览记录。

    2. 依据浏览记录分析得出所有item之间的相似度;

    3. 对于当前用户评价高的item,找出与之相似度最高的N个item;

    4. 将这N个item推荐给用户。

      示意图如下:

      

      举个栗子,基于用户的CF算法大致的计算流程如下:

      首先我们根据网站的记录计算出一个用户与item的关联矩阵,如下:

      

      

      图中,行是不同的用户,列是所有物品,(x, y)的值则是x用户对y物品的评分(喜好程度)。我们可以把每一行视为一个用户对物品偏好的向量,然后计算每两个用户之间的向量距离,这里我们用余弦相似度来算:

      

      然后得出用户向量之间相似度如下,其中值越接近1表示这两个用户越相似:

      

      最后,我们要为用户1推荐物品,则找出与用户1相似度最高的N名用户(设N=2)评价的物品,去掉用户1评价过的物品,则是推荐结果。

      基于物品的CF计算方式大致相同,只是关联矩阵变为了item和item之间的关系,若用户同时浏览过item1和item2,则(1,1)的值为1,最后计算出所有item之间的关联关系如下:

      

      我们可以看到,CF算法确实简单,而且很多时候推荐也是很准确的。然而它也存在一些问题:

    1. 依赖于准确的用户评分;

    2. 在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;

    3. 冷启动问题。当有一名新用户或者新物品进入系统时,推荐将无从依据;

    4. 在一些item生存周期短(如新闻、广告)的系统中,由于更新速度快,大量item不会有用户评分,造成评分矩阵稀疏,不利于这些内容的推荐。

      对于矩阵稀疏的问题,有很多方法来改进CF算法。比如通过矩阵因子分解(如LFM),我们可以把一个nm的矩阵分解为一个nk的矩阵乘以一个k*m的矩阵,如下图:

      

      这里的k可以是用户的特征、兴趣爱好与物品属性的一些联系,通过因子分解,可以找到用户和物品之间的一些潜在关联,从而填补之前矩阵中的缺失值。

      2.3 基于内容的算法

      CF算法看起来很好很强大,通过改进也能克服各种缺点。那么问题来了,假如我是个《指环王》的忠实读者,我买过一本《双塔奇兵》,这时库里新进了第三部:《王者归来》,那么显然我会很感兴趣。然而基于之前的算法,无论是用户评分还是书名的检索都不太好使,于是基于内容的推荐算法呼之欲出。

      举个栗子,现在系统里有一个用户和一条新闻。通过分析用户的行为以及新闻的文本内容,我们提取出数个关键字,如下图:

      

      将这些关键字作为属性,把用户和新闻分解成向量,如下图:

      

      之后再计算向量距离,便可以得出该用户和新闻的相似度了。这种方法很简单,如果在为一名热爱观看英超联赛的足球迷推荐新闻时,新闻里同时存在关键字体育、足球、英超,显然匹配前两个词都不如直接匹配英超来得准确,系统该如何体现出关键词的这种“重要性”呢?这时我们便可以引入词权的概念。在大量的语料库中通过计算(比如典型的TF-IDF算法),我们可以算出新闻中每一个关键词的权重,在计算相似度时引入这个权重的影响,就可以达到更精确的效果。

      sim(user, item) = 文本相似度(user, item) * 词权

      然而,经常接触体育新闻方面数据的同学就会要提出问题了:要是用户的兴趣是足球,而新闻的关键词是德甲、英超,按照上面的文本匹配方法显然无法将他们关联到一起。在此,我们可以引用话题聚类:

      

      利用word2vec一类工具,可以将文本的关键词聚类,然后根据topic将文本向量化。如可以将德甲、英超、西甲聚类到“足球”的topic下,将lv、Gucci聚类到“奢侈品”topic下,再根据topic为文本内容与用户作相似度计算。

      综上,基于内容的推荐算法能够很好地解决冷启动问题,并且也不会囿于热度的限制,因为它是直接基于内容匹配的,而与浏览记录无关。然而它也会存在一些弊端,比如过度专业化(over-specialisation)的问题。这种方法会一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。

      2.4 基于模型的算法

      基于模型的方法有很多,用到的诸如机器学习的方法也可以很深,这里只简单介绍下比较简单的方法——Logistics回归预测。我们通过分析系统中用户的行为和购买记录等数据,得到如下表:

      

      表中的行是一种物品,x1~xn是影响用户行为的各种特征属性,如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度,可以是购买记录、浏览、收藏等等。通过大量这类的数据,我们可以回归拟合出一个函数,计算出x1~xn对应的系数,这即是各特征属性对应的权重,权重值越大则表明该属性对于用户选择商品越重要。

      在拟合函数的时候我们会想到,单一的某种属性和另一种属性可能并不存在强关联。比如,年龄与购买护肤品这个行为并不呈强关联,性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时,它们便和购买行为产生了强关联。比如(我只是比如),20~30岁的女性用户更倾向于购买护肤品,这就叫交叉属性。通过反复测试和经验,我们可以调整特征属性的组合,拟合出最准确的回归函数。最后得出的属性权重如下:

      

      基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。

      2.5 混合算法

      现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。

      2.6 结果列表

      在算法最后得出推荐结果之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;若数次推荐后用户依然对某个item毫无兴趣,我们就需要将这个item降低权重,调整排序;另外,有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。

      ◆ ◆ ◆

      推荐结果评估

      当推荐算法完成后,怎样来评估这个算法的效果?CTR(点击率)、CVR(转化率)、停留时间等都是很直观的数据。在完成算法后,可以通过线下计算算法的RMSE(均方根误差)或者线上进行ABTest来对比效果。

      ◆ ◆ ◆

      改进策略

      用户画像是最近经常被提及的一个名词,引入用户画像可以为推荐系统带来很多改进的余地,比如:

    1. 打通公司各大业务平台,通过获取其他平台的用户数据,彻底解决冷启动问题;

    2. 在不同设备上同步用户数据,包括QQID、设备号、手机号等;

    3. 丰富用户的人口属性,包括年龄、职业、地域等;

    4. 更完善的用户兴趣状态,方便生成用户标签和匹配内容。

      另外,公司的优势——社交平台也是一个很好利用的地方。利用用户的社交网络,可以很方便地通过用户的好友、兴趣群的成员等更快捷地找到相似用户以及用户可能感兴趣的内容,提高推荐的准确度。

      ◆ ◆ ◆

      总结

      随着大数据和机器学习的火热,推荐系统也将愈发成熟,需要学习的地方还有很多,坑还有很深,希望有志的同学共勉~

    展开全文
  • 前面几章介绍了各种各样的数据和基于这些...本章将首先介绍推荐系统的外围架构,然后介绍推荐系统的架构,并对架构中每个模块的设计进行深入讨论。 1、外围框架 一般来说,每个网站都会有一个UI系统,UI系统负责...

    前面几章介绍了各种各样的数据和基于这些数据的推荐算法。在实际系统中,前面几章提到的数据大都存在,因此如何设计一个真实的推荐系统处理不同的数据,根据不同的数据设计算法,并将这些算法融合到一个系统当中是本章讨论的主要问题。本章将首先介绍推荐系统的外围架构,然后介绍推荐系统的架构,并对架构中每个模块的设计进行深入讨论。

     

    1、外围框架

    一般来说,每个网站都会有一个UI系统,UI系统负责给用户展示网页并和用户交互。

    网站会通过日志系统将用户在UI上的各种各样的行为记录到用户行为日志中。日志可能存储在内存缓存里,也可能存储在数据库中,也可能存储在文件系统中。

    而推荐系统通过分析用户的行为日志,给用户生成推荐列表,最终展示到网站的界面上。

     

    从上面的结构可以看到,推荐系统要发挥强大的作用,除了推荐系统本身,主要还依赖于两个条件——界面展示和用户行为数据。

     通过一定方式展示物品,主要包括物品的标题、缩略图和介绍等。
     很多推荐界面都提供了推荐理由,理由可以增加用户对推荐结果的信任度。
     推荐界面还需要提供一些按钮让用户对推荐结果进行反馈,这样才能让推荐算法不断改善用户的个性化推荐体验。
    在设计推荐界面时,我们可以综合考虑其他网站的设计并结合自己网站的特点。

    数据收集和存储

    个性化推荐算法依赖于用户行为数据,而在任何一个网站中都存在着各种各样的用户行为数据。那么如何存取这些数据就是推荐系统需要解决的首要问题。表7-1展示了一个假想的电子商务网站上的典型用户行为数据。如表所示,从产生行为的用户角度看,有些行为是只有注册用户才能产生的,而有些行为是所有用户都可以产生的。从规模上看,浏览网页、搜索记录的规模都很大,因为这种行为所有用户都能产生,而且平均每个用户都会产生很多这些行为。

    购买、收藏行为规模中等,因为只有注册用户才能产生这种行为,但购买行为又是电商网站的主要行为,所以它们相对于评论来说规模更大,但相对于网页浏览行为来说规模要小得多,最后剩下的行为是注册用户里的一小部分人才有的,所以规模不会很大。从实时存取的角度上看,购买、收藏、评论、评分、分享等行为都是需要实时存取的,因为只要用户有了这些行为,界面上就需要体现出来,比如用户购买了商品后,用户的个人购买列表中就应立即显示用户购买的商品。而有些行为,比如浏览网页的行为和搜索行为并不需要实时存取。

     

    推荐系统架构

    根据上面的抽象,可以设计一种基于特征的推荐系统架构。如图7-3所示,当用户到来之后,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。

    因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。

     

    用户的特征种类非常多,主要包括如下几类。
     人口统计学特征 包括用户的年龄、性别、国籍和民族等用户在注册时提供的信息。

     用户的行为特征 包括用户浏览过什么物品、收藏过什么物品、给什么物品打过什么样的分数等用户行为相关的特征。同时,用户行为从时间上也可以分为用户近期的行为和长期的行为。

     用户的话题特征 可以根据用户的历史行为利用话题模型(topic model)将电视剧和电影聚合成不同的话题,并且计算出每个用户对什么话题感兴趣。比如用户如果看了《叶问》、《新龙门客栈》和《醉拳》,那么可以认为用户对“香港武侠电影”这个话题感兴趣。

    推荐系统的推荐任务也有很多种,如下所示。
     将最新加入的物品推荐给用户。
     将商业上需要宣传的物品推荐给用户。
     给用户推荐不同种类的物品,比如亚马逊会推荐图书、音像、电子产品和服装等。

     给用户混合推荐,有时需要将图书和音像制品放到一个推荐列表中展示给用户。
     对于不同的产品推荐不同新颖度的物品。比如在首页给用户展示比较热门的推荐结果,在推荐系统页面给用户展示长尾中的物品。
     考虑到用户访问推荐系统的上下文,比如当你在豆瓣音乐找到“李宗盛”时,右侧会有一个链接告诉你可以在豆瓣电台收听“李宗盛”。单击了这个链接后,豆瓣电台给你推荐的音乐就考虑了“李宗盛”这个上下文。

    如果要在一个系统中把上面提到的各种特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。

     

    两个好处:
     可以方便地增加/删除引擎,控制不同引擎对推荐结果的影响。对于绝大多数需求,只需要通过不同的引擎组合实现。
     可以实现推荐引擎级别的用户反馈。每一个推荐引擎其实代表了一种推荐策略,而不同的用户可能喜欢不同的推荐策略。有些用户可能喜欢利用他的年龄性别作出的推荐,有些用户可能比较喜欢看到新加入的和他兴趣相关的视频,有些用户喜欢比较新颖的推荐,有些用户喜欢专注于一个邻域的推荐,有些用户喜欢多样的推荐。我们可以将每一种策略都设计成一个推荐引擎,然后通过分析用户对推荐结果的反馈了解用户比较喜欢哪些引擎推荐出来的结果,从而对不同的用户给出不同的引擎组合权重。
    将推荐系统拆分成不同推荐引擎后,如何设计一个推荐引擎变成了推荐系统设计的核心部分。

     

    3、推荐引擎的架构

    推荐引擎架构主要包括3部分。
     该部分负责从数据库或者缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量。不过如果是使用非行为特征,就不需要使用行为提取和分析模块了。该模块的输出是用户特征向量。
     该部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
     该部分负责对初始的推荐列表进行过滤、排名等处理,从而生成最终的推荐结果。

     

    1)生成用户特征向量

    一般来说,用户的特征包括两种,一种是用户的注册信息中可以提取出来的,主要包括用户的人口统计学特征。除了这种特征,另一种特征主要是从用户的行为中计算出来的,本节着重讨论如何生成特征。
    一个特征向量由特征以及特征的权重组成,在利用用户行为计算特征向量时需要考虑以下因素:

     用户行为的种类 在一个网站中,用户可以对物品产生很多不同种类的行为。用户可以浏览物品、单击物品的链接、收藏物品、给物品打分、购买物品、评论物品、给物品打上不同的标签、和好友分享物品、搜索不同的关键词等。这些行为都会对物品特征的权重产生影响,但不同行为的影响不同,大多时候很难确定什么行为更加重要,一般的标准就是用户付出代价越大的行为权重越高。比如,购买物品需要用户掏钱,所以用户一定会三思而后行,因此购买行为最为重要。相反,浏览物品的网页代价很小,所以这种行为对反映用户的真实兴趣的影响很小。
     用户行为产生的时间 一般来说,用户近期的行为比较重要,而用户很久之前的行为相对比较次要。因此,如果用户最近购买过某一个物品,那么这个物品对应的特征将会具有比较高的权重。

     用户行为的次数 有时用户对一个物品会产生很多次行为。比如用户会听一首歌很多次,看一部电视剧的很多集等。因此用户对同一个物品的同一种行为发生的次数也反映了用户对物品的兴趣,行为次数多的物品对应的特征权重越高。

     物品的热门程度 如果用户对一个很热门的物品产生了行为,往往不能代表用户的个性,因为用户可能是在跟风,可能对该物品并没有太大兴趣,特别是在用户对一个热门物品产生了偶尔几次不重要的行为(比如浏览行为)时,就更说明用户对这个物品可能没有什么兴趣,可能只是因为这个物品的链接到处都是,很容易点到而已。反之,如果用户对一个不热门的物品产生了行为,就说明了用户的个性需求。因此,推荐引擎在生成用户特征时会加重不热门物品对应的特征的权重。

     

    2)特征—物品相关推荐

    在得到用户的特征向量后,我们可以根据离线的相关表得到初始的物品推荐列表。离线相关表可以存储在MySQL中,其存储格式如表7-2所示。

    从上面的架构图可以看到,特征—物品相关推荐模块还可以接受一个候选物品集合。候选物品集合的目的是保证推荐结果只包含候选物品集合中的物品。

    3)  过滤模块

    在得到初步的推荐列表后,还不能把这个列表展现给用户,首先需要按照产品需求对结果进行过滤,过滤掉那些不符合要求的物品。

    一般来说,过滤模块会过滤掉以下物品。
     用户已经产生过行为物品 因为推荐系统的目的是帮助用户发现物品,因此没必要给用户推荐他已经知道的物品,这样可以保证推荐结果的新颖性。
     候选物品以外的物品 候选物品集合一般有两个来源,一个是产品需求。比如在首页可能要求将新加入的物品推荐给用户,因此需要在过滤模块中过滤掉不满足这一条件的物品。

    另一个来源是用户自己的选择,比如用户选择了某一个价格区间,只希望看到这个价格区间内的物品,那么过滤模块需要过滤掉不满足用户需求的物品。
     某些质量很差的物品 为了提高用户的体验,推荐系统需要给用户推荐质量好的物品,那么对于一些绝大多数用户评论都很差的物品,推荐系统需要过滤掉。这种过滤一般以用户的历史评分为依据,比如过滤掉平均分在2分以下的物品。

     

    4) 排名模块

    经过过滤后的推荐结果直接展示给用户一般也没有问题,但如果对它们进行一些排名,则可以更好地提升用户满意度,一般排名模块需要包括很多不同的子模块,下面将对不同的模块分别加以介绍。
    1. 新颖性排名

    新颖性排名模块的目的是给用户尽量推荐他们不知道的、长尾中的物品。

    对热门物品进行降低权重可以提高推荐的新颖度.

    2. 多样性
    多样性也是推荐系统的重要指标之一。增加多样性可以让推荐结果覆盖尽可能多的用户兴趣。

    第一种提高多样性的方法是将推荐结果按照某种物品的内容属性分成几类,然后在每个类中都选择该类中排名最高的物品组合成最终的推荐列表。比如,如果是电影,可以按照电影的类别(爱情片、动作片、科幻片等)对推荐结果中的电影分类,然后每种类别都选出几部电影组成最终的推荐结果。

    因此,第二种提高推荐结果多样性的方法是控制不同推荐结果的推荐理由出现的次数。本章提出的推荐系统对于每个推荐出来的物品都有一个推荐理由,这个推荐理由一般是产生推荐结果的重要特征。那么,要提高推荐结果的多样性,就需要让推荐结果尽量来自不同的特征,具有不同的推荐理由,而不是所有的推荐结果都对应一个理由。


    下面的代码根据推荐理由增加推荐结果的多样性,这里输入的recommendations是按照权重从大到小排序的,程序中每次拿出一个推荐结果,如果这个结果已经被用过了,就会对推荐结果的权重除以2降权(这里具体除以几可以在实际应用中自己调整),最终将推荐结果重新按照权重从大到小排序。

    3. 时间多样性
    时间多样性主要是为了保证用户不要每天来推荐系统都看到同样的推荐结果。

     记录用户每次登陆推荐系统看到的推荐结果。
     将这些结果发回日志系统。这种数据不需要实时存储,只要能保证小于一天的延时就足够了。
     在用户登录时拿到用户昨天及之前看过的推荐结果列表,从当前推荐结果中将用户已经看到的推荐结果降权。

    4. 用户反馈
    排名模块最重要的部分就是用户反馈模块。用户反馈模块主要通过分析用户之前和推荐结果的交互日志,预测用户会对什么样的推荐结果比较感兴趣。

    如果推荐系统的目标是提高用户对推荐结果的点击率,那么可以利用点击模型(click model)预测用户是否会点击推荐结果。点击模型在很多领域得到了广泛应用,比如搜索结果的点击预测、搜索广告的点击预测、上下文广告的点击预测。点击预测的主要问题是预测用户看到某个推荐结果时是否会点击。那么要进行点击率预测,首先需要提取特征。在推荐系统的点击率预测中可以用如下特征预测用户u会不会点击物品i:
     用户u相关的特征,比如年龄、性别、活跃程度、之前有没有点击行为;
     物品i相关的特征,比如流行度,平均分,内容属性;
     物品i在推荐列表中的位置。用户的点击和用户界面的设计有很高的相关性,因此物品i在推荐列表中的位置对预测用户是否点击很重要;
     用户之前是否点击过和推荐物品i具有同样推荐解释的其他推荐结果;
     用户之前是否点击过和推荐物品i来自同样推荐引擎的其他推荐结果。
    点击模型需要离线计算好,在线将模型加载到内存中。为了提高在线预测的效率,一般只可以使用线性模型。

    本章提出的推荐系统架构基本上是从基于物品的推荐算法衍生出来的,因此本章的架构并不适合用来解决社会化推荐问题。

    转载于:https://www.cnblogs.com/Allen-rg/p/11305896.html

    展开全文
  • 推荐系统介绍

    千次阅读 2019-09-27 20:47:04
    推荐系统 推荐系统是一种信息过滤系统,为了解决信息过载问题 系统组成一般包括日志系统,推荐算法和内容展示UI 其中推荐算法为核心,它一般又可以分为三层:基础层,推荐(召回)层,排序层。基础层为召回层提供...
  • 文章推荐系统

    2020-10-04 15:57:10
    1.1为用户推荐商品 (加权排序推荐) 1.2算法缺点 2.基于物品的协同过滤算法 2.1基于物品对用户进行打分 2.1 相似度评价 皮尔逊相关度评价 通过计算可以发现,商品1&2,商品3&4&5的相似度较⾼。下...
  • 下面内容转自大数据与人工智能微信公众号,由于网络上推荐系统的相关学习资料太多太杂,东拼西凑学习很难摸出门道,同时我也在学习推荐系统,因此我将该系列内容摘录到我的博客,方便大家直接在博客中查看,大家一起...
  • 2、几乎所有的推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3部分构成。 3、电子商务——>亚马逊 最主要的应用有个性化商品推荐列表和相关商品的推荐列表。 推荐结果的标题、...
  • 推荐系统热门研究方向

    万次阅读 2020-07-10 10:24:33
    推荐系统热门研究方向 1. 大方向 个性化推荐 群组推荐 2. 近期热门研究方向 利用图神经网络来提供可解释性 利用评论来提供可解释性 利用多模态(文本、图像)信息进行融合 利用多个算法进行综合推荐 利用强化学习...
  • package recommender; import java.util.Arrays; /**  * Created by legotime  */ public class recommendTest {  public static void main(String[] args) {  String person1 = "...dog cate pen ca...
  • 基于深度学习的推荐系统

    万次阅读 2018-01-06 10:44:05
    其实这篇文章读了很久了,不过一直没时间作总结。总算考完试了,再重新看一下~~ 这篇文章最开始来源于在微信公众号“机器之心”中无意中看到的论文:Deep Learing based Recommender System:A Survey and New ...
  • 个性化推荐系统概述

    万次阅读 2018-11-07 10:47:47
    一、 个性化推荐系统简介 个性化推荐系统是建立在海量数据挖掘基础上的一种智能平台,可以模拟商店销售人员向顾客提供商品信息和建议,为顾客购物提供完全个性化的决策支持和信息服务,它的目标是既满足用户意识到...
  • 推荐系统的评测方法及指标

    万次阅读 2014-07-03 19:53:56
    首先声明,以下内容是看了项亮的《推荐系统实践》后 写的,内容基本出自该书,只是我自己再归纳总结一下而已(以免喷子又喷) 推荐系统中,主要有三种评测推荐效果的实验方法: 1)离线实验。 往往是从日志...
  • 推荐系统中准确率和召回率的理解

    万次阅读 2017-03-06 21:31:24
    最近读到推荐系统中的TopN推荐,它的预测准确率一般是通过准确率和召回率来进行评估的,那么我们就要理解,什么是准确率,什么是召回率! 准确率,顾名思义,就是准确程度。通过正确数/总数得到。而正确数是什么,...
  • 成为一名推荐系统工程师永远都不晚

    万次阅读 多人点赞 2017-11-20 10:54:01
    推荐系统产品形式的演进,背景是互联网从PC到移动的演进,PC上是搜索为王,移动下是推荐为王,自然越来越重要。随着各种可穿戴设备的丰富,越来越多的推荐产品还会涌现出来。产品和技术相互协同发展,未来会有更多...
  • 推荐系统是企业中常用的技术,所以系统的掌握推荐系统的知识是很有必要的。本专栏主要讲述手机APP下载的项目。 常用的推荐方法有两个,分别是基于物品的推荐和基于用户的推荐。 基于用户的推荐原理是:跟你喜好...
  • 博主从事推荐系统开发设计五年有余,深深的触摸到了机器学习时代的影子,从刚开始接触推荐,到先如今各大电子商务平台,甚而流媒体平台等都是搭建自己的推荐系统平台,让机器去学习用户的行为以便达到精准营销的目标...
  • 一个完整推荐系统的设计实现

    万次阅读 2018-08-14 16:37:44
    工业界完整推荐系统的设计。结论是: 没有某种算法能够完全解决问题, 多重算法+交互设计, 才能解决特定场景的需求。下文也对之前的一些博文进行梳理,构成一个完整工业界推荐系统所具有的方方面面(主要以百度...
1 2 3 4 5 ... 20
收藏数 1,099,826
精华内容 439,930
关键字:

推荐系统