00:00
另外一个重要的内容就是推荐系统的分类,那么这个分类大家会看到啊,在这里列出了很多很多的分类,各种各样的推荐,各种各样的推荐系统,在这里边我其实是想给大家做一个梳理的,根据不同的分类原则给大家做了一个分类,所以大家看一看,这样分出来是不是会更加的清晰一些,更加的明确一些,那我们首先看一眼啊,第一种分类方式根据什么来分呢?根据实时性来分。这个很好理解,我们可以做离线的推荐,也可以做实时的,那根据实时性就可以分成这样两类,那另外我们还可以根据什么来分呢?是不是还可以根据是否个性化的推荐来分啊,那一类就是不是个性化,不是个性化是什么样的呢?就是我们前面说的热门推荐,所有人看到的都一样,这是不是一个基于统计的推荐啊?
01:01
哎,所以我们在这里分出来的两类就是基于统计的推荐和个性化的一个推荐,然后接下来大家就会想到,我如果要是一个个性化的分类的话,是不是还可以有不同的推荐原则啊,如果说我的推荐原则基础是基于相似度去推的话,这是不是就是相相当于是我们之前提到的人以类聚,物以群分那种方式啊,啊,大家就会想到我可以给它们打上各种各样不同的标签,提取出不同的特征,然后根据它们的相似度,然后去做一个匹配,这就是我们的一个,呃,这样的一个推荐原则,除了这样的一个推荐原则之外,还有什么样的推荐原则呢?还可以基于知识,基于知识是什么呢?或者说有些地方把这个叫做基于规则,这是什么意思呢?也就是说没什么别的原因,我直接给你订好,什么样的人我就给你推荐什么样的物品,这是不是也是一种方式啊?所以之前我们不是可以想到我可以根据本身用户和物品他们的信息去打上标签去,呃,去提取出他们的特征吗?一方面我可以根据特征去算它们的相似度,基于相似度去推荐,另外一方面我是不是可以根据它们的特征直接去定义规规则给他们去推啊,比方说我定义出来,诶,程序员就喜欢大长腿啊,这是不是就是一种规则啊啊,当然这种规则不一定不一定靠谱,这个靠不靠谱,这是不是就相当于是我们的推荐系统设计的好不好的一个问题啊,啊,所以大家会发现,如果基于规则或者说基于。
02:52
知识去推的话,这相当于就成了我们直接拍脑袋去想了,那这个过程当然就是很多是一些经验的总结,对吧,所以这个过程肯定是要根据我们的一些反馈数据去做调整的,另外还有一类是什么呢?啊,基于这个模型去做推荐,其实在有一些推荐系统的这个描述里边,把基于知识和基于模型的推荐是归成一类的,为什么呢?因为大家会想到基于模型是不是相当于不是我直接。
03:26
已经知道一个知识,然后基于这个去推,而是说我要去训练一个模型,去发现这个知识,发现这个规则啊,啊对吧,相当于是这样的一个过程,所以基于模型这一部分,这就是典型的一个机器学习问题了,对不对?就是我现在还不知道所有的数据里边它有什么规律,有什么规则,我要去设计一个模型,训练一个模型,训练好了之后,我就知道它有什么规律了,然后我再根据这个规律去做推荐,那这个是一种方式,有些地方会把这两个就是结合在一起,就认为基于知识和基于模型是一样的,我在这里给大家分开说,好,那么这是我们根据不同的推荐原则来做的一个分类,还可以根据什么来推来分呢?大家再看右下角的这种分类方式。
04:20
那这种分类方式就又会特别一点,它根据数据源来做一个分类,这种分类方式尽管比较特别,但是对于大家来说,我觉得其实非常好理解,为什么呢?对,因为我们前面是不是已经明确的区分,我们整个推荐系统的数据来源是有三三部分啊,好,那我们就直接定义了,假如说我们的数据来源主要基于的数据是用户的基本数据的话,我们就把它叫做基于人口统计学的推荐啊,当然大家会想到基于这一部分推荐的话,一方面我们可以去啊统计这个人口的这些人口统计学上基本的那些信息,对不对,然后之后是不是可以贴上标签啊,打上标签对不对,之后是不是进一步可以做用户画像之类的东西啊,大家应该听过这个概念,对不对,用户画像,所以呃,在我们这里边呢,给大家可能这部分会介绍的相对比较。
05:20
要少一点啊,为什么呢?因为是不是用户的本身数据比较难以获得啊,你不可能一上来之后就去做户口调查对吧?让用户填填写很多信息,所以这一部分可能我们会介绍的相对少一点,然后另外一部分就是基于内容的推荐,大家会想到你既然是按照数据源分类,前边人口统计学这一部分是数据源,是用户信息,那基于内容这一部分是什么啊?它的数据源就应该是对,是不是都是物品的信息啊,商品的信息对不对,所以这一部分我们把它归类叫做基于内容的推荐。
06:01
然后最后还有一部分叫做基于协同过滤的推荐啊,这个概念可能大家看着有点陌生,稍后我们再讲,但是我们至少可以想到它的数据来源应该是哪里呢?是不是就是行为数据啊,对我们基于行为数据去做的推荐就叫做协同过滤的推荐,好,那接下来我们把它简单的画一个图给大家看一看,就是这个推荐系统分类大概是怎么样去分的啊,我们整个推荐系统如果说按照呃,当然这个里边没有按照实时性去分,大家想到实时性跟我们这边的分类方式是不是完全不一样啊,对吧?那大大家想到那就是另外一套东西了,如果说我们根据它是否个性化来分的话,一分是不是就是基于统计和个性化两类啊,然后个性化推荐系统是不是又可以分成下面的几类啊,那么大家会想到啊,下面这几类是不是都是个性化的,你如果要是基于统计去。
07:02
推荐是不是就不存在你是用用户的数据还是这个物品的数据了,你直接统计出来热门一推就完事对不对?就不存在到底用哪个数据了?所以我们下边的这些分类方式全是基于个性化推荐系统来做,做的都是个性化推荐系统,那么当然如果说我们根据数据源来分的话,分出来是上面的这三类,那分成的这三类对应我们是不是又可以利用不同的推荐原则去做算法设计啊,所以具体在做算法设计的过程当中,是不是又会用到相似度知识或者模型这样的几种方法啊,而且这几种方法是不是也有可能不光用到一种,还有可能交叉在一起对不对啊?所以大家会看到我们最后的一个推荐系统里边,其实是所有内容的一个柔和啊,那接下来我们第二大部分就是要给大家去做一个。
08:02
算法的简介了,那么这一部分内容呢,主要包括的其实是三部分,大家会看到我们这里边算法是根据什么来做的分类啊。基于人口统计学,基于内容,基于协同过滤,是不是按照数据源来做的分类啊,对,就是我们前面讲的最后的那种分类方式,对不对啊,这是这是以这个作为例子来做的一个分类方式,大家会看到我们在这种分类方式里边,其实别的一些,比方说推荐原则啊,基于相似性去推荐,比方说基于模型去推荐,也会渗入到这个里边去,对吧?所以大家会想到他们都是结合在一起的,我们的主线是按照数据源来分,当然了前三部分就是根据我们的三大数据源,然后有了三块不同的推荐方式,最后这一部分混合推荐,那是不是就是把所有东西混在一起的一种推荐啊啊,那这是我们要给大家做的一个基本的介绍。
09:05
基于人口统计学,大家看一下是一个什么样的推荐过程呢?我们看一眼这个图,大家看这个图里边我们首先能看到什么样的信息,对,在这个图里边我们能拿到的是不是是用户的信息啊,我们已经知道了用户的信息,那么用户的信息里边我们可以看到有年龄和性别两个信息,那么通过这两个信息我们可以得到什么样的就提炼出什么样的内容来呢?得到什么样的关键的信息呢?诶,大家可以看到这里我是不是可以得到一个相似的信息啊,那这里我们就要又要结合相似度的原则去推了啊,我可以得到一个相似的信息,什么信息,用户A和用户C都是年龄在25岁到30岁之间的一个女生,对不对啊,所以这是不是他们两个用户就比较相似啊,然后我们再结合什么呢?我们会看到用户A是不是喜欢的物品A。
10:11
那我们就会想到是不是用户C对,他跟用户A是一类人对吧?那么人以群分,既然用户A喜欢了物品A,我们是不是可以把物品A推荐给用户C啊,诶,这就是一个基本的想法,所以大家看一看这个图,其实这就体现了我们所谓的人以群分这样的一个过程,那么它基于的是什么呢?其实基于的就是我们用户的基本性质,这就是基于人口统计学的一个推荐。好,那么接下来呢,我们第二类基于内容来推。那基于内容可能就会有所不同了,基于人口统计学,我们知道的是用户信息对吧?那基于内容我们应该知道的是什么信息呢?对,应该是物品信息对吧?好,我们这里举一个例子啊,啊,当然这个例子是一个电影的例子了,我们可以看到这里边拿到的电影信息是什么信息呢?是不是就是一个类型信息啊,啊,当然了,类型我们可以作为标签,这是一个标准的电影信息,我们可以看到电影A,它的类型是一个爱情片还是一个动作啊,它是一个爱情动作片是吧?啊好,那么我们可以看一下,既然都知道了不同的电影信息,我们从中可以提炼出什么样的数据呢?可以得到什么样的更多的内容呢?更多的信息呢?我们是不是可以根据电影的内容得到不同电影之间的相似度啊?
11:45
比方说我们看到电影C,诶,它的类型是一个爱情片还是一个动作片,还是一个剧情片,哎,那么大家会想到这是不是跟电影A会有一点类似啊,哎,他们有非常接近的标签,有两个标签都一样,对不对?所以他们在内容上应该是很相似的,那么对应的像这个电影B,它是一个恐怖片,一个悬疑片,惊悚片,这是不是看起来就风马牛不相及,对吧,完全不一样,所以我们还是基于相似度原则的话,大家会想到如果用互A,诶,看过了电影A,然后还喜欢电影A,然后大家会看到啊。
12:29
用户B和用户C都看过了电影B,喜欢电影B,那么我们现在这个电影C应该推荐给谁呢?是不是肯定是推荐给喜欢了电影A的这个用户啊啊哎,所以这就是我们基于内容,然后去做一个相似度推荐的一个过程,这就是物以类聚,那么这两部分应该还比较好理解对吧?好,那接下来我们就给大家再讲一个基于协同过滤的推荐,那首先大家会想到基于协同过滤这个概念稍微有点呃,不太直观,那什么叫协同过滤呢?啊,我们先给出这个英文名字啊,英文名字叫collaborating CF,那么这样一个CF协同过滤代表什么内容呢?
13:23
大家会想到我们现在这一部分推荐,我们要用的数据是什么,是不是行为数据啊,既然是行为数据,它是不是其实是用户和物品之间相关联的一个数据啊,所以比方说我在这里列出这样的一个矩阵,大家看啊,里边是一到五的一个一个,呃,整数,那可以想到这是不是类似于一个评分啊,一星到五星的一个评价对不对?所以我这里拿到的其实就是一个用户,所有用户跟所有物品之间的一个评分相关联的一个矩阵,对吧?那所以我利用这样的一个数据想要做推荐的话,那是不是既跟用户有关系,又跟物品有关系啊,就不同时就不仅仅是基于用户或者。
14:23
是基于物品了,对不对,同时跟他俩都有关系,那是不是物用户和物品就要协同作战了呀,就要有关联了,对不对,发生关系了,所以这就是协同的意思。那接下来我们是不是想要根据他们俩相关联的这个信息,从中去筛选用户有可能感兴趣的东西啊,那这个过程是不是要在这个庞大的这个原始数据里边去做筛选,去做过滤,去做提取啊,所以这个过程我们就叫做协同过滤。
15:04
啊,那当然了,协同过滤又可以有一些具体的分类,因为大家会发现它本身又跟用户有关,又跟物品有关,对不对?那么我们第呃首先可以分成两大类,一类就是基于镜灵的协同过滤,另外一类基于模型的协同过滤,那大家看这个分类又是基于什么区分了,这相当于是基于我们的推荐原则区分了对不对?你是根据相似性的原则,还是基于我们的那个自己构建一个模型去学习,对吧?所以这是两种分类的方式,再把它做一个细分,然后如果再去分的话,基于近邻这一部分又可以划分,怎么划分呢?你既然是相似性原则,那我是不是就可以去找,还是你是到底是用户相近,相近还是物品相似,对不对?哎,所以这里的划分就又分出了基于物品的协同。
16:04
过滤和基于用户的系统过滤,他们还有专门的一个一个概念啊,一个这个呃,英文的名字一类叫user CF,一类叫item CF。大家如果就是面试接触更多的这个概念的话,这个概念也是需要知道,User CF item CF其实说的场合还是比较多的啊,就是而且就是实际的,呃,这个应用的场景里边很多企业它其实用到的这个,呃,算法和基本的这种推荐的方式,其实就是这些啊,U CF item CF应用非常广泛,当然了现在更多的还会去打标签对吧,做用户画像,基于内容去做推荐是一个综合,那这部分也是也是其中之一,所以大家需要去做一个了解。另外还有一部分基于模型,那么大家会看到就是基于模型,这部分就牵扯到机器学习,那么这里可能会应用到很多的具体的机器学习算法,比如说给大家提一些奇异值分解SVD啊,潜在语义分析l sa,还有支撑向量机SBM,这些大家可能听过可能没听过,呃,但是这些就是我们后面如果用到哪些给大家介绍哪些,不会去全部展开对不对,如果展开的话,这个东西就太多了。好,这是我们给大家的一个基本的介绍,好,那接下来就会呃,给大家说一说这个CF啊,协同过滤的这个推荐方法跟基于内容的推荐方法有什么联系,有什么区别,那么基于内容前面我们讲了它的数据是不是主要应该就是物品的数据啊,协同过滤方法。它就不仅仅只是用这些数。
17:56
据了,他是不是还可以利用诶更多的评分数据,另外他是不是还可以利用到其他用户评分过的数据啊,因为是协同的,对不对,所有用户的信息和所有物品的信息都要放在放在一起去用的,所以这个过程其实F能够利用到的数据信息其实是更多的,好,这是一点,然后大家会想到,那么CF可以解决哪些问题呢?首先啊,基于内容啊,有时候简称就把它叫做content base cb对不对?CB它有有哪些问题啊,首先CB基于的是物品的信息,那么。
18:42
大家就会想到有一些场景里边,假如说我们拿不到物品的信息呢,诶这种时候就可以应用用户和物品的一些关联的数据,一些行为数据去做推荐了,对不对?我们的行为数据其实就是说不需要上来之后收集用户的信息,也不需要上来之后收集物品的信息,什么数据都都没有,都可以,只要你的用户跟物品他们互相之间有关联,对吧,你只要上去点,你只要上去给他有评分,看了之后给他有评价,我把这些数据收集起来,诶那是不是基于这些就可以做推荐了呀,所以在推荐的过程当中,是不是就会有更大的自由度啊啊,我们可以在更多的情况下都可以给用户做出推荐啊,大家也可以想到,即使我们没有显示的这些评分评价信息。影视的那些用户。
19:42
点击浏览的信息从日志里边是不是一定可以得到,所以即使我们最坏的情况下,只要我们拿到日志就可以基于CF去做推荐了,对吧?啊,所以这是我们比较好的一点,说的这么好,那这个CF是不是没有问题啊,是不是他什么,那要这么说的话,我们就不要基于内容去推了呗,我们还打标签对吧?做特征提取你干嘛那么复杂呢?我们直接日志里面提出这个行为数据不就完事了吗?首先其实在前面的这一页里边,大家会看到我们得到的这个行为数据是完整的一个矩阵吗?是完整的一个列表吗?其实不是,对吧,因为用户给物品打过分的,或者说有行为的这些物品是不是应该是少数啊,对吧?一个电商网站上商品有那么多,我不可能把所有的物品都买过一遍,都评价过一遍吧。一个电影网站,我不可能把所有的电影都。
20:42
都看过一遍,都评价过吧,所以我们得到的这个行为数据其实是不是一个稀疏矩阵啊,诶,所以那么我们在做协同过滤推荐的时候,对这个数据其实就要求非常高了,它本身是稀疏的,那它稀疏到什么程度呢?如果说非常非常稀疏里边就没有几个行为数据的话,那我们是不是推出来的就肯定不准啊,呃,所以大家会看到就是这个CF这种方法,它好是好,可以不基于我们那些特别复杂的信息,但是它比较依赖历史数据,你如果历史数据比较少或者说不太准的话,推荐出来的结果也就不好。另外一部分,既然它依赖历史数据,大家就会想到我一开始一个系统刚上线的时候,是不是什么历史数据都没有,一上来的时候,你个用户和物品一开始都没有,你更不要说任何的历史数据了。所以一开始用户。
21:42
不先注册进来之后,你肯定什么什么推荐都没有对不对,那这个问题怎么解决呢?啊,这就是我们所所谓的冷启动问题,你上一上来之后,首先应该有一个基本的推荐,那这怎么解决呢?啊,大家其实就会想到就不能用CF的方式去解决了,可能我们就诶基于统计直接给他一个热门推荐,这是不是一个预先就可以看到的一组推荐啊,或者还可以基于我们提前已经获取到的用户标签对不对?诶一进来的时候用户去点点选一下,你到底喜欢什么类别呢?我根据这个类别去做一个推荐,这是不是都是对应的这种方式啊,所以实际的推荐过程当中,是不是一定会把所有的推荐方式结合在一起用,哎,这就是要取长补短,利用它的好处,然后弥补它的不足啊,当然了,就是这个协同过滤,它主要是分成两类,基于基近邻和基于模型,对吧。
22:42
那接下来我们可能会给大家简单的说一说,这个基于近邻,它又是怎么样的一种协同过滤呢?我们前面提到基于精灵里边又分成两类,一个叫user CF,基于用户去做相似度的判断,另外一类叫item CF,基于物品,就是看你到底是用户相似还是物品相似,那我们看一眼啊,基于用户还是一张图来搞定user CF是一个什么样的一个一个协同过滤呢?大家看这幅图里边有什么数据?
23:18
有什么数据,诶,我们之前那个user基于人口统计学,基于用户数据的推荐里边跟他很类似,对不对,也是找用户的相似,但是那个数据是不是比我们的这个数据里边多一个什么呀?对,多用户信息,我们现在是不是没有用户信息了,没有用户信息,但是我们可以拿到什么什么数据啊,在这里面有什么数据,对,是不是行为数据啊,所以大家看到如果相比较的话,我们这里边的行为数据这个这个线是不是比当时的那个线就要多一些啊,所以我们要基于这个来推,所以这个是这个数据是不是要求就会高一点,所以大家看我们现在拿到的是什么数据呢?我们看一眼,用户A是喜欢过物品A和C,对不对,然后物品用户C是喜欢过ACD,那从我们现有的数据来看的话。
24:18
我们可以得到什么样的一个结论呢?A喜欢用户,A喜欢A和C用户,C喜欢ACD。是不是A和C对相对来讲是不是接近一点啊,因为用户B的话,他喜欢物品B,这个就完全不一样了,对不对,那用户A和C都喜欢AC2个物品,它们俩比较接近,那所以大家会想到,如果这个时候用户C还喜欢的物品D的话,那么我们基于相似度的原则,是不是这个物品D也可以推荐给用户A啊,诶,所以大家看到这其实就是。
25:01
User CF基于用户相似度的一个协同过滤。大家可以考察一下,他跟前面我们讲到基于人口统计学有什么不同,对吧?他没有用户的基本信息,我们考察它的相似度,就是根据他们的行为数据来看的,就是你是不是喜欢过同样的东西,对不对?好,那接下来对应的还有一个是基于物品的协同过滤,那这一部分就是item CF还是一张图,这张图做对比的话,就要跟前面的基于物品的那一个图来做对比了,对不对?基于内容信息的推荐来做一个对比了,大家看一下这张图能看出什么信息呢?还是没有任何的用户信息和物品信息,对不对?我们能拿到的是不是只有行为数据啊,当然行为数据比较多,那我们来分析一下,用户A喜欢了A和C,用户B喜欢了ABC,然后用户C喜欢了,用物品A。
26:07
如果找用户的相似度,大家会发现好像都还比较接近,对不对?这个好像不太好找,那我们就换一个思路去找一找,从物品的这个角度来想的话,是不是可以找到两个物品比较相似呢?比方说物品A被哪几个人来喜欢呢?是不是ABC都喜欢啊?物品C是不是AB都喜欢,所以是不是有两个人共同的都喜欢这两个物品啊?那物品B他喜欢的人是不是只有用户B喜欢了它,所以相对来说是不是B和他俩的差别就大一点,物品A和物品C是不是比较相似?所以那么这两个相似的话,既然用户C还喜欢了物品A。
27:04
那么物品C是不是就应该可以推荐给用户C啊?大家想一下,这个过程能不能转过来,应该没问题,对不对?所以大家看到这个过程其实就是基于物品的一个协同过滤,我们用到的就是行为数据,根据哪些物品,就是物品被哪些人喜欢,找出物品之间的相似度。然后我们基于相似度的原则把他推荐给啊,就是还没有发生过关系的那个人,对不对?所以这就是我们介绍的协同过滤user CF和item CF,接下来给大家介绍一下混合推荐,混合推荐是指什么意思呢?顾名思义,其实就是说在实际的系统当中。往往不仅仅只是应用一种推荐方式,也不仅仅是基于一种推荐原则,也不仅仅是只基于一个数据源,所以我们最终应用的方式往往是一种混合的,那么混合推荐它又是简单我们想象的把所有东西揉在一起就完事了吗?啊也不是这样的,混合推荐也分成几类,就是有不同的混合方式,对不对?那么我们首先来看一下啊,就是比较流行的组合方式有哪几种呢?第一种就是加权混合,那大家可以想到就是说我根据不同的推荐方式是不是可以得到不同的推荐列表,或者说一个推荐的结果啊,我把不同的推荐结果每一种给上一个加权的系数,再把它们合在一起,这是不是就是一个最终的推荐结果,这就是一个混合之后的方式,所以这是一个加权混合,那实际应用当中用的更常见的。
28:51
是什么呢?可能是下面的两种情况,一种是切换混合,什么叫切换混合呢?啊,这个就更简单了,就相当于就是两套系统。
29:02
两套系统,然后我有一个相当于有一个切换的拈,然后根据不同的情况,我把它切换到不同的推荐系统当中去,那所以这就相当于是为不同的具体的数据源,这个用户和物品,然后就相当于应用了不同的推荐方式,另外还有一种常见的混合方式叫分区混合,这个其实更好理解,怎么样分区混合呢?啊,就是你之前我的所有的推荐的方式,各推各的,推出来之后,我把不同的推荐方式放在不同的地方给你显示不就完了吗?哎,所以大家会看到这其实是更多的网站它会采取这种方式,因为一个电商网站是不是首页当中有各种各样的模块,不同的地方都可以做推荐啊,诶,所以那我不同的推荐算法,不同的推荐推荐方式,我就可以叫不同的名儿,不同的拈,我们放不同的推荐结果就可以了,呃。
30:03
这也是我们之后的项目里边要用到真正的做混合推荐的时候,也就是用这个最简单的分区混合,把它做一个混合就可以了,最后还有一种分层,分层混合的一种推荐机制,这是一种什么机制呢?简单讲,那就是所有的推荐方式一层一层的串行排列起来啊,那它就是前面推荐出来的结果,作为输入输出,输输出到我们后一层的推荐,推后一层的推荐,利用前一层的输出作为输入,然后再去做处理,再去做下一层的推荐,一层一层把它连接起来,那么它可以综合我们各个推荐机制的这个优缺点,然后得到一个更加准确的推进,当然实现起来也会更加的复杂,那实际的应用场景里面,可能更多的还是切换混合,分区混合,加权混合可能会稍微的多一点。
我来说两句