第三章 推荐系统冷启动问题
3.1 冷启动问题简介
冷启动问题类别 | 冷启动问题描述 |
---|---|
用户冷启动 | 当新用户加入时候,没有他的相关数据,那么如何给他做推荐 |
物品冷启动 | 主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题 |
系统冷启动 | 主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统。从而让用户在网站刚刚发布的时候就让用户体验到个性化推荐服务这一问题。 |
解决方案:
提供非个性化的推荐。热门排行榜,等数据搜集够了,再切换到个性化推荐。
利用年龄,性别等数据做粗粒度个性化
利用社交网站的好友信息,推荐其好友喜欢的物品(但是需要用户授权)
在登录时收集用户的兴趣信息,然后给用户推荐那些和物品相似的物品。
利用内容信息,把它们推荐给喜欢过和它们相似的物品的用户。
在系统冷启动时,可以引入专家的知识,通过一定高校方式迅速建立起物品的相关度表。
3.2 利用用户注册信息
我们可以将用这3张相关表查询出的电视剧列表按照一定权重相加,得到给用户的最终推荐列表。
基于用户注册信息的推荐算法其核心问题是计算每种特征的用户喜欢的物品。
也就是,对于每种特征 f f f,计算具有这种特征的用户对各个物品的喜好程度 p ( f , i ) p(f,i) p(f,i)。
p ( f , i ) p(f,i) p(f,i)可以简单定义为物品 i i i在具有 f f f的特征的用户中的热门程度:
p ( f , i ) = ∣ N ( i ) ∩ U ( f ) ∣ p(f,i)=|N(i)∩U(f)| p(f,i)=∣N(i)∩U(f)∣
其中, N ( i ) N(i) N(i)是喜欢物品 i i i的用户集合, U ( f ) U(f) U(f)是具有特征 f f f的用户集合。
结果越大,表示在这个人群中此物品越受欢迎。但是也有问题,就是,往往热门的物品会在各种特征的用户中具有比较高的权重。然而给用户推荐热门物品并不是推荐系统的主要任务,推荐系统应该帮助用户发现他们不容易发现的物品。
因此可以将 p ( f , i ) p(f,i) p(f,i)的定音改为喜欢物品 i i i的用户中具有特征 f f f的比例:
p ( f , i ) = ∣ N ( i ) ∩ U ( f ) ∣ ∣ N ( i ) ∣ + α p(f,i)=\frac{|N(i)∩U(f)|}{|N(i)|+\alpha} p(f,i)=∣N(i)∣+α∣N(i)∩U(f)∣
这里的 α \alpha α是解决数据稀疏的问题。比如解决假设一个物品只被1个用户喜欢过,而这个用户刚好有特征 f f f,那么就有 p ( f , i ) = 1 p(f,i)=1 p(f,i)=1。这样就避免了产生比较大的权重。
具体做测试的部分见教材P83-P85
3.3 选择合适的物品启动用户的兴趣
在用户第一次使用户推荐系统的时候,不立即给用户展示推荐结果,而是给用户提供一些物品,让用户对这些物品进行反馈,进而探索出用户的兴趣。很多推荐系统用这种方式来解决用户的冷启动问题。
那么如何选择物品让用户反馈呢?
选择上注意这些:
1、比较热门
2、具有代表性和区分性
3、启动物品集合需要具有多样性
那么如何设计一个选择启动物品集合的系统呢?
Nadav Golbandi在论文中(Adaptive Bootstrapping of Recommender Systems Using Decision Trees”,下载地址为 http://research.yahoo.com/pub/3502。)探讨了这个问题,提出可以用一个决策树解决这个问题。
给定一群用户,可以用这群用户对物品评分的方差度量这群用户兴趣的一直程度。方差大,说明这些用户的兴趣不太一致,反之则说明用户的兴趣一致
Nadav Golbandi的基本思想是通过如下方式度量一个物品的区分度 D ( i ) D(i) D(i)
D ( i ) = σ u ∈ N + ( i ) + σ u ∈ N − ( i ) + σ u ∈ N ˉ ( i ) D(i)=\sigma_{u\in\N^{+}(i)}+\sigma_{u\in\N^{-}(i)}+\sigma_{u\in\bar{N}(i)} D(i)=σu∈N+(i)+σu∈N−(i)+σu∈Nˉ(i)
其中 N + ( i ) N^{+}(i) N+(i)表示喜欢物品 i i i的用户集合, N − ( i ) N^{-}(i) N−(i)是不喜欢物品 i i i的用户集合, N ˉ ( i ) \bar{N}(i) Nˉ(i)是没有对物品 i i i评分的用户集合。
σ u ∈ N + ( i ) \sigma_{u\in\N^{+}(i)} σu∈N+(i)表示喜欢物品 i i i的用户对其他物品评分的方差。后两个同理。
如果这3类用户集合的用户对其他的物品的兴趣很不一致,那么说明物品 i i i具有较高的区分度。
Nadav Golbandi的算法首先从所有用户中找到最具有区分度的物品 i i i,然后将用户划分为3类,然后每类用户中再找到最具区分度的物品,然后再将每类用户划分为3类,现在快就有9类用户了,一直下去。最终就能通过一系列物品的看法将用户分类了。在冷启动时,便可以通过这样的树从根节点开始询问用户对物品的看法。最后对用户的兴趣就有大致的了解了,就可以个性化推荐了。
3.4 利用物品的内容信息
物品冷启动需要解决的问题是如何将新加入的物品推荐给对它感兴趣的用户。
一般来说物品的内容可以通过向量空间模型来表示,该模型会将物品表示成一个关键词向量。如果内容是演员,导演这些实体,就可以直接作为关键词,但是内容是文本的话,就需要采用NLP技术了。那么如何从遗传文字中找到实体呢?
对于一个物品d,其内容可以表示为关键词的向量:
d i = { ( e 1 , w 1 ) , ( e 2 , w 2 ) , . . . . . . } d_{i}=\{(e_1,w_1),(e_2,w_2),......\} di={(e1,w1),(e2,w2),......}
其中 e i e_{i} ei就是关键词, w i w_{i} wi是关键词对应的权重。
如果物品是文本,那么可以利用TF-IDF计算词的权重:
w i = T F ( e i ) l o g D F ( e i ) w_{i}=\frac{TF(e_{i})}{logDF(e_{i})} wi=logDF(ei)TF(ei)
向量空间模型
**优点:**简单
**缺点:**丢失了一些信息,比如关键词之间的关系信息
在给定了物品内容的关键词向量后,物品的内容相似度可以通过向量之间的余弦相似度计算:
w i j = d i ⋅ d j ∣ ∣ d i ∣ ∣ ∣ ∣ d j ∣ ∣ w_{ij}=\frac{d_{i}·d_{j}}{\sqrt{||d_{i}||||d_{j}||}} wij=∣∣di∣∣∣∣dj∣∣di⋅dj
以上的公式可以简单地计算出两两物品之间的余弦相似度。
function CalculateSimilarity(D) # D表示文档集合for di in D: # 取出一个物品for dj in D: # 取出另外一个物品w[i][j] = CosineSimilarity(di, dj) # 计算两个物品之间的余弦相似度return w
但是这种算法的时间复杂度高,假设有N个物品,每个物品平均由n个实体表示,那么这个算法的时间复杂度是 O ( N 2 m ) O(N^{2}m) O(N2m)。 N 2 N^{2} N2的由来因为有 N N N个物品,要分别和其它N个物品进行相似度比较,那么结果为 O ( N ( N − 1 ) ) O(N(N-1)) O(N(N−1)),也就是近似于 O ( N 2 ) O(N^{2}) O(N2)。又因为每个物品有m个内容属性,故而最终的结果为 O ( N 2 m ) O(N^{2}m) O(N2m)。
如果用户的行为强烈受某一内容属性的影响,那么内容过滤的算法还是可以在精度上超过协同过滤算法的。不过这种强的内容特征不是所有物品都具有的,而且需要丰富的领域知识才能获得,所以很多时候内容过滤算法的精度比协同过滤算法差。
ECML/PKDD在2011年举办过一次利用物品内容信息解决冷启动问题的比赛。该比赛提供了物品的内容信息,希望参赛者能够利用这些内容信息尽量逼近协同过滤计算出的相似度表。对内容推荐感兴趣的读者可以关注该比赛的相关论文。
代表性的话题模型为LDA,LDA有3种元素,也就是文档、话题和词语。每一篇文档都会表现为词的集合,这称为词袋模型。令 D D D表示文档集合, D ( i ) D(i) D(i)表示第 i i i篇文章, w [ i ] [ j ] w[i][j] w[i][j]是第 i i i篇文档中的第 j j j个词, z [ i ] [ j ] z[i][j] z[i][j]是第 i i i篇文档种第 j j j个词属于的话题。
LDA的计算过程包括初始化和迭代两部分。首先要对z进行初始化,而初始化的方法很简单。假设一共有K个话题,那么对第 i i i篇文章种的第 j j j个词,随机给它初始化一个话题。
在使用LDA计算物品的内容相似度时,我们可以先计算出物品在话题上的分布,然后利用两个物品的话题分布计算物品的相似度。比如,如果两个物品的话题分布相似,则认为两个物品具有较高的相似度,反之则认为两个物品的相似度较低。计算分布的相似度可以利用** K L KL KL散度:**
D K L ( p ∣ ∣ q ) = ∑ i p ( i ) l n p ( i ) q ( i ) D_{KL}(p||q)=\sum_{i}p(i)ln\frac{p(i)}{q(i)} DKL(p∣∣q)=i∑p(i)lnq(i)p(i)
其中 p p p和 q q q是两个分布, K L KL KL散度越大说明分布的相似度越低。
3.5 发挥专家的作用
很多推荐系统在刚刚开始的时候,既没有用户行为数据,也没有充足的物品内容信息计算准确的物品相似度。
音乐基因系统
电影基因系统