Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >揭秘Keras推荐系统如何建立模型、获取用户爱好

揭秘Keras推荐系统如何建立模型、获取用户爱好

作者头像
博文视点Broadview
发布于 2020-06-11 06:24:00
发布于 2020-06-11 06:24:00
9060
举报

小编说:你是否有过这样的经历?当你在亚马逊商城浏览一些书籍,或者购买过一些书籍后,你的偏好就会被系统学到,系统会基于一些假设为你推荐相关书目。为什么系统会知道,在这背后又藏着哪些秘密呢? 本文选自《Keras快速上手:基于Python深度学习实战》

推荐系统可以从百万甚至上亿的内容或商品中把有用的东西高效地显示给用户,这样可以为用户节省很多自行查询的时间,也可以提示用户可能忽略的内容或商品,使用户更有黏性,更愿意花时间待在网站上,从而使商家赚取更多的利润,即使流量本身也会使商家从广告中受益。

那么推荐系统背后的魔术是什么呢?其实任何推荐系统本质上都是在做排序。

互联网科技时代,数据是最根本的。充分利用各平台数据,把系统里所有的音乐、电影、应用等从高到低进行喜好排序,把排名高的推荐给用户,用户喜欢了,推荐系统自然就会有价值。

你可能注意到了,排序的前提是对喜好的预测。那么喜好的数据从哪里来呢?这里有几个渠道,比如你和产品有过互动,看过亚马逊商城的一些书,或者买过一些书,那么你的偏好就会被系统学到,系统会基于一些假设给你建立画像和构建模型。你和产品的互动越多,数据点就越多,画像就越全面。除此之外,如果你有跨平台的行为,那么各个平台的数据汇总,也可以综合学到你的偏好。比如谷歌搜索、地图和应用商城等都有你和谷歌产品的互动信息,这些平台的数据可以通用,应用的场景有很大的想象力。平台还可以利用第三方数据,比如订阅一些手机运营商的数据,用来多维度刻画用户

那推荐系统又是如何建立模型、知道用户爱好的?作者提供了两种重要的算法:矩阵分解模型和深度模型,快来一起探个究竟吧!

1. 矩阵分解模型

矩阵分解可以认为是一种信息压缩。这里有两种理解。第一种理解,用户和内容不是孤立的,用户喜好有相似性,内容也有相似性。压缩是把用户和内容数量化,压缩成 k 维的向量。把用户向量维度进行压缩,使得向量维度变小,本身就是信息压缩的一种形式;向量之间还可以进行各种计算,比如余弦(Cosine)相似性,就可以数量化向量之间的距离、相似度等。第二种理解,从深度学习的角度,用户表示输入层(User Representation)通常用 One Hot编码,这没问题,但是通过第一层全连接神经网络就可以到达隐藏层,就是所谓的嵌入层(Embedding Layer),也就是我们之前提到的向量压缩过程。紧接着这个隐藏层,再通过一层全连接网络就是最终输入层,通常用来和实际标注数据进行比较,寻找差距,用来更新网络权重。从这个意义上讲,完全可以把整个数据放进神经系统的框架中,通过浅层学习把权重求出来,就是我们要的向量集合了。经过这么分析,矩阵分解在推荐系统中是如何应用的就显而易见了。

假设有用户和内容(比如电影)的互动数据,其中一种情况是 Netflix 的打分模式,即用户会给电影进行 1~5 的打分;另一种情况是基于用户行为的,比如用户是否看了某部电影、看了多长时间等。通常第二种模式更加值得信赖,因为用户看电影的行为被机器日志所记录,是真实的数据,不需要担心数据不准确或者有偏差的问题。

这两种情形都可以用矩阵分解来解决。假设数据库里m 个用户和 n 部电影,那么用户电影矩阵的大小就是 m×n。每个单元 (i,j) 用R ij 表示用户是否看了该电影,即0 或 1。我们把用户和电影用类似 Word2Vec 的方法分别进行向量表示,把每个用户 i 表示成 d 维向量 X i ,把每部电影 j 表示成 d 维向量 Y j 。我们要寻找 X i 和 Y j ,使得 X i ×Y j和用户电影矩阵 R ij 尽可能接近,如图所示。这样对于没出现过的用户电影对,通过 X i ×Y j 的表达式可以预测任意用户对电影的评分值。

用数学表达式可以这么写:

注意:这里d 是一个远小于m; n 的数。从机器学习的角度来说,模型是为了抓住数据的主要特征,去掉噪声。越复杂、越灵活的模型带来的噪声越多,降低维度则可以有效地避免过度拟合现象的出现。

2. 深度神经网络模型

下面展示进阶版的深度模型。我们将建立多层深度学习模型,并且加入 Dropout技术。

这个模型非常灵活。因为如果有除用户、电影之外的数据,比如用户年龄、地区、电影属性、演员等外在变量,则统统可以加入模型中,用嵌入的思想把它们串在一起,作为输入层,然后在上面搭建各种神经网络模型,最后一层可以用评分等作为输出层,这样的模型可以适用于很多场景。深度模型的的架构如下图所示。

首先,做用户和电影的嵌入层。

1 k = 128 2 model1 = Sequential() 3 model1.add(Embedding(n_users + 1, k, input_length = 1)) 4 model1.add(Reshape((k,))) 5 model2 = Sequential() 6 model2.add(Embedding(n_movies + 1, k, input_length = 1)) 7 model2.add(Reshape((k,)))

第三个小神经网络,在第一、二个网络的基础上把用户和电影向量结合在一起。

1 model = Sequential() 2 model.add(Merge([model1, model2], mode = 'concat'))

然后加入Dropout 和relu 这个非线性变换项,构造多层深度模型。

1 model.add(Dropout(0.2)) 2 model.add(Dense(k, activation = 'relu')) 3 model.add(Dropout(0.5)) 4 model.add(Dense(int(k/4), activation = 'relu')) 5 model.add(Dropout(0.5)) 6 model.add(Dense(int(k/16), activation = 'relu')) 7 model.add(Dropout(0.5))

因为是预测连续变量评分,最后一层直接上线性变化。当然,读者可以尝试分类问

题,用Softmax 去模拟每个评分类别的概率。

model.add(Dense(1, activation = 'linear'))

将输出层和最后的评分数进行对比,后向传播去更新网络参数。

model.compile(loss = 'mse', optimizer = "adam")

接下来要给模型输入训练数据。

首先,收集用户索引数据和电影索引数据。

1 users = ratings['user_id'].values 2 movies = ratings['movie_id'].values

5 . 推荐系统

收集评分数据。

label = ratings['rating'].values

构造训练数据。

1 X_train = [users, movies] 2 y_train = label

然后,用小批量更新权重。

model.fit(X_train, y_train, batch_size = 100, epochs = 50)

模型训练完以后,预测未给的评分。

1 i,j = 10,99 2 pred = model.predict([np.array([users[i]]), np.array([movies[j]])])

最后,对训练集进行误差评估。

1 sum = 0 2 for i in range(ratings.shape[0]): 3 sum += (ratings['rating'][i] - model.predict([np.array([ratings['user_id'][i]]), np.array([ratings['movie_id'][i]])])) ** 2 4 mse = math.sqrt(sum/ratings.shape[0]) 5 print(mse)

训练数据的误差在0.8226 左右,大概一个评分等级不到的误差。

你可能会问,为什么这个误差和之前矩阵分解的浅层模型误差的差距比较大?作者的理解是,这里的Dropout 正则项起了很大的作用。虽然我们建了深层网络,但是由于有了Dropout 这个正则项,必然会造成训练数据的信息丢失(这种丢失会让我们在测试数据时受益)。就好比加了L1, L2 之类的正则项以后,估计的参数就不是无偏的了。因此,Dropout 是训练误差增加的原因,这是设计模型的必然结果。但是,需要记住的是,我们始终要对测试集上的预测做评估,训练集的误差只是看优化方向和算法是否大致有效。

以上内容节选自《Keras快速上手:基于Python的深度学习实战》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【机器学习】从电影数据集到推荐系统
你们可能曾经花上几分钟甚至几个小时去选择一部电影单独看或者和家人一起看,不幸的是没有成功?你希望有人在这种时候替你做决定,这正是推荐系统的作用。
黄博的机器学习圈子
2021/07/07
3.4K1
【机器学习】从电影数据集到推荐系统
深度学习在推荐系统中的应用
推荐系统作为个性化服务的核心技术,已经成为互联网应用的重要组成部分。无论是电商平台上的商品推荐,还是流媒体中的视频、音乐推荐,推荐系统都发挥着至关重要的作用。传统的推荐系统主要依赖于协同过滤(Collaborative Filtering)和基于内容的推荐(Content-based Recommendation),这些方法在应对复杂的推荐任务时往往存在一定的局限性。随着深度学习技术的发展,推荐系统的效果得到了显著提升。
二一年冬末
2024/08/03
3260
【推荐系统】基于文本挖掘的推荐模型【含基于CNN的文本挖掘、python代码】
二维卷积网络是通过将卷积核在二维矩阵中,分别从width和height两个方向进行滑动窗口操作,且对应位置进行相乘求和。而图像则正是拥有二维特征像素图,所以图像应用卷积网络是二维卷积网络。
司六米希
2022/11/15
1.5K0
【推荐系统】基于文本挖掘的推荐模型【含基于CNN的文本挖掘、python代码】
推荐系统中的隐因子模型详解
推荐系统已经成为现代互联网平台的重要组成部分。无论是电商、社交媒体还是流媒体服务,推荐系统的广泛应用都证明了它在提升用户体验和增加用户粘性方面的巨大价值。在众多推荐系统技术中,隐因子模型(Latent Factor Model)因其在处理大规模数据、提高推荐精度方面的突出表现,逐渐成为主流选择。
二一年冬末
2024/07/30
3530
电影推荐系统的实现与优化
随着互联网的发展和数字内容的丰富,电影推荐系统已成为提高用户体验和平台运营效率的关键技术。电影推荐系统利用用户的历史行为数据、电影的属性信息以及用户的反馈,向用户推荐他们可能感兴趣的电影。这种系统广泛应用于流媒体平台、在线电影网站和社交网络等。
二一年冬末
2024/07/24
5320
深度学习在花椒直播中的应用—神经网络与协同过滤篇
协同过滤(collaborative filtering)算法一经发明便在推荐系统中取得了非凡的成果。许多知名的系统早期都采用了协同过滤算法,例如Google News,亚马逊、Hulu、Netfix等。协同过滤算法一般采用评分矩阵来表示用户和物品的交互,评分矩阵 R 中的每一个元素 rij 表示用户 i 对物品 j 的喜好评分。由于用户不能对大部分物品都有交互,所以在很多场景下评分矩阵都很稀疏,稀疏率在 90% 以上,稀疏度很高决定算法在优化和选取上有很多考量。
石晓文
2019/09/05
1.5K0
深度学习在花椒直播中的应用—神经网络与协同过滤篇
推荐系统!基于tensorflow搭建混合神经网络精准推荐! ⛵
本文从常见的推荐系统方法(基于内容、协同过滤等近邻算法、基于知识等)讲起,一直覆盖到前沿的新式推荐系统,不仅详细讲解原理,还手把手教大家如何用代码实现。
ShowMeAI
2022/08/26
1.2K0
推荐系统!基于tensorflow搭建混合神经网络精准推荐! ⛵
在Python中实现你自己的推荐系统
现今,推荐系统被用来个性化你在网上的体验,告诉你买什么,去哪里吃,甚至是你应该和谁做朋友。人们口味各异,但通常有迹可循。人们倾向于喜欢那些与他们所喜欢的东西类似的东西,并且他们倾向于与那些亲近的人有相似的口味。推荐系统试图捕捉这些模式,以助于预测你还会喜欢什么东西。电子商务、社交媒体、视频和在线新闻平台已经积极的部署了它们自己的推荐系统,以帮助它们的客户更有效的选择产品,从而实现双赢。 两种最普遍的推荐系统的类型是基于内容和协同过滤(CF)。协同过滤基于用户对产品的态度产生推荐,也就是说,它使用“人群的智慧
CDA数据分析师
2018/02/05
3.1K0
在Python中实现你自己的推荐系统
实战基于矩阵分解的推荐系统
设: U 为所有用户集合 P 为所有物品集合 R 为用户对物品的喜好程度 模型 Model(R) = U * P 算法核心: 通过用户对不同物品的打分,来预测用户对其他物品的喜好程度。此处并没有考虑用户和物品的属性,如:用户年龄,性别,学历,工作等,物品价格,品类,外观等。
周萝卜
2019/08/01
9580
实战基于矩阵分解的推荐系统
keras实战系列之推荐系统FM(Factorization Machine)算法
博主在之前的文章中介绍过使用keras搭建一个基于矩阵分解的推荐系统,而那篇文章所介绍的方法可能只是一个庞大推荐系统中的一小环节。而对于工业级别的推荐系统,面对极其庞大的产品种类数量,一步就输出符合用户心意的产品可能够呛,最好的方式应该是从巨大的产品类别之中粗筛出一些靠谱的待推荐产品,然后再从粗筛的产品中精挑细选出要推荐给用户的最终产品。
润森
2022/09/22
1.1K0
keras实战系列之推荐系统FM(Factorization Machine)算法
推荐系统之矩阵分解模型
最近在整理Embedding技术在推荐系统中的应用,总结了获取各类item2vec的方法,推荐系统中的矩阵分解作为解决item2vec问题初期技术方法之一,虽已在推荐领域摸爬滚打了十几年,但至今仍旧在工业界的推荐场景中扮演着重要的角色,本文就对推荐系统中的矩阵分解进行简单的介绍,为后续几篇介绍推荐系统中的Embedding技术做铺垫。
流川枫
2020/04/24
1.5K0
推荐系统中的正则化技术
推荐系统是现代互联网服务中的核心组成部分,能够帮助用户在海量信息中快速找到感兴趣的内容。然而,推荐系统在实际应用中面临许多挑战,其中之一就是如何避免模型过拟合,提高泛化能力。正则化技术作为一种有效的方法,可以帮助推荐系统克服这一难题。
二一年冬末
2024/08/16
1690
推荐系统遇上深度学习(十一)--神经协同过滤NCF原理及实战
好久没更新该系列了,最近看到了一篇关于神经协同过滤的论文,感觉还不错,跟大家分享下。
石晓文
2018/07/25
4.2K0
推荐系统遇上深度学习(十一)--神经协同过滤NCF原理及实战
推荐系统基础:使用PyTorch进行矩阵分解进行动漫的推荐
我们一天会遇到很多次推荐——当我们决定在Netflix/Youtube上看什么,购物网站上的商品推荐,Spotify上的歌曲推荐,Instagram上的朋友推荐,LinkedIn上的工作推荐……列表还在继续!推荐系统的目的是预测用户对某一商品的“评价”或“偏好”。这些评级用于确定用户可能喜欢什么,并提出明智的建议。
deephub
2020/09/07
1.6K0
推荐系统基础:使用PyTorch进行矩阵分解进行动漫的推荐
开发|如何用深度学习推荐电影?手把手教你
简介 几乎所有人都喜欢与家人、朋友一起观看电影度过闲暇时光。大家可能都有过这样的体验:本想在接下来的两个小时里看一个电影,却坐在沙发上坐了20分钟不知道看什么,选择困难症又犯了,结果好心情也变得沮丧。所以,我们很需要一个电脑代理,在做挑选电影的时候提供推荐。 现在,电影智能推荐系统已经成为日常生活中的一部分。 Data Science Central 曾表示: “虽然硬数据很难获得,但知情人士估计,对亚马逊和Netflix这样的大型电商平台,推荐系统为它们带来高达10%至25%的收入增长”。 在这个项
AI科技评论
2018/03/13
1K0
开发|如何用深度学习推荐电影?手把手教你
【推荐系统算法实战】 ALS 矩阵分解算法
ALS的矩阵分解算法常应用于推荐系统中,将用户(user)对商品(item)的评分矩阵,分解为用户对商品隐含特征的偏好矩阵,和商品在隐含特征上的映射矩阵。
一个会写诗的程序员
2019/12/30
3.5K0
【推荐系统算法实战】 ALS 矩阵分解算法
结合知识图谱实现基于电影的推荐系统
知识图谱(Knowledge Graph,KG)可以理解成一个知识库,用来存储实体与实体之间的关系。知识图谱可以为机器学习算法提供更多的信息,帮助模型更好地完成任务。
代码医生工作室
2019/08/23
9K5
结合知识图谱实现基于电影的推荐系统
基于用户行为的个性化推荐
在数字化时代,个性化推荐系统已经成为各种在线服务的关键组成部分。无论是在电子商务平台、社交媒体、流媒体服务,还是新闻门户网站,个性化推荐系统都在帮助用户发现他们感兴趣的内容。通过分析用户的历史行为和偏好,推荐系统可以为每个用户提供定制化的内容推荐,从而提升用户体验和平台的使用粘性。
二一年冬末
2024/07/31
5310
练习题︱ python 协同过滤ALS模型实现:商品推荐 + 用户人群放大
之前的一个练习题:练习题︱豆瓣图书的推荐与搜索、简易版知识引擎构建(neo4j)提及了几种简单的推荐方式。 但是在超大规模稀疏数据上,一般会采用一些规模化的模型,譬如spark-ALS就是其中一款。 这边,笔者也是想调研一下这个模型的操作性,所有就先用单机版的测试一下;对应的spark.mlib有分布式的版本。
悟乙己
2021/12/07
9470
练习题︱ python 协同过滤ALS模型实现:商品推荐 + 用户人群放大
【机器学习】推荐系统——基于用户行为分析的个性化推荐技术
推荐系统是一种信息过滤技术,其核心任务是通过分析用户的历史行为、兴趣偏好以及其他用户的行为数据,为用户预测和推荐他们可能感兴趣的内容或产品。推荐系统不仅能提高用户的满意度,还可以帮助平台提升用户粘性、增加收益。
2的n次方
2024/10/15
2K0
【机器学习】推荐系统——基于用户行为分析的个性化推荐技术
推荐阅读
相关推荐
【机器学习】从电影数据集到推荐系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档