最近在研读《推荐系统:前沿与实践》这本书,以及来记录一下学习到的内容。
1.推荐系统的发展历史
自20世纪80年代以来,随着互联网相关技术的不断发展,产生的信息与数据极速膨胀。为了解决信息过载对于用户的烦恼,推荐系统应运而生。根据时间以及技术路线,推荐系统可分为基于内容的推荐算法、基于协同过滤的推荐算法以及基于深度学习的推荐算法。
1.1 基于内容的推荐算法
基本思路:计算用户过去阅读过的图书与其他图书之间的相似程度,然后基于相似程度推荐新的图书。
基本假设:用户未来喜欢的物品与其过去喜欢的物品应该是相似的,因此可通过寻找内容相似的物品推荐给目标用户。
一般来说,基于内容的推荐算法包含三步骤
- 用户兴趣收集
用户对内容上的兴趣包括多种方式:用户对物品的评分(1-5),用户购买与否(0或1),用户对物品的评价(文本)等,对于用户表达过兴趣的物品,需要将它们汇总起来,构成用户的兴趣集合。
- 用户兴趣建模
采用可计算的方式对用户兴趣建模。需要对用户兴趣集合中的物品进行描述,例如电影可用影片类型、导演、演员等方式进行描述,音乐可用音乐类型、歌手、发行时间等方式进行描述。
- 内容推荐
描述用户兴趣集合后,可以计算物品和物品之间的关联。针对用户兴趣集合中不包含的物品,可计算物品之间的平均相似度,然后选择相似度最大的物品并推荐给用户。
1.2 基于协同过滤的推荐算法
基本思路:为了使推荐系统具有多样性和意外性,给用户推荐相似邻居感兴趣的内容。
基本假设:一位用户可能与部分其他用户(邻居)具有相似的兴趣,因此可能喜欢邻居感兴趣的物品。
通常来说,基于协同过滤的推荐算法包含三步骤
- 用户兴趣收集
收集用户对物品的兴趣,主要包括显式评分和隐式反馈。显式评分是用户对物品明确的反馈,如电影评分、喜欢与否等,而隐式反馈一般只包括正反馈。
- 发现相似用户
基于用户对物品的兴趣,通过公式或者模型发现与目标用户最相似的邻居用户,并描述他们之间的关系。
- 物品推荐
针对目标用户,计算邻居对用户未交互过的物品的"综合评价",然后将评分高的物品推荐给用户。最关键的步骤就是如何汇总"综合评价",常用的方式有加权平均和基于模型两种。
基于协同过滤的推荐算法五花八门,其中较为成功的方法主要包含以下三类:
- 基于最近邻的方法。为每位用户寻找最近邻,然后根据邻居对物品的评分进行加权平均,估计目标用户对目标条目的兴趣。
- 矩阵分解方法。适用于用户数据稀疏的问题,降维后,通过用户向量与物品向量的点积运算,估计用户对物品的喜欢程度。
- 深度学习方法。采用神经网络中的多层感知机去替换矩阵分解法中的点积运算。
1.3 基于深度学习的推荐算法
利用深度学习算法,可以尝试建模许多传统算法不能建模的数据类型,还能够引入更多信息去提升推荐算法的效果。其次,基于深度学习的推荐算法可以改进传统方法中的用户-物品关系函数建模,使其从简单的线性关系转化到复杂的非线性关系,推荐更精准。最后,深度学习的蓬勃发展,也催生了一大堆新的推荐问题的研究方向,例如:知识图谱、隐私计算、交互式推荐等。
2.推荐系统原理
从机器学习的角度来说,推荐系统主要设计两类问题:
- 回归问题:预测用户对物品的评分(具体数值)
- 分类问题:预测用户是否喜欢某个物品(0或1)
一个完整的推荐系统主要包含五个关键步骤:数据收集、数据预处理、推荐算法选择与模型训练、推荐效果评估、系统上线与用户反馈。
- 数据收集
任何人工智能的项目都需要足够数量和质量的数据作为支撑,因此数据收集是决定推荐系统项目成功的最关键因素之一。一般来说,需考虑以下几方面。
- 数据数量。推荐系统对数据的要求具有较高对弹性,当数据多时,可以尝试复杂的模型;当数据少时,可以尝试简单的模型或者交互。
- 数据质量。需要考虑如何设计更合理的评分收集方式,降低评分数据的噪声。
- 用户隐私。推荐系统收集的数据往往涉及到用户个人消息,一旦被泄漏会带来严重的社会问题。
- 数据预处理
数据收集完成之后,还需要进一步处理使其满足模型训练的需要,常见的预处理技术如下。
- 异常处理。从现实世界收集到的数据往往有很多的噪声或者存在缺失值,因此需要做一些数据降噪或者缺失值填充等处理。对于数值范围的异常,一般需要利用先验知识处理,一些重要特征的异常或者缺失,可采用预测的方式处理。
- 特征工程。例如利用PCA或者SVD等方法对稀疏的用户评分向量进行降维,防止"维度灾难"的影响。在深度学习中,特征可用独热编码进行编码,将一个原始的特征转化为一个固定长度的向量,使用更加灵活。
- 数据分析。利用统计分布或者聚类分析等方法,判断数据的初始分布等情况。
- 推荐算法选择与模型训练
- 算法选择。针对不同类型的推荐问题或数据,采用合适的推荐算法才能取得好的效果。同时还要平衡算法的效率与准确性,有些准确性高的算法效率不高,也需要谨慎选择。在真实世界中,大多数算法都采用集成学习的方式,提升模型的泛化能力。
- 模型训练。选择了合适的算法后,需要根据算法训练推荐模型,然后将用户的数据输入推荐模型中计算推荐结果。
- 推荐效果评估
对于一个推荐系统来说,需要通过衡量各项指标判断系统的优劣。衡量推荐系统一般需要从功能性指标和非功能性指标两个方面来考虑。
- 功能性指标:准确性(MAE、RMSE、Precision、Accuracy等)、效率、多样性与意外性、实用性、可解释性;
- 非功能性指标:安全性、用户隐私、易用性等。
除了评估指标以外,合理的评估方式也十分重要,主要有以下三种方式:
- 离线评估。即用收集到的历史数据评估系统的功能性和非功能性指标,但是要注意,当推荐不同的内容时,用户做出的反应可能会有所差异。
- 在线评估。为了解决离线评估不准确的问题,可采用在线评估。例如A/B测试,即将用户分为A和B两个集合,分别采用不同的算法向两个集合中的用户推荐内容,一段时间后,收集用户反馈的结果并比较好坏。
- 用户调研。对于衡量许多难以计算的非功能性指标,就需要进行用户调研,可采用用户访谈和问卷调查等方式。
- 系统上线与用户反馈
推荐系统开发完成之后,需要进行线上部署,给用户提供服务。目前的推荐系统越来越依赖于云平台,利用一些高性能的云数据库,为用户提供实时服务。并且,在推荐系统上线后,开发者能够从日志中收集到很多的用户反馈,这些反馈能够了解系统运行状况,改进算法后续效果。