原创:晏茜
资料来源:钟老师

如果你想购物,推荐系统会帮你先“看”你想买的东西;如果你想看新闻,推荐系统会帮你先“挑”你喜欢的内容;如果你想刷剧,推荐系统会帮你“筛”掉你不喜欢的电视剧;如果你想学习,推荐系统会“考”你相关的题目;如果你想放松,推荐系统会给你“听”你爱听的音乐,这些都是推荐系统在日常生活中的具体的应用场景。

本文主要讲解推荐系统的算法与应用,内容包括推荐系统的基础知识点,协同过滤算法,推荐系统的发展情况以及如何去应用推荐系统。

1. 什么是推荐系统

推荐系统的背景

推荐系统成为一个相对独立的研究方向一般被认为始于 1994 年美国明尼苏达大学 GroupLens 研究组推出的 GroupLens 系统(Resnick,1994)。该系统为推荐建立了一种形式化的模型,并且它有两大重要贡献:一是首次提出了基于协同过滤(Collaborative Filtering,CF)来完成推荐任务的思想,二是为推荐问题建立了一个形式化的模型。

推荐系统的定义

推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买的过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。

头条一般都会把一些重要的新闻放在前面,并且还会发一些针对用户的个性化推荐的内容。每个人的兴趣爱好和想法都是不一样的,所以就有了推荐系统的千人千面的说法。我们看到的某一个页面可能是很多个性化推荐系统的堆叠,它把不同的商品共同叠在一起来进行推荐。

推荐系统的意义

1.用户角度:推荐系统解决在“信息过载”的情况下,用户如何高效的获得感兴趣的信息的问题。

当我们打开天猫或者淘宝界面,会发现展示的内容其实都是按照我们的搜索历史、浏览历史、购买记录,还包括一些近期的爆款和活动商品这几种维度来推荐的。

置于页面最上方的运营位一般会展示运营商希望我们看到的内容,下方的活动位会展示近期的活动商品。而我们的同城购更多的是去推荐一些生鲜类的商品,因为同城直达的情况,要么是商品的保存期限非常短,要么是用户对商品的需求非常迫切。同城购的商品是具有一定的限定性的。

假设我们急需某件商品,往往这个时候就会选择天猫会员店或是京东自营店以保证其时效性。而假设我们对时间的要求并不高,这个时候就会选择一些性价比较高的商店。对于不同的时期,用户对商品的需求情况是不一样的,而 APP 界面推荐的内容也会是不一样的。

2.公司角度:推荐系统解决最大限度地吸引用户、留存用户、增加用户粘性、提高用户转化率的问题,从而达到公司商业目标连续增长的目标。

不同模式的问题定义是不尽相同的。视频类公司更注重的是用户观看时长,他们会在视频里面嵌入网络广告,甚至还有一些广告是直接出现在电视剧中的。电商类的公司更注重的是购买转化率(Conversion Rate,cvr),新闻类公司更注重用户的点击率。

推荐系统的 base

推进系统与传统的机器学习是不太一样的,它给到很原始的数据,需要经过处理,然后才能得到能够直接用来跑模型的数据。这些数据包含以下类型:

① 人(用户信息)

1.历史行为;2. 人口属性;3. 关系网络

历史行为是指用户点击过哪些链接,购买过什么东西,点赞过什么内容,或是停留在某个页面上多长时间,这些都是历史行为。人口属性是指用户的性别、年龄等等。关系网络可以这样来解释,我们知道现代社会互联网是无处不在的,比如,当一名学生通过浏览器进入了某个学习网站,那么浏览器瞬间就会捕捉到他进了此类学习类网站的信息,并且会结合他的进入和留存在该学习网站的时间等因素,将这名学生归类为某一类人群。这就是所谓的关系网络。

② 物品信息

电商网站中的“商品信息”包括视频推荐里面的视频信息,新闻推荐里面的新闻信息。以电影为例,电影中的视频信息可以是电影中出现某种动作镜头的次数,而新闻信息可以是新闻中提及某一字段的次数。

③ 场景信息

在具体推荐场景中,用户的最终选择是受时间、地点、用户的状态等一系列因素影响的,我们称这些信息为场景信息。举例来说,推荐系统会在夏天推荐用户购买 T 恤等符合季节属性的服装,而如果推荐系统在夏天推荐用户去购买羽绒服、毛衣等等,这其实就是一种时间信息上的不对等,同理,在校大学生可能会购买一些职业发展相关的课程,如果我们的推荐系统为在校大学生群体推荐了小学或中学的课程,就是一种用户状态信息上的不对等。推荐系统会受到场景信息的制约。

推荐系统的逻辑框架

推荐系统的逻辑框架往往是根据用户的信息、物品的信息和场景的信息这三种不同的信息,以及成千上万的候选物品库,通过调用推荐系统模型,得到我们的推荐系统列表,最终得到几种推荐系统的。

推荐系统需要达到的效果

推荐系统需要达到的效果是怎样的呢?我们主要从四个方向来考虑。

相关性

推荐系统所推荐的事物需要具有相关性,换句话说,推荐系统应当推荐给用户他们想看到,希望看到,并且比较感兴趣的东西。

新颖性

新颖性是指推荐的事物需要迎合时代发展的潮流,尽量避免推荐陈旧的事物。

巧合性

推荐系统需要在恰当的时间给与相应的推荐。我们经常会发现这样的现象,在我们刚刚浏览完某样商品之后,推荐系统立马就会为我们推荐同样的或相关的商品,这是推荐系统认为我们仍有意愿购买此类商品,所以在这样的时机,迎合我们的购买需求做出的相应推荐。

多样性

所谓多样性是指推荐系统推荐的物品不能是千篇一律的热销商品,它需要针对不同的用户群体推荐不同的商品。比如,股票软件会根据不同用户的抗风险能力推荐不同类型的股票,以实现不同的理财效果。

推荐系统的目的

推荐系统需要达到的目的主要包含四点。第一点是用户满意度和公司业务的增长。比如,很多商家在某一段时期会以相对低廉的价格售卖某些热销商品,其实是希望通过他的价格优势来吸引新客,让他们去留存或是购买其他商品,他售卖的最终目的是公司业务的增长,而不是把客人吸引过来,但不购买其他商品。第二点是损失函数尽可能的小。比如,如果系统预测某电影的的评分是 10 分,但用户真实的评分却只有 5 分,这时我们的预测相当于出现了严重的偏差,所以我们在做这种回归题的时候,RMSE的值会非常大,系统的预测是不太准确的。如果系统推荐了 5 部电影,但是用户并没有点击观看任意一部电影,这时我们的召回率几乎为 0,推荐也是不准确的。不同的指标对最终效果的影响很大,这种影响与我们的用户满意度是息息相关的,比如,公司希望我们提升用户购买的转化,这个时候更多的是用点击转化率的方式来评估最终的指标,如果我们最终的转化率很低,这说明最终的模型产生的效果可能很一般。第三点,topN。topN 的概念是说选择排在最前端的商品推荐给客户。比如,系统发现用户最感兴趣的可能是这 5 种商品,这时它就会推荐排在最前面的商品推荐给用户。第四点,覆盖率。包括大概覆盖了多少,以及占比情况这样的问题。

推荐系统常用词语

Item:商品,比如从腾讯视频中看到的各个“视频”

User:用户,推荐系统面向的用户

召回:召回是推荐系统的第一阶段。 给定 query,系统将生成相关的候选集合。

排序:在生成候选对象之后,另一个模型会对生成的候选对象进行打分和排序,得到最后要推送的 item 列表。

Embedding:隐向量,如对商品的评分矩阵分解

Score:对排名有一个统一的得分

粗排:排序第一轮一般叫做粗排,通过简单的规则仅将庞大网页集中的一小部分取出来。

精排:排序参与第二轮的精排,精排的排序则比较多,诸如相关性、权威性、可浏览性等等我们熟知的因素多数仅在精排阶段生效。

推荐系统常用的流程

推荐系统的常用流程如上图所示。当用户量比较大或是需要推荐的内容比较多的时候,我们需要先通过召回策略筛选一部分内容出来,然后过滤掉用户购买过的商品或是看过的新闻等等,过滤完成以后,需要对我们刚才召回的内容进行排序,把上面的知识和下面的内容全部进行重新排序,排序完成以后再进行一个混排,也就是说,把不同模型或是同样的模型堆叠起来,得到一个统一的排序,混排完成以后,这个时候有些人会去做一个精排,其实就是做一些修正。

推荐系统的模型

关于推荐系统的模型部分,首先我们要进行召回,召回也包含着算法,比如,计算物品和物品之间的余弦相似度的方法是,物品共同出现的次数除以每个物品各自出现的次数,而在算法层,其实也有类似的计算方式,比如,每个 Embedding 它们各自之间是不是每个维度也可以计算一个它们的相似度,然后排序得到最相似的某些物品,得到一些召回层,然后再通过这些物品的信息以及用户的信息,重新跑一个机器学习的模型,最后得到一个精排的结果。所以召回层、算法层以及排序层是互相包含的。

推荐系统的难点

1.数据量不断增大,需要新增各种“商品”和“用户”的标签

2.人总是随着时间,空间的推移,对商品的兴趣也在不断的变化

3.新增物品和商品会影响用户的新的兴趣点,实时更新对于用户推荐来说又是新的挑战

4.冷启动问题

推荐系统的冷启动问题是指由于累积的数据量过少,无法针对新用户做出个性化推荐的问题。这个时候很多公司都会去买一些其他公司的用户数据,比如,我们知道不同公司的隐私数据是不能共享的,所以他们往往会做一些脱敏处理,对某些 UID 进行打标,或是对某些手机号进行打标,通过这样的方式,我们可以使用不同公司的脱敏信息,这就是冷启动问题的解决方法。

2. 与推荐系统相关的知识点

推荐系统其实有很多种结合方式,推荐系统可以与机器学习、深度学习进行结合,比如某商品我们是否要跑一个二分类模型,这种其实就是与机器学习相关的问题。推荐系统与自然语言处理也有很大的关系,比如自然语言处理经常会用到一些书或是文本的 Embedding 信息。推荐系统还可以与图片、视频,以及多模态进行结合,以实现最终的推荐效果。

推荐系统&机器学习

上图展示了推荐系统与机器学习的关系。机器学习主要包括分类的、回归的、聚类的信息,推荐系统往往首先会经过一个召回层,然后把一些物品的信息召回到某一些比较少的物品,然后去求一些二分类的信息,这是机器学习和推荐系统的一种结合方式。

推荐系统&深度学习

上图来自于王喆《深度学习推荐系统》,展示了推荐系统与深度学习的结合方式。


推荐系统 CTR 大家族算法

推荐系统的发展从 2016 年开始加入神经网络,然后有了并行的神经网络以及串行的神经网络,将一些浅层的交叉和深层的交叉合并在一起,或者把不同物品的信息不断的进行交互,来做最终的预测。2019 年出现了淘宝的 DIEN、DSIN,以及现在比较流行的是双塔模型和 Attention 模型,以及注意力机制等等,我们可以发现,推荐系统是不断的进步和优化的。

3. 推荐系统的特征


推荐系统的用户的特征

推荐系统的用户特征基本上分为显式的反馈和隐式的反馈两种。显式反馈往往能真实的表达一个人的偏好,而隐式反馈却很难做到这一点。

我们来举例说明这一点,比如你打开了一个游戏页面,这时突然想起来还有一件重要的事没做,你急着去处理事情忘记了刚才打开了游戏这件事,游戏的页面仍一直处于打开的状态,这时你停留在这个游戏页面的时间已经很长了,后台系统会认为你对这个游戏很感兴趣。为了避免错误的统计带来失败的推荐结果,我们需要进行去噪,也就是说,我们要通过其他的指令来反馈用户对这款游戏是不是真的感兴趣。比如说虽然这名用户停留在游戏页面的时间很长,但是他到底有没有进行其他的操作呢,他有没有点击鼠标,有没有进入下一个游戏页面等等,这些都是需要我们考虑的因素。

总结来说,在显式反馈中,用户能够明确表示对物品喜好的行为,也就是说,显性反馈能够明显区分用户是否喜欢此物品,显性反馈数值代表偏好程度。而隐式反馈不能明确反映用户喜好的行为,它没有负反馈,无法判断用户是否不喜欢。隐式反馈先天性具有噪声。隐性反馈数值代表置信度,置信度其实就是说我们不能太相信隐式反馈提供的结果,但是它能起到一定的作用,所以隐性行为需要近似评估。

4. 推荐系统算法分类

我们对推荐系统做了几种简单的分类,第一个是基于内容的分类,第二个是基于协同过滤的分类,第三个是混合的分类。基于内容的分类其实就是基于 Embedding 的分类,基于协同过滤的分类还可以分为基于领域和模型的协同过滤分类。


协同过滤的演化

协同过滤的演化首先基于用户的相似度和基于物品的相似度,然后我们再给用户推荐一些商品,或者说给物品推荐一些用户,基于不同用户推荐不同的物品,我们会发现这样的方式并不能解决用户打分的问题,所以我们这个时候又想到了用矩阵分解的方式来解决问题。

5. 基于领域协同过滤推荐算法

算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品。协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering)。

基于用户的协同过滤(UserCF)

基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分。根据不同用户对相同商品或内容的态度和偏好程度计算用户之间的关系。在有相同喜好的用户间进行商品推荐。

UserCF 算法主要是考虑用户与用户之间的相似度,给用户推荐和他兴趣相似的其他用户喜欢的物品。你朋友喜欢的东西你大概率也可能会喜欢,UserCF 算法正是利用了这个原理。举个例子,如果要给一个用户 1 推荐物品,可以先找到与 1 最为相似的用户 2,接着获取用户 2 最喜欢的且用户 1 没有听说过的物品,并预测用户 1 对这些物品的评分,从中选取评分最高的若干个物品推荐给用户 1。

基于用户的协同过滤(UserCF)特点如下:

⑴ 用户面对的商品特别多,人的需求随时随地都在变化

⑵ 商品太多,用户往往只选择部分甚至更少

⑶ 计算量大

⑷ 面对冷启动问题很难解决

基于物品的协同过滤(ItemCF)

在网上购物时,你是否有这样的经历呢?我们在网上订购一部手机之后,网页会在订单完成界面向我们推荐相同型号的的手机壳。这个时候,我们很可能会点击浏览并购买一个手机壳。这就是 ItemCF 算法在做的事情,他帮助推荐与用户之前喜欢的物品相似的物品。

如果喜欢物品 3 的用户大多数也喜欢物品 1,那么认为物品 1 与物品 3 具有一定的相似度。

① 首先观察用户(user)与商品(item)的交互数据

② 1 和 3 共同出现

③ 可以推给 3,product 1

基于物品的协同过滤(ItemCF)特点如下:

⑴ 更流行,电商往往更愿意使用 ItemCF

⑵ 商品固定,通常更容易计算商品的相关性,用户变动性大

⑶ 上新,还是有各种标签

⑷ 除了实时性强(如新闻等)比较适合各大网站

6. ItemCF 单路召回

这部分我们会带大家看一下天池的新闻推荐的案例,赛题以新闻 APP 中的新闻推荐为背景,要求选手根据用户历史浏览点击新闻文章的数据信息预测用户未来点击行为,即用户的最后一次点击的新闻文章,测试集对最后一次点击行为进行了剔除。

召回手段:内容-CF-embedding

我们有字段:

train_click_log.csv:训练集用户点击日志

testA_click_log.csv:测试集用户点击日志

articles.csv:新闻文章信息数据表

articles_emb.csv:新闻文章embedding向量表示

sample_submit.csv:提交样例文件

user_id,article_1,article_2,article_3,article_4,article_5

目前需要解决的问题:

1.共有 36 万篇文章,怎么筛选 5 篇文章给用户

2.之前我们学习机器学习结构化数据或者深度学习都有训练集 -label 进行模型训练,这里这么转化为有监督学习

3.test 里面最直面的数据就是历史点击的文章,需要预测最后一次点击的文章,所以我们需要通过找 36 万文章中和用户点击过的文章最相关的进行推荐

面对问题我们的解决方案:

1.通过相似度从海量的新闻中找到比较相似的 5 篇文章

2.通过筛查出的文章转化成点击问题,如果点击则认为是 1,如果不点击则认为是 0,这样可以通过点击的概率对文章进行排序,从大到小,依次推荐 5 篇文章

面对问题我们的解决方案(ItemCF):

1.获取用户点击浏览过的新闻列表

2.获取最热门的文章用于补充

3.计算物品与物品之间的相似度

4.召回 topk 个新闻

5.对新闻进行排序,最终生成 top5 篇新闻用于推荐

7. 推荐系统的进一步发展

推荐系统的进一步发展主要包含多模态、多目标,推荐系统也与我们的深度学习结合的越来越紧密,在以后推荐系统的从业者可能还需要了解知识图谱的相关内容,推荐系统在工作中的运用主要体现在推荐算法工程师这一岗位,随着技术的发展,推荐算法工程师的能力要求和薪资水平也呈现着水涨船高的状态。

详解推荐系统的算法与应用相关推荐

  1. 【算法知识】详解希尔排序算法

    前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序需要移动 ...

  2. 【算法知识】详解直接插入排序算法

    前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 在玩扑克牌的时候,我们抽到一张牌的时候,都是将它插入到当前手中牌的合适位置的. 如下图: (上图来自算法导论) 直接插入排序 ...

  3. 算法详解_常用算法详解——打印杨辉三角形

    杨辉三角,是二项式系数在三角形中的一种几何排列.在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在165 ...

  4. 最形象的卷积神经网络详解:从算法思想到编程实现(转载)

    mark一下,感谢作者分享! 原标题:最形象的卷积神经网络详解:从算法思想到编程实现 1 新智元推荐 查看全文 http://www.taodudu.cc/news/show-4611564.html ...

  5. DDA画线算法+代码详解-直线扫描算法之一

    #DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...

  6. 小白给小白详解维特比算法(一)

    小白给小白详解维特比算法(一) 小白给小白详解维特比算法一 篱笆网络Lattice的最短路径问题 这个问题长什么样子 这个问题难在哪里 简化成这个模样你总能回答了吧 下一步我们该干什么 别倒立了我们再 ...

  7. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  8. 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

    图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 阅读本文前,请确保你已经掌握了递归.栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作. 深度优先遍 ...

  9. 详解鲸鱼优化算法原理、数学模型和实例代码

    鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提出的一种新的群体智能优化算法,其优点在于操作简单,调整 ...

  10. 详解SVM支持向量机算法(四:坐标上升和SMO算法)

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 背景 坐标上升算法 定义 过程 举个求解的栗子 基于坐标上升的SMO算法 SMO ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task28.跳跃游戏
  2. Qt中的JSON支持
  3. Java Scanner 类、异常处理 总结
  4. vue click同时传入事件对象和自定义参数
  5. 信息学奥赛一本通 2005:【20CSPJ普及组】直播获奖 | 洛谷 P7072 [CSP-J2020] 直播获奖
  6. 读书笔记: 博弈论导论 - 05 - 完整信息的静态博弈 纳什均衡
  7. 类加载器以及双亲委派模型
  8. Mac系统搭建java开发环境
  9. linux python 升级脚本,Linux环境下python2.7.6升级python3.5.2
  10. 缓存大小_详解高速缓存存储器的3种映射方式
  11. wifi无线设备服务器驱动,如何安装Windows 10的WiFi驱动程序
  12. 抖音视频怎么下载MP4格式怎么转换为MP3
  13. 生命密码是几适合学计算机,生命密码学
  14. 测试电池耗电快的软件,电池快速耗电急救软件
  15. 2022北京养老展(中国国际老年产业博览会)
  16. 对抗训练-smart 论文阅读笔记
  17. Java修改JTable单元格背景色
  18. mysql established_使用mysql
  19. repo init详解
  20. windows系统库

热门文章

  1. 使用dos2unix批量转换文件
  2. 如何在计算机自动开机时选择用户,电脑如何设置自动开机,详细教您如何设置...
  3. android 资源国际化 国家/地区 语言缩写代码
  4. 当AI邂逅电能:与图知科技一起探索工业AI王座|白洞战报
  5. Android APK反编译教程
  6. 论文阅读:VITON: An Image-based Virtual Try-on Network(基于图像的虚拟试衣网络)
  7. dhcp select global与interface配置过程
  8. Linux TCP/UDP调试助手下载安装(转载备忘)
  9. python3.5 爬取mzitu网站图片
  10. pg数据库客户端linux,PostgresSQL客户端pgAdmin4使用