推荐算法之CB,CF算法

初学推荐算法,以下是我的一些见解,如有不对请留言,后续还会更新,这个CSDN太坑了,写了快一个下午的文章,发表了,结果没保存,神坑。。。。。

首先我们来明确一下,推荐系统主要是干什么用的:毋庸置疑,在这么一个信息爆炸的时代,许多信息过载或是过剩,那么我们不可能把全部给看一遍,这里我们就用到推荐系统,那么推荐系统是给用户推荐自己想看的一些视频新闻或是购物的物品等等,或许可能理解的有点片面,但是基本的大的方向是这个。

那么我们来看一下常见的推荐系统有哪些:

目前我们生活中有很多APP都是实时推荐APP,例如小视频类的快手小视频,火山,抖音,新闻类的腾讯新闻,今日头条,大的视频平台腾讯视频,优酷等等,上面介绍的这类APP都是生活中常见的一些可以进行实时推荐的一些app,那么接下来我们就来讲解下,推荐系统。

在推荐系统领域,一般是有两种推荐任务,一种是评分预测,一种是TopN推荐

评分预测是什么:首先看一下有两个用户,他们分别对毛绒玩具的喜爱打分如下

User物品评分
U1小猪

5

U1小猫

3

U2小猪

4

U2小狗

1

用户1和用户2都对小猪有相同的喜爱程度,而且打分还不低,那么我们是不是可以预测用户2和用户1有相同的爱好,我们就可以把小猫推荐给用户用户2,就是这么一个类似的过程

Top—N推荐:同样我们举个例子:用户1,2,3 喜欢着不同的物品,如下表格:

 

UserIterm
U1小猪,小猫,青蛙
U2小狗,小猫,大象
U3小狗

用户3呢是刚刚注册的这个网站,然后买了个小狗毛绒玩具,而用户1和用户2喜欢的玩具top排列如上所示,那么我们是不是可以先推荐和用户三喜好的用户相同的物品即,先推荐用户2的,再推荐用户3的就是所谓的小猫,大象,小猪,青蛙,把那些关联性低的放倒最后,这类推荐可能根据他的好友或是相同的喜欢用户

以上就是所谓的推荐领域的两大推荐问题

 

基于内容的CB算法

接下来我们来介绍推荐算法:CB(Content—Base)基于容的推荐算法,那么什么是基于推荐内容的算法呢:这里分为两个小类

  1. 引入Item属性的基于内容推荐的算法

            概念:用户来到淘宝,在网站上买了个键盘,那么接下来我们就可以通过用户买的这个键盘来进行推荐相关的物品,例如给该用户推荐一些鼠标,鼠标垫,或是不同类型的好的键盘等等,这类推荐是依赖于物品进行推荐,而不是人,那么这类推荐有什么好处和缺点呢:

优点缺点
提升推荐结果的相关性
为什么相关性好了,因为推荐的内容都是相似的东西
无个性化
结果可解释依赖于对Item的深度分析
推荐结果容易被用户感知

 

 概念知道了,我们来看下如何进行计算,这个计算我们需要根据正排和倒排索引来进行推荐计算,举个例子:用视频的例子,例如,用户看了一个我不是药神的视频

那么正排索引根据分词切分出如下结果:score代表分数

我:Score 

不是:Score

药神:Score

然后转换成倒排索引:下面的AB字母代表新的作品,后面跟相应的分数

我: A:3 ,B :2,

不是:A :3,C:1

药神:D:2,C:2

 

通过用户看了一个我不是药神这个视频,我们给他做一个内容分析,分析的产出就是这个倒排索引,这些内容一般存在Nosql数据库里面,方便使用,如何存放,我们简单说一下,key就是token value:推荐内容的列表(作品,分数等等),然后我们就可以给该用户推荐出一个A 6分,C 3分,D 2分,B 2分,然后出来一个这么个候选列表,接下来我们进行排序,推荐出相应的Top—N视频列表

这个场景(引入Item属性的)很直接,很明了,但是这种做法缺少个性化推荐,那么如何能做到个性化推荐呢,我们引入用户的历史记录

        2. 引入User属性的基于内容推荐算法

            概念:这个推荐内容引入了用户了行为作分析,假设该用户在过去三天看了汽车的评测视频,看了生娃娃视频,然后我们可以根据这几个历史标签进行数据建模,进行历史的标签进行分词建立正排到排索引的内容分析,和刚刚不同的是这方面是基于历史行为作分析,也可以存到Nosql,该Nosql 是基于用户建模的数据库,当该用户来了后,我们先查库,然后进行相关的推荐

 

那么这类推荐有什么优点和缺点呢:

 

优点缺点
用户模型刻画用户兴趣需求推荐精度低(仅仅依赖于物品分析,没有其他分析数据)
推荐形式多样性,具有个性化马太效应(可能连环看一类的,只能推一类视频)
结果可解释用户行为稀疏导致覆盖率低

 

看完CB算法,我们来看一下CF协同算法

 

协同过滤的CF(Collaborative Filterin)算法

    协同过滤CF算法和CB不同的是,我们的数据源是基于用户历史行为和物品的矩阵数据即UI(User—Iterm)矩阵数据,用户的行为通过一个表格来归纳起来,如下

 

物品1物品2物品3
U1

1

0

1

U2

0

1

1

U3

0

0

1

但是,这个表格对用户而言不可能全部都有,因为用户不可能把所有物品都给买下来,当然除了那些类似很多底商铺的富豪就不存在了,所以该表格是个稀疏的表格,大部分没有数字,当一个用户来到网站,用户点了一个物品,这时候我们要推荐其他物品,那么这个时候我们推什么呢,就需要通过计算,我们接下来要做的就是相似度计算,这里就要提出一个UI矩阵可以对应两种不同的推荐算法:UU矩阵,基于用户的推荐CF(UserCF),和II矩阵,基于物品的推荐CF(ItemCF),这里相当于来了一个用户,要是根据用户来推荐的话,直接查UU矩阵计算推荐相应内容,要是根据物品来推荐的话,查找II矩阵,推荐其它物品。

举两个例子来说明一下这个UU矩阵和II矩阵,UU矩阵:假如用户登陆微博,那么从nosql库中查询肯定要根据uer来查询,查询的库中消息就是UU矩阵,假如一个用户看了刘德华的电影,那么基于这个刘德华的电影的话,库中使用的矩阵肯定是II矩阵

这里说明一下,大家不知道矩阵如何计算的,可以百度一下,Ui矩阵转换成UU矩阵和II矩阵,Ui矩阵*IU矩阵就是UU矩阵,IU矩阵*Ui矩阵就是II矩阵

 

CF和CB不同的是,CF录入的数据库是各自的UU矩阵和II矩阵信息,而CB录入的库是基于用户相关内容的倒排索引信息

那么这种协同过滤算法有什么优点和缺点呢:

    优点:

  1. 充分利用群体智慧,整个过程没有设计物品的相关文本信息,没有做分词之类的信息提取关键词,都是用户点击行为浏览行为信息,很客观直接

  2. 推荐精度高于CB,CF效果比CB好,为什么呢,因为CF之所以能够跑起来前提是之前有推荐,cf在之前的效果上做一些用户行为的挖掘,分析,入库,例如刚开始的一个网站,压根没有用户登录信息,没有行为数据,也就没有矩阵数据,无法用CF,那么如何做呢,先用CB算法,积累用户的行为数据,形成矩阵,然后再作分析推荐,CB产生的效果仅仅是相关性效果,相关性效果是不是真正让用户喜欢不一定,而CF直接挖掘用户偏好,建立在用户至上,所以效果比CB好,那么这个精度是什么:CB只是对词语来进行相关推荐的,而CF是根据背后的人来进行挖掘推荐,但是这个人与人之间不一定认识,但是推荐就是挺好的,所以这个精度比较高

  3. 利用挖掘隐含的相关性

    缺点:

  1. 推荐结果解释性差 (不清楚为啥会推荐给你,虽然你很喜欢)

  2. 对时效性强的物品不适用(新上架的物品,系统里的矩阵没有相关数据,即达不到推荐)

  3. 冷启动问题

这两种有什么不同呢,接下来我们看一下上面提到的两个算法:User-Base CF 和Item-Base CF

 

User-Base CF

 

假设

  1. 用户那些跟他有相似爱好的用户喜欢的东西

  2. 具有相似兴趣的用户在未来也具有相似的兴趣

方法

  1. 给定用户u,找到一个用户的群体也就是集合N(U),他们具有相似的兴趣

  2. 将N(u)喜欢的物品推荐给该用户

那么我们用下面这这个例子来说明一下

假设有四个相通兴趣的用户,他们分别喜欢如下电影,那么我们要对c用户来推荐Titanic,这个概率该怎么计算呢,首先我们知道四个用户的Ui矩阵,然后我们根据矩阵公式,准换成UU矩阵,这里要提出一点的是,在转换的过程中要求相似度,怎么求呢,公式是:皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在 [-1,+1] 之间

《推荐算法之CB,CF算法》   这里使用皮尔逊相关的系数计算说白了,也就是类似求cos的相似度计算公式,那么我们来看一下另外的求相似度的公式

《推荐算法之CB,CF算法》

《推荐算法之CB,CF算法》

 

 

我们通过以上计算能得到UU矩阵,然后开始对C用户做数据分析,跟c关系好的,看UU矩阵,我们用BD两个人来给C推荐Titanic,那么计算方法就是B和c的相似度*B对Titanic的喜欢分数+D和c的相似度*D对Titanic的喜欢分数/BD对c的相似度相加

 

 

Item-Base CF

 

假设

  1. 用户喜欢跟他过去喜欢的物品相似的物品

  2. 历史上相似的物品在未来也相似

方法

  1.  给定用户u,找到他过去喜欢的物品集合R(u)

  2. 把和R(u)相似的物品推荐给u

 

同样用刚刚那个例子,用户c没有看过Titanic,我们怎么根据用户看过的电影来推荐Titanic,同样通过Ui矩阵我们得到II矩阵,这里计算相似度方法一样得到右边这个II矩阵

《推荐算法之CB,CF算法》

 

UU矩阵是通过好友来计算相关关系,那么II矩阵呢是通过C用户看到的其他电影来计算,即Titanc和Matrix的相似度*c打得分数,相加然后除以各相似度之和

 

通过两种方法,我们发现两种的分数不一样,那么该用哪个呢,哪个真实,其实这个不重要,生活中我们一般是基于用户给用户推荐Top问题,而不是打分情况,即只要排好序就可以,工作这个分数其实还是有用的,一般我们有这么个准则,哪个维度小用哪个,电商网站物品的矩阵远大于用户矩阵,规模太大有时候造成一些慢,相反一样

 

那么我们来看一下这两个对比不同:

项目

UserCF

ItemCF

性能

适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价交大

适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵的代价交大

领域

实效性要求高,用户个性化兴趣要求不高,注重实效性,朋友喜欢什么会立即推给你

长尾物品丰富,用户个性化需求强烈,注重个性化

实时性

用户有新行为,不一定需要推荐结果立即变化,矩阵计算很长时间,等计算出来结果已经不实时了,实时性差

用户有新行为,一定会导致推荐结果的实时变化

冷启动

在新用户对少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是离线计算的 

新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给其他用户

新用户只要对一个物品产生行为,就能推荐相关物品给他,但无法在不离线更新物品相似度表的情况下将新物品推荐给用户

推荐理由

很难提供

可以根据用户历史行为归纳推荐理由

 

 

 

 

 

 

 

 

    原文作者:Jameslvt
    原文地址: https://blog.csdn.net/jameslvt/article/details/81143351
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞