00:00
上节课我们已经做到了,把这个呃,就是用passing TF工具把这个词平算出来了,对不对?接下来我们继续是不是就是要IDF了,好,那接下来我们继续引入一个工具,然后又引入一个什么工具呢?叫做一个IDF的一个工具,那么它是可以做什么事情呢?可以得到呃,IDF模型,它是这样的一个东西。那大家会想到它是不是相对相对于我们整个所有的数据而言,把整个的这一个data frame传进去,相当于就是把我们的文档集传进去了,对不对?大家看data frame里边一行数据,在我们本身这个文本分析的角度来看,是不是相当于是一个文档啊,然后哎,这里边它所有的文档出现的次数,所有的这个文档的种类就我们全全部统计出来了,对吧?然后我们根据这个data frame是不是就可以构建出一个IDF对应的模型啊,这个词在所有文档里面出现几次,是不是能统计出来了,看它的热门度对吧?所以这一步大家会看到我们要做的引入一个IDF是要先得到这样的一个模型的,所以IDF是什么东西呢?啊,大家看一个叫做IDF的工具对不对啊,这里边还得去引入一下啊,我们引入M。
01:34
L里边的IDF,然后大家会想到它是不是也需要去做这个set input set output啊,这里我们的input应该是谁呢?是不是应该是这里的row features啊,那同样我们自己给它定义一个output,比方说这里我们就应该是提取之后的feature的,对不对?哎,直接定义成features,这是我们定出来的IDF工具,然后大家会想到它得到模型,怎么得到模型呢?我们定义一个IDF model是不是应该把原始的所有文档数据传入啊,我们的原始所有文档数据是不是都已经在呃,当前的这个data frame里了,所以大家看IDF有一个,大家看有一个fit方法,是不是有点像我们机器学习里面,大家定义一个类里边有fit方法,有predict,对不对?哎,所以。
02:34
这里调它的fit方法,传进来的就应该是原始数据feature feature。Rise data,把这个data frame传进去,得到它的。这样IDF的模型,那可以想到这个fit过程是不是就是把所有词出现在多少文档里面,把它那个热门程度算出来了,然后我们对应是不是根据公式就可以把每一个词的针对每一个文档里边的t fidf算出来了啊,所以接下来这一步大家可以看到啊,它是做了什么呢?训练IDF模型得到每个词的逆纹的。
03:21
频率,然后接下来是不是根据这个每个词的逆文档频率再算回去就可以得到t fidf那个值啊,对吧?所以我们最后得到的我们就叫scale的data处理之后的数据IDF model得到的这个model可以做什么事情呢?它又跟上边的tokenizer分词器和哈ing TF一样,可以做一个transfer,所以大家看所有的东西都是定义一个东西transfer定一个东西transfer定义的时候又可以指定输入的列和输出的列,对不对?所以每一次transfer是不是相当于后面多加一列啊,啊,这就是我们这种做法啊,就还是比较好理解的,那这里要传入的是不是就是还是featureize data啊,对吧?所以这里我们的做法是。
04:18
呃,就是用模型对原数据进行处理得到呃,文档中每个词的,这里的文档其实就是我们这里的一条数据,对吧?一组类别信息,每个词的t fidf值作为我们的作为新的特征向量啊,这就是我们的要做的做法,那当然这里我们也可以看一眼这个scale的data得到的到底是个什么东西,对吧,Data还是跑一遍。
05:08
下结果。现在新得到了一个叫做features的这样的一个一个列,对吧,那大家看它里边的元素数据类型是什么呢。这个数据类型是什么,是不是还是一个。还是一个稀疏向量啊,跟前面我们讲的这个稀疏向量是不是一回事,只不过它发生变化了,原先我们这里只是磁平对不对啊,现在它是不是把我们原先磁瓶的那个位置全填成了计算好的t fidf值啊,那大家看一下这个t fidf值算出来是多少啊,原先的这个27出现了一次1.0对不对,那这里算出来之后是0.76。然后下边的这个26这个词出现一次1.0,算出来是2.19,大家看这个显然不一样,对不对?那不一样,我们具体来看一下吧,这个词是因为什么呢?因为它的这个词是drama drama是戏剧的意思,对吧?那大家可以想到就是戏剧性的,戏剧化的这个词是不是很多电影很多它都可以有这个标签对吧?你只要那个情节比较曲折一点,复杂一些,或者说有一些,呃,就是特别的这些情节,那其实就可以把它叫做drama玛,那下边的这个是什么呢?Horror大家知道这是恐怖片,对吧?那这就是跟大家说的,你觉得是drama出现的次数多,还是horror出现的次数多呢?
06:45
对,呃,大,大家觉得drama玛,它出现的次数多,这样的热门标签,我们是不是要对他进行一个惩罚啊,因为我们觉得如果所有人都出现drama的话,它是不是就不能不太能代表你的特征啊。
07:01
而horror恐怖片,如果不是所有片都能出现这个类型的话,只要出现horror是不是它应该就是一个恐怖片,这个特征很明显,对不对?诶,所以大家看到经过这个计算之后,它的权重就不同了,一个是0.76,一个是2.19,当然作为这一个例子而言,它只有这一个标签,那其实这没什么特别的,呃,意义在里边,对吧,我们可以看到你你这个只有一个标签,它是0.76,这里是只有一个标签2.191个特征啊。那我们可以对比一下,下边我们找一个比较,哎,大家看这里是不是有一个drama horror还有一个thriller啊呃,Thriller应该是惊悚对吧?惊悚片,那么大家看一眼,呃,首先我们还得看出这里边它代到底代表的是哪个对不对?26前面前面我们是不是知道26代表的是horror啊,26是horror,所以大家看后边第一个2.194这个是不是就是horror?
08:01
恐怖片的这个特征,特征是这个维度,恐怖的这个维度,它特征给的这个值是2.194,然后27,前面我们也已经知道了,是不是drama drama这个维度给的,本来出现瓷瓶他们都出现了一次,这里的特征给的就是0.76,对不对?最后还有一个惊悚,惊悚是不是应该是36啊,大家看这里36都出现对不对?那么惊悚给的t fidf之后,它的权重特征值给的是1.7079。那大家可以想到这代表一个什么含义?同样它都出现了一次,这个片子它的主要特征应该是什么呢?它同时有drama,有horror,有thriller这样的标签,那大家想到既然它又是戏剧,又是恐怖又是惊悚,它是不是恐怖惊悚的成分应该更加代表它的特征啊,因为戏剧有可能别的地方都会出现,但是恐怖惊悚不常出现,对不对?所以大家会看到我们提取出它的特征向量,是不是恐怖和惊悚的特征就会比较明显。
09:10
然后相对应的热门标签抓马是不是就做了一个弱化啊,做了一个惩罚对不对,这个呃,本身的这个值就相当于会比较低一点,所以大家看这就是我们做t fidf提取物品特征,提取电影特征的这样的一个思路,那当然我们这里只是以类型做了例子,做了这样的一个提取。大家会想到如果我们把。详情如果也做类似的一个分词的话,是不是可以得到那个特征信息会更加的全面,更加的丰富啊,啊当然对于这个详情而言,我们这里主要是大家看到有很多电影没有详情,对不对,数据不够,所以我们得到的大部分都是空的话,这个就没有意义了,我们这里就还是根据类型去做一个提取,那大家看到还有一些比较明显的,比方说什么比较明显呢?那大家看一看哪些词汇这个呃,做了t fidf之后,它的评分就低呢?哪些评分就高呢?诶大家看这个抓马,这个就就评分很低对不对,是不是因为它经翅出现什么样的片都有可能抓嘛,对吧?另外还有一个什么评分低一点,零几这个也比较低,对吧?这个49是个什么,Comedy comedy是什么喜剧啊,大家就想到很多片可能都是有喜剧元素,对不对啊,都有一点搞笑,那可能都是一个喜剧,所以说他是不是也要受一个惩罚啊?
10:35
那大家看什么样的这个评分会比较高,哎,大家看这个3.0,这个分数很高对不对?我们看一眼2.5,这个评分也很很高啊,对应过来animation children,这是什么?动画片儿童片对不对?那大家会想到动画片儿童片这个类型是不是就很很特别了呀,如果它出现这样的两个关键词的话,它一定特征非常明显对不对?一说动画片儿童片,我们头脑里边对应的这个形象是不是就已经出来了,所以这个相比抓马,相比calldy,是不是它的特征明显,这个权重应该更重啊,哎,所以大家就会发现这个在我们实际的这个提取出的内容信息里边,其实非常明显的表现了这一点,那我们其实也想要的这个东西就是这些,好,那么大家可以看到就是这就是我们特征提取的结果,那当然了,就是做完了这个特征提取。
11:35
我这里就把这一行先注掉吧,做完了特征提取之后,我们最终的目的还是要得到movie features对吧?那所以还要把这个data再转成这个data,是不是还是我们这里的data frame呀,我要转成我们想要用到的这个movie features才可以,呃,抄后面的代码对吧?那所以movie features应该等于什么呢?呃,那我们就对这个的data要做处理了,对吧?把它做一个map,大家会想到我这里边它是不是应该对应每每每一个肉啊,这是一个data frame对吧?Data set肉,所以每一个肉把它处理成一个什么样的状态呢?是不是要处理成大家看一眼。
12:23
在之前的这里啊,要把它处理成我们这里得到的这个状态啊,所以大家会看到我是不是首先诶,首先我们看一下这个product features是什么类型,对不对,它的类型是,哦,这里的类型是一个RDD啊,因为大家记得我们当时做这个英语翼模型计算的时候,我们调的都是ML lab里边的,呃,对应的那些库对不对?所以它的操作对象是不是都是RDD啊啊,所以这里边我们是相当于把这个混在一起了,大家如果想风格一致的话,也可以我们都调这个ML lab里面的库,或者是都调ML里面的库,或者混着调也可以,是不是?因为我们这里边其实对这个要要求并不高,我们实现功能就可以,所以大家会想到我是不是先应该拿到一个RDD,或者我先map map完了之后转成RDD是不是也行啊?呃,那么大家会想到我最后要的是什么呢?是不是就是一个mid,然后一个features啊。
13:23
是不是这样的一个结果,那么这里的features是不是前面我们的这个product features里边拿到的,这应该是一个列表,一个数组啊,最后把这个数组再转成一个double matrix就可以了,对不对?诶,这是我们的一个整体思路,所以在这里我们把对肉进行一个提取,提取什么呢?是不是一个mid对不对?Mid,我们那就get as吧,As int提取mid,这就是第一项对吧?第二项是不是要features啊,我们的features从从哪里拿,应该是这个features对不对?同样大家会想到我就是肉点get as,这里肯定是要拿features,对不对?
14:13
这里有一个问题,我这里边拿出来的应该是get as什么呢?什么数据类型呢?诶给大家说过,它的数据类型是一个稀疏向量,对吧?这个稀疏向量的类型叫SPA,诶大家看诶,SPA SPA vector这样啊,有的啊,大家看我们引入ML,它的线性代数,这个Linda lock这个库里边的SPA vector这这一个数据类型,我们拿到的是这样的一个稀疏矩,稀疏向量,类似于稀疏矩阵,对不对?那我们实际要的是什么呢?实际要的应该是正常的一个就是稠密的那种形式的矩阵向量,对不对,一个数组,然后是不是把它要转成一个double matricx啊。
15:08
我们是这样的一个做法,对吧?所以这里边大家会看到,既然是一个稀疏矩阵,是不是它可以拖AR啊,大家看,所以直接把它转换成我们一个正常的数组,那之后我是不是应该把它转成RDD,然后是不是做一个map操作,这后边是不是就跟我这里边的操作一样了。大家会想到每一个元素是不是转成mid和对应的这个double matricx,把它提出来就可以了,对吧?那我们这里的RDD之后的元素的话,每一个X是不是转换成X的mid,第一个元素和X的第二个元素是不是要new一个double matrix。
16:00
诶,把这个弄了啊,里边传入的是X的第二个元素,对吧,所以大家看我们其实就是做了这样的一个处理啊,呃,那么得到这一部分之后,大家会想到跟这里拿到的movie features数据结构是不是完全一样?是不是这样啊啊,当然这里大家可以看一下,我们是不是拿到了真正想要的那个那个数据结构,那这个怎么把它打印呢?那就是movie features做一个做一个打印,呃,这这个是一个RDD了,那大家可能知道我是不是可以把它collect起来啊,Collect起来之后,然后是不是可以for each去做一个打印,For each。Print line对吧?这样是不是可以把它打印出来?好,现在我们再看一眼它的效果到底怎么样,我们看一眼得到的这个结果其实就变成了稠密的,我们有50个维度,对不对?里边大部分都是零,对吧?因为那个标签我们只贴到了这个,只有几个类别,所以大家看这个维度大部分都是零,那有一些地方有值,这个值就是我们的特征啊,所以整个这些这个向量是不是就是我们的特征向量啊,根据这个就可以算电影之间的相似度了,所以接下来我们是不是把这一部分都放开就完事啊?
17:23
都放开,然后诶,我们是不是要把这个改掉,我们现在的这个表名应该叫content movie ras,对不对,把这个表写入进去就可以了,好,那么接下来我们还是运行一下,见证一下奇迹吧,看看是不是能在我们的mango里面真正找到对应的东西。我们看一下运行的结果,Mongo里边是不是已经有了我们想要的东西,大家可以看一下收tables,诶,大家看现在是不是比昨天就多了一个东西啊,多了一个什么content movie res,对吧?所以这个我们可以看一眼content res里边到底是什么样的一个数据结构pretty,好,大家看到是不是跟我们之前的那个推荐列表非常的相似啊,而且大家会看到这里边相当于也是一个相似度对不对?所有的一个相似度,大家看这个就比较诡异了,呃,其实也不诡异,我们仔细一想就能想到,为什么他们的相似度居然能成一呢?对,大家想到你既然是根据这个内容信息,我们的内容信息只有类别对不对?有些它的类别标签是不是完全一样啊,对吧,它就是一个啊,一个剧情恐怖片,那那。
18:49
这两个是不是我们算出来它的这个特征就完全一样,是不是它的相似度就是一啊,所以大家会看到我们最高的相似度甚至都有可能是一,当然我们后面的选取还是按照0.6大于0.6来选取的,这个大家就看到就就很多很多,对不对啊,因为它那个我们的信息很少嘛,只是几个类别,所以得到的结果就是这样的一个状态,好,这就是我们基于内容推荐的这一部分。
我来说两句