【配套博客】《集体智慧编程》推荐系统
推荐系统(建设中进度20%)
- 背景分析
- 应用场景描述
- 算法概述
- 相似性算法
- 欧几里得距离计算方法
- 皮尔逊相似度计算方法
- Jaccard相似度计算方法
- 曼哈顿距离计算方法
推荐设计模式
基于现代算法的推荐方案
卷积神经网络驱动的个性化推荐系统
序列架构
深度学习框架结合注意力机制
《集体智慧编程》是一部较为经典的著作,在过去逾14年的时光里自出版以来已逾14年时间。其主要内容以实践为主,在笔者看来作为一名主要专注于业务代码开发的技术人员阅读此书时深感受益匪浅。笔者在此基础上结合自身的数学知识与实际编码经验并融入当前业界更为先进的算法实现方式对本书进行深入探讨具体内容包括但不限于理论知识与实际应用案例分享等具体内容不会简单照搬书中的理论知识而是采用更为详细生动的例子进行补充说明个人水平有限难免存在不足之处如有任何问题建议请通过私信或留言的方式提出我会尽快为您解决这些问题请注意不要在评论区引起不必要的争论或不当言论
背景介绍
第一性原则:无论怎样都是给不同的人展示不同的内容,在这个基础上确保所展示内容的相关程度和排列顺序。因此我们可以得出结论:任何用于推荐工程的算法都必然包含两个关键部分——获取候选集合与排序。接下来我们将围绕这两个关键点详细介绍2009年流行的主要推荐系统是如何设计并运行的
场景介绍
我们开始深入分析这样一个情景:作为一个视频播放平台,在为用户提供个性化推荐时,我们的目标是向每位观众展示与他们的兴趣相符的影片列表。
让进行工程的同学来进行思考的话,实际上并不是难以完成的任务。因为电影数量非常多,但另一方面,我们可以通过一些其他的资源库轻松地获取电影评分数据。通过应用排序算法或topk算法能够有效地生成推荐列表,并将其推荐给所有用户使用。
如果不需要依赖复杂的算法理论基础的话,在工程应用中给出一个推荐时间是比较直接的做法;但如果我们能够在获取一些用户的使用数据基础上进一步拓展我们的知识储备的话,则是否能够为每位用户定制更加个性化的推荐方案呢?实际上这也是相对容易实现的;在后面的部分中我们将运用基本的高中数学知识以及统计学原理来开发一些协同过滤相关的算法模型;从而达到提升个性化推荐能力的目的。
协同过滤是一个相对易于理解的概念。
如前所述,在推荐工程中必须首先获取一个推荐集合。
为了完成这一过程的具体步骤,请参考相关技术文献。
我们可以通过协同过滤的方法来实现这一目标。
为了提高准确性,在我们的搜索集合上全面扫描以确定与目标项最匹配的项目。
应用算法识别与我们的target_item相似度最高的物品集合。
对这些项目进行排序处理以提高准确性。
通过这种方式我们就可以实现推荐系统的核心功能。
算法介绍
注释:所有代码均可在此获取
https://github.com/orikey0/Programming-Collective-Intelligence-Source-Code
注释:由于09年基本使用的是Python2语言,并且这里笔者按照Python3语言及Python编程规范对原有代码进行了一定程度的优化与补充,并增加了书中未曾实现的一些算法内容。笔者郑重承诺:所有代码在开发完成后将即时可用。
在以下具体的情境中介绍几种常见的计算相关算法。我们从电影网站获得了用户评分数据集,在这个数据集中包含了多个用户的评分信息。我们将这些评分信息整合为特定的形式,并对它们进行分析处理以提取有用的信息。接下来我们将介绍其中一种算法的具体实现方法以及其应用场景。
critics = {'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,
'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,
'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
'Superman Returns': 3.5, 'The Night Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0,
'The Night Listener': 4.5, 'Superman Returns': 4.0,
'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane': 4.5, 'You, Me and Dupree': 1.0, 'Superman Returns': 4.0}}
相似性算法
基于提供的数据样本, 我们为了评估任意两人间的相似性程度, 则是需要重点探讨的内容.
欧几里得距离计算
这个公式大家都再熟悉不过了。他通常被称为勾股定理,在二维空间中用来计算任意两点之间的距离。具体而言,在计算过程中我们可以通过选取任意两人在相同电影中的评分作为坐标的依据来展开计算。在这里我们可以通过选取任意两人在相同电影中的评分作为坐标的依据来展开计算。在这里我们可以通过选取任意两人在相同电影中的评分作为坐标的依据来展开计算。
在这个过程中我们需要通过循环遍历所有数据点并累加其差值的平方根来完成最终的距离计算。
皮尔逊算法
在面对大量离散数据的情境下, 判断一组离散数据之间是否存在正相关关系, 运用皮尔逊算法可以分析这些数值特征. 其核心机制在于通过均值归一化的向量来衡量各维度间的关联程度.
Jacard 系数
Jaccard系数算法相对较为简单,并且主要应用于自然语言处理领域中。这里给出一个具体的例子:我们可以首先对以下两个句子进行词性标注
中国真的很美丽 => ['中国', '真的', '很', '美丽']\\ 中国台湾真的很靓丽=>['中国', '台湾', '真的', '很', '靓丽']
曼哈顿距离算法
设计模式
在面对多种相似性算法时(即当我们有多个相似性算法的时候),根据不同场景采用相应策略(即针对不同的场景使用不同的策略),这实际上是一个非常自然会想到的做法(即这是一个非常自然能够想到的事情)。因此我们可以首先想到采用设计模式中的策略模式来处理不同场景的计算问题(即我们可以首先想到使用设计模式中的策略模式来做对不同的场景做好计算)。
现代推荐算法
伴随着技术实力的持续提升,在人工智能领域相关的技术体系也迎来了更为深入的发展阶段。为了更好地帮助大家理解这一变化过程,在接下来的内容中我们将着重介绍几种较为常见的算法类型及其相较于传统相似度计算方法的优势,并以此展开进一步探讨相关问题。
