00:00
好,接下来我们再看一下,呃,大家前面想到了啊,就是我们在做这个特征处理完了之后就可以得到的,就是特征工程结束之后得到的数据就可以去训练模型了,训练完了之后得到的。这个推荐结果,我们最后是不是还要收集一些反馈数据去做整个模型的评估和做一个优化,那么我们看一下推荐系统一般会见到哪些常见的反馈数据有哪些来看这是不是就是我们经常见到的这些行为数据啊,比方说评分、投票、转发、保存、打标签、评论,这些是不是都是明显能够表示用户对物品的一个评价,这样的一个一个特征啊,这样的一个行为,对吧?所以我们把它叫做显示反馈数据,那当然这些有一些他对这个用户的偏好可能会表现的很明显,比方说评分,你评高分是不是代表很喜欢这个物品啊,差评那肯定就是不太喜欢,然后另外还有一些,比方说这个打标签,这是用户打标签对不对?大家想到用户打标签的这个内容,是不是也代表了用户对他的一个一个偏好程度啊。
01:16
对,然后大家会想到除了这些显示的行为数据之外,是不是还有一些不是那么明显能够说明它的癖好的,但是似乎也有关联,对不对?大家看是什么,点击浏览页面停留多长时间,还有啊,购买行为对吧?这些行为大家可以看到,是不是我们业务系统应该去收集到日志里面的一些数据啊,这就是其实不是我们单独要要拿到这比方说这个评分我们是单独要存到数据库里的,对不对?像这个给给用户打的标签评论是不是也都要存到数据库里啊,而我们这里边可能就没有专门的数据库去存,只是在业务就是日志系统里边有一个记录,对吧?所以这就涉及到我们可能要从日志里边去把这个东西提取出来,那这些数据,我们往往把它叫做影视反馈数据。
02:11
它在一定程度上,比方说像这个点击,一定程度上是不是可以反映用户的偏好和注意力啊,或者啊,还有这个页面停留时间,一定程度上是不是也可以反映你到底对这个有多感兴趣,对不对啊,但是这里专门还说了一句,它的噪音偏大,为什么呢?有可能我开了一个页面干别的去了,对不对,突然有个事儿,我接个电话就停了很长时间,这不代表我一直在盯着这个页面看啊啊,所以就是它的噪音还是比较多的,我们在处理的时候可能得注意这些是这些各种各样的问题,如果呃,你都不处理的话,就拿什么数据都拿过来直接用,那可能最后的结果就不好,对吧,推荐的效果就不好,好接下来我们重点给大家讲一下这个UGC,这一部分UGC的话,我们重点可能就是说用户生成的这个标签了,大家会想到用户是不是可以直接给物品去打上标签,这个是不是就代表了物品,用户对物品的一个兴趣啊。首先。
03:11
他是不是感兴趣的物品才会去打标签,另外一个是他打出标签来的内容,是不是也代表了他对他的一个评价啊,诶,所以这其实是反映用户兴趣的一个重要数据源,那我们可以把它看成是一个行为数据,也可以他给物品打上了标签,这是不是就可以当成物品的一个内容信息啊,所以在这里我们直接放在这个,就是基于内容推荐这一部分来给大家分析一下它的东西啊。好,那么大家会想到用户对物品的标签行为,打标签的行为可以用什么数据形式来表达呢?我们存在数据库里边,是不是就应该是这样的一个三元组啊,就是哪个用户对哪个物品打了一个什么标签,是不是,所以就是用户U对物品I打了一个标签B,是不是就是这样一个三元组啊?好,那么大家想一想,我们有了这样一个数据之后,怎么样去利用这个数据表达出用户对这个物品有多感兴趣呢?
04:16
他是不是啊,大家可能想过,那你打过标签就代表他感兴趣。这个可能还不太精确对吧,那大家会想到这个用户是不是有可能对物品,一个物品有可能打过很多标签。是不是这样啊,另外就是说一个物品是不是也可能会得到各种各样的各种各样的标签,就是很多用户都会对它打上标签,对不对?大家想想我们怎么样去衡量当前用户对这个物品的一个兴趣程度呢?这里给大家提供一个最简单的一个思路啊,最简单的思路是什么呢?就是首先我们统计每个用户他最常用的标签,然后呢,我们去对于每个标签都统计一下被打过这个标签的物品,我们主要是要被打过这个标签最多次数的那些物品统计出来,然后我们就可以得到一个兴趣公式,这个公式怎么样去做计算呢?大家看这是一个两个N乘在一起,然后再做了一个求和,对不对?
05:22
哎,大,那重点我们看一下这两个N代表什么吧,前面这个UB代表的是用户U打过标签B的次数,所以这代表什么意思啊,代表的是我这个用户特别喜欢打这个标签对不对?那这个代表是什么?是不是说明用户对这个标签就感兴趣啊,他经常会打出这个标签,所以会经常想要看这类东西对不对?诶,这是一个考量,然后后边nbi是什么呢?它是物品I被打过这个B标签的次数,那他就会想到这是不是就代表物品,它跟这个标签有多关联对不对?那他可以想到就是假如说用户优打过很多次这个标签的话,比方说一个用户经常给这个电影打标签,是文艺片。
06:22
那大家可以认为他就喜欢文艺片对不对,有可能他就是一个文艺青年对不对?诶,所以我们相当于就是用他这个打过标签的次数来当做用户的特征了,然后后边这个物品被打过这个标签次数多的话,那是不是代表诶这个物品被打过很多次文艺片的标签,那么它是不是很可能就是一个文艺片啊,哎,所以我们就把这个当成本身物品的标签,那这两个标签如果大家想到如果一样的话,我把他们这两个乘起来,那是不是它的关联度就很高啊,如果你同时打过的这个标签次数高,代表用户有这个特征,那么同时物品打过的这个标签次数也很多,是不是代表物品也有这个特征啊,乘起来这个数是不是就特别的大,就代表我对它很感兴趣,这是不是一个思路啊,诶,这就是一个思路。
07:17
那当然大家会想到,为什么还有一个求和呢?用户是不是不仅仅打过一个标签,他有可能打过很多标签对不对?物品是不是也可能不仅仅收到一个标签啊,所以假如一个用户既打过文艺片的标签,又打过恐怖片的,呃,这两个好像啊,我们就这么想啊,又打过恐怖片的标签,那么物品是不是也有可能被打过这两个标签啊,我们就把任何的两个他们有可能一样的这个标签都统计一遍,如果最后的总和比较高,是不是代表这个用户跟这个物品关联程度就很高啊,你如果用户既对文艺片感兴趣,又对这个恐怖片感兴趣,那打过这两个的标签次数都很多,如果你这个物品也被打过这两个标签次数多的话,那这个成绩肯定很大,对不对啊,加起来也会很大啊,这就代表我们值得推荐,这是一个基本的一个想法,大家可能会想到他会有什么问题呢?
08:21
它有一个呃,非常显著的问题,就是说他倾向于给热门标签,热门物品比较大的权重,什么意思呢?就是说假如说一个标签是谁都有可能给的一个标签啊,比方说我这里给的例子啊,不一定大家评价标签是实际的数据里面这个多,对吧,比方说给一个大签,给一个搞笑,有可能这个标签很多人都会打这种标签,对不对,很多人都会给这个物品,就是经常会打这样的标签,那这个标签是不是我们在统计次数的时候,他总会出现很多次啊啊,那这个最后得到权重就肯定很高,但事实上可能未必是说这个人就他一定对这个大片搞笑特别感兴趣,对不对,只是这个标签很常见而已,我们用的比较多而已。另外还有就是热门物品,热门物品是不是就是打的人数多,是不是他收获的标签个数也就多啊。
09:21
那这种物品它是不是就会总会得到很大的一个权重,那我们最后推荐就会推荐出一个什么样的效果呢?就是总是推荐出来一个热门标签下的一个热门物品,对不对,给所有人推荐出来都是这样,这就变成基于统计的推荐了,对不对?成热门推荐了,这就不代表这个,呃,基于用户的这个兴趣推荐了,所以为了避免这样的一个程度,我们想要提升推荐的个性化和新颖度,对不对。那我们怎么去做处理呢?直观的一个想法,我们是不是应该对这个热门程度要做一个惩罚,如果他越热门,其实是应该给他一个权重,把它降低一点,它的这个权重的。
10:03
那大家会想到这个东西怎么去做呢?呃,这就牵扯到后面我们要给大家提出的这个算法,那我们提这个算法之前先给大家举一个例子,因为这个算法更多的其实是用在文本分析里边做这个关键词提取,呃,这个就是分词语义提取的,大家看一眼啊,我们这个给大家一个新闻吧,这个就是去年的时候,大家知道去年是世界杯年,对不对?大家看一下这个这这一段新闻瞄一眼,大家觉得这一段新闻如果让你提取关键字的话,你觉得哪个关键字更重要?哦,大家,其实我们我们这个人确实比机器智能的多,对不对,我们就扫一眼,其实大家就看出来了,他说的是什么呢?一开始他在说这个,好像这个说的是啊,阿根廷输给法国被淘汰了对不对,但后面其实是不是都在说梅西啊,说梅西的经历,说梅西他被被认为是呃,最伟大的球员之一,那所以这一段新闻他主要说的是梅西。
11:07
但是如果要是机器,大家想机器如果去。搜索他这个就是统计这个关键词的话,他肯定不会像我们这么智能,他怎么样去统计关键词呢?最基本的一个方式是不是就是看对这个词出现几次对不对,那这个方式是不是就像我们前面那个标签出现几次这个方法一样啊,大家看一看它如果我们统计梅西的话,梅西出现几次,一次对吧,然后两次只进了一球啊,巴塞罗那球星,这这个我们知道这是梅西,但是呃,这个他用了另外一种表述对不对,后面就没有了啊,曾经的球王接班人我们知道这也是这个梅西,但是对大大家可以看到,就是他其实没有出现过太多次,只出现了两次,你要这么对比的话,大家看哪个瓷瓶出现的可能更高一些,阿根廷哎,大家看阿根廷可能出现的更多对不对,比方说阿根廷,阿根廷两次了对吧。
12:07
祖国阿根廷三次了,对不对啊,至少已经有三次了,对不对?而且大家其实可以更进一步的想,如果你要这么去看考察瓷瓶的话,更多出现的应该是什么词啊,对,应该是the的,或者说呃,对吧,是在往往是这些就看起来没有什么真正含义的这些词,你分出来之后,这往往是出现频率最高的,对不对?那大家可能就会想到这些是不是对应的就是我们的热门标签啊。那热门标签是不是应该对他进行一个惩罚?但是大家会想到,你凭什么说他是热门标签的?那我们想到的就是说他是不是比方说阿根廷这这一篇这个短新闻啊,大家会想,或者这个短文章,大家可以看到,他明显说的更多的是梅西。
13:03
那如果说大家想另外一篇文章里边也出现阿根廷这个词的话,他是不是有可能说的是阿根廷这个国家啊,或者说的是阿根廷这个政治环境,对吧,他的这个经济状况,呃,有可能说的是这些东西,那大家整体来想一想,在所有的文章里边,是说梅西的文章多,还是说阿根廷的文章多呢?大家可能会觉得,诶梅梅西这么火,那肯定说梅西的文章多,我这里说的不是说它主题说的是谁,是说这个词要出现,对吧?大家是不是能想到,假如梅西出现,是不是很有可能会阿根廷同时出现啊?是不是很有可能我们一句话里面就说到,诶梅西,阿根廷球星梅西对吧,很有可能就会提到,对不对,阿根廷人怎么怎么样,阿根他的这个梅西的祖国阿根廷怎么怎么样啊,这个很容易就会提到,但是如果出现阿根廷的一个文章里边是不是梅西不一定出现啊,如果你介绍是阿根廷的政治环境,显然梅西就不应该出现,对吧。
14:08
所以大家就会发现,从所有的文章里面来看的话,是不是出现阿根廷这个词的文章应该更多,而出现梅西这个词的文章应该稍相对来讲少一点,对不对?那么大家就会想到,如果一篇文章里边同时出现了梅西和阿根廷。那他是不是说梅西的概率会更大啊,那我们就应该,如果他在别的文章里边也会平常出现,频繁出现的话,我们其实就认为它是一个热门的词汇,我应该给它做一个权重的降低,对不对,做一个惩罚,那同样大家可以想到像这个的了,这些词是不是几乎所有文章里面都有啊,那他就想到了所有文章里面都有,那是不是它就不应该是一个关键词了呀,权重就应该降低对不对?就是我们所说的,如果所有的特征都一样的话,这就不应该叫一个特征了,呃,跟前面这个特征处理的思路是一样的。
15:10
好,那么我们到底这个算法是怎么做的呢?这里就提出了这样一个给大家这样一个算法啊,叫做t fidf。它的名字叫做词频,逆文档频率,所以它其实就是分两部分,一部分是TF,大家看缩写是不是TF term frequency就是词频对吧,词语频率,然后后边这个是逆文档,逆向文档频率,那这个它是一个什么东西呢?简单来说t fidf就是由两项组成的。呃,大家看本身它是两两个对吧?呃,那它其实计算的过程当中也就是两项,一个就叫TF磁瓶,另外一个IDF叫逆文档频率词瓶好理解,大家可以想到是不是就是对一个文章里面出现了几次,这是不是就是磁瓶啊啊,当然出现几次,这是它出现的这个频数,如果是说频率的话,是不是还应该除以对总词数对吧?来考察一下它出现的频率,因为每一个文章它本身的总词数不一样吧,那后面这个逆文档频率大家就会想到这是不是就是对它热门程度的一个惩罚啊,哎,所以直观来讲就是这样好,那么这个逆文档频率代表什么呢?代表它出现在语料库中出现的频率什么意思?语料库是不是就是我们所有的文章啊?
16:35
或者对于我们的这个推荐而言,就是所有的标签对不对?所有人打出的所有标签,那这就相当于如果出现的很频繁的话,它就是一个热门,我们应该跟它成反比,让它做一个惩罚下降,对吧?哎,这是t fidf的一个思想啊,好,那么它其实在这个搜索引擎的应用里面非常的常见,大家会想到做这个新闻分析对吧?文本分析经常就会用到这样的一个处理方式,所以在这里给大家讲一下,那具体的计算怎么算呢?首先TFTF的计算公式就是这样一个除法,两个数相除什么除以什么,上边NIG是不是表示词语I在文档这里边出现的频率啊,评数这个应该叫评数次数对不对?出现的次数,那下边这个芯这个,呃,这是不是就表示总次数啊,对吧,所以就是我在这个J文档里边出现的。
17:36
字数除以这个J文档里边的总词数,这就是我当前统计的这个I的词频对吧?TF,那TF越大是不是它的重要程度就越高啊,在这个文章里边的重要程度就越高啊。接下来我们看IDFIDF怎么算,但大家看它是又用了一个log对吧?Log里边又是一个除法,这个除法是什么呢?分母是N加一,N是。
18:04
文档级的总文档数一共有多少个文档对吧,是什么呢?诶是所有文档里边包含这个爱这个词的有几个文档。大家想一下,本身这个ni除以N是不是代表它的一个,这个出现在文档中的频率对不对?所以我再把它反过来,是不是叫逆向文档频率啊,那大家就可以想到我这个如果在文档,其他的文档里面出现的次数越多,也就是更多的文档都包含这个词,是不是这个恩爱就会越大,那整个这个是不是就会越小啊,相当于是乘起来,是不是就对它做了一个惩罚啊,所以就是这么样一个计算,那大家可能会想到后面为什么要加一呢?对,加一是不是防止你这里分子分母不能为零对不对,如果为零的话,这里LOG0,那肯定也是一个,这个负无穷,这不能做计算的啊,至少保证它大于一,对不对,好,所以这是t fidf的一个计算过程,好。
19:07
呃,那么接下来还有一步就是说基于t fidf,我们可以对UGC做一个改进,那这里边给的这个改进算法并不是直接应用了t fidf,大家看一下他做了一个什么改进呢?是不是可以利用我们前面的思想引入一个对热门的一个惩罚啊,所以大家直接看吧,最后做了一个什么事情呢?是不是下边都除了一个log项啊,如果我们上面再加一个所有的那个N值,分母上再加,分子上再加一个所有的N值,是不是就是我们那个逆文档频率了,这里没有加那个,呃,就是总共的文档的数量,那个是个常数嘛,所以说你不加也无所谓,这里是不是大家看LOG1加NB,它代表什么呢?是不是就是标签B被多少个不同的用户使用过,那么这一项一除,是不是就惩罚了热门标签啊,你如果被用的这个次数多,我就给你做一个惩罚除一下,对吧?后边的这个恩爱又代表什么呢?代表物品I被多少个不同的用户打过标签,这是不是热门物品啊,我把这个统计出来除一下,对热门物品也就有了一个惩罚啊,这是这样的一个简单的思路,当然了大家也可以去自己设计,大家看这里就不是直接应用算法对不对,这是借鉴了算法的思想,自己去做了一个设计,当然了,我们在后续给大家在代码实现,在这个项目里边,我们也会用到t fidf算法,我们就是直接调库去直接用这个算法把它的那个标签做一个统计,就可以了,得到它的一个特征,这样就可以了,好,这就是这一部分内容。
我来说两句