补充知识:几种相似度度量方式
现有3个item,user1评分较严,对3个item的评分分别为:3,4,6;user2评分较松,对3个item的评分分别为5,6,5;
如果用“欧氏距离”来计算user1和user2的相似度,则看起来user1和user2的喜好相近。但是,事实上,由于user2评分较松,当其评分为6,表示其不太喜欢,而user1评分较严,评分为6,已经表示其很喜欢。如果用“欧氏距离”,不考虑user之间评分的习惯,则会误认为两个user很相似,事实则不然。
利用Pearson进行度量,将user1和user2的评分去平均,因此,可以真实的表示两个user对item的喜好程度,从而能够更好的评估两个user的相似度。
note that:Pearson为cosin相似度 去平均的结果。
一、推荐系统需求
信息过载的情况下,帮助用户缩短“决策路径”。
二、推荐系统评估指标
1、notation
2、推荐系统评分指标
- 推荐系统结构
- 准确度:评价推荐系统performance的优劣
1)针对打分系统
|T|:所有的推荐集合
2)针对Top N推荐
R(u):系统预测推荐;
T(u):用户实际选择;
U:all users;
一般讲,Precision和Recall是相互制约的关系,要想获得较高Precision,往往要牺牲掉部分Recall。
- 覆盖度:评估推荐系统对于物品的曝光程度;实际中,希望推荐系统能够曝光更多的物品,使得各个物品均有机会接触到user,出售;
R(u):系统预测推荐list;
|I|:全平台的items;
下列PPT列举了两个评估“曝光度”的方法,其中,利用coverage进行评估时,R(u)可能全为“hot items”,这样,即使coverage很高,但是,实际,推荐系统曝光的都是“hot items”,那些“冷门商品”依然无法接触到user,这种情况,会使Hot items越来越火,而冷门商品越来越冷,到最后,只有hot items能够在“推荐系统平台”存活下来。这是平台不希望看到的,也即:马太效应。
而第二种方法,利用“熵”来评估推荐系统曝光度,由于,熵在各个item的曝光概率P相等时最大,因而,利用“熵”进行评估,可保证各个item均享有同等的曝光度。其中,熵中P的计算,可以采用频率的方法,在预测出推荐list后,计算各个item曝光的频率,用频率作为P的value。
- 多样性:评估推荐系统给user推荐list的多样性
s(i,j):代表item i 和 item j的相似度;
R(u):代表推荐系统为user1提供的推荐list;
下述第一个公式:分子项为推荐list中each two item的相似性,分母为推荐list中item两两组合的组合数,整体表示两个item的平均相似度,1-average similarity表示两个item之间的平均差异度;
第二个公式:将所有user推荐list item之间的差异度进行加和,求平均,得到推荐系统推荐list中item的差异性(多样性)。
- 其它评估推荐系统的指标
三、推荐算法
1、基于内容的推荐
“基于内容的推荐”在进行推荐时,主要考虑“用户喜欢属性”与“物品属性”之间的相似度,如果相似,则将该物品推荐给用户。其中,“用户喜欢属性”与“物品属性”均可用vector表示。
例如:加入我们要给user推荐news:
首先,我们可以根据news的常用word构建一个dictionary,将news以及“user喜欢属性”均用TF-IDF表示。(我们可以仅根据news set中高频word构建dictionary,然后,将其他鲜见的word都归入unknown中)。
其次,将user看过的news vector进行“加权平均”,作为“user喜欢属性”的vector_user。
第三,将vector_user与各个news的vector_news进行相似度计算(cosin),选择相似度较高的news推荐给user。
具体要点如下PPT:
2、基于用户行为的推荐(协同过滤CF:neighborhood-based algorithm)
协同过滤是基于“近邻”的一种推荐算法,他有两个执行途径:
1)user-based CF;
2)item-based CF;
note that:协同过滤不等于KNN。
其核心思想是:构建一个item-user matrix,matrix的每个元素为user对某一item的评分,根据这个matrix即可进行item 推荐,如下所示为item-user matrix:
1)user-based CF 执行过程:
假设recommender要对user1进行item推荐,现我们通过user vector(item-user matrix column),根据cosin similarity寻找与user1最相近的若干个user。找到以后,将这些user进行加权平均,比如:user1与user_i的相似度为w1,user1与user_j的相似度为w2,则summation中,给user_i乘以w1,给user_j乘以w2,在获得summation后,我们可以将summation中,对各个item的评分看作是user1的评分,将user1未看过,且评分最高的item推荐给user1,即完成了user-based CF。
具体计算公式如下所示:
2)item-based CF 执行过程:
假设recommender要对user1进行item推荐,先要计算movie1的“预测评分”,其具体过程如下:
寻找与movie1相近的几个movie(similarity用cosin计算),然后根据user1对这些movie的评分的加权和来估算user1对movie1的评分,具体计算公式如下所示:
其中,各个movie vector为item-user matrix的row,如下所示:
3)user-base 和 item-based CF比较
一般,item-based CF用的比user-based CF要多。因为,人喜好的易变性;user数量级往往>item数量级。
4)协同过滤优缺点
由于“协同过滤”基于用户行为,因此,对于一个 new recommander 无法使用CF为user进行推荐,此时,应该用“基于内容的推荐”实施“冷启动”。
以下罗列了一些解决“冷启动”的一些措施:
在Collaborative filtering中,存在一个缺陷,即:user/item vector中很多元素为空值,这种情况很可能会造成users/items inner product无法计算的局面,为了避免这一情况的发生,我们可以采用“隐语义模型”,重新计算user-item matrix,使得为空的元素,有值。
3、隐语义模型(latent semantic analysis : LSA)
隐语义模型的主要目的是,重新计算user-item matrix,对original matrix中为空的元素进行数值填充,使得可以直接根据user-item matrix来为user进行item推荐。
隐语义模型的核心思想是:将user-item matrix进行分解,利用分解的两个matrix,重新构建user-item matrix,以便对original matrix中为空的元素进行数值填充,图示如下:
在构建“隐语义模型”时,我们可以简单的利用SVD进行“矩阵分解”,但是,1)SVD的计算复杂度非常高,为O(m3);2)原user-item matrix中为空的元素非常多,不宜用0填充,进行矩阵分解。因此,SVD不适合实际应用。
我们可以简单的利用“优化目标函数”的方法来构建“隐语义模型”,其核心思想如下:
构建目标函数:(r-pq)2+regularization(pq),求分解矩阵p,q,使得目标函数可达到最小。(r为user-item matrix中各个元素的值,为空的元素不需要加入目标函数进行计算)。
在上述目标函数中,我们还可以加入“偏置项”,使得预测值rhat=pq+u+b1+b2,通过这种处理方式,可以使得p,q的计算更容易,其原理类似于(y=wx+b中w的优化,较,y=wx中w的优化,容易)。
该方法的具体思路如下PPT所示:
以下PPT为user-item matrix:
4、word2vec在推荐系统中的应用
个人理解:将商品用“用户行为序列”表示,而“用户行为序列”用word2vec表示。根据这种“商品表示”,寻找商品之间的关联性。
参考博文:word2vec
???工业界中word2vec的具体实现方法;
三、推荐系统其它信息
一个推荐系统平台的成功不仅与“技术”有关,还与他的呈现形式有关(work of product manager):