初识推荐系统
开端
最近写这个博客主要是因为在最近找实习,想把之前学的东西回顾一下,也想为今后工作需要做一个铺垫吧(哈哈,其实早就想写了,但是一直拖)。我呢2017年8月左右入学,由于在读研期间一直在做实验室的项目,偏工程一些。那会儿对学术没有一点想法,后来有一次和同学闲聊(19年毕业的同学),她讲了找工作的经验,也多次强调了读研期间研究方向的重要性。最后就开始接触推荐系统了,在工业界推荐和广告系统这都是可以直接带来经济效益的,所以学习这些方向都还不错。
了解推荐系统
其实网上有很多推荐系统的介绍,比如基于内容的推荐(可以看下推荐系统到底是咋样工作的)都很好,可以先看一些中文的文献,但是要了解最新的技术是必须要读英文文献的,这里我简单的介绍下:
整体来说,目前信息处理系统有两种工作模式:第一种称之为“拉”模式,比较典型的就是搜索引擎,用户提交查询,系统返回搜索结果;第二种称之为“推”模式,比较典型的就是推荐系统,用户不要求显式提交任何查询和兴趣偏好,而系统通过自动化算法来进行“信息”推送。
协同过滤 --基于统计的算法
步骤:收集用户的偏好;找到相似的用户和物品;计算推荐
用户行为 | 类型 | 特征 | 作用 |
---|---|---|---|
评分 | 显式 | 整数量化偏好 | 数值可以精确到用户的偏好 |
投票 | 显式 | 布尔量化偏好 | 也可以精确表达偏好 |
转发 | 显式 | 布尔量化偏好 | 可以精确表达偏好,也可以推理出被转发人的偏好(不精确) |
保存书签 | 显式 | 布尔量化偏好 | 可以精确表达偏好 |
标记书签 | 显式 | 单词进行分析,得到偏好 | 通过分析用户标签,分析用户情感(喜欢or讨厌) |
评论 | 显式 | 文本分析 | 分析用户情感(喜欢or讨厌) |
相似度计算
欧氏距离 皮尔逊系数 余弦相似
基于用户的
解决的问题:
已知用户评分矩阵 R R R(一般是非常稀疏的),推断矩阵中空格 e m p t y c e l l s empty cells emptycells处的值;
存在的问题:
冷启动问题,对于一个新用户,没有任何评分,很难找到邻居用户;对于一个物品如果所有最近的邻居都没买(也就都没打分)那么是不会推荐的
基础的解决方案:
相似度计算最好用皮尔逊相似度;考虑共同打分物品的数目(选取相同数目多的) ;对打分进行归一化处理(避免有个人倾向比如每个人的评分标准不一样,有的人打三分表示厌恶,有的人打一分表示厌恶);设置一个相似度的阈值
没流行起来的原因
- 评分矩阵的稀疏性
- 数百万的用户计算,计算量太大
- 用户的喜欢是比较容易变化的
用户冷启动问题
- 引导用户把自己的一些属性表达出来
- 利用现有的开放数据平台
- 根据用户注册属性
- 推荐排行榜单
基于物品的
基于物品的协同过滤,计算性能高,通常用户的数量远大于物品的数量。
可以预先计算保留,物品一般是不变的
下图计算相似度并未考虑 物品的本质特征,而是直接考虑评分属性
物品冷启动问题
- 文本分析
- 主题模型
- 打标签
- 推荐排行榜单
– | UserCF | ItemCF |
---|---|---|
性能 | 适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价较大 | 适用于 物品数明显小于用户的场合,否者计算代价较大 |
领域 | 实时性要求高,用户个性化兴趣要求不高 | 长尾物品丰富,用户个性化需求强烈 |
实时性 | 用户有新的行为,不一定需要推荐结果立即变化 | 用户有新的行为,一定会导致推荐结果的实时变化 |
推荐理由 | 很难提供令用户信服的推荐解释 | 可以根据用户的历史行为归纳推荐理由 |
例子 | 时事新闻,突发情况 | 图书,电子商务,电影等 |
隐语义模型-- 其实就是机器学习的一套
根据获得用户的反馈信息,总体上可以分为两类:一是显式的用户反馈(Explicit Feedback),这是用户对商品或信息给出的显式反馈信息,评分、评论属于该类;另一类是隐式的用户反馈(Implicit Feedback),这类一般是用户在使用网站的过程中产生的数据,它们也反映了用户对物品的喜好,比如用户查看了某物品的信息,用户在某一页面上的停留时间。
而在大部分推荐系统中采用的都是对评分矩阵的拟合问题(矩阵分解),
R
=
U
V
T
R=UV^T
R=UVT,
R
m
∗
n
R^{m*n}
Rm∗n,
U
m
∗
k
U^{m*k}
Um∗k,
V
n
∗
k
V^{n*k}
Vn∗k,目的是求出合适的
k
k
k,这
k
k
k个维度可以很好地描述用户和物品的特征.
- 从数据出发,进行个性化推荐
- 用户和物品之间有着隐含的联系
- 隐含因子让计算机能理解就好
- 将用户和物品通过中介隐含因子联系起来
隐语义模型负样本的选择
- 对每个用户,要保证正负样本的平衡(数目相似)
- 选取那些热门的,而用户却没有行为的物品,也可以随机选取
- 对于用户–物品集 K { ( u , i ) } K\{ (u,i) \} K{(u,i)},其中如果(u,i)是正样本,则有 r u i = 1 r_{ui} =1 rui=1, 负样本 r u i = 0 r_{ui} = 0 rui=0
协同过滤 VS隐语义
– | 协同过滤 | 隐语义 |
---|---|---|
原理 | 协同过滤 | 隐语义 |
空间复杂度 | 较大 | 较小 |
实时推荐 | 难 | 难 |
可解释信 | 能 | 不能 |
综述
当然应该先在知乎或者csdn,还有985硕博士论文查阅。这里我推荐两个博客用于推荐系统的所有深度学习的方法(Deep Learning based Recommender System: A Survey and New Perspectives)可以把17,18年的都看下有个整体的了解,深度学习在推荐算法上的应用进展这两篇都对深度学习在推荐系统的应用做了一些解释。
指标
对于方法改进型的论文肯定有评价指标来衡量模型的好坏,亦或是推荐的准确度。我推荐可以看下推荐系统评价指标,还有简书的评测指标
论文
找论文的话可以直接在google学术上找,推荐系统的论文还是蛮多的。我学习的路线了先把传统的方法了解了下,比如CF(协同过滤),MF(矩阵分解),PMF(概率矩阵分解等),然后又看了一些结合深度习的方法,如DeepCoNN,NCF等。学习路线这些都是比较经典的论文,后面我会简单的把我读过的论文展开。
工具(开源)
开源的的推荐系统的工具,传统优化问题的求解主要可用两种方法:1. SGD(随机梯度下降);2. ALS (alternatting least square)。对于ALS方法,速度比较快的工具有implicit,qmf,fastFM,最后推荐一个工具大杂烩:List_RS