精华内容
下载资源
问答
  • 推荐系统实践

    2021-04-13 16:58:10
    推荐系统可以帮助我们解决大规模的用户场景下大量信息的精准分发问题,文本将为大家介绍推荐系统常见的解决方案以及自己对于推荐系统的一些实践

    主站

    我的主站原文:欢迎前往 推荐系统实践

    场景引入

    用户画像

    用户画像是建立在一系列属性数据之上的目标用户模型。一般是产品设计、运营人员从用户群体中抽象出来的典型用户,本质是一个用以描述用户需求的工具。

    让我们通过莫两个模型来加深对用户画像的理解:

    1、将用户标签化

    在这里插入图片描述

    如上图,比较形象的说明了用户画像的概念,可以看到右边这幅图有着和实际用户一样的轮廓,但是填充的元素是一个个的标签,这些标签可以是和用户有关的任意内容

    2、用户数据建模

    在这里插入图片描述

    如上图,在我们系统的后台,我们会对用户的信息做建模,将用户的信息做分类存储,用来支撑后续的行为

    推荐系统

    简单整理了下推荐系统的一些概念和特点

    • 让用户从海量信息中高效地获取自己所需的信息
    • 可以用于联系用户信息
      • 帮助用户发现对自己有价值的信息
      • 让信息能够展现在对它感兴趣的用户面前
    • 推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为来对用户的兴趣进行建模,从而主动给用户推荐可满足他们兴趣和需求的信息

    推荐系统的工作原理

    在这里插入图片描述

    如上图,推荐系统主要的数据流是:

    • 接收待推荐物品信息和用户信息(用户信息包括:用户的基本信息、用户对于物品的偏爱信息。其实就是输入用户画像的信息)
    • 建立模型分析用户行为数据,对用户产生针对性的推荐
    • 将推荐信息推送给用户

    推荐的应用

    现在越来越来多的网站或APP会加入推荐模块,以此来抓住用户的流量,来看下主流网站的推荐板块的应用:

    今日头条为用户提供专门的推荐栏目,根据日常浏览的项目来产生针对性的推荐

    在这里插入图片描述

    酷狗音乐开设推荐的电台,根据你的听歌习惯进行有针对性的推送

    在这里插入图片描述

    淘宝的猜你喜欢模块,用于推送用户可能感兴趣的商品

    在这里插入图片描述

    视频网站,根据你的浏览情况,在首页展示猜你会追的板块

    在这里插入图片描述


    以上就是针对推荐系统的概念介绍,相信大家已经对推荐系统有了一定的了解,接下来让我们一起深入到推荐系统内部进行探索。

    推荐机制

    推荐的机制从大类上面可以简单分为个性化推荐非个性化推荐

    非个性化推荐

    这一类是与用户的行为兴趣无关的,所有用户所看到的内容都是一样的,如常见的:热搜、排行榜、模块分类…等等,这一类的推荐更多是系统根据一定的规则进行分门别类、汇总维度的热点数据,一般会根据实际的业务进行定义,所以这个不是本文重点关注的内容,这边就不做更多的展开介绍

    个性化推荐

    常见的个性化推荐机制有

    • 基于人口统计学的推荐
    • 基于内容的推荐
    • 基于协同过滤的推荐
    • 混合推荐

    基于人口统计学的推荐

    根据系统用户的基本信息发现用户的相关程度

    在这里插入图片描述

    如上图:

    从用户的基本信息可以判断用户A和用户C最为相似,因为她们都是25~30岁的女性,所以认为她们具有相似的品味,故将用户A的喜好推荐给用户C

    这类推荐的优点

    • 对于新用户来讲没有“冷启动”的问题,这是因为该机制不使用当前用户对物品的喜好历史数据
    • 它是领域独立的,不依赖于物品本身的数据,所以可以在不同的物品领域都得到使用

    不足之处

    • 过于粗糙,在个性化程度较为明显的领域,无法得到很好的推荐,比如图书,电影和音乐等
    • 涉及一些与需要查找的信息本身无关却比较敏感的信息,如用户的年龄、身份信息等,这些信息涉及了用户的隐私

    基于内容(Content-Base)的推荐

    • 根据推荐物品的元数据(如标签、类型等),发现物品之间的相关性
    • 基于用户以往的喜好记录,推荐给用户相似的物品

    在这里插入图片描述

    如上图:

    从电影的基本信息可以看出电影A和电影C最为相似,因为这两部电影的题材类型是一致的,而用户A喜欢电影A,一定程度上可以说明用户A比较喜欢爱情、浪漫类型的电影,所以将电影C也推荐给用户A

    这类推荐优点

    • 可以很好的识别用户的口味
    • 算法实现简单可解释性强
    • 可以更加容易解决冷启动

    不足之处

    • 存在冷启动的问题
    • 推荐范围狭窄,新颖性不强
    • 相似度的分析仅仅依赖于物品本身的特征,而没有考虑人对物品的态度
    • 需要对物品进行分析和建模,推荐的质量依赖于物品模型的完整和全面程度

    基于内容的推荐是存在冷启动问题的,但是它相对比较容易解决这个问题,是因为它在用户进行少量的点击后就能够进行比较有针对性的推荐了

    基于协同过滤(Collaborative Filtering)的推荐

    它是互联网发展的产物,因为Web站点更加提倡用户参与和用户贡献,根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者发现用户的相关性,然后再基于这些相关性进行推荐。

    大致可以分为 3 个子类

    • 基于用户的协同过滤推荐
    • 基于物品(项目)的协同过滤推荐
    • 基于模型的协同过滤推荐

    基于用户的协同过滤推荐

    根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群。一般的应用是采用计算“k-邻居”的算法,然后基于这 k 个邻居的历史偏好信息,为当前用户进行推荐的

    1. 找出与当前用户最为相似的用户,将他们的喜好推荐给当前用户
    2. 喜欢类似物品的用户可能有相同或者相似的口味和偏好

    在这里插入图片描述

    如上图:

    用户A和用户C喜好的物品中重叠程度较多,所以我们判定用户A和用户C最为相似,故将用户C喜好的物品D(用户A未浏览过物品D)推荐给用户A

    基于物品(项目)的协同过滤推荐

    使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户

    找出与当前物品最为相似(受众)的物品,并把相似的物品推荐给用户

    在这里插入图片描述

    如上图:

    物品A和物品C喜好的有较多相同的喜爱用户,所以我们判定物品A和物品C最为相似,故将物品C的喜好推荐给用户C(用户C还未浏览过物品C)

    基于模型的协同过滤推荐

    基于样本的用户喜好信息,采用机器学习的方法训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,从而计算推荐

    这种方法使用离线的历史数据进行模型训练和评估,需要耗费较长的时间,依赖于实际的数据集规模、机器学习算法计算复杂度

    这种方案不做展开

    协同过滤的优势分析

    优点

    • 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的
    • 这种方法计算岀来的推荐是开放的,可以共用他人的经验,能够很好地支持用户发现潜在的兴趣偏好

    不足之处

    • 存在冷启动的问题
    • 推荐的效果依赖于用户历史偏好数据的多少和准确性
    • 对于一些特殊品味的用户不能给予很好的推荐
    • 方法不够灵活:在抓取和建模用户的偏好后,很难修改或者根据用户的使用进行演变

    混合推荐

    将前面的多个方法混合在一起,从而达到更好的推荐效果,就是混合推荐模式,常见的混合模式有:

    • 加权混合:用线性公式将几种不同的推荐按照一定权重组合起来
    • 切换混合:对于不同的情况,选择最为合适的推荐机制计算推荐
    • 分区混合:采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户
    • 分层混合:采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐

    …等等根据实际的项目需要进行针对性的混合

    推荐系统面临的问题

    冷启动问题

    新用户、新物品没有相关行为信息, 这时系统怎么给用户推荐,怎么将新物品推荐出去, 在推荐系统落地过程中都需要做结合业务场景的特殊处理才能达到好的用户体验;

    数据减噪

    一些噪音及恶意攻击也会产生大量垃圾数据,对更好的做推荐产生很大的干扰, 怎么很好的保证训练数据的质量,这是ETL和特征工程需要解决的重要问题;

    高效访问

    如果你的产品有大量用户访问,怎么构建一套高效的推荐系统,满足高并发访问,为用户提供稳定,快速,高效的推荐服务也是一个挑战;

    数据缺失的问题

    现实场景中一定存在用户或者物品的信息不完善,或者部分信息有误,这些也是在构建推荐算法模型过程中必须考虑和解决的问题;

    怎么处理非结构化的信息

    用户和物品相关的信息有可能是非结构化的信息,比如图片,视频,音频,文本等,怎么高效的利用这些信息,为推荐模型提供更多信息输入, 随着深度学习在推荐系统中大规模运用,这类问题可以得到较好的解决;

    推荐精准度的问题,算法的价值评估

    这需要通过构建好的推荐算法来实现,同时要有足够多的用户行为数据来学习算法模型, 数据预处理的质量也对结果有较大影响, 现在基于深度学习的推荐系统可以达到很好的效果;

    推荐系统怎么服务于业务,怎么衡量推荐系统的价值产出,怎么为推荐系统制定业务指标,通过指标提升推荐系统效果的同时促进业务发展?这些问题都是摆在推荐系统开发人员, 甚至是公司管理者面前的重要问题, 只有很好的度量出推荐系统的价值,才能更好的优化推荐系统,发挥推荐系统的价值。

    大规模计算与存储

    大量的用户和大量的物品,对数据处理和计算造成很大的压力,需要采用分布式技术(如Hadoop,Spark等)来做数据存储,处理,计算等, 所以要很好的落地推荐系统需要企业构建一套高效的大数据分析处理平台;

    实时响应问题

    为了给用户提供实时的个性化推荐(如今日头条的新闻推荐等), 需要实时收集处理用户的反馈,做到更及时精准的推荐,为用户提供强感知的服务。对大规模用户做到实时响应,对算法,计算,处理有相当大的挑战。

    推荐系统实践

    针对自己曾经负责过的一个推荐系统进行关键内容的整理

    大致组件

    系统的大致组件结构图

    在这里插入图片描述

    如图:

    • 用户APP主要负责将用户的浏览行为上报
    • APP服务主要负责处理用户上报,更新用户行为数据
    • UserData组件从数据库中将用户的行为数据进一步的模型抽取,对部分数据进行过滤清洗,然后存储到新的位置
    • 推荐服务主要从用户数据库中提取用户数据,进行推荐,并将推荐内容写入redis进行缓存

    流程设计

    系统主动推送流程

    在这里插入图片描述

    1. 用户在APP上面的浏览记录以及行为(点赞、收藏等)等信息会被上报到收集服务
    2. 收集服务针对上报的内容根据一定的数据模型进行量化,计算出用户/游戏,用户/标签的喜爱度
    3. 将喜爱度信息导入到推荐服务,推荐服务根据推荐算法来动态产生用户的推荐数据
    4. 推荐服务再将推荐数据推送给游戏服务
    5. 游戏服务再将内容主动推送到用户的APP中

    用户主动拉取流程

    在这里插入图片描述

    1. 用户在APP上面的浏览记录以及行为(点赞、收藏等)等信息会被上报的收集服务
    2. 收集服务针对上报的内容根据一定的数据模型进行量化,计算出用户/游戏,用户/标签的喜爱度
    3. 将喜爱度信息导入到推荐服务,推荐服务根据推荐算法来动态产生用户的推荐数据并进行缓存
    4. APP在需要时主动向游戏服务拉取推荐内容
    5. 游戏服务向推荐服务请求推荐数据
    6. 推荐服务响应推荐数据给游戏服务,游戏服务再返回给APP

    量化用户偏好

    在这里插入图片描述

    可以将用户的行为数据根据一定的规则进行偏好的量化,计算出用户-作品的得分情况,如设计如下图这样一张表,使用上图的规则进行量化存储

    在这里插入图片描述

    推荐的实现

    推荐的实现只提供实现的大致思路,具体的代码实现,如果有小伙伴有感兴趣的可以和作者直接联系哈!

    协同过滤的实现

    协同过滤我们可以借助Apache的Mahout项目中的Taste组件来辅助实现

    Apache Mahout 是Apache软件基金会 (ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序,Taste 是 Apache Mahout中提供的一个协同过滤算法的高效实现(组件结构如图)

    组件中提供多种主流的相似度计算算法,如:

    • 欧几里德距离(Euclidean Distance)
    • 皮尔逊相关系数(Pearson Correlation Coefficient)
    • Cosine 相似度(Cosine Similarity)
    • Tanimoto 系数(Tanimoto Coefficient)

    并提供两种的邻居计算算法

    • 固定数量的邻居:K-neighborhoods
    • 相似度门槛的邻居:Threshold-based neighborhoods

    Taste的组件模型参考:

    在这里插入图片描述

    内容推荐的实现

    内容推荐的实现,可以根据自己的实际业务进行针对性的实现,我这边是基于游戏的推荐,设计的用户、游戏标签权重计算规则:

    在这里插入图片描述

    针对这个规则,对用户、游戏的标签的喜爱程度进行量化,并根据量化的结果提取用户最为喜爱的游戏作为推荐的游戏

    简单做了个展示页面,当做演示(我们实际的业务是手机APP的端的游戏展示,此处为数据测试页面,非实际业务):

    在这里插入图片描述

    系统的扩展考量

    大数据下的拓展

    在这里插入图片描述

    • 单一的mahout进行推荐计算在数据量非常大的情况下很难满足我们的实际需求
    • 结合hadoop对应用进行扩展,将任务分解,最后将结果回写到数据库中,提高执行效率

    不做具体的展开,内容较多,如有机会将在其他文章中说明

    实时推荐的拓展

    对用户实时(短期内)浏览的内容作出响应,给予相应的内容推荐

    实现的思路

    1. 数据收集
      • 借助流处理对短期内用户的数据进行分析。一般可以使用flink,storm,kafka等
      • 仅分析用户近多少个内浏览内容
    2. 数据处理,对上面步骤中的结果数据使用推荐算法进行推荐

    结语

    以上就是针对推荐系统的介绍和实践的主要内容,针对文中相关内容有疑义的小伙伴可以直接与我联系哈,谢谢!

    谢谢阅读,您的关注就是对我最大的动力!!!

    展开全文
  • 短视频推荐系统实践

    2018-11-03 23:03:28
    短视频推荐系统实践
  • 推荐系统实践总结

    2020-08-20 22:17:45
    前一段时间再读项亮老师的《推荐系统实践》,做了个全书思维导图! 需要xmind源文件的,直接找我要就行。 读《推荐系统实践》项亮

    前一段时间再读项亮老师的《推荐系统实践》,做了个全书思维导图!
    在这里插入图片描述
    需要xmind源文件的,直接找我要就行。

    • 读《推荐系统实践》项亮
    展开全文
  • 电商推荐系统实践

    2020-12-16 09:45:10
    今天为大家分享下京东电商推荐系统实践方面的经验,主要包括: 简介 排序模块 实时更新 召回和首轮排序 实验平台 简介 说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子...

    今天为大家分享下京东电商推荐系统实践方面的经验,主要包括:

    • 简介

    • 排序模块

    • 实时更新

    • 召回和首轮排序

    • 实验平台

    简介

    图片

    说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子。协同过滤主要分为俩种:user-based 基于用户的协同过滤和 item-based 基于商品的协同过滤

    但是,现在绝大多数推荐系统都不会直接使用协同过滤来做推荐。目前主要用的是 learning to rank 框架

    这里,是推荐系统的框架,整个推荐系统可以分为两部分,在线部分和离线部分

    • 在线部分主要负责当用户访问时,如何把结果拼装好,然后返回给用户。主要模块有召回、排序和对结果的调整。

    • 离线部分主要是对用户日志的数据分析,应用于线上。

    整个推荐系统大概就是这样的一个框架。

    和新闻、视频这类的内容推荐相比,电商推荐系统又有一些特殊的地方,比如:

    优化方向(点击、销售额、时长、用户留存等)。另外,电商中推荐的内容也会有很多种,尤其像是活动类的内容,很多推荐都是算法和人工运营共同完成的。这就是电商推荐和新闻推荐等的区别之处。

    我们展开看下在线推荐系统:

    除了刚才说的召回和排序以及最终的调整之外,还有实践过程中的一些细节。

    • 召回:这里召回会有很多种方法,如协同过滤,热门商品、实时促销等和应用场景相关的召回,还有一些基于 KNN 的召回。

    • 过滤:召回之后,会进行过滤,主要是和应用场景相关,如已购商品过滤掉、没有库存的过滤掉,或者敏感的商品过滤掉等等这些逻辑

    • 排序:排序目前主要用到的是 DNN 模型,某些流量比较小的地方会用到 GBDT。

    • 过滤:排序之后还会有些分页、同商品过滤等逻辑。

    调整:最终调整过程中,主要有两部分逻辑,多样性和探索逻辑

    排序模块

    1. 模型结构

    图片

    深度学习 ranking 模型结构我们不作为重点讨论,这里列举了一种最经典的模型,它们都用到了很多 id 的 Embedding,然后这些 Embedding 规模都很大,这样训练和上线都比较耗时。因此,我们做了一些优化,比如做分布式的训练,并且会有一套 Pipeline 来完成模型的上线。另外,虽然模型很复杂,并且能带来很好的效果,但是特征工程还是必不可少的,很多指标的提升还是依赖于特征工程,当然也包括一些模型调整的工作。

    2. 实践

    图片

    那么如何把这些模型落地呢?我们看下整个模型的上线过程:

    首先最重要的部分是模型训练平台和排序服务,因为很多深度模型计算量要求很高,为了能达到比较快的效果,需要部署单独的排序服务。目前比较流行的是 TensorFlow serving,可以很快速的来上线一个深度模型,并充分利用对分片、单机并行,达到很高的计算效率。

    模型线上线下一致性问题对于模型效果非常重要,我们使用特征日志来实时记录特征,保证特征的一致性。这样离线处理的时候会把实时的用户反馈,和特征日志做一个结合生成训练样本,然后更新到模型训练平台上,平台更新之后在推送到线上,这样整个排序形成了一个闭环。

    3. 实时更新

    我们的特征和模型都需要做实时的更新。因为我们经常需要很快的 catch 一些实时的信号,比如需要实时的用户画像来抓住实时的用户兴趣的变化,还比如需要抓住实时的商品画像,因为经常会有一些活动或者爆品,我们需要快速的捕捉这些信号,并应用到推荐中。另外还有一些实时的召回和特征,比如一些交叉的特征,实时的点击率,实时订单等特征

    除了特征外,模型也需要实时更新,对于电商场景来说这是有一定困难的,因为订单是有延时的,延时可能是十几分钟到十几小时不等,这样实时模型更新上就会采取一些保守的策略,比如用点击率对模型做些微调,然后订单数据再通过离线来获得,这属于业务场景的限制。

    思考

    排序可以算是推荐系统中比较重要的一个环节,但是只有排序肯定是不够的,事实上,有一些问题是目前的排序框架无法解决的:

    • 排序得到的结果非常相似,影响体验。

    • 有多个优化目标,需要一个平衡(点击率、订单金额、用户交互时长等)

    • 计算能力有限,如果有无限的计算力,可以直接对全部候选集进行排序。

    1. 多样性

    使用模型输出的结果一般都会非常相似,如果直接给用户看体验会很差,因此在模型之后我们需要加入多样性的逻辑。

    比较通用的解决办法是多样性的 ranking,这是一个贪心算法,从第一个商品开始选,当选第二个商品的时候,会重新计算下候选集中每个商品的 score,然后选择一个 score 最高的。我们的方法是看 novelty score 候选商品的产品词分布和之前 N 个商品的产品词分布的 KL 距离。这样做的思路,就是选一个和已有商品最不像的商品,来更好的保证商品推荐结果的多样性。

    由于纯基于算法的多样性可能会出现 badcase,因此还需要一个规则来进行兜底,确保在极端情况下结果也能接受。

    最后,我们思考一个问题,有没有更好的方法实现多样性的逻辑呢?当然有,比如是否可以考虑使用 list wise ranking。这里只是为大家分享一个比较容易的,并且效果比较好的方法。

    2. 多目标

    图片

    我们的优化目标有很多,比如点击、转化、时长等,问题会变得比较复杂,单一的模型训练很难覆盖到所有指标。另外,经常我们需要在各个指标之间进行权衡,因此可调试性也非常重要。

    一种很有用的方式是多模型 ranking,然后用某种方式把所有模型的结果 combine。

    这也体现了一个思想,在算法的实际应用中,其实需要在算法的先进性和系统可维护性、可调试性之间做一个平衡。往往 paper 里很有创意的算法落地的时候是有些困难的。

    3. 多轮排序

    图片

    下面我们讨论一下多轮排序的问题。多轮排序是 learning to rank 实践中很重要的一个思想。使用多轮排序主要是因为计算资源的限制,无法使用复杂的模型进行大规模的候选集排序。右图描述了一个多轮排序的框架。这像是一个漏斗模型,从上往下模型的复杂度是递增的,同时候选集是逐渐减少的,就是越到后面用越复杂的模型来保证效果更好,越到前面可能只需要简单的模型来保证能拿到一些商品就可以了。

    这样会存在一个问题,由于训练样本可能有偏,导致只有被用户看到的样本才有 label,但是一般不会有太大的影响。

    基于索引的首轮排序

    1. 索引召回

    下面我们重点介绍一下第一轮排序。倒排索引很常见,是信息检索里常用的工具。它通过把 doc 的内容索引到 doc id 的方式,快速通过内容来查找 doc。我们很多召回都是通过索引实现的。这里我列举了一些基于索引的召回方式,如 item cf 的 key、产品词、热门类目、促销产品词等。

    虽然索引能够很大程度上的缩小候选集的范围,但是经常情况下,第一轮排序的 doc 数量仍然可能会很大。为了保证性能,截断逻辑是必不可少的。通过情况下可以通过 quality score 截断,保留质量好的 doc。经过线性的 LR 或者 GBDT 模型就可以有结果了。另外截断之后需要有些多样性的逻辑,因为只有在召回的时候保持多样性,最终结果才会有多样性。

     

    基于 quality score 截断是一种 naive 的算法,这里我们讨论另一种业界也较常用的算法,wand。wand 其实是 weak and,它的重点是 wand 操作符。wand 操作符是一个布尔操作符,当 Xi wi 比 θ 大时,它的值是1,否则是0。之所以叫做 weak-and,是因为当 w 都取1, θ 取 K 时,wand 操作符就变成了 and,当 w 取1,θ 取1时,wand 操作符就变成了 or。可以看出 wand 是介于 and 和 or 之间的操作。对 Xi wi 求和的操作其实和我们线性模型很相似。通过 wand 操作符,我们可以定义一些上界,因为是倒排索引,可以给每个索引链赋予一个估计值,这样就可以拿到权重上界 UBt,这样通过和 wand 操作符对比,就可以快速的判断 UBt 是否满足条件,如果满足条件就可以快速的把一些 doc 扔掉,这样就可以快速的使用线性模型对全户做 ranking。可以看到,基于线性模型的分数做截断,比完全基于 quality score 截断的策略要稍微好一点。

    图片

    这里我列了 paper 中 wand 算法的伪代码。出于时间关系,我们不会过算法逻辑的细节。我认为它的主要的思路是通过快速使用 upper bound 做截断和跳转,可以略过很多明显不符合的候选 doc,从而减少计算 score 的次数。当然这种方法对于线性模型来说,有一个缺点,当我们需要多样性的时候,没办法很好的实现在模型中增加多样性的。

    wand 算法目前已经应用非常广泛了,在很多开源的索引如 lucene 中,也会用到这种方法快速计算文本相关分。

    图片

    刚刚我们介绍了使用倒排索引做第一轮排序,以及一个常见的排序加速算法,回过来我们思考一下倒排索引本身,它适用于什么场景,不适用于什么场景。

    首先它适用于 kv 查找这种场景,并且 kv 查找也属于实际应用很多的情况。但是对于更复杂的方式,类似 graph 的召回方式不友好,比如找用户看过的商品中相似商品的相关商品,这时实现起来会比较麻烦,这是它的一些限制。再一个,我们需要有较好的截断策略,例如底层使用 relevence score 截断,排序使用 GBDT

    当然,索引还会受到机器本身的内存限制,限于机器的大小,很多时候我们需要多机分片部署索引,这样会带来一定的复杂性。虽然有些限制,但是索引是目前应用很广泛、有效的方式,包括在推荐、搜索等领域都会使用到。

    2. KNN 召回

    图片

    除了索引召回,KNN 也是现在较常用的一种召回方式。首先,我们把所有的候选集转换成 embedding,我们把用户兴趣也可以转换成 embedding,通过定义 embedding 之间距离计算公式,我们可以定义 KNN 召回问题,也就是在全部候选池中,找到与用户最接近的 k 个结果。

    图片

    定义好 KNN 召回的问题,下一步就是如何找到最近的 K 个候选集。由于整个候选集非常大,每次都使用用户的 embedding 去全量计算距离是不现实的,只能使用一种近似算法。我们今天分享其中的一种近似算法。是 facebook 开源的 KNN 计算库 faiss 使用的。其原理:

    首先需要对全部候选集进行分块,每一块都会有自己的质心。paper 中使用 Lloyd 算法,将整个空间划分开。分块后,就需要对每一块构建索引,进而通过索引实现快速检索的功能。

    右图是索引构建和检索的方法。

    上半部分是如何构建索引(这里的优化点是使用了二级索引):首先拿到 y 候选集之后,做一个 quantizer 分类得到一个一级索引,把它放到索引表中,另外还得到残差 compute residual,可以对残差再进行一次 quantizer,得到一个二级索引,通过两级索引来加快检索的速度,同理,在真正的 quary 的时候,拿到的是用户的向量 x,先做一个 quantizer,得到 k 近邻的一级索引,然后查找 k 个一级索引,同时拿到 k 个二级索引,然后在二级索引中查找,然后这里还有很多加速的算法(这里就不展开了),通过这样一种多层的查询方式来做到加速 K 近邻的算法。

    PS:关于 KNN 的一些思考,KNN 是一种有效的方式,但是不是唯一有效的方式。比如之后分享的 TDM,能够比 KNN 更加灵活。

    实验平台

    最后简单介绍下分层实验平台,因为大家想快速迭代特征和模型,离不开实验,经常会遇到的情况是实验流量不够用了,这时就需要对实验做分层。分层的逻辑见右图,通过在不同的 Layer 使用不同的哈希函数,保证每个 Layer 之间流量是正交的,这样就可以在不同的 Layer 上做不同的实验。

    图片

    分层实验的具体做法:召回->排序->后处理->业务,另外还有一部分对齐流量,用来做全量的验证。

    分层的优点,可以用于做实验的流量多,适合快速迭代;缺点,需要严格控制层与层之间的关系,防止相互干扰。

    展开全文
  • 总结了《推荐系统实践》中的算法并进行了代码实现,主要有:基于标签的推荐算法,基于关联规则分析的推荐算法,基于时间上下文的推荐算法,基于图的推荐算法,基于用户的协同过滤推荐算法,社会化推荐算法。
  • 推荐系统实践——什么是推荐系统

    千次阅读 2018-07-06 11:18:45
    学完了机器学习,将自己的研究方向定为推荐系统,然后现在看起了项亮的《推荐系统实践》,决定看完一段就来这里总结记录一下,方便之后复习。第一章主要是对推荐系统进行简介,主要分为推荐系统的定义,应用及推荐...

    什么是推荐系统

    学完了机器学习,将自己的研究方向定为推荐系统,然后现在看起了项亮的《推荐系统实践》,决定看完一段就来这里总结记录一下,方便之后复习。第一章主要是对推荐系统进行简介,主要分为推荐系统的定义,应用及推荐系统的评测。


    什么是推荐系统

    在互联网时代的今天,信息不再是难以获取,而且过载,导致我们常常被大量冗余的信息困扰,无法找到自己想要的,这个时候诞生了一个伟大的发明——搜索引擎,输入你想要的东西的关键词,就能将与之相关的内容列在你的眼前。然而,像我这种周末闲极无聊的渣渣,又没什么特别的兴趣爱好,常常就是不自觉点开淘宝或者微博或者百度,却并没有明确的目的,这时候就希望这些平台能自动过滤我不感兴趣的,多提供点我感兴趣的东西让我打发时间了,而走在人类智慧前沿的GG们就是这么厉害,推荐系统就这么诞生了!并不需要关键词或明确的需求,系统会根据我的历史行为自动分析我的喜好,并主动推荐能够满足我兴趣的信息。

    推荐系统是如何工作的

    社会化推荐

    比如我周六闲着准备看一部电影,我就会问我一个很懂电影的室友,让她给我推荐几部她觉得不错的,这样的推荐是基于我的社交关系。

    基于内容的推荐

    比如我特别喜欢梁朝伟,我就会去搜梁朝伟曾经演过的电影电视剧来看,比如我喜欢林俊杰,我听歌的时候都会直接搜JJ的专辑,而推荐系统就省去了我主动搜索的过程,直接把我可能感兴趣的内容推荐给我,可以说是相当给力了。

    基于协同过滤的推荐

    比如我喜欢看言情小说,我一个男同学喜欢看武侠小说,而我室友也喜欢看言情小说,那么我要找小说看的时候,肯定是找我室友看过的书而不是男生的,而这种利用相似兴趣的用户过滤掉不感兴趣的物品的方法就是协同过滤。

    从以上推荐的方式可以看出,推荐系统其实就是用某种方法将人与物联系起来。而且,是针对不同兴趣的人给他展示不同特质的物品,这就是:个性化推荐。

    个性化推荐系统的应用

    书中列举了几种典型的应用场景:电子商务,电影,音乐平台,社交网络,阅读,邮件,基于位置的服务,个性化广告。我们自己一联想平时用到的,淘宝的“有好物”,豆瓣的“发现好电影”,酷狗的“猜你喜欢”等等,都是推荐系统的应用,当然,我一开始看小标题的时候没想到的场景就是基于位置的服务和个性化广告,原来是说基于当前的地理位置再根据你当前的需求推荐合适的店铺等,比如我在西单逛街逛累了想找个电影院歇歇脚,就打开百度地图,点击电影院,就给我推荐附近的电影院并“贴心”地推荐了几部我感兴趣的电影;而个性化广告就跟以上应用有点区别了,以上各种都是想办法给用户推荐可能感兴趣的物品,而个性化广告可以说更多是为广告商服务,是为他们的广告寻找可能感兴趣的用户然后推送广告。

    个性化推荐系统的评测

    我要记录的重点是关于如何评价一个推荐系统的好坏,不然我设计一个推荐系统,凭什么就说它好用呢?

    1. 用户满意度
      用户满意度可评测推荐系统最重要的指标,一个系统,当然是“大家好,才是真的好”啦。但是用户满意度没办法从直接的数据得到定量的值,一般采用问卷调查的形式,或者是以某些行为定义为“满意”,比如一件商品,用户最终购买了则表示满意。

    2. 预测准确度
      上述用户满意度是需要系统上线之后实时获取的,而预测准确度则可以从离线数据中计算得到,又能度量推荐系统预测用户行为的能力,是最重要的离线评测指标。而预测准确度的指标又分为:
      2.1 评分预测
      平台提供给用户一个打分的功能,然后根据用户的历史行为,预测用户对物品可能的打分。评分预测的预测准确度通过均方根误差(RMSE)和平均绝对误差(MAE)计算。用rui表示实际测试集中用户u对物品i的评分,用rui^表示推荐系统预测的用户u对物品i的评分,则

      RMSE=(rui^rui)2|T|

      MAE=|rui^rui||T|

      2.2 TopN 推荐
      另一种推荐是给用户一个个性化推荐列表,列出其最可能感兴趣的N的物品。TopN 推荐的预测准确率通过准确率(Precision)和召回率(Recall)来计算。令R(u)是推荐系统预测之后给用户的推荐列表,令T(u)是测试集中用户实际感兴趣的列表,那么有:

      Precision=uU|R(u)T(u)|uU|R(u)|

      Recall=uU|R(u)T(u)|uU|T(u)|

      书中提到,评分预测一直是研究热点,但是评分预测是预测用户看了某部电影或用了某个物品之后会给出的评分,而TopN 推荐是找出用户可能感兴趣的物品,所以TopN推荐实际上更符合应用需求,因为即使用户可能对某个物品给出很高的评分,但是如果他都不看这个,就不存在感兴趣之说了。

    3. 覆盖率
      覆盖率(coverage)主要描述推荐系统对物品长尾的发掘能力。可以用推荐出来的物品占总物品集合的比例来表示。
      coverage=|uUR(u)||I|

      一个好的推荐系统不仅要有较高的用户满意度,也要有较高的覆盖率。但是以上计算较为粗略,即使覆盖率为100%,物品出现的次数也会有无数种分布,其实,可以用推荐列表中不同物品出现次数的分布来表示覆盖率,出现的次数分布比较平,则说明推荐系统发掘长尾的能力强,如果分布比较陡峭,则说明覆盖率低。可以用基尼系数(G)来表示:
      G=1n1j=1n(2jn1)p(ij)

      其中ij 表示按照物品流行度p从小到大排序的物品列表中的第j个物品。
      图片引自百度图片
      图中曲线表示最不热门的x%物品的总流行度占系统的比例y%,可以看到这条曲线一定在y=x直线之下,而且和y=x相交于(0,0)和(1,1)。令SA是A的面积,SB是B的面积,那么基尼系数就是SA/(SA+SB), 故基尼系数属于区间[0,1]. 如果物品流行度很平均,那么SA就很小,基尼系数就小,如果物品流行度分配不平均,那么SA就大,从而基尼系数就很大。
      推荐系统的初衷是消除马太效应(热门的物品更加热门),使得各种物品都能被展示给可能对它们感兴趣的某一类人群。而评价一个推荐系统是否具有马太效应,是通过计算初始用户行为中物品流行度的基尼系数G1和推荐列表中物品流行度的基尼系数G2来确定的,若G1
    展开全文
  • 推荐系统实践》2012版(作者:项亮)的学习笔记
  • 百度大规模推荐系统实践演讲ppt,百度云基础架构部 秦铎浩
  • 推荐系统实践

    2019-10-06 01:24:41
    推荐系统实践》 http://www.ituring.com.cn/article/details/572大家关注的《推荐系统实践》一书全程开放出版流程推荐6收藏最近很多读者关注《推荐系统实践》一书,询问本书目前的写作进展和出版时间。...
  • 这是《推荐系统实践》中基于近邻的方法的代码实现。数据集使用的是MovieLen中大小为100K的数据集。程序分为6个文件: UserCF:基于用户的算法UserCF_IIF:改进的基于用户的算法ItemCF:基于物品的算法ItemCF_IUF:...
  • 在之前我也看了很多人写的推荐系统的博客,理论的、算法的都有,多是个人的理解和感悟,虽然很深刻,但是对于自己而言还是不成系统,于是我参考大牛项亮编著的《推荐系统实践》将该领域知识系统整理一遍,与大家一起...
  • 读书笔记(推荐系统实践).doc
  • 京东电商推荐系统实践

    千次阅读 2019-11-16 18:18:43
    今天为大家分享下京东电商推荐系统实践方面的经验,主要包括: 简介 排序模块 实时更新 召回和首轮排序 实验平台 简介 说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子...
  • 推荐系统实践推荐系统实践》的代码实现
  • 个性化推荐系统实践应用

    千次阅读 2019-08-23 15:30:12
    近日,达观数据联合创始人于敬进行了《个性化推荐系统实践》的主题分享,深入浅出的讲解了个性化推荐的过程、难点及解决方法。 本文五大内容: 一、推荐系统概述 二、搭建推荐系统的关键算法...
  • 《《推荐系统》+《推荐系统实践》》 基本信息 作者: (奥地利)Dietmar Jannach Markus Zanker Alexander Felfernig Gerhard Friedrich 项亮 译者: 蒋凡 出版社:人民邮电出版社 ISBN:9787 上架时间:2013-6-...
  • 一文入门推荐系统——推荐系统实践读书笔记

    千次阅读 多人点赞 2020-12-20 12:54:25
    1. 推荐系统 1.1. 什么是推荐系统 1.2. 推荐系统评测 1.2.1. 实验方法 1.2.2. 评判指标 1.2.3. 评判维度 2. 数据来源 2.1. 用户行为数据 2.2. 用户标签数据 2.3. 上下文信息 2.3.1. 时间上下文信息 2.3.2. 地点上...
  • 推荐制度 推荐系统实践实例 使用数据集
  •   2019-01-02 19:36:05 ... ...本次分享内容为机器学习在推荐系统的...主要介绍推荐系统实践中遇到基本问题,以及基于机器学习技术的解决方案。过程中涉及到“概率图模型、神经网络等”等方法在解决“用户冷启、精...
  • 项亮老师的《推荐系统实践》学习笔记​。 目录 1、冷启动问题简介 2、利用用户注册信息 3、选择合适的物品启动用户的兴趣 4、利用物品的内容信息 5、发挥专家的作用 推荐系统需要根据用户的历史行为和兴趣预测用户...
  • 在CSDN学院与AI科技大本营的公开课上,达观数据联合创始人于敬进行了《个性化推荐系统实践》的主题分享,深入浅出的讲解了个性化推荐的过程、难点及解决方法。本资源为公开课内容整理PPT。 一、推荐系统概述 二、...
  • movie_recommand:最简单的电影推荐系统实践

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,471
精华内容 2,188
关键字:

推荐系统实践