当前位置: 首页 > 科技观察

推荐算法集锦(中)——SVD与CB

时间:2023-03-16 17:24:04 科技观察

【.com原稿】1.简介经过上一篇文章对推荐系统的协同过滤算法进行了详细的介绍,以及一个模拟的推荐案例,相信读者对协同过滤算法的原理也有了基本的了解,以及对推荐过程和使用推荐算法的场景和优势。在上一篇文章的最后,我留下了几点思考,就是对协同过滤算法的缺点的研究,用来引出其他的推荐算法。因此,在这篇文章中,我将从这些方面入手,切实解决这些疑惑,并对协同过滤算法的不足进行彻底的阐述,然后给出相应的解决方案和相应的推荐算法。2.“好妇人无米之炊”——矩阵稀疏性问题2.1“米”不够用?首先,对于协同过滤推荐算法来说,在推荐计算过程中涉及到的一个关键的、基础的参数就是评分矩阵,这就引出了今天我们要解决的第一个问题:评分矩阵的密度。评分矩阵的密度是选择相应推荐算法或处理方法的关键。在实际应用过程中,由于很多用户在生活中只会浏览、购买或评价一小部分产品,他们会对大部分产品视而不见而忽略,所以这会导致最终的评分矩阵过于疏。在设计推荐系统时,你会面临一个挑战:使用相对较少或不够的有效评分数据来完成相对准确的预测。这样的问题无疑是“巧妇难为无米之炊”,选择任何一种推荐算法带来的结果都不会有太大差别。就好比你想煮饭,但是米不够用,甚至没有米用,就是用铁锅、铜锅甚至金锅,也煮不饱全家人的饭。这里的“米”是用户对物品的评分,“锅”就像是一个推荐系统,锅的材质就像是一个推荐算法。这样,读者才能明白其中的含义,体会到打分的重要性。面对评分矩阵过于稀疏的问题,最直接的方法是利用用户或物品的附加属性数据,对这些数据进行分类整合,求解相似用户或物品的对应列表。如果这样描述这个方法,读者可能不能很好地理解其中的意思,也不会对这个方法有深刻的印象。所以,我还是用做饭的例子来说明。当用户-项目评分矩阵过于稀疏时(此时评分矩阵不被认为是空的),即没有足够的米饭做饭,那么使用的方法就是认为方法是把米分解,也就是把米打碎,这样可以得到更多的碎米,用这些碎米煮粥来满足家人的需要。这个比喻就是上面提到的利用用户和物品的附加特征和属性数据进行分类和整合。2.2没有“米”?当然还有一种情况是没有meter的,即用户没有评分或者是新用户。不知道读者看到这里有没有似曾相识的感觉。没错,这种情况也是冷启动情况。在推荐系统的详解中已经有相应的解决方案,即完成一次非个性化推荐。大多是通过热销商品或者榜单数据来完成推送,或者在首页弹出窗口询问用户的喜好和兴趣,根据用户点击的模块完成推荐。具体操作方法可以参考我的手稿(推荐系统详解--个性化推荐与非个性化推荐),这里不再赘述。2.3基于最近邻算法的短板公开回到上面提到的利用用户和物品的附加特征属性对数据进行分类和整合,与此操作对应的一种算法称为SVD矩阵分解。以后再说;此外,项目的评分也可以通过默认投票的形式完成。原则是给只有一两个用户评论的物品一个默认值。这种方法类似于隐式评分计算;还有最后一种办法,当然是无奈之举。即找到与没有评分的用户和物品相邻或相邻的有评分的用户和物品,用其评分填充当前评分,或者使用递增、平均等方法获得评分,完成当前用户和物品的评分。因此,现在可以得出结论,基于CF的邻居推荐算法的所有缺点或缺点如下:(1)有限的覆盖范围:由于计算两个用户之间的相似度是基于这些用户之间的相似度相同的只有对这一类物品进行评分的用户才能被视为邻居,也称为对等用户。然而在实际场景中,很多用户很少对物品进行评分或不对物品进行评分,但他们确实有相同的爱好,这会限制和影响推荐算法的覆盖范围。为了解决这个问题,引入了SVD矩阵分解推荐算法,它是根据已有用户对item的评分,分析被评分用户对每个item的因子偏好,以及每个item的包含度这些因素的项目。最后依次根据最后的分析结果预测分数。例如,在SVD矩阵分解之前,只有用户A、用户B、用户C都喜欢看电影,而且看电影的频率相差不大。但是,只看过几部电影,所以可能有两三部电影有用户评分。如此多的评分对于评分矩阵来说无疑是不够的,会造成评分矩阵稀疏。但是,对SVD矩阵进行因式分解后发现,每部电影都可以提取出额外的特征属性因子(励志、搞笑、人文、爱情等属性因子),从而可以提取出更多的属性评分。通过这个属性,还可以发现用户A可能和用户B有相同的喜好,都可能喜欢看搞笑或者爱情片,而用户C可能更喜欢看恐怖片或者励志片。这样就可以根据用户B的行为来预测用户A的行为,使推荐给A的电影更符合A的口味。因此,通过SVD矩阵因子法,可以发现更多影响评分的因素,挖掘更多有意义的相关信息,推荐满足用户需求和愿望的物品。(2)Sensitivitytosparsedata:其实这个问题和上面的有限覆盖问题有点类似。因为评分矩阵的稀疏性是大多数推荐系统的通病。这主要取决于评分证据的稀疏性。在上面提到的SVD矩阵分解算法的使用中,如果分解出来的物品属性因子仍然不够密集,形成的因子评分矩阵仍然是稀疏的,但不是新用户。历史购买行为或浏览行为。像这样的用户不会接受非个性化的推荐,因为毕竟要考虑推荐的人性化和智能化。榜单畅销品的数据并不是万能的。具有一定历史行为的用户,仍需考虑历史行为因素,力求实现个性化推荐。目前,为了解决这类问题,可以采用基于内容的推荐算法。基于内容的推荐算法直接根据用户的历史偏好推荐与用户历史偏好相关的项目,从而兼顾每个用户的独特属性,完成个性化推荐。针对以上两个问题,引入了两种算法,即SVD矩阵分解算法和基于内容的推荐算法。这两个算法是本文的重点。有了这个“引子”,下面就将点燃这两种算法的“导火索”。3.SVD矩阵分解算法3.1SVD算法首先看一下SVD(SingularValueDecomposition)的数学定义:将给定的评分矩阵S分解为三个矩阵的乘积,其中U和V分别称为左右奇异向量,可以本章理解为用户矩阵和物品因子矩阵,对角线上的值称为奇异值;S是一个n*m的矩阵,U是一个n*n的矩阵,Q是一个n*m的矩阵,V是一个m*m的矩阵;在下面的公式中,可以用k个奇异值来近似代替R矩阵,因为前1%的奇异值之和占所有奇异值的99%以上,因为除了奇异值在中间值,其余奇异值基本为0。公式如下:然后需要对U和V矩阵进行转换,得到用户因子矩阵C和物品因子矩阵P,以及将奇异矩阵Q的平方根分别乘以U和V矩阵,就像对奇异矩阵Q求平方根然后乘积变换一样。用户因子矩阵C和物品因子矩阵P如下得到:上次用户t对物品i的评分预测为用户因子矩阵第t行乘以物品因子矩阵第i列(即物品因子矩阵第i行的转换3.2参数优化在计算用户因子矩阵C和物品因子矩阵P时,可以通过SGD随机梯度下降学习不断迭代调整和更新相关参数。没有打分的,不需要计算误差值,直接将误差值设置为0即可。上面提到的SGD随机梯度下降的方法,涉及的内容比较多,不太好理解,我是怕读者混淆SGD随机梯度下降和SVD矩阵分解,所以不再继续上面解释的SDG随机梯度下降的原理,我来分析解释一下SGD随机梯度下降法作为一个专题,因为它也涉及到一些人工智能神经网络的应用。希望读者先熟悉以下公式:3.3SVD算法缺陷SVD矩阵分解在实际推荐系统中很少用到,因为难以进行在线计算,以至于不能很好地处理用户的实时行为反馈,有就是没有实时处理能力。而且,对于大规模的推荐系统,如果直接进行协同过滤或SVD矩阵分解,可能会存在计算量过大的问题。这时可以考虑使用K-means聚类算法进行处理,将大量的评分数据进行分组,将每组中的所有数据归为一类或一个因素,然后进行协同过滤处理.K-means算法的原理和作用这里不再赘述。之后,这些遗漏的算法原理会在补充文章中具体说明。4.CB——基于内容的推荐算法4.1CB算法及其特点、应用基于内容的推荐算法(Content-basedRecommendations),与协同过滤算法相比,也是业界或互联网行业广泛使用的推荐算法。这是一种针对协同过滤推荐算法的推荐算法,它只是基于用户对商品评分的推荐所造成的评分矩阵的稀疏性(使得矩阵分解后仍然不满足理想的丰富评分矩阵)。这种推荐算法也在一定程度上解决了部分冷启动问题(虽然不是针对新用户推荐)。基于内容的推荐算法可以根据物品的特征或用户的历史行为或特殊偏好等特征属性做出更直观的推荐。该算法只考虑推荐用户,不关心其他用户组和最近邻。CB算法特点:虽然基于CB内容的推荐算法还需要依赖物品和用户偏好等附加信息,但不需要过多的用户评分和对等用户群体的偏好属性记录。也就是说,仅针对某个用户,也可以使用基于内容的推荐算法来完成推荐功能,生成推荐的物品列表。而这些都是基于协同过滤算法的推荐做不到的。CB算法应用:基于内容的推荐算法最初是为了推荐用户感兴趣或感兴趣的文本文档而设计的。在一些文本文档推荐中,经常可以看到基于内容的推荐算法。但目前,它也将开始将该算法应用于其他推荐领域。基于内容的推荐将在未来进一步推广应用。4.2CBAlgorithmVSCollaborativeFilteringAlgorithm我们来看看CB(content-based)和(collaborativefiltering)算法的区别:CB(content-basedrecommendationalgorithm)推荐系统会尝试根据用户过去喜欢的项目向用户推荐项目对过去喜欢的物品进行类似替代,推荐的物品与用户过去感兴趣或购买过的物品属于同一类别,CB算法不需要依赖用户-物品评分矩阵;CF(recommendationalgorithmforcollaborativefiltering)推荐系统会尝试识别与当前用户有相同兴趣的其他用户,并将这些其他用户喜欢的项目推荐给当前用户。CF算法需要完成基于用户-项目评分矩阵的推荐。4.3CB算法实现步骤及结构CB算法实现步骤如下:(1)ItemRepresentation(对象表示):是对每个项目(对象)提取一些特征属性,即对结构化项目的操作,以及相应的处理过程也称为内容分析;(2)ProfileLearning(特征学习):利用当前用户的历史行为信息或者他过去喜欢(不喜欢)的物品的特征数据信息来学习当前用户的偏好特征(Profile),对应的处理过程为称为配置文件学习;(3)RecommendationGeneration(推荐迭代):通过分析上一步得到的用户Profile(特征),可以为当前用户推荐一组相关性或相似度最高的item,相应的过程称为Filtering组件(过滤组件)。从BC推荐算法的实现步骤不难得出BC推荐算法的结构。BC推荐原理过程画成一个直观的结构图如下:4.4CB—ItemRepresentation在画出BC推荐算法的结构图之后,这里补充一点:在item特征属性的挖掘和提取中,即ItemRepresentation的过程,主要包括数值数据和非数值数据的处理。机器学习中使用的主要处理方法有以下几种:(1)数值数据归一化:就是将数值数据统一除以自身数据之和,用各个数据占数据之和的比例来表示数据,让每个数据的取值范围都在[0,1]以内,这也是最简单的对数值型数据进行归一化的方法;(2)数值数据二值化:根据每个数据值设置一个默认值,设置一个条件规则,比如数据值大于等于默认值表示为1,小于默认值表示为-1.像这样设置限制,使每个数据值只有两个值中的一个,也就是所谓的二值化;(3)将非数值数据转化为特征向量:将每个非数值数据转化为对应的向量值表示;(4)TF-IDF:信息检索和数据挖掘中常用的加权技术。TF是termfrequency,IDF是inversetextfrequencyindex,通常用来评价一个词对于一个文档集合中的文档的重要性。(5)Word2Vec:一组用于生成词向量的相关模型,会涉及到神经网络的训练。4.5CB—PofileLearning假设用户已经判断出自己对某些物品的偏好,喜欢其中的一些,不喜欢另一些,那么这个过程实际上就是根据用户过去的偏好进行判断,从而建立判别模型,最后根据对于这个模型,判断用户是否喜欢一个新的item。这是一个典型的监督学习问题。理论上,可以利用机器学习的分类算法求解所需的判别模型。这也为以后的算法优化提供了一个研究方向,即结合深度学习技术不断改进判别模型,使判别模型更适合用户兴趣。这个过程涉及到的常用算法有最近邻法、决策树法、线性分类算法、朴素贝叶斯算法等,这些算法都是人工智能或深度学习领域处理数据的常用算法,由于本文只讲推荐算法,我会在以后的深度学习专题中讲解深度学习领域涉及的算法。至于最近邻法,由于是推荐系统中最为关键和常用的算法,我将以补充稿件的形式详细阐述,更好地填补推荐算法系列的空白。通过这些与机器学习相关的知识,我们不难发现,基于内容的推荐其实主要是依赖于机器学习算法的推荐。4.6CB算法分析通过以上文字,不难知道基于内容的推荐算法(CB)的优缺点。让我们在下面扩展理解。CB推荐算法的主要优点如下:(1)用户独立性:该属性也摆脱了协同过滤算法依赖其他邻居的特征属性的限制,真正意义上只有一个用户可以完成个性化推荐。CB算法在建立模型的过程中只需要考虑当前推荐用户的信息,是一种独立性很强的推荐算法;(2)透明性:从CB算法的运行结构可以知道,CB算法明确列出了使物品出现在推荐列表中的内容特征和描述信息,可以说明推荐系统如何运作良好,更清楚或更透明;(3)新项目属性:这是在没有项目评分特征的情况下。也就是说,即使当前用户没有对这个item进行评分,甚至这个item没有任何评分,但是BC算法可以根据当前用户的历史行为找到与该item相似并且有用户评分的item,那么CB推荐算法就可以将这个没有任何评分的item推荐给当前用户,即完成了一个新item(没有任何评分的item)的推荐。当然,任何推荐算法都只能用来解决某一类问题或应对某一类情况。因此,CB算法也有自身难以克服的缺点:(1)难以提取特征(可以分析的内容有限):对于当前用户(item),如果他的浏览历史(feature)attributes)不够丰富,提取出来的特征不会有很好的表示能力,会对最终的推荐效果产生负面影响。这个问题与推荐对象相关的特征数量和类型有限有关,并且取决于领域知识,即机器学习算法的质量;(2)容易造成长尾效应:长尾效应在之前的文章中已经做过解释,CB算法推荐很可能会导致长尾效应的出现,以至于无法发现用户的潜在兴趣,导致用户兴趣过度专业化。由于CB推荐算法中的推荐结果总是与用户之前喜欢的item相似,经过CB算法推荐后,用户始终停留在之前感兴趣的领域,无法出去喜欢其他领域的item.但真实情况是当前用户肯定不仅仅有这个领域的兴趣爱好,所以CB推荐算法无法发现当前用户可能还喜欢其他领域的内容,这也会造成用户兴趣过度专业化,长会出现尾部效应(3)冷启动问题:即无法对新注册用户产生推荐,因为CB算法依赖于当前用户的历史行为数据,不可能对新注册用户产生推荐根本没有历史行为数据。产生更可靠的推荐结果。这个问题也是之前协同过滤算法中的一个问题。好在上一篇非个性化推荐已经解决了这个问题,不再赘述。5.小结SVD算法和CB算法都是为解决协同过滤算法用户评分矩阵的稀疏性问题而发展起来的推荐算法,虽然针对不同的稀疏性有相应的解决方案。但是作为SVD和CB算法,这两种推荐算法仍然存在着自身难以克服的缺点。在下一篇文章中,我会把剩下的比较小众的推荐算法介绍给大家,方便读者根据自己开发中遇到的场景选择合适的算法,也能让读者对严重程度有一个更清晰的认识推荐算法方面,掌握一些小众的推荐算法可以为自己设计的推荐系统锦上添花。【原创稿件,合作网站转载请注明原作者和出处为.com】