推荐系统(1)
基于内容的推荐Content-based
主要思想:向顾客 $x$ 推荐与之前被 $x$ 高度评价的商品相似的商品
步骤
Item Presentation
为每个item抽取出一些特征来表示此item(item profile)
文本挖掘常用启发式方法: $TF-IDF$
Profile Learning(典型的监督分类问题)
利用一个用户过去喜欢 / 不喜欢的item的特征数据,来学习出此用户的喜好特征(user profile)
Recommendation Generation
通过比较user profile和item profile,为此用户推荐一组相关性最大的item
$TF-IDF$ (Term Frequency * Inverse Doc Frequency)词频-逆文档频率
主要思想:一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能代表该文章。
$$
TF-IDF score: w_{ij} = TF_{ij} \times IDF_i
$$
$i$ :feature;$j$ :item;$N$ :total number of docs
主要思想:一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能代表该文章。
词频TF:某一个给定的词在该文章中出现的次数(归一化:除以文章总词数,以防止偏向长文章)
$$
TF_{ij} = \frac{f_{ij}}{max_kf_{kj}}
$$
逆文档频率IDF:总文件数 / (包含该给定词的文档化数+1),再取对数(IDF越大,表明词条类别区分能力好)
$$
IDF_i = log{\frac{N}{n_i}}
$$
TF-IDF和余弦相似度应用:自动提取关键字;找出相似文章;自动摘要
profile的可能性
- 加权平均值
- 变种:不采用均值,而是给与不同的权重
预测
profile $x$ 和item特征集合 $i$ 的相关度:$u(x, i) = cos(x, i) = \frac{x·i}{||x||·||i||}$
Pros vs. Cons
优点:
- 不需要其他用户的数据
- 能够向用户推荐独特的口味
- 能够推荐新的和不受欢迎的item
- 能够提供解释
缺点:
- 找到合适的特征很难
- 很难向新用户推荐(user profile构建困难)
- 无法挖掘出用户的潜在兴趣:从不推荐用户user profile以外的内容;人们可能有多种兴趣;不能利用其它用户的质量判断
协同过滤Collaborative
主要思想:对于用户 $x$,找到$N$个与 $x$ 有相似评价的用户,基于这$N$个用户的评价估计 $x$ 的评价
找相似用户
对于用户 $x$,其评价向量为 $r_x$
Jaccard相似度:忽略了评价的值(适用于处理无打分的偏好数据,即0/1)
$w_{u, v} = \frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|}$
余弦相似度:对于没有评价的值,看作negative的(解决方法:减去行均值,即去中心化,让均值为0)
$sim(x, y) = cos(r_x, r_y) = \frac{r_x·r_y}{||r_x||·||r_y||}$
皮尔逊相关系数:$S_{xy}$,被 $x$ 和 $y$ 共同评价的item(输出范围[-1, 1])
$$sim(x, y) = \frac{\sum_{s\in{S_{xy}}}(r_{xs}-\overline{r_x})(r_{ys}-\overline{r_y})}{\sqrt{\sum_{s\in{S_{xy}}}(r_{xs}-\overline{r_x})^2}\sqrt{\sum_{s\in{S_{xy}}}(r_{ys}-\overline{r_y})^2}}$$
从相似度到推荐
$r_x$ :用户$x$的评价;$N$ :$k$个评价过item $i$的最相似用户;$S_{xy} = sim(x, y)$:$x$和$y$的相似度
$r_{xi} = \frac{1}{k}\sum_{y \in N}r_{yi}$ ,$x$对$i$的评价,即$y$个用户对$i$评价的均值
$r_{xi} = \frac{\sum_{y \in N}S_{xy}·r_{yi}}{\sum_{y \in N}S_{xy}}$ ,即$y$和$x$的相似度越高,其评价权重越大
$\cdots$,还有很多种其他的预测选择。
item-item 协同过滤
对于item $i$,找到其他相似的item,基于其他相似item的评分估算user $x$ 对item $i$的评分
$r_{xi} = \frac{\sum_{j \in N(i;x)}S_{ij}·r_{xj}}{\sum_{j \in N(i;x)}S_{ij}}$ ,其中$N$是与$i$相似的被$x$评价过的item集合
$$
r_{xi} = b_{xi} + \frac{\sum_{j \in N(i;x)}S_{ij}·(r_{xj}-b_{xj})}{\sum_{j \in N(i;x)}S_{ij}}
$$
其中$b_{xi} = \mu + b_x + b_i$,即baseline estimate for $r_{xi}$,$\mu$为所有评分平均值,$b_x$为user评分偏差,$b_i$为item评分偏差。
user-user 系统过滤
同上
在实际中,item-item比user-user表现更好,因为item的简单的,user有不同的口味
Pros vs. Cons
优点:
- 对于各种item都适合,不需要选择item特征
缺点:
冷启动:需要足够的用户来做推荐
稀疏矩阵:找到评论过相同item的用户很困难
- 第一个评价者:不能根据以前没有被评价过的item进行推荐(新item,内行的item)
流行偏向:不能根据某人独特口味推荐;趋向于推荐流行的
混合方法
- 实现多种推荐系统,结合预测(可能使用线性模型)
- CF主,CB辅(对于新item,新user都可以解决)
问题讨论
评价
用ground truth作为test data set,看恢复精度如何
- 均方根误差RMSE $\sqrt{\sum_{xi}(r_{xi}-{r_{xi}^*})^2}$
- 精确度在前10的
- 排序相关性
0/1模型
- 覆盖率:系统可以做出预测的item/user数量
- 精确度:预测精确度
- 接收者操作特征ROC:判断错误的取舍曲线(AUC[Area under Curve]:ROC曲线下的面积,介于0.1和1之间。AUC作为数值可以直观的评价分类器的好坏,值越大越好。)
预测错误
没有关注到的点:
- 预测多样性
- 预测上下文
- 预测顺序
实际上,我们只关心评价高的。
复杂度 / 性能
找到最相似的k个用户花费巨大:$O|X|$(可以预先计算)
处理手段:
- LSH:用于海量高维数据的近似最近邻快速查找技术——局部敏感哈希
- 聚类
- 降维
提示
- 很多时候,简单的算法也有好的效果
- 引入外部的知识数据
- 更多的数据优于算法
基于潜因子的推荐Latent factor based
下节讲