送书 | 2020年新一天,用这本书开启你的NLP学习之路!
本文选自电子工业出版社博文视点新书《大数据智能:数据驱动的自然语言处理技术》。本书作者:清华大学刘知远、薄言RSVP.ai崔安颀、腾讯张开旭、清华大学韩文弢、中国人民大学赵鑫、厦门大学苏劲松、罗格斯大学张永锋、北京大学严睿、哈尔滨工业大学(深圳)汤步洲、清华大学涂存超、哈尔滨工业大学丁效 。
本书覆盖NLP诸多核心技术与应用场景;每章都为初学者入门提供了详细参考资料;针对初学者,给出追踪前沿学术资料的方法与建议。
如何获得这本书?请在评论区留言,根据留言质量+留言点赞数量,三位用户可获得本书。
活动截止时间为1月10日晚8点。
如果没有抽中,也没有关系,文章末尾还有更大的福利哦~~
本节,我们对常见的推荐算法进行归类整理,分析它们的共通之处和不同点,力图使读者对各式各样的个性化推荐算法及其之间的关系有一个整体的认识。
推荐算法的分类
按照不同的分类指标,推荐系统具有很多不同的分类方法,常见的分类方法有依据推荐结果是否因人而异分类、依据推荐方法的不同分类、依据推荐模型构建方式的不同分类等。
依据推荐结果是否因人而异,可以分为大众化推荐和个性化推荐两类。大众化推荐往往与用户本身及其历史信息无关,在同样的外部条件下,不同用户获得的推荐是一样的。大众化推荐的一个典型的例子是查询推荐,它往往只与当前的查询语句有关,很少与该用户直接相关。个性化推荐的特点则是在同样的外部条件下,不同的人可以获得与其兴趣爱好、历史记录等相匹配的推荐。
依据推荐方法的不同,推荐算法大致可以分为如下几种:基于人口统计学的推荐(Demographic-based Recommendation)、基于内容的推荐(Content-based Recommendation)、基于协同过滤的推荐(Collaborative Filtering-based Recommendation)、混合型推荐(Hybrid Recommendation)。其中,基于协同过滤的推荐被研究人员研究得最多也最深入,它又可以分成多个子类别,包括基于用户的推荐(User-based Recommendation)、基于物品的推荐(Item-Based Recommendation)、基于社交网络关系的推荐(Social-based Recommendation)、基于模型的推荐(Model-based Recommendation),等等。其中,基于模型的推荐是指利用系统已有的数据,学习和构建一个模型,进而利用该模型进行推荐,这里的模型可以是SVD、NMF等矩阵分解模型,也可以是利用贝叶斯分类器、决策树、人工神经网络(Neural Networks)等模型转化的分类问题,或者基于聚类技术对数据进行预处理的结果,等等。
依据推荐模型构建方式的不同,目前的推荐算法大致可分为基于用户或物品本身的启发式推荐(Heuristic-based,或称为Memory-based Recommendation)、基于关联规则的推荐(Association Rule Mining for Recommendation)、基于模型的推荐,以及混合型推荐。
典型推荐算法介绍
1.基于人口统计学的推荐
基于人口统计学的推荐(Demographic-based Recommendation)虽然已经很少被单独使用,但是理解这种方法的工作原理对于深入理解推荐系统有很大帮助。基于人口统计学的方法假设“一个用户有可能会喜欢与其相似的用户所喜欢的物品”。它记录了每一个用户的性别、年龄、活跃时间等元数据,当我们需要对一个用户进行个性化推荐时,利用其元数据计算其与其他用户之间的相似度,并选出与其最相似的一个或几个用户,利用这些用户的购买和打分历史记录进行推荐。一种简单且常见的推荐方法就是将这些(最相似的)用户所覆盖的物品作为推荐列表,并以物品在这些用户上的平均得分作为依据进行排序。
基于人口统计学的推荐方法的优点是计算简单,用户的元数据相对比较稳定,相似用户的计算可以在线下完成,便于实现实时响应。但它也有诸多问题,其主要问题之一便是计算可信度较低,因为即便是性别、年龄等元数据属性都相同的用户,也很有可能在物品上有截然不同的偏好,所以这种计算用户相似度的方法往往并不能与物品之间建立真正可靠的联系。因此,基于人口统计学的方法在实际推荐系统中很少作为一个特定的方法单独使用,而常常与其他方法结合,利用用户元数据对推荐结果进行进一步的优化。
2.基于内容的推荐
基于内容的推荐假设“一个用户可能会喜欢和他曾经喜欢过的物品相似的物品”,而这里提到的“相似的物品”通过商品的内容属性确定,例如电影的主要演员、风格、时长,音乐的曲风、歌手,商品的价格、种类,等等。典型的基于内容的方法首先需要构建用户画像,一种较为简单的方法是考虑该用户曾经购买或浏览过的所有物品,并将这些物品的内容信息加权整合,作为对应用户的画像,它描述了一个用户对物品属性的偏好特征。当然,构建用户画像的策略可以很复杂,比如可以考虑时间因素,计算用户在不同时间段内的画像,从而了解该用户在历史数据上表现出的偏好变化,等等。
有了用户画像,就可以开始推荐了,最简单的推荐策略就是计算所有该用户未尝试过的物品与该用户画像之间的相似度,并按照相似度由大到小的顺序生成推荐列表,作为推荐结果。当然,推荐策略也可以很复杂,例如在数据源上,考虑本次用户交互过程中收集到的即时交互数据来决定排序;在模型上使用决策树、人工神经网络等,但这些方法最核心的环节都是利用用户画像和物品属性之间的相似度计算。
其实在很多基于内容的推荐算法中,并不是把用户画像显式地计算出来,而是利用用户打过分的物品,直接计算推荐列表。一种直观的方法就是计算它与该用户尝试过的所有物品之间的相似度,并将这些相似度根据用户的打分进行加权平均。这实际上也是基于内容的方法,只是绕过了计算用户画像的环节。实际上,很多具体的应用表明,绕过用户画像的计算,直接利用物品属性计算相似度往往更灵活,能获得更好的推荐效果,这是因为在计算用户画像的过程中,一些有用的信息被丢掉以至于无法在后面的环节中被利用。
基于内容的推荐方法对于解决新物品的冷启动问题有重要的帮助,这是因为只要系统拥有该物品的属性信息,就可以直接计算它与其他物品之间的关联度,而不受用户评分数据稀疏性的限制。另外,推荐结果也具有较好的可解释性,一种显然的推荐理由是“该物品与用户曾经喜欢过的某物品相似”。然而,基于内容的推荐方法也有一些缺点:首先,系统需要复杂的模块,甚至需要手动预处理物品信息以得到能够代表它们的特征,然后受信息获取技术、处理对象的复杂性高等因素的制约,这样的工作难以达到较好的效果;其次,该方法难以发现用户并不熟悉但有潜在兴趣的物品,因为该方法总是倾向于向用户推荐与其历史数据相似的物品;最后,该方法往往不具备较好的可扩展性,需要针对不同的领域构建几乎完全不同的物品属性,因而针对一个数据集合训练的模型未必适合其他的数据集合。
3.基于协同过滤的推荐
基于协同过滤的推荐一般是指通过收集用户的历史行为和偏好信息,利用群体的智慧(Wisdom of the Crowds)为当前用户个性化地推荐。根据前文所述,基于协同过滤的推荐大致包括基于用户的推荐、基于物品的推荐,以及基于模型的推荐,等等。
基于用户的推荐方法是最早的基于协同过滤的推荐算法(Resnick and Iacovou,1994),其基本假设与基于人口统计学的方法类似,即“用户可能会喜欢和他具有相似爱好的用户所喜欢的物品”,它们的不同之处在于,这里的“相似爱好的用户”不是利用用户的人口统计信息直接计算出来的,而是利用用户的打分历史记录进行计算的。它的基本原理为那些具有相似偏好的用户,他们对物品的打分情况往往具有更强的相似性。
基于用户的推荐方法的核心是最近邻搜索技术。我们把每一个用户看成一个行向量,并计算其他用户行向量与该用户的相似度,这里的相似度计算可以采用多种不同的指标,如Pearson相关性系数、余弦相似度等。拥有了用户之间的两两相似度之后,选择与目标用户最相似的前k个用户的历史购买/浏览行为信息,为目标用户做出个性化的推荐列表。例如在Top-N推荐中,系统统计在前k个用户中出现频率最高且在目标用户的历史记录中未出现的物品,利用这些物品构建推荐列表,并将其作为输出。关联推荐的基本思想则是利用这前k个用户的购买或打分记录进行关联规则挖掘,并利用挖掘出的关联规则结合目标用户的购买记录完成推荐,典型的推荐结果如很多网络购物商城中常见的“购买了某物品的用户还购买了该物品”。
在基于用户的推荐方法中,“个性化”体现在对不同的用户,其最近邻是不同的,从而得到的推荐列表也不尽相同;“协同过滤”则体现在对目标用户进行推荐时使用了其他用户在物品上的历史行为信息,这是与基于人口统计学的推荐方法的不同之处。
基于用户的方法的优点在于在数据集完善、内容丰富的条件下能够获得较高的准确率,而且能够对物品的关联性和用户的偏好进行隐式透明的挖掘。其缺点是随着系统用户数量的增大,计算用户相似度的时间代价显著增长,使得该方法难以胜任用户量变化巨大的系统,从而限制了算法的可扩展性。另外,冷启动用户的问题也是该方法难以处理的重要问题:当新用户加入系统时,由于其打分历史记录很少,难以准确计算该用户的相似用户,这也进一步引出数据稀疏性对系统可扩展性的限制。
鉴于基于用户的协同过滤方法可扩展性差的问题,研究人员进一步提出了基于物品的推荐(Sarwar, et al., 2001),如图8.6所示。在该图所表示的矩阵中,每一行表示一个用户,每一列表示一个物品,矩阵中每一个元素表示相应的用户对相应的物品的打分。基于物品的推荐方法所基于的基本假设与基于内容的方法类似,也就是“用户可能会喜欢与他之前曾经喜欢的物品相似的物品”。例如,喜欢《长尾理论:为什么商业的未来是小众市场》这本书的人,很有可能去看《世界是平的》。与基于内容的推荐方法不同的是,这里的“相似的物品”并非通过物品属性来计算,而是通过网络用户对物品的历史评分记录来计算的。
图8.6 基于物品的推荐
基于物品的推荐方法将矩阵的每一个列向量作为一个物品来计算物品列向量之间的相似度,并基于物品之间的两两相似度进行预测和推荐。一个简单的例子是:当用户购买了某一个物品后,直接向其推荐与该物品相似度最高的前几个物品;复杂一点的情况是,考虑该用户所有的历史打分记录(Sarwar, et al., 2001),并根据一个用户行向量中的0值(即用户未购买的物品),预测用户在该物品上可能的打分,如图8.6所示。例如,我们可以考虑目标用户在历史上所有打过分的物品,并以它们与待预测的物品的相似度为权重对这些历史打分值进行加权平均,作为对待预测的目标物品的预测打分,最终以预测打分的高低为顺序给出推荐列表。总体而言,基于物品的推荐方法是一种启发式方法,对目标的拟合能力是有限的,但是把多个启发式方法结合起来,也可以有很好的拟合能力。
基于物品的推荐方法的优点如下。
(1)计算简单,容易实现实时响应。在常见的系统中,物品被评分的变化要比用户低得多,因此物品相似度的计算一般可以采用离线完成、定期更新的方式,从而减少了线上计算,实现实时响应并提高效率。尤其是在用户数远大于商品数的情况下效果更为显著,例如,用户新添加了几个感兴趣的商品之后,系统就可以立即给出新的推荐。
(2)可解释性较好。用户可能不了解其他人的购物情况,但是对自己的购物历史总是很清楚的。另外,用户总是希望自己有最后的决定权。基于物品的推荐方法很容易让用户理解为什么推荐了某个物品,并且当用户在兴趣列表里添加或删除物品时,可以调整系统的推荐结果,这也是其他方法最难做到的一点。
然而,基于物品的推荐也有缺点:以物品为基础的信息过滤系统较少考虑用户之间的差别,因此精度较基于用户的方法稍微逊色。
除此之外,还有许多其他的问题有待解决,最典型的就是数据稀疏性和冷启动的问题。
基于用户的推荐和基于物品的推荐具有某种对称性,且均为个性化推荐系统最基础的入门级方法,因此我们要对这两种最基本的协同过滤方法进行对比。
在计算复杂性上,基于用户的推荐方法往往在线计算量大,难以实时响应。对于一个用户数量大大超过物品数量,且物品数量相对稳定的应用,一般而言,基于物品的推荐方法从性能和复杂度上都比基于用户的推荐方法更优,这是因为物品相似度的计算不但计算量较小,而且不必频繁更新;而对于诸如新闻、博客或者微内容等物品数量巨大且更新频繁的应用,基于用户的推荐方法往往更具优势,推荐系统的设计者需要根据自己应用的特点选择更合适的算法。
在适用场景上,内容之间的内在联系是非社交型网站中很重要的推荐原则,往往比基于相似用户的推荐原则更有效。以购书网站为例,当用户看一本书的时候,推荐引擎会向用户推荐与其相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。在这种情况下,基于物品的推荐方法成了引导用户浏览的重要手段。同时,基于物品的推荐方法便于为推荐做出解释。以一个非社交型网站为例,如果给某个用户推荐图书被解释为“某个与该用户有相似兴趣的人也购买了被推荐的图书”,则很难让目标用户信服,因为该用户可能根本不认识推荐理由中“有相似兴趣的”用户;但如果解释为“被推荐的图书与用户之前看过的图书相似”,则很容易被用户接受,因为用户往往对自己的历史行为记录非常熟悉且认可。相反,在社交型网站中,基于用户的推荐方法则是更好的选择,因为基于用户的推荐方法加上社交网站中的社会网络信息,可以大大增加用户对推荐解释的信服度。
在一个综合的推荐系统中,一般很少只用某一种推荐策略,考虑到基于用户和基于物品的推荐方法之间的互补性,很多推荐系统将两者结合起来,作为系统的基础推荐算法。
4.基于模型的推荐
基于用户或基于物品的推荐方法共有的缺点是计算规模庞大,难以处理大数据量下的即时结果。以模型为基础的协同过滤技术则致力于改进该问题:先利用历史数据训练得到一个模型,再用此模型进行预测。
以模型为基础的协同过滤技术包括潜在语义分析(Latent Semantic Indexing)、贝叶斯网络(Bayesian Networks)、矩阵分解(Matrix Factorization)、人工神经网络,等等。它们收集用户的打分数据进行分析和学习,并推断出用户行为模型,进而对某个产品进行预测打分。例如,可以将用户属性和物品属性中的各个特征作为输入,以用户打分作为输出拟合回归模型;或者将打分作为类别,将问题转化为一个多分类器问题,等等。这种方式不是基于一些启发规则进行预测计算,而是用统计和机器学习的方法对已有数据进行建模并预测。
5.混合型推荐
混合型推荐系统和算法是推荐系统的另一个研究热点,它是指将多种推荐技术进行混合,相互弥补缺点,以获得更好的推荐效果。最常见的是将协同过滤技术和其他技术相结合以克服冷启动的问题。常见的混合型推荐策略有如下几种(Burke, 2002)。
(1)加权融合(weighted):将多种推荐技术的计算结果加权混合产生推荐,最简单的方式是基于感知器的线性混合。先将协同过滤的推荐结果和基于内容的推荐结果赋予相同的权重值,然后比较用户对物品的评价与系统的预测是否相符,进而不断调整权值。
(2)切换(switch):根据问题背景和实际情况采用不同的推荐技术。例如,系统先使用基于内容的推荐技术,如果它不足以产生高可信度的推荐就转而尝试使用协同过滤技术。因为需要针对各种可能的情况设计转换标准,所以这种方法会增加算法的复杂度和参数化。由于融合了多种推荐算法,并能够根据场景自动选择合适的推荐算法,基于切换的混合型推荐方法能够充分发挥不同推荐算法的优势。
(3)混合(mix):将多种不同的推荐算法推荐出来的结果混合在一起,其难点是如何进行重排序。
(4)特征组合(feature combination):将来自不同推荐数据源的特征组合起来,由另一种推荐技术采用。这种方法一般会将协同过滤的信息作为增加的特征向量,然后在增加的数据集上采用基于内容的推荐技术。特征组合的混合方式使得系统不再仅仅考虑协同过滤的数据源,降低了用户对物品评分数量的敏感度。相反,它允许系统拥有物品的内部相似信息,其对协同过滤系统是不透明的。
(5)级联型(cascade):用后一个推荐方法优化前一个推荐方法。它是一个分阶段的过程,先用一种推荐技术产生一个较为粗略的候选结果,在此基础上使用第二种推荐技术对其做出更精确地推荐。
(6)特征递增(feature augmentation):将前一个推荐方法的输出作为后一个推荐方法的输入,它与级联型的不同之处在于,这种方法的上一级产生的并不是直接的推荐结果,而是为下一级的推荐提供某些特征。一个典型的例子是将聚类分析环节作为关联规则挖掘环节的预处理,从而将聚类所提供的类别特征用于关联规则挖掘。
(7)元层次混合(meta-level hybrid):将不同的推荐模型在模型层面上进行深度融合,而不仅仅是把一个输出结果作为另一个的输入。例如,基于用户的推荐方法和基于物品的推荐方法的一种可能的组合方式为:先计算目标物品的相似物品集,然后删掉所有其他(不相似的)物品,进而在目标物品的相似物品集上采用基于用户的协同过滤算法。这种基于相似物品计算近邻用户的协同推荐方法,能很好地处理用户多兴趣下的个性化推荐问题,尤其是在候选推荐物品的内容属性相差很大时,该方法可以获得较好的性能。
基于矩阵分解的打分预测
1.矩阵上的打分预测问题及其评价
在前面的介绍中我们已经知道,一个典型的推荐系统常常把用户和物品之间的关系形式化为一个稀疏矩阵(如图8.7所示),其中矩阵的每一行对应一个用户,每一列对应一个物品,矩阵中的每一个非零值(图8.7中以“×”标记的元素)代表相应的用户对物品的打分(一般是1~5的星级打分),而每一个零值(图8.7中空白的部分)则代表用户在历史上没有对该物品进行过评分。在这样一个矩阵上的打分预测问题即为根据矩阵中已有的值预测矩阵中缺失的值,也就是尽可能精确地估计一个用户在未买过的物品上可能的打分,从而基于预测打分的高低给出推荐列表。
图8.7 推荐系统的稀疏矩阵示例
为了设计好的打分预测算法,我们先定义合适的评价指标来评价一个算法的预测结果,常用的评价指标为根分均方差(Root Mean Square Error,RMSE)和平均绝对误差(Mean Absolute Error,MAE)。设矩阵以X表示,矩阵中的每一个打分记为rij,所有打分的集合记为S,我们一般取部分打分(如 80%)进行模型的训练和验证,并用其部分(如 20%)进行评价。设
表示算法给出的预测打分,并以表示所有用于测试的打分值集合,那么评价指标RMSE和MAE的计算如下所示:
一个评分预测算法致力于预测矩阵中未知的打分,并使RMSE或MAE评价指标最小。接下来,我们介绍在推荐系统中广泛使用的基于矩阵分解的预测算法及其统一的形式化表示。
2.矩阵分解算法
基于矩阵分解的矩阵补全因其具有较好的预测精度和较高的可扩展性,在实际推荐系统中得到了广泛的应用。目前,研究人员设计了诸多基于矩阵分解的矩阵补全和预测算法,例如SVD、非负矩阵分解(Non-negative Matrix Factorization,NMF)、概率化矩阵分解(Probabilistic Matrix Factorization,PMF)、最大间隔矩阵分解(Maximum Margin Matrix Factorization,MMMF),等等。图8.8所示为使用NMF对原始矩阵的未知值进行预测的结果。
图8.8 基于NMF的矩阵补全示例
大部分已有的矩阵分解算法都可以用一个统一的模型进行概括。为了帮助读者更好地了解矩阵分解算法的本质及不同算法之间深刻的内在联系,我们先介绍矩阵分解算法的一种统一表示形式(Singh and Gordon, 2008)。
设是一个稀疏矩阵,并设
和
是对原始矩阵X的低秩分解,那么一个矩阵分解算法
可以形式化地概括为如下各个子模块的组合:
预测函数:。
可选的权重矩阵,当权重矩阵存在时,它往往是损失函数的一部分。
损失函数,它表示当我们用预测矩阵
来近似X时所引入的预测误差。
对分解矩阵的约束条件:。
正则化因子:。
基于这些子模块,原始矩阵X被近似为。同时,一个矩阵分解算法可以形式化为如下最优化问题:
其中的损失函数D(·,·)对于第二个自变量一般是一个凸函数,且往往可以分解为矩阵中各个元素上的损失之和。例如,对于常见的加权奇异值分解(Weighted Singular Value Decomposition,WSVD)算法而言,其损失函数为:
其中,⊙表示将两个同维度的矩阵对应元素相乘得到一个新的矩阵,则表示矩阵的Frobenius范数,即矩阵中各个元素的平方和。
选取不同的预测函数f、权重矩阵W、损失函数Dw和正则化项R等各部分,就可以获得很多不同的矩阵分解算法,用以解决不同背景下的个性化推荐问题。
3.常用矩阵分解算法
在如上的矩阵分解形式化描述下,我们介绍几种常见的矩阵分解方法,从而帮助读者对矩阵分解在个性化推荐,尤其是在矩阵的打分预测任务上的应用有更深入的了解。
1)SVD
奇异值分解在矩阵计算中具有理论上重要的基础性意义。最原始的SVD方法具有严格的数学定义,设是任意一个矩阵,矩阵
中的列向量是矩阵
的单位正交特征向量,矩阵
中的列向量是矩阵
的单位正交特征向量,对角矩阵∑∈
中的每一个对角元素
是与矩阵U(同时也是与矩阵V)中的每一个列向量对应的特征值
的平方根,并以从大到小的顺序排列,则原矩阵X可表示为
,其中∑被称为奇异值矩阵。如果只保留奇异值矩阵∑中的前k个最大的奇异值,同时只保留U和V中的前k个对应的列向量,则新的矩阵
为对原矩阵X的一个近似。可以证明,对原矩阵X所有秩为k的近似,采用如上SVD得到的近似结果可以取得最小的平方误差,即
当然,通过这种方式取得的近似矩阵也就具有最小的RMSE值。奇异值分解示意图如图8.9所示。
图8.9 奇异值分解示意图
在实际的推荐系统中,我们所要处理的往往是非常稀疏的矩阵,即矩阵中存在大量的未知打分(以0值表示)。需要指出的是,这些0值并不意味着用户对相应的物品打了0分,仅表示用户没有进行相关的打分,或者没有观测到相应的打分,因此在计算预测精度时,将这些元素上的预测值也考虑在内,并以0作为真实值进行评测是不合理的。
基于这一事实,在实际的推荐系统中使用的SVD算法并不是原始的“精确的”SVD,而是只考虑已观测数据进行模型训练和预测的SVD算法,并采用优化的方法求得近似矩阵以应对大规模的稀疏矩阵。
因此,我们采用低秩近似的方式,用两个秩较低的矩阵的乘积近似一个秩较高的大规模矩阵,并考虑在已观测的点上对矩阵进行优化,得到如下SVD算法:
其中,权重矩阵中与原矩阵的已观测点相对应的元素取值为1,与未观测点相对应的元素取值为0,也就是只考虑原矩阵中已观测点上的预测损失,而正则化项用于最小化模型复杂度,从而减小模型过拟合带来的影响。
2)NMF
在如上的SVD算法中,我们并没有对分解矩阵附加其他限制条件,只是简单地要求其列维度为。在很多实际应用场景中,我们希望矩阵分解得到的分解向量满足一定的条件,最常见的就是要求分解矩阵的各个列向量由非负值组成(Lee and Seung, 2001),这是因为在很多场景中(如图像处理、社交网络关系处理、文本处理、概率估计,等等),我们所处理的数据均为非负值,采用非负的向量更符合问题的假设,往往能取得更好的效果。因此,NMF相对于SVD算法在包括推荐系统在内的很多实际系统中获得了更广泛的应用。典型的NMF算法的优化表达式为:
其中,与SVD的不同之处在于我们限制分解矩阵取非负值:(注意优化目标约束区间的不同)。
(3)PMF
PMF(Mnih and Salakhutdinov, 2007)为矩阵分解算法提供了概率框架下的解释,并试图利用概率模型对原始矩阵中的已观测点进行最大似然估计:
其中,为高斯分布,Wij仍然描述原始打分矩阵的数值分布情况,即对应于原始矩阵中的非零值Wij=1,否则Wij=0。同样,也可以用概率分布来描述分解矩阵U和V:
我们在已观测数据上最大化如下的对数似然概率:
显然,该形式同样可以表达为统一的矩阵分解形式,如下面的最小化问题所示:
4)MMMF
如上所介绍的常用矩阵分解算法所隐含的基本假设均为“低秩近似”假设:虽然一个大规模的稀疏矩阵其原始形式可能具有较高的秩,但我们认为可以用一个秩较低的矩阵对原始矩阵进行近似和重构。
在如上的矩阵分解中,原始矩阵的行数和列数(m和n)可以高达上百万甚至千万的量级,但是我们所采用的分解矩阵U和V的列数被限制在k维。k在实际系统中不过是几十至几百的量级,而近似矩阵的秩一定小于k,因此存储空间相对于原始矩阵而言大大降低。其中隐含的意义在于,虽然原始矩阵的规模和维度非常庞大,但我们认为用来描述这些数据的规律、结构和参数的数量是有限的,且最多用k个维度就可以较为完备地刻画出来,这k个维度的参数就用超线性参数矩阵U和V的形式描述。例如,一个化妆品购物网站所包含的用户数量和商品数量可能非常庞大,因而对应的用户-物品稀疏矩阵也具有庞大的规模。但是描述网站用户对化妆品评分关系的因素可能是为数不多的有限个,例如化妆品的品牌、价格、包装、颜色、质量,等等。这就为矩阵的低秩分解和近似提供了基础。
基于低秩近似的矩阵分解算法存在的一个重要问题是在实际操作中难以确定选择多少个维度进行分解,因为在实际应用中,设计人员很难估计决定系统规律的参数维度到底有多少个。使用的维度过少可能无法完全描述用户的偏好信息,从而造成预测精度的下降;使用的维度过多会带来巨大的计算负载,甚至带来过拟合。
MMMF(Srebro, et al., 2004)突破传统的低秩近似假设,采用低范数近似的理念对原始矩阵进行分解和预测,从而绕过选取特定维度进行分解。为了简化问题描述和符号表示,我们在这里采用两类标签的矩阵。假设原始矩阵,对Y的近似矩阵为X,则MMMF最小化如下的优化目标:
其中的正则化项为矩阵的核范数(Nuclear Norm),它表示一个矩阵的各个特征值之和,用来描述和控制模型的复杂度。可以证明,矩阵的核范数可以等价表示为如下的形式:
即一个矩阵的核范数等于其所有可能的分解矩阵(不对分解的维度进行具体限制)的Frobenius范数中的最小值。正是基于这一定理,我们可以绕过显式的矩阵分解,转而采用直接最小化核范数的方式使在全部可能的维度下寻找最优解成为可能。
基于神经网络的推荐算法
深度神经网络在个性化推荐问题上也得到了应用。例如,矩阵的打分预测问题可以看作一个基于多层神经网的拟合问题。然而,直接用多层神经网络进行打分预测的效果并不好,谷歌提出了融合浅层网络与多层神经网络的推荐算法,如图8.10所示。在该模型中,浅层网络用于拟合系统中已有的属性信息,从而利用明确已知的信息进行预测。深层网络用于拟合隐藏在训练数据中的未知信息,辅助提升推荐效果。神经网络算法也被应用在实际的商业推荐系统中,例如,文献(Covington, et al., 2016)将多层神经网络与用户物品的表示学习用在了YouTube的视频推荐系统中,与视频预筛选等工程手段结合,取得了不错的效果。
图8.10 谷歌提出的融合浅层网络与多层神经网络的推荐算法
需要指出的是,学术界对基于神经网络的推荐算法到底有没有真正提高推荐效果是有争议的。例如,文献(Dacrema, et al., 2019)通过系统性的实验指出,大多数基于神经网络的推荐算法,其实际推荐效果低于论文所汇报的结果,并且在很多情况下,传统的基于矩阵分解的算法,甚至是基于相似度的算法,要好于神经网络模型的推荐效果。因此,读者或者推荐系统从业人员,应当根据自己的实际场景和业务需求,使用最合适的推荐算法。
如果没能获得这本书,可点击图片进行购买!
◆
❤更多福利❤
◆
CSDN技术公开课年度总评选
福利前所未有!
扫描海报二维码为你喜欢的讲师投票,就有机会获得超值奖品
↓↓↓
相关文章:

如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果
最近接手一个小项目,要求使用谷歌的aapt.exe获取apk软件包中的信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程的输出结果,当时还研究了一番,只是没有做整理。今天花点时间,将该方法整理成文。ÿ…

Ruby环境的安装(In Ubuntu 7.10)
今天开始学习Ruby。准备的图书呢,就是《Programming Ruby - 2nd》。为了准备一个实验的环境,于是要给我的Ubuntu上安装Ruby的环境。1、安装解释器:sudo apt-get install ruby 2、安装一个即时执行工具irb:由于第一部安装的结果…

基于animation.css实现动画旋转特效
分享一款基于animation.css实现动画旋转特效。这是一款基于CSS3实现的酷炫的动画旋转特效代码。效果图如下: 在线预览 源码下载 实现的代码。 html代码: <div class"wrap"><div class"mod_bg"><div class"bg…

VC:CString用法整理(转载)
1.CString::IsEmpty BOOL IsEmpty( ) const; 返回值:如果CString 对象的长度为0,则返回非零值;否则返回0。 说明:此成员函数用来测试一个CString 对象是否是空的。 示例: 下面的例子说明了如何使用CString::IsEmp…

WMI技术介绍和应用——查询本地用户和组
本文使用了《 WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。( 转载请指明出于breaksoftware的csdn博客)本文主要介绍Win32_Group和Win32_UserAccount类。 如何…
AAAI 2020 | 时间可以是二维的吗?基于二维时间图的视频内容片段检测
作者 | 彭厚文、傅建龙来源 | 微软研究院AI头条编者按:当时间从一维走向二维,时序信息处理问题中一种全新的建模思路由此产生。根据这种新思路及其产生的二维时间图概念,微软亚洲研究院提出一种新的解决时间定位问题的通用方法:二…

UITextField的代理方法
- (void)textFieldDidBeginEditing:(UITextField *)textField 当textField开始编辑的时候调用,可用完成如下的需求:点击textField可以使页面往上滑动 必须加上这句代码 [UIView animateWithDuration:.25 animations:^{ _scrollView.contentOffset CGPo…

以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题
随着物质生活的丰富,人们的精神生活也越来越丰富。人们闲暇的时间也相对变多,于是很多人就开始寻找打发时间的方法。其中电视便是其中一种非常重要的消遣方式。假如我们打开电视机,看到了一个电视台正在播一部我们之前没看过的,正…
知识图谱,下一代数据中台的核心技术
作者 | 杨威,明略科技技术中心负责人 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 本文为CSDN即将推出的《新战场:决胜中台》专刊的第 3 篇文章。 【导读】数据中台火的十分突然,似乎年前还在炒概念,年…

StoneAge Dict 技术方案的可行性[1]
上次和项目经理讨论了技术选型的事,现在简单地说一下,等下次开会再系统地讲。1. 平台环境:Java1.52. 用户接口:Web: JSP, JSFSpring2.5xDesktop: JavaFX3. 技术:dictzip(解析StarDict词库), XML因为StarDict是目前很受…

using的几种用途
using 常用来引用命名空间 1 using System; 2 using System.Data; 3 using System.Data.SqlClient; 4 using System.Collections.Generic; 5 using Model; 6 using IDAL; 7 using DBUnititly; using另一个用途是给类和命名空间指定别名 1 using spacename system.io2 3 using…

以金山界面库(openkui)为例思考和分析界面库的设计和实现——资源读取模块分析
按照软件的执行流程,我们首先遇到《以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题》中提出的最后一个问题:界面描述文件的放置位置。我们曾提出一种方案:将界面描述文件打包后放在资源文件中&#x…
开发者如何赶上5G风口?
随着5G正式步入商用,5G 技术引发广泛关注。据信息通信研究院《5G经济社会影响白皮书》预测,2030年,5G将直接带动的总产出、经济增加值、就业机会分别为6.3万亿元、2.9万亿元和800万个。据BOSS直聘 《2019年5G相关人才数据观察》报告指出&…

使用C# 3.0编译器编译 Asp.Net 项目代码
只需要在 web.config 里添加这样的一段设置就OK了:<configuration><system.codedom><compilers><compiler language"c#;cs;csharp"extension".cs"type"Microsoft.CSharp.CSharpCodeProvider,System, Version2.0.0.0, Cultureneu…

java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
一个:java 和c参考控制 他提到引用,我们会想到java它不喜欢c里面的指针。当然java内引用和c里面的引用是不同的。 比如: 比方C中,我对某一个函数的声明。int a(int &b),b即为引用类型,函数内b的改动能够…

使用程序解决一道逻辑推理题
今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客) 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天: 3月4…

AjaxControlToolKit之DragPanelExtender用法
1、将控件ToolkitScriptManager拖至页面中...2、定义3个Panel,用于实现窗体拖动效果,代码如下:1<body>2<form id"form1"runat"server">3<div>4<cc1:ToolkitScriptManager ID"ToolkitScriptMan…
自带数据线的迷你数显充电宝,旅途必备
还有20多天就过年了有件极其考验情商的事情也来临了就是我们这群90后过年最怕的事情——相亲但是在尴尬的场合手机可是一个缓解气氛的好东西不管是想要选择看电影,还是找附近的游玩只要有手机,就可以从容不迫的应对但是带手机最尴尬的事情莫过于结账的时…

SpringJDBC的简单应用
此处写上应用JdbcTemplate的dao操作数据库的一些代码(含基本的增删改查,注:重点是查询出多条语句的写法): package org.sakaiproject.zhaorui.dao.impl;import java.sql.ResultSet;import java.sql.SQLException;impor…

WMI技术介绍和应用——查询硬件信息
这个月实在太忙了,一直没有时间去继续写WMI的应用例子。 本来是希望将《WMI技术介绍和应用》系列博文写的像WMI百科全书般,但是貌似对这个技术感兴趣的同学并不多,所以我决定对部分知识点点到为止,有需求的同学可以查询MSDN相关类…
微软开源的自动机器学习工具上新了:NNI概览及新功能详解
作者 | 宋驰来源 | 微软研究院AI头条(ID: MSRAsia)2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 GitHub 上获得 3.8K 星,成为最热门的自动机器学习(AutoMLÿ…

10624 - Super Number
题目链接 题意:给出n到m的范围,求出一个数在前i位数组成的数字能被i整除。假设存在输出这个数,假设不存在。输出-1. 思路:回溯,每次放第i位,然后推断是否符合题意。这题踩着时间过去的2.6s(看了…

2008找回企业久违的网速
曾几何时,单位上网访访问页面也是忽忽的,等待10秒简直是不可忍受;曾几何时,公司网络下载是嗖嗖的,转眼已是2M开外;曾几何时,办公室上网看视频是杠杠的,那流畅那画面都快赶上电视直播…

发现一个windows7(32bit或64bit)DirectUI的bug
前段时间发现一个windows7的一个bug,不是什么严重的问题,我在此记录下。(转载请指明出于breaksoftware的csdn博客) 重现步骤如下: 0 在文件夹的“更改您的视图”中选择下图中用红色叉叉标记的项 1 新建一个文件夹名为“Cs" 2…
阿里达摩院2020趋势第一弹:感知智能的“天花板”和认知智能的“野望”
作者 | Just出品 | AI科技大本营(ID:rgznai100)“感知智能与认知智能是相辅相成的关系。认知智能需要感知系统来进行信号处理和概念识别,而感知系统也需要认知系统的反馈来决定如何进行更有效的提取和识别。”1月2日,阿里巴巴达摩…

Java 对synchronized的补充Lock锁
Java并发编程:Lock 从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock࿱…
有奖评选 | 2020年的AI技术公开课,你想听到哪些干货?
CSDN技术公开课有奖评选开始啦~~听过课的小伙伴们,哪位讲师的分享让你获益匪浅?记得给TA投票哦!投票后获取入群方式,参与抽奖,奖品很丰厚哦~~进入付费时代,如今我们看似只要招招手,一切知识随手…
一个分析“文件夹”选择框实现方法的过程
在软件开发中,我们如果存在“导入导出”的场景时,难免会用到“文件夹”选择框。之前一直没有太关注过这个的实现过程。最近在工作中遇到了一些问题,我做了一些研究。在此记录下研究的过程。(转载请指明出于breaksoftware的csdn博客…

Openssl req命令
一、简介 req指令用来创建和处理PKCS#10格式的证书 二、语法 openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-out filename] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-nodes] [-subject] [-passin arg] [-passout arg] [-key filename] [-key…
使用windbg抓取崩溃文件和分析的过程
在软件编程中,崩溃的场景比较常见的。且说微软技术再牛X,也是会出现崩溃的场景。网上有一段Win98当着比尔盖茨蓝屏的视频非常有意思。 (转载请指明出于breaksoftware的csdn博客)我们身边的很多软件都引入了dump生成和收集机制。但…