当前位置:   article > 正文

NLP第10课:动手实战基于 CNN 的电影推荐系统

cnn 推荐算法是怎么实现的呢

本文从深度学习卷积神经网络入手,基于 Github 的开源项目来完成 MovieLens 数据集的电影推荐系统。

什么是推荐系统呢?

什么是推荐系统呢?首先我们来看看几个常见的推荐场景。

如果你经常通过豆瓣电影评分来找电影,你会发现下图所示的推荐:


v2-4fb585734d549456d7ec60379785b0db_b.jpg


如果你喜欢购物,根据你的选择和购物行为,平台会给你推荐相似商品:


v2-0abc618a046731eaa9bc4f82c6d55c8c_b.jpg


在互联网的很多场景下都可以看到推荐的影子。因为推荐可以帮助用户和商家满足不同的需求:

  • 对用户而言:找到感兴趣的东西,帮助发现新鲜、有趣的事物。
  • 对商家而言:提供个性化服务,提高信任度和粘性,增加营收。

常见的推荐系统主要包含两个方面的内容,基于用户的推荐系统(UserCF)和基于物品的推荐系统(ItemCF)。两者的区别在于,UserCF 给用户推荐那些和他有共同兴趣爱好的用户喜欢的商品,而 ItemCF 给用户推荐那些和他之前喜欢的商品类似的商品。这两种方式都会遭遇冷启动问题。

下面是 UserCF 和 ItemCF 的对比:


v2-2d16b86b27449892596112b1a7971099_b.jpg


CNN 是如何应用在文本处理上的?

提到卷积神经网络(CNN),相信大部分人首先想到的是图像分类,比如 MNIST 手写体识别,CAFRI10 图像分类。CNN 已经在图像识别方面取得了较大的成果,随着近几年的不断发展,在文本处理领域,基于文本挖掘的文本卷积神经网络被证明是有效的。

首先,来看看 CNN 是如何应用到 NLP 中的,下面是一个简单的过程图:


v2-aa404ff1f23fac803ee8541e9021147a_b.jpg


和图像像素处理不一样,自然语言通常是一段文字,那么在特征矩阵中,矩阵的每一个行向量(比如 word2vec 或者 doc2vec)代表一个 Token,包括词或者字符。如果一段文字包含有 n 个词,每个词有 m 维的词向量,那么我们可以构造出一个 n*m 的词向量矩阵,在 NLP 处理过程中,让过滤器宽度和矩阵宽度保持一致整行滑动。

动手实战基于 CNN 的电影推荐系统

将 CNN 的技术应用到自然语言处理中并与电影推荐相结合,来训练一个基于文本的卷积神经网络,实现电影个性化推荐系统。

首先感谢作者 chengstone 的分享,源码请访问下面网址:

在验证了 CNN 应用在自然语言处理上是有效的之后,从推荐系统的个性化推荐入手,在文本上,把 CNN 成果应用到电影的个性化推荐上。并在特征工程中,对训练集和测试集做了相应的特征处理,其中有部分字段是类型性变量,特征工程上可以采用 one-hot 编码,但是对于 UserID、MovieID 这样非常稀疏的变量,如果使用 one-hot,那么数据的维度会急剧膨胀,对于这份数据集来说是不合适的。

具体算法设计如下:

1. 定义用户嵌入矩阵。

用户的特征矩阵主要是通过用户信息嵌入网络来生成的,在预处理数据的时候,我们将 UserID、MovieID、性别、年龄、职业特征全部转成了数字类型,然后把这个数字当作嵌入矩阵的索引,在网络的第一层就使用嵌入层,这样数据输入的维度保持在(N,32)和(N,16)。然后进行全连接层,转成(N,128)的大小,再进行全连接层,转成(N,200)的大小,这样最后输出的用户特征维度相对比较高,也保证了能把每个用户所带有的特征充分携带并通过特征表达。

具体流程如下:


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/356360
推荐阅读
相关标签
  

闽ICP备14008679号