zoukankan      html  css  js  c++  java
  • 关于推荐

    一.常见推荐模型

    ().简述

      传统的基于内容的推荐算法,这种算法有效利用了推荐内容自身的特点,如商品的类别标签、新闻的分类标签、音乐的流派标签等,结合用户的历史行为,进行简单有效的推荐,这种方法需要提取商品的标签和用户的标签作为内容推荐的一种依据。

      推荐系统的一个主流分支是基于协同过滤的推荐算法,这种方法又可细分为基于记忆的协同过滤和基于模型的协同过滤。其中前者即是常説的ItemCFUserCF。这种方法应用广泛,但过于依赖历史数据,当数据稀疏时,推荐精度下降严重。另外,随着用户量或商品量的增长,性能也会下降。基于模型的方法中最基础的包括聚类模型和贝叶斯网络等,而目前应用最为广泛的潜在因子推荐方法,即SVD(奇异值分解)以及其衍生的诸多其它模型如SVD++Time-SVD++ALS(交替最小二乘)NMF(非负矩阵分解)等矩阵分解方法,这类方法可以有效的对用户特征和物品特征进行降维,从而可以提高系统的效率和准确度。

      除了基于协同算法外,还会经常把推荐问题转化为分类问题,比如利用传统机器学习中的LRGBDTXGBOOST等分类模型做CTR预估。不同于UserCF/ItemCF的协同,分类预估模型比较依赖特征工程。

      深度学习方法最近几年已经深入扩展到推荐系统领域。较为经典的方法有Wide&DeepDeepFM等,其中Wide&DeepDeepFM这两种方法都融合了线性和非线性模型,它们对用户行为具有较好的记忆和泛化能力。

    ().常用模型简析
    1.协同过滤

      协同过滤 (Collaborative Filtering, 简称 CF)是利用体智慧的一个经典方法,该方法在收集的大量用户行为数据中,从大多数推个例,常常指的是大量行为中的共性部分。百度百科的解释:协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过

    滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。下面将介绍几个经典的方法。

    (1).UserCF

      基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分。根据不同用户对相同商品或内容的态度和偏好程度计算用户之间的关系在有相同好的用户间进行商品推荐。如图1.1和表1.1中,有三个user,其中user1user3都购买过product2product3,通过某种计算得出user1user3是相关的,所以在为user3推荐时,可以把prodcut1product4推荐给user3。在表1.1中这里的分值可以表示真实的购买,也可以是用户对商品不同行为的量化指标。例如,浏览商品的次数,向朋友推荐商品,收藏,分享,或评论等等。这些行为都可以表示用户对商品的态度和偏好程度。

      计算主要为三步:

      Step1:计算User间的相似度

      Step2:对被推荐给当前UserItem(product)的预测打分

      Step3:进行TopN推荐

    (2).ItemCF

      ItemCFUserCF很像,将商品和用户互换。通过计算不同用户对不同物品的评分获得物品间的关系。基于物品间的关系对用户进行相似物品的推荐。这里的评分代表用户对商品的态度和偏好。如图1.2和表1.2中,假如要给User3推荐物品,而User3Pro2Pro3有行为,那么通过计算Pro之间的相关度得出Pro1Pro3最相关,所以可以将Pro1推荐给User3

      计算主要为三步:

      Step1:计算Item(Product)间的相似度

      Step2:对被推荐给当前UserItem(product)的预测打分

      Step3:进行TopN推荐

     

    (3).SlopeOne

     

      SlopeOne也是一种ItemCF方法,是基于不同物品之间的评分差的线性算法,预测用户对物品评分的个性化算法。主要分三步:
      Step1:计算物品之间的评分差的均值,记为物品间的评分偏差(两物品同时被评分)

     

      Step2:根据物品间的评分偏差和用户的历史评分,预测用户对未评分的物品的评分

     

      Step3:进行TopN推荐

     

    (4).相似度的计算

     

      以上关于useritem(product)间的相似度计算主要还是基于向量的相似计算,比如常用的有欧氏距离、余弦距离、曼哈顿距离、皮尔逊相关系数等。

     

    在相似度方法的选择上,一般使用规则如下:

    • 数据稠密:欧氏和曼哈顿
    • 数据稀疏:余弦
    • 分数贬值(用户评分不规范,差异大,夸大评分):皮尔逊
       
    2.矩阵分解

      对于评分预测任务来说,我们通常将UserItem表示为二维矩阵的形式,其中矩阵中的某个元素表示对应用户对于相应项目的评分,1-5分表示喜欢的程度逐渐增加,-表示没有过评分记录。推荐系统评分预测任务可看做对矩阵中空白格的填空,即基于矩阵中已有的数据来填补矩阵中没有产生过记录的元素。实际中这个矩阵是非常稀疏的,稀疏度一般能达到90%以上,因此如何根据极少的观测数据来较准确的预测未观测数据一直以来都是推荐系统领域的关键问题。矩阵分解作为一种对用户评分矩阵进行打分预估技术目前已广泛应用于推荐系统中。下面主要介绍几种常用方法。

      传统的SVD分解方法需要矩阵是稠密的,对于表1.3这种稀疏矩阵在使用SVD前是需要对缺失值进行补全的,可以使用简单的全局均值或者用户物品的均值进行补全。而且传统的SVD是分解成三个矩阵,效率较低,比较适用于小数据集。所以目前常用的分解方法是FunkSVDSVD++ALS等都是将一个大矩阵分解成两个小矩阵,如图1.3。目标是让用户的真实评分和用矩阵乘积得到的评分残差尽可能的小从而达到预估评分目的。

    (1).FunkSVD

      传统SVD将一个矩阵分解成个矩阵很耗时,同时还面临稀疏的问题FunkSVD是在传统SVD面临计算效率问题时提出的,采用了线性回归的思想优化目标是让用户的真实评分矩阵R和用两个矩阵PQ乘积得到的评分残差尽可能的小最终来寻找和得到逼近RP*Q,进而用于推荐。

    (2).SVD++

      在用户除了显式评分外,隐式反馈信息同样有助于用户的偏好建模,因此提出了SVD++。它是基于这样的假设:用户除了对于项目的显式历史评分记录外,浏览记录或者收藏列表等隐反馈信息同样可以从侧面一定程度上反映用户的偏好,比如用户对某个项目进行了收藏,可以从侧面反映他对于这个项目感兴趣

    (3).ALS

      相比SVDALS能够更好的应用于稀疏矩阵的分解,其在分解PQ矩阵时采用的是交替最小二乘法求解。即在每轮迭代训练中,先固定P去迭代Q,下回先固定Q再去迭代P,这样交替进行,直至误差收敛或达到最大迭代次数为止。

    3.CTR方案

      CTR即点击率预估,一般作为二分类用于推荐上,比如对于用户和物品来説 ,1为用户点击了该物品,0为用户没有点击该物品。那么通过挖掘用户和物品的特征构建正负样本集,训练一个CTR模型,根据该模型对新物品进行点击率预估,最后根据点击率进行TopN推荐。这里的关键是怎么挖掘用户和物品的特征,比如在新闻中,怎么去获取用户的性别、年龄、新闻类别偏好、观看时长以及新闻的类别、热度等等这些特征,这些特征工程在CTR中至关重要。

    4.深度学习

      深度学习相对于传统机器学习来説,其最大的优点是不需要太多的特征工程,能够直接从内容中提取特征,有很强的表征能力,可以直接进行端到端的训练。Wide&DeepDeepFM是推荐系统中的两个比较经典的深度学习方法,这两种方法通过融合线性和非线性、传统机器学习和神经网络的手段同时达到对用户的行为具有记忆和泛化目的。两种方法的主要不同之处在于,前者是由一阶线性和一个前馈网络进行组合,而后者是由二阶线性和一个前馈网络进行组合。这两种模型在推荐上一般都是作为CTR预估方案使用。

    二.混合推荐

      推荐的每种方法都各有利弊,没有一种方法能够解决所有问题,所以混合推荐可以结合不同算法的优点,缓解某些缺陷,以提高推荐系统可用性。

    常见的混合方法有:加权策略,即利用不同算法生成的候选集,进行进一步的加权组合,生成最终推荐结果集,比如可以简单的利用线性加权的方式(2.1);切换策略,根据用户的记录或推荐结果的质量来决定在哪种情况下应用哪种推荐策略(2.2);交叉策略,可以根据不同算法产生的候选集进行一定的比例组合在一起,打包呈现给用户,这种策略的推荐具有一定多样性(2.3)。除了以上三种混合方法外,还有很多其它的混合策略,在实际业务中,可以根据不同的业务需求选择或设计不同的混合方案。

    三.推荐系统的评估

      推荐的效果,其核心的考核标准就是点击率或者转化率,点击的越多说明推荐的越准,用户的粘性越强。一个新的推荐模型是否上线是需要做好相应的评估,评估的方案也很多,比如离线、用户调查以及A/B分流等。

    1.离线评估

      一个不好的推荐策略有时会起到反作用,甚至会造成用户的流失。所以推荐策略的迭代更新至关重要。离线评估虽然不能真实反应线上情况,但一定是要做的,最起码要保证在离线实验阶段当前效果要优于线上效果。离线评估的指标有很多,比如PrecisionRecallF1MAERMSE等等。

    2.A/B测试

      线上真实环境是复杂的,推荐策略的离线实验并不是很可靠,有可能出现离线效果好,但线上并没有多好的情况。所以就有了AB测试机制,所谓AB测试机制,即将流量分为AB两类,A流量走旧模型,B流量走新模型,经过一段时间跟踪测试对比,效果就一目了然。

    实际情况中,会有多达好几种或十几种模型同时进行实验,所以就需要分流评估不同模型效果。

    新模型在最终确认之前流量一定是少量的,随着模型逐渐被验证,流量比重会逐渐加大,最终确认后流量全部导向新模型,完成新模型的正式上线。

    四. 案例分析

      分析一个关于新闻资讯的推荐方案,这是一个较简单的推荐案例,其中涉及到了一些推荐策略、基本架构以及技术方案,较全面的从整体上把握推荐方向。下面阐述具体过程。

    1.推荐策略

    (1).热点、突发事件

      热点和突发事件可以作为新闻的头条展示给用户,因为这类事件已经在社会上引起了广泛的关注,在作为头条展示给用户也是比较合情合理的,另外也在一定程度上缓解用户的冷启动问题。

    (2).用户偏好

      新闻的时效性极强,内容也杂乱众多,用户也很少会给看过的新闻打分、点赞或者转发等,这就造成了用户行为数据极其稀疏,很多模型几乎不可用。那怎么获取用户的偏好,尤其是在产品的前期阶段,数据更少。所以基于标签的这种内容推荐可以作为当下的主要推荐策略。具体的做法可以参考以下方式。

      ① 在用户冷启动时,可以利用用户的注册登录信息,尝试进行推荐。

      ② 新闻的标签提取:包括新闻的类别,新闻的关键词,实体,新闻的主题等,这些可以作为新闻的内容特征。怎么提取,可以采用一些NLP的方式进行尝试,比如分类、词频、  TFIDF、实体抽取、textrank以及LDA等。

      ③ 用户的标签画像:维护一个用户的标签画像,包括长期偏好和短期偏好。用户浏览新闻会有一定的针对性,有些人喜欢财经,有些人喜欢军事,有些人更偏向于娱乐或者有些  人有多种混合偏好。那么可以统计和记录用户看过这些新闻的标签,并维护一个长期偏好和短期偏好的标签库,作为用户标签特征。后面可以根据这些标签为用户推荐相关新闻。

      ④ 通过标签推荐可能会面临同质化问题,也就是为用户推的新闻可能都是同一类型,越推越窄,无法为用户推荐其它的有意思新闻,也就无法去培养用户新的偏好。怎么缓解这  种情况,可以通过以下方式进行尝试。

    • 对用户的标签加入时间衰减因子,不能让某些标签长时间占据重要位置。
    • 尝试利用标签特征或其它用户行为,使用某些方法,计算用户的邻居,将邻居的新闻推给当前用户。
    • 尝试一些其它策略,比如“看过新闻A的人还看过新闻BC等”,可以使用关联规则或共现关系,这种策略比较好解释,用户也易于接受。

    (3).人工干预

      再强的模型也不能满足全部的业务需求,所以根据具体业务进行干预在推荐产品中是必不可少的。比如搜索引擎中的排序,会根据关键词的付费情况排序;电商中会将自营的商品往前排等等这些都或多或少的融合了人工干预。新闻在推荐的时候也需要根据自身业务和具体需求做人工干预,比如需要过滤一些反动、色情、暴力、虚假广告等质量差的新闻,通过过滤这些垃圾新闻,会给用户带来良好的体验。

    (4).推荐的后期完善

      推荐系统不单单是用个别或几个模型就能解决所有任务的,它是一个系统性的工程,是需要逐步迭代完善的。后期可以从以下三个方面进行完善,一是数据模型上,在经过一段时间后,积累了大量的用户行为数据,比如有了用户的评论、转发、点赞、用户的浏览时间等,就可以考虑采用一些方法去量化使用这些行为数据,用于后期更复杂的推荐模型;二是可以加入其它的一些辅助策略,比如加入知识库的这种推荐等;三是在工程架构设计上是否更加的稳定,实时。

    2.基本架构

      一般在工业界,推荐系统的应用主要分为两个阶段,一是召回阶段,二是排序阶段。下面分别就这两阶段针对新闻推荐进行分析。

    (1).召回

      召回是从全局新闻库中选取和当前用户相关的一部分新闻作为候选集,作为后续的排序的输入。召回太多,会给排序的计算带来一定压力;召回的太少,用户能看到的内容就少,不利于平台的转化。所以可以根据平台性能和数据做合适的召回。召回阶段可以看作是一种粗排,可以利用各种简单有效的方法快速的召回一些和用户相关的数据,比如在新闻推荐中,可以利用用户的标签和新闻的标签进行快速匹配召回候选新闻集。

    (2).排序

      排序的作用是对召回得到的相对较小的候选集使用排序模型进行打分,将打分按高低排序形成推荐列表。再进一步,在排序得到推荐列表后,为了多样性和业务的一些考虑,还会进行重排过滤,重排过滤会给用户提供一些探索性的内容,挖掘用户潜在的其它偏好,避免一味的推荐同质化的内容,使用户失去兴趣,同时过滤低俗和违法的内容,保持一个良好的平台环境。

    (3).构架及流程

      上图是一个关于新闻推荐的简化结构,下面具体説一下关于这个结构的计算流程。

      A.召回:从大规模新闻集中召回子集。

        a.在新闻集中,如果某篇新闻的标签包含在用户标签画像中就召回。

        b.召回热门新闻。

        c.利用UserCF返回用户邻居看过的新闻,这个UserCF需要评分矩阵,那么这种隐性反馈的评分怎么获取,可以从用户的不同行为中去量化这个评分矩阵,这里将用户对新闻的     行为分为5档,分别是,暴光:1;点击:2;收藏:3;评论:4;转发:5。评分的高低代表用户偏好的强弱,这样就形成了一个二维评分矩阵(如图4.2),可以通过用户向量     的相似度计算用户的最近邻(余弦,欧氏等都可以),将邻居看过的而当前用户未看过的新闻进行快速召回。

     B.排序:对召回的新闻子集进行排序。

            a.可以利用用户的标签向量和新闻的标签向量进行相似度计算,根据相似度的高低排序推荐给用户。

      b.利用分类模型,常用的分类方法都可以。在使用分类之前,要尽可能多的收集用户的行为特征,除了以上提到的暴光、点击、收藏、评论和转发外,还有用户的性别,年龄,标  签偏好,新闻类别偏好,浏览新闻时长等等都可作为模型的特征输入,根据这些特征学习出用户排序模型。用这个模型对新闻进行预测排序,并推给用户。

     C.重排:这一层可以根据具体业务进行操作。

            a.比如排序后的很多新闻都是同一类目,可以适当打乱。

      b.可以考虑推荐新闻的多样性,将不同类型的新闻靠前排序。

     D.技术选型:可以根据具体情况进行技术的选择,这里作为一个参考。

            a.用户画像和日志分析这一块可以使用ELK(ElasticsearchLogstashKibana)等。

      b.大规模数据处理清洗这一块可以使用Spark或者Flink等,其中Spark不仅可以清洗数据,还支持机器学习,流式计算等。

      c.数据存储可以用ElasticsearchHDFSHive等。

      d.其它的技术如rediskafka等。

  • 相关阅读:
    linux 操作命令
    Linux 安装问题
    margin和text-align实现水平居中的区别
    javascript关键字typeof、instanceof、constructor判断类型
    jquery经常用到的代码段
    Ubuntu安装Chrome浏览器及解决启动no-sandbox问题
    github基本使用---从零开始
    Jquery的load加载本地文件出现跨域错误的解决方案
    meta标签中设置以极速模式打开网页
    原生js动态创建文本内容的几种方式
  • 原文地址:https://www.cnblogs.com/little-horse/p/12447715.html
Copyright © 2011-2022 走看看