推荐系统概述——《推荐系统:原理与实践》读书笔记

从假设题库的发展过程开始,了解推荐系统常见模型、基本方法和常见问题。

全文结构

  1. 前言
    1. 学习问题
  2. 正文
    1. 一个系统的发展过程
    2. 推荐模型概览
    3. 常见问题
  3. 参考

前言

综合以往几个版本的经验;题库刷题小程序(需求完成,挂起)以及『微软万科实践营』的培训经历,想到未来公司业务一定会用到推荐系统,尤其是『题库』方面。因此,选择这本书学习相关知识。而经过一段时间的学习,迫不及待地于此分享,希望不仅能为大家在推荐系统学习方面提供参考,也能为大家在研发过程中如何通过数学提升版本质量和开发效率提供思路。

这本书读了一部分(概述;近邻协同过滤;零散阅读浏览后续章节)。个人感受是,对于数学不好的同学,可以挑着看,了解推荐算法分类、使用和优化方法、可达成的效果等相关概念。对于大学有一定数学底子的同学,可以先看着,里面没有代码,只有文字描述和少量的数学公式推导,只要大学有一定数学底子,跟着书中的思路走,由简到繁的推导相关公式,就能理解。但依然不可避免的会出现一些本科阶段没学好或没接触过的数学知识,我在与我的大学老师交流后,建议有兴趣的同学辅以另外几本书一同阅读——高等数学、概率论、线性代数、矩阵分析、概率分析。

这本书完全没有代码相关的东西,因此,有一定数学基础的非研发同学也能阅读。且个人感觉里面介绍各种推荐算法(推荐模型)的思路与我大学时玩数学建模的过程高度相似,如下图。简化并抽象问题——根据实际需要,抽象对象特征的数学表达;模型建立——从核心问题开始构建最基础的模型;迭代模型——不断提出新问题(假设),并逐个解决(调整模型)、检验;得到最终模型,并应用于实践。

学习问题

正式分享之前,先提出几个我在学习过程中遇到并解决的几个问题。

这本书太复杂,我觉得我作为一个数学能力并不算突出的本科生,会看不懂。

看书前,我确实怀有这个疑虑。看到第三章,并大致浏览了后续章节后,我了解到,这个疑虑是多余的。这本书非常好的一点是——它虽然深入而详细地讲解了推荐系统的相关知识,但它是循序渐进的。哪怕是一个大学数学不及格的人,我相信他至少能看懂第一章和后续每个章节的前几个小节。而数学越好的人,看着会越感亲切,因为它不会上来就讲一大堆很复杂的公式,几乎都是从最简单的数学模型开始,逐步提出新的问题,并给出更进一步的模型,逐步迭代完善——这个过程与数学建模十分相似。

里面有一个数学原理、名词看不懂,怎么办?

我在学习过程中,也有遇到很多问题。所幸有一名大学老师,至今依然保有联系。他原本便是通信出身的,对数学了解颇深。他给的建议是,一定要去学习 概率论矩阵分析 ,这本书遇到的很多问题实际上都是这两门课程的内容。因为事有轻重缓急,这两门课程的学习我个人暂未安排上,这里暂且提出,便于为有兴趣深入学习的同学提供参考。

正文

一个系统的发展过程

以下过程皆为假设,暂未实行,目的仅在于帮助大家了解推荐系统的几种基本模型。

我们有一个题库,里面有海量题目。现在我们希望做一个刷题产品,学生可以在上面刷题。这时候遇到了第一个问题。

基于知识的推荐模型

因为各种历史原因,导致当前系统历史数据不足,但又希望能够启用推荐系统,为学生作出有效推荐。这类问题称为 冷启动 问题。此时,可以由学生通过某种交互方式,向系统明确描述他希望获取的题目(题型、学科、试题来源、关键字标签等),而后由系统基于所需的规则和相似度函数(知识库),检索学生需要的题目,向该学生推荐。

此时,这个系统称为基于知识的推荐系统。基于知识的推荐系统的一大特点是:依据用户给出的明确需求做出推荐,即:推荐结果 = 学生要求 + 题目特征 + 知识库(预先定义的规则;相似度函数)。

进一步抽象,即:推荐结果 = 用户要求 + 物品属性 + 领域知识

基于物品的近邻协同过滤模型

现在,刷题小程序已经有人在用了,并且用了相当长一段时间。使用的学生可能不多,但每位同学黏性很大,使用频率很高,因而产生了很多的答题记录、搜题记录、题目评论等行为记录。此时,我们意式到,学生可能在不同的时期,对题目的需求是不同的,因此这个时候,我们通过分析他们过去一段时间内的搜题历史、答题历史、错题记录等,可以得到他在最近得一段时间内,可能关注具有某些特征得题目——关键字、学科、试题来源(模拟考?中考?联考?)、题型等——这种属于 正面评价(评分)。他或许还会产生一些 跳过题目 的操作,此时,我们可以知道他不需要具有某些特征得题目——这种属于 负面评价(评分)

有了用户对某些题目得正面评价和负面评价之后,我们可以分析最近一段时间,用户更需要具有某些特征(属性)的题目,然后使系统向其推送更接近其倾向的题目,帮助用户更高效的获取自己期望的题目。

此时,推荐结果 = 用户评分 + 物品属性

基于用户的近邻协同过滤模型

现在,刷题小程序的基础功能趋于完善,经过一些运营活动,积累了大量用户。此时,不但拥有很多用户对题目的评分,且每位用户都能在系统中找到与其相似的用户——比如他们具有高度相似或相同的题目喜好标签,通过聚类算法,我们将彼此高度相似的用户聚在了一起,此时,能很容易找到与指定用户相似的其他用户。

假设存在学生A,做过题目t,存在另一学生B没做过题目t。因为学生B与学生A相似,所以我们可以认为学生B可能也对题目t感兴趣,从而向学生B推送题目t。该模型称为基于用户的协同过滤推荐模型,此时,推荐结果 = 用户评分 + 社区评分

  1. 以防万一,这里再次提醒一下,分类和聚类是不同的。『分类』将数据根据特定规则划分至已知的类型中;『聚类』将数据集中,彼此相似的数据聚成簇,此时每个簇中的数据都是彼此相似的(关注相似性)。
  2. 这里我没有提出基于内容的推荐系统,实际上,基于物品的尽量协同过滤模型与基于内容的模型是相似的。个人理解是,前者关注不同物品属性标签的相似性(如题型、难度等),而后者关注不同物品在内容上的相似性(如题干、题解)。即,后者实现的基础是基于特征提取和聚类算法,对相似物品进行聚类。
  3. 实际上,一个推荐系统,往往由多个模型共同组成,称为混合集成的推荐系统

推荐模型概览

持续学习完善中。
图片

常见问题

每个问题的具体解决方案都是复杂的,在书中都有专门介绍,这里仅提出,为大家提供参考,便于在以后的学习和实践中尽可能留意这些问题的存在。

冷启动

系统运行之初,可能存在数据不足的问题,因而无法给出有效的推荐结果——这称之为冷启动问题。因此,系统运行之初,选择对冷启动问题敏感性较弱的模型更能快速提供有效推荐(如基于知识的推荐模型)。

惊喜性

如果通过某种模型和具体策略,确定学生A喜欢做力学题,而后续推荐结果全为力学题,此时,系统具有较高的精确度(Precision),但过高的P值有时未必是好事。如果在M个结果中出现错误推荐,包含N道光学题,此时,用户没有跳过这些题目,而是继续作答,甚至产生收藏操作(正面评价)。则认为这个系统具有一定的惊喜性(N/M)。

抗攻击

推荐系统可能遇到的一种攻击行为就是向系统中插入大量的无用评价,比如在淘宝中,一个商家向另一商家的产品注入大量负面评价,或向自己的产品注入大量正面评价。可以想象,在上述近邻模型中,这种攻击将直接影响到推荐结果的有效性和合法用户的体验质量。当然,也有专门为抗攻击或提高模型健壮性的策略,这些内容较为复杂,在书中也有描述介绍。

隐私问题

切面介绍基于近邻的协同过滤模型中,可以看到,用户的行为被记录,并看做用户对物品的正面或负面评价。实际上,不仅在近邻的协同过滤模型,在其他模型中也有类似做法。在推荐系统中,用户行为必然被尽可能多的记录,分析结果可能包括用户的个人喜好、观点等信息,这些信息可能是高度敏感的。

对于模型可能涉及的隐私安全问题,不仅可以从技术架构、政策法规等角度解决,也有一些专门用于保护隐私的算法。比如,数据收集时,可以通过分布式协议扰动技术等降低数据泄露风险;数据发布时,可以通过k匿名、冷凝、t-接近模型等方法,干扰数据记录,使攻击者无法将数据记录与其他公开可用的数据相匹配。

参考

  1. Charu C.Aggarwal 著 黎羚利 等译. 推荐系统:原理与实践[M]. 北京:机械工业出版社,出版年份:起止页码.
  2. 知乎——《推荐系统从入门到接着入门》

猜你喜欢

转载自blog.csdn.net/qq_23937195/article/details/103804716
今日推荐