Skip to content

分别基于协同过滤算法和基于TensorFlow建立推荐系统

Notifications You must be signed in to change notification settings

ztz818/Recommender-System

Repository files navigation

Recommender-System

分别基于协同过滤算法和基于TensorFlow建立推荐系统

一、基于协同过滤的推荐系统

协同过滤(collaborative filtering):利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。比如说,你和另外一个人都喜欢看电影,而你们所喜欢的电影类型都差不多,那个人对于某一部电影的评价很高,而这部电影你没有看过。那么,我是不是就能将这部电影推荐给你呢?基于协同过滤的推荐,有基于用户和基于物品。

本项目可实现的功能:

1、基于用户的协同过滤

2、基于项目的协同过滤

3、基于内容的过滤算法

4、混合推荐系统

示例: The 10 nearest neighbors of That Thing You Do! (1996):

Sleepless in Seattle (1993)

Braveheart (1995)

Toy Story (1995)

Batman (1989)

Groundhog Day (1993)

Pretty Woman (1990)

Star Trek: First Contact (1996)

While You Were Sleeping (1995)

Sabrina (1995)

Grosse Pointe Blank (1997)

具体实现见项目内代码

二、基于tensorflow的个性推荐系统

本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务。

实现的推荐功能如下:

1、指定用户和电影进行评分

2、推荐同类型的电影

3、推荐某个用户喜欢的电影

4、看过这个电影的人还看了(喜欢)哪些电影

本项目使用的数据集:

本项目使用的是MovieLens 1M 数据集,包含6000个用户在近4000部电影上的1亿条评论。

数据集分为三个文件:用户数据users.dat,电影数据movies.dat和评分数据ratings.dat。

系统结构如下

我们的目的就是要训练出用户特征和电影特征,在实现推荐功能时使用。得到这两个特征以后,就可以选择任意的方式来拟合评分了。我使用了两种方式,一个是上图中画出的将两个特征做向量乘法,将结果与真实评分做回归,采用MSE优化损失。因为本质上这是一个回归问题,另一种方式是,将两个特征作为输入,再次传入全连接层,输出一个值,将输出值回归到真实评分,采用MSE优化损失。
实际上第二个方式的MSE loss在0.8附近,第一个方式在1附近,5次迭代的结果。

文本卷积网络:

网络的第一层是词嵌入层,由每一个单词的嵌入向量组成的嵌入矩阵。下一层使用多个不同尺寸(窗口大小)的卷积核在嵌入矩阵上做卷积,窗口大小指的是每次卷积覆盖几个单词。这里跟对图像做卷积不太一样,图像的卷积通常用2x2、3x3、5x5之类的尺寸,而文本卷积要覆盖整个单词的嵌入向量,所以尺寸是(单词数,向量维度),比如每次滑动3个,4个或者5个单词。第三层网络是max pooling得到一个长向量,最后使用dropout做正则化,最终得到了电影Title的特征。

训练的loss:

开始推荐电影

使用生产的用户特征矩阵和电影特征矩阵做电影推荐

推荐同类型的电影

思路是计算当前看的电影特征向量与整个电影特征矩阵的余弦相似度,取相似度最大的top_k个,这里加了些随机选择在里面,保证每次的推荐稍稍有些不同。

推荐您喜欢的电影
思路是使用用户特征向量与电影特征矩阵计算所有电影的评分,取评分最高的top_k个,同样加了些随机选择部分。

看过这个电影的人还看了(喜欢)哪些电影
首先选出喜欢某个电影的top_k个人,得到这几个人的用户特征向量。
然后计算这几个人对所有电影的评分

选择每个人评分最高的电影作为推荐
同样加入了随机选择

以上就是实现的常用的推荐功能,将网络模型作为回归问题进行训练,得到训练好的用户特征矩阵和电影特征矩阵进行推荐。

由于网络原因,数据集暂不上传,需要的请联系513617866@qq.com

About

分别基于协同过滤算法和基于TensorFlow建立推荐系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published