Introduction to Recommender System

推荐系统在电子商务以及基于social的社会化网站上取得了巨大的成功,web2.0下,海量的用户数据使我们能够更加智能地发现用户的口味和需求。

推荐系统接受的输入包括:

  • 要推荐物品、内容的元数据,比如关键字
  • 系统用户的基本信息,比如姓名、年龄等
  • 用户对物品信息的偏好,评分、查看记录、购买记录等
    • 显示的用户反馈:评分、评价
    • 隐式的用户反馈:购买记录,查看记录

推荐系统分类

根据不同用户的推荐
大众行为推荐
  • 给每个用户推荐一致的信息
个性化推荐
  • 根据用户的口味、偏好进行推荐
根据数据源
基于人口统计学的推荐
  • 通过用户的基本信息发现用户的相关程度
  • 推荐相似用户的喜好物品、内容
  • 优点:
    • 没有冷启动问题
    • 不依赖物品本身数据,是领域独立的
  • 缺点
    • 方法过于粗糙,尤其对于对品味要求高的领域(音乐、图书等)
    • 个人隐私信息的获取不容易
根据推荐物品或内容的元数据
  • 根据推荐物品或内容的元数据发现物品或内容的相关性
  • 根据用户的历史喜好记录推荐类似的物品
  • 优点
    • 较好的对用户口味进行建模
  • 缺点
    • 推荐的质量依赖于物品模型的完整性、全面程度(tag是一种简单有效的方法)
    • 物品相似度仅考虑物品本身的特征,没有考虑人对物品的态度偏好
    • 需要历史偏好,所以有冷启动问题
基于协同过滤的推荐
  • 根据用户对物品、内容的偏好,发现物品、内容本身的相关性,或者发现用户的相关性
  • 一般使用k近邻的思想
  • 喜欢类似物品的用户可能有相似的口味偏好
  • 优点
    • 不需要对物品、用户进行严格建模,不要求机器理解物品属性,领域无关
    • 计算出的推荐是开放的,可以共用他人经验,支持用户发现潜在的偏好
  • 缺点
    • 对新物品、新用户有冷启动问题
    • 推荐效果依赖于用户历史偏好数据的多少和准确性
    • 稀疏矩阵的问题
    • 特殊品味用户的问题
    • 由于以历史数据为基础,获得用户模型后,很难修改或者根据用户的使用演变,灵活性较差

1) 基于用户的协同过滤机制和基于人口统计学的推荐都是基于邻居的相似度计算推荐,前者是基于用户偏好数据计算用户相似度。

2) 基于项目的协同过滤机制根据用户对物品的偏好信息,计算物品的相似度,然后根据用户历史信息推荐相似物品。

3) 基于模型的协同过滤机制基于用户历史偏好信息,训练模型,然后根据实时的用户喜好信息进行预测,计算推荐。

基于推荐模型的建立方式
基于物品和用户本身的推荐
  • 将每个用户、物品都当成独立的实体
  • 预测每个用户对每个物品的喜好程度(稀疏的二维矩阵)
  • 对用户和物品进行聚类可以减小计算量
基于关联规则的推荐
  • 挖掘数据的依赖关系,共现关系
  • 统计信息
基于模型的推荐
  • 用已有用户喜好数据训练用户的喜好模型
SVD在推荐系统中的应用

SVD的公式如下

其中,$\Sigma$是对角矩阵,对角元素为从大到小排好序的$AA^T$特征值的平方根(也就是奇异值)。$U$的每一列称作左奇异向量,$V$的每一列(即$V$的转置$V^T$的每一行)称作右奇异向量,满足$U^TU=I, V^TV=I$。计算SVD实际上就是计算$A^TA$或者$AA^T$的特征值和特征向量,然后将它们组合成上边表达式形式。$AA^T$的特征向量按照特征值的大小按排列便组成了$U$矩阵,同样$A^TA$的特征向量按照其特征值的大小按排列便组成了$V$矩阵。

在协同过滤算法中,$A$是用户行为矩阵,$m$表示用户个数,$n$表示商品数。计算用户或商品相似度时,需要大量的操作,单个向量长度也比较长。考虑采用SVD对原始数据进行简化。如果用于基于物品的协同过滤推荐,那么就直接使用$V$矩阵代替$A$矩阵($V$的每行代表一个物品);如果是基于用户的协同过滤推荐,就直接用$U$矩阵代替$A$矩阵(每行代表一个用户)。这时,在计算上述的两个向量之间的距离的时候,向量的长度不再是对这两个物品都有过反馈的用户的个数,而是简化后数据的维度,即$S$矩阵中我们保留前$k$个奇异值,那么这个$k$就是现在向量的长度(取前k个元素[0:k-1])。

混合推荐机制

  • 加权混合
  • 切换混合:适合的机制用在适合的场景
  • 分区推荐:amazon,不同推荐结果展示于不同位置
  • 分层推荐:多种推荐机制,将一个推荐机制的结果作为另一个推荐机制的输入
分享到