推荐系统评价标准
准确度:打分系统,top N推荐
覆盖率:表示对物品长尾的发掘能力
多样性:表示推荐列表中物品两两之间的不相似性
新颖度:给用户suprise
惊喜度:推荐和用户历史兴趣不相似,却满意的
信任度:提供可靠的推荐理由
实时性:实时更新程度
基于内容的推荐
分析内容,上下文,无需考虑用户行为。为要推荐的内容,建立一份资料,比如词在文件中的权重,常用方法是tf-idf,然后为用户也建立一份资料,比如定义一个权重向量,表示某个词对用户的重要程度,最后使用距离公式计算匹配度。
协同过滤
User-based CF:找到和用户最近的其他用户,找到他们看过或者买过的,但是当前用户没有看过或者买过的item,根据距离加权打分,找到最高的推荐。
Item-based CF:根据用户对商品/内容的行为,计算item和item相似度,找到和当前的item最近的推荐。
优点
基于用户行为,对推荐内容无需先验知识
只需要用户和商品关联矩阵就行,结构简单
在用户行为丰富的情况下,效果好
缺点
需要大量显性/隐形的用户行为
需要通过完全相同的商品关联,相似的不行
假定用户的兴趣完全取决于之前的行为,而和当前的上下文环境无关
在数据稀疏的情况下受影响
矩阵分解与隐语义模型
隐语义模型:有用户评分矩阵,但是有一些位置是空着的,我们要做的时,尽量填满未打分的项,预测得分。cf协同过滤解释性强,但是隐语义模型能更好的挖掘用户和item关联中的隐藏因子。
需要进行矩阵分解,首先会想到SVD奇异值分解,将mxn的矩阵转换成mxr X rxr X rxn的形式,但是SVD的时间复杂度是0(m3),而且原矩阵缺失值太多。最简单的方法就是直接矩阵分解。
矩阵分解原理:
假设由U个用户,D个item,R为打分矩阵
假设有K个隐含变量,我们需要找到矩阵P(U*K)和Q(D*K):
目标找到最佳的P,Q,使用梯度下降,求解梯度,加正则化项,迭代更新,再还原回矩阵乘积,即可补充未打分项。
加bias的的隐语义模型,加上其他权衡:
μ
: overall mean rating
bx
:bias for user x
bi
:bias for movie i
矩阵分解有很多现成的库,比如libmf, svdfeature等。
spark mllib中有一个ALS交替最小二乘实现了推荐:http://www.tuicool.com/articles/fANvieZ
word2vec在推荐中的应用
word2vec使用深度学习的方法,对中文分词之后的结果,在高维空间中映射成特征向量,通过向量之间的距离,判断两个词的关联度。
在推荐中,可以把用户的行为序列当做分词后的phrase,给word2vec学习,根据商品映射得到的特征向量去找相似的商品。本质上是一种item-based CF,但是覆盖率会更高。