·  新闻资讯 分类

向量空间模型就很难计算出准确的相似度重庆幸

发布时间 : 2019-11-24 01:04    点击量:

  len(items): break return ret 在上面的代码中,items_pool维护了候选物品的列表,在这个列表中,物品i出现的次数和 物品i的流行度成正比。items是一个dict,它维护了用户已经有过行为的物品的集合。因此, —————————— ① 参见“One-Class Collaborative Filtering”。 ② 代码第6行将范围上限设为len(items) * 3,主要是为保证正、负样本数量接近。 图灵社区会员 臭豆腐() 专享 尊重版权 68 第2 章 利用用户行为数据 上面的代码按照物品的流行度采样出了那些热门的、但用户却没有过行为的物品。经过采样,可 以得到一个用户—物品集 {( , )}K ui ,其中如果(u, i)是正样本,则有 1uir  ,否 则有 0uir  。然后, 需要优化如下的损失函数来找到最合适的参数p和q: 2 222 ,, (,) (,) 1 ˆ() K ui ui ui u k i k u i ui K ui K k Crrrpqpq    这里, 22 uipq 是用来防止过拟合的正则化项,λ可以通过实验获得。要最小化上面 的损失函数,可以利用一种称为随机梯度下降法①的算法。该算法是最优化理论里最基础的优化 算法,它首先通过求参数的偏导数找到最速下降方向,然后通过迭代法不断地优化参数。下面介 绍优化方法的数学推导。 上面定义的损失函数里有两组参数puk和qik,随机梯度下降法需要首先对它们分别求偏导数, 可以得到: 22ik uk uk C qpp    22uk ik ik C pqq    然后,根据随机梯度下降法,需要将参数沿着最速下降方向向前推进,因此可以得到如下递推 公式: ()uk uk ik ukpp q p  ()ik ik uk ikqq p q  其中,α是学习速率(learning rate),它的选取需要通过反复实验获得。 下面的Python代码实现了这一优化过程: def LatentFactorModel(user_items, F, N, alpha, lambda): [P, Q] = InitModel(user_items, F) for step in range(0,N): for user, items in user_items.items(): samples = RandSelectNegativeSamples(items) for item, rui in samples.items(): eui = rui - Predict(user, item) for f in range(0, F): P[user][f] += alpha * (eui * Q[item][f] - \ lambda * P[user][f]) Q[item][f] += alpha * (eui * P[user][f] - \ lambda * Q[item][f]) alpha *= 0.9 def Recommend(user, P, Q): rank = dict() for f, puf in P[user].items(): for i, qfi in Q[f].items(): —————————— ① 参见。 图灵社区会员 臭豆腐() 专享 尊重版权 2.5 隐语义模型 69 1 2 3 4 5 7 6 3 5 if i not in rank: rank[i] += puf * qfi return rank 我们同样通过 离线实验评测LFM的性能。首先,我们在MovieLens数据集上用LFM计算出用 户兴趣向量p和物品向量q,然后对于每个隐类找出权重最大的物品。如表2-13所示,表中展示了 4个隐类中排名最高(qik最大)的一些电影。结果表明,每一类的电影都是合理的,都代表了一 类用户喜欢看的电影。从而说明LFM确实可以实现通过用户行为将物品聚类的功能。 表2-13 MovieLens数据集中根据LFM计算出的不同隐类中权重最高的物品 1(科幻、惊悚) 3(犯罪) 4(家庭) 5(恐怖、惊悚) 《隐形人》( The Invisible Man,1933) 《大白鲨》(Jaws,1975) 《101线 Dalmatians, 1996) 《女巫布莱尔》(The Blair Witch Project,1999) 《科学怪人大战狼人》 ( Frankenstein Meets the Wolf Man,1943) 《致命武器》(Lethal Weapon, 1987) 《回到未来》(Back to the Future,1985) 《地狱来的房客 》(Pacific Heights,1990) 《哥斯拉》(Godzilla,1954) 《全面回忆》(Total Recall, 1990) 《土拨鼠之日》(Groundhog Day,1993) 《异灵骇客2之恶灵归来》 ( Stir of Echoes: The Homecoming,2007) 《星球大战3:武士复仇》 ( Star Wars: Episode VI - Return of the Jedi,1983) 《落水狗》(Reservoir Dogs, 1992) 《泰山》(Tarzan,2003) 《航越地平线 》( Dead Calm,1989) 《终结者》(The Terminator, 1984) 《忠奸人》(Donnie Brasco, 1997) 《猫儿历险记》(The Aristocats,1970) 《幻象》(Phantasm ,1979) 《魔童村》(Village of the Damned,1995) 《亡命天涯》(The Fugitive, 1993) 《森林王子2》(The Jungle Book 2,2003) 《断头谷》(Sleepy Hollow, 1999) 《异形》(Alien,1979) 《夺宝奇兵3 》( Indiana Jones and the Last Crusade, 1989) 《当哈利遇到莎莉》(When Harry Met Sally…,1989) 《老师不是人》(The Faculty,1998) 《异形2》(Aliens,1986) 《威胁2 :社会》(Menace II Society,1993) 《蚁哥正传》(Antz,1998) 《苍蝇》(The Fly,1958) 《天魔续集》(Damien: Omen II,1978) 《辣手神探》(Lashou shentan,1992) 《小姐与流浪汉》( Lady and the Tramp,1955) 《鬼哭神嚎》(The Amityville Horror,1979) 《魔鬼怪婴》(Rosemary’s Baby,1968) 《真实罗曼史》(True Romance,1993) 《飞天法宝》( Flubber , 1997) 《深渊》(The Abyss,1989) 其次,我们通过实验对比了LFM在TopN推荐中的性能。在LFM中,重要的参数有4个:  隐特征的个数F;  学习速率alpha;  正则化参数lambda;  负样本/正样本比例 ratio。 通过实验发现,ratio参数对LFM的性能影响最大。因此,固定F=100、alpha=0.02、 lambda=0.01,然后研究负样本/正样本比例ratio对推荐结果性能的影响。 图灵社区会员 臭豆腐() 专享 尊重版权 70 第2 章 利用用户行为数据 如表2-14所示,随着负样本数目的增加,LFM的准确率和召回率有明显提高。不过当 ratio

  10以后,准确率和召回率基本就比较稳定了。同时,随着负样本数目的增加,覆盖率不 断降低,而推荐结果的流行度不断增加,说明ratio参数控制了推荐算法发掘长尾的能力。如果 将LFM的结果与表2-6、表2-9、表2-10中ItemCF和UserCF算法的性能相比,可以发现LFM在所有 指标上都优于UserCF和ItemCF。当然,这只是在MovieLens一个数据集上的结果,我们也发现, 当数据集非常稀疏时,LFM的性能会明显下降,甚至不如UserCF和ItemCF的性能。关于这一点 读者可以通过实验自己研究。 表2-14 Netflix数据集中LFM算法在不同F参数下的性能 ratio 准 确 率 召 回 率 覆 盖 率 流 行 度 1 21.74% 10.50% 51.19% 6.5140 2 24.32% 11.75% 53.17% 6.5458 3 25.66% 12.39% 50.41% 6.6480 5 26.94% 13.01% 44.25% 6.7899 10 27.74% 13.40% 33.87% 6.9552 20 27.37% 13.22% 24.30% 7.1025 2.5.2 基于LFM的实际系统的例子 雅虎的研究人员公布过一个使用LFM进行雅虎首页个性化设计的方案①。本节将简单介绍他 们的设计并讨论他们的设计方案。 图2-17展示了雅虎首页的界面。该页面包括不同的模块,比如左侧的分类导航列表、中间的 热门新闻列表、右侧的最近热门话题列表。雅虎的研究人员认为这3个模块都可以进行一定的个 性化,可以根据用户的兴趣给他们展示不同的内容。 雅虎的研究人员以CTR作为优化目标,利用LFM来预测用户是否会单击一个链接。为此, 他们将用户历史上对首页上链接的行为记录作为训练集。其中,如果用户u单击过链接i,那么 就定义(u, i)是正样本,即rui = 1。如果链接i展示给用户u,但用户u从来没有单击过,那么就定 义(u, i)是负样本,即rui = 1。然后,雅虎的研究人员利用前文提到的LFM预测用户是否会单击 链接: ˆ T ui u irpq 当然,雅虎的研究人员在上面的模型基础上进行了一些修改,利用了一些改进的LFM模型。 这些模型主要来自Netflix Prize比赛,因此我们会在第8章详细讨论这些模型。 —————————— ① 参见Bee-Chung Chen、Deepak Agarwal、Pradheep Elango和Raghu Ramakrishnan的“Latent Factor Models for Web Recommender Systems”。 图灵社区会员 臭豆腐() 专享 尊重版权 2.5 隐语义模型 71 1 2 3 4 5 7 6 3 5 截取自雅虎网站,图中相关内容的著作权归原著作权人所有 图2-17 雅虎首页的界面 但是,LFM模型在实际使用中有一个困难,那就是它很难实现实时的推荐。经典的LFM模型 每次训练时都需要扫描所有的用户行为记录,这样才能计算出用户隐类向量(pu)和物品隐类向 量(qi)。而且LFM的训练需要在用户行为记录上反复迭代才能获得比较好的性能。因此,LFM 的每次训练都很耗时,一般在实际应用中只能每天训练一次,并且计算出所有用户的推荐结果。 从而LFM模型不能因为用户行为的变化实时地调整推荐结果来满足用户最近的行为。在新闻推荐 中,冷启动问题非常明显。每天都会有大量新的新闻。这些新闻会在很短的时间内获得很多人的 关注,但也会在很短的时间内失去用户的关注。因此,它们的生命周期很短,而推荐算法需要在 它们短暂的生命周期内就将其推荐给对它们感兴趣的用户。所以,实时性在雅虎的首页个性化推 荐系统中非常重要。为了解决传统LFM不能实时化,而产品需要实时性的矛盾,雅虎的研究人员 提出了一个解决方案。 他们的解决方案分为两个部分。首先,他们利用新闻链接的内容属性(关键词、类别等)得 到链接i的内容特征向量yi。其次,他们会实时地收集用户对链接的行为,并且用这些数据得到链 接i的隐特征向量qi。然后,他们会利用如下公式预测用户u是否会单击链接i: TT ui u i u irxypq 其中,yi是根据物品的内容属性直接生成的,xuk是用户u对内容特征k的兴趣程度,用户向量 xu可以根据历史行为记录获得,而且每天只需要计算一次。而pu、qi是根据实时拿到的用户最近 几小时的行为训练LFM获得的。因此,对于一个新加入的物品i,可以通过 T uix y 估计用户u对物 品i的兴趣,然后经过几个小时后,就可以通过 T uipq 得到更加准确的预测值。 上面的讨论只是简单阐述了雅虎所用的方法,关于雅虎具体的方法可以参考他们的报告。 图灵社区会员 臭豆腐() 专享 尊重版权 72 第2 章 利用用户行为数据 2.5.3 LFM和基于邻域的方法的比较 LFM是一种基于机器学习的方法,具有比较好的理论基础。这个方法和基于邻域的方法(比 如UserCF、ItemCF)相比,各有优缺点。下面将从不同的方面对比LFM和基于邻域的方法。  理论基础 LFM具有比较好的理论基础,它是一种学习方法,通过优化一个设定的指标 建立最优的模型。基于邻域的方法更多的是一种基于统计的方法,并没有学习过程。  离线计算的空间复杂度 基于邻域的方法需要维护一张离线的相关表。在离线计算相关 表的过程中,如果用户/物品数很多,将会占据很大的内存。假设有M个用户和N个物品, 在计算相关表的过程中,我们可能会获得一张比较稠密的临时相关表(尽管最终我们对 每个物品只保留K个最相关的物品,但在中间计算过程中稠密的相关表是不可避免的), 那么假设是用户相关表,则需要O(M*M)的空间,而对于物品相关表,则需要O(N*N)的空 间。而LFM在建模过程中,如果是F个隐类,那么它需要的存储空间是O(F*(M+N)),这在 M和N很大时可以很好地节省离线计算的内存。在Netflix Prize中,因为用户数很庞大 (40多万),很少有人使用UserCF算法(据说需要30 GB左右的内存),而LFM由于大量节 省了训练过程中的内存(只需要4 GB),从而成为Netflix Prize中最流行的算法。  离线计算的时间复杂度 假设有M个用户、N个物品、K条用户对物品的行为记录。那么, UserCF计算用户相关表的时间复杂度是O(N * (K/N)^2),而ItemCF计算物品相关表的时间 复杂度是O(M*(K/M)^2)。而对于LFM,如果用F个隐类,迭代S次,那么它的计算复杂度 是O(K * F * S)。那么,如果K/N

  F*S,则代表UserCF的时间复杂度低于LFM,如果 K/M

  F*S,则说明ItemCF的时间复杂度低于LFM。在一般情况下,LFM的时间复杂度要 稍微高于UserCF和ItemCF,这主要是因为该算法需要多次迭代。但总体上,这两种算法 在时间复杂度上没有质的差别。  在线实时推荐 UserCF和ItemCF在线服务算法需要将相关表缓存在内存中,然后可以在 线进行实时的预测。以ItemCF算法为例,一旦用户喜欢了新的物品,就可以通过查询内 存中的相关表将和该物品相似的其他物品推荐给用户。因此,一旦用户有了新的行为, 而且该行为被实时地记录到后台的数据库系统中,他的推荐列表就会发生变化。而从LFM 的预测公式可以看到,LFM在给用户生成推荐列表时,需要计算用户对所有物品的兴趣 权重,然后排名,返回权重最大的N个物品。那么,在物品数很多时,这一过程的时间 复杂度非常高,可达O(M*N*F)。因此,LFM不太适合用于物品数非常庞大的系统,如 果要用,我们也需要一个比较快的算法给用户先计算一个比较小的候选列表,然后再用 LFM重新排名。另一方面,LFM在生成一个用户推荐列表时速度太慢,因此不能在线实 时计算,而需要离线将所有用户的推荐结果事先计算好存储在数据库中。因此,LFM不 能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化。  推荐解释 ItemCF算法支持很好的推荐解释,它可以利用用户的历史行为解释推荐结果。 但LFM无法提供这样的解释,它计算出的隐类虽然在语义上确实代表了一类兴趣和物品, 却很难用自然语言描述并生成解释展现给用户。 图灵社区会员 臭豆腐() 专享 尊重版权 2.6 基于图的模型 73 1 2 3 4 5 7 6 3 5 2.6 基于图的模型 用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中。本节将重点讨论 如何将用户行为用图表示,并利用图的算法给用户进行个性化推荐。 2.6.1 用户行为数据的二分图表示 基于图的模型(graph-based model)是推荐系统中的重要内容。其实,很多研究人员把基于 邻域的模型也称为基于图的模型,因为可以把基于邻域的模型看做基于图的模型的简单形式。 在研究基于图的模型之前,首先需要将用户行为数据表示成图的形式。本章讨论的用户行为 数据是由一系列二元组组成的,其中每个二元组(u, i)表示用户u对物品i产生过行为。这种数据集 很容易用一个二分图①表示。 令G(V,E)表示用户物品二分图,其中 UIVV V  由用户顶点集合 UV 和物品顶点集合 IV 组成。对于数据集中每一个二元组(u, i),图中都有一套对应的边 (,)uiev v ,其中 uUvV 是用户u 对应的顶点, iIvV 是物品i对应的顶点。图2-18是一个简单的用户物品二分图模型,其中圆形节 点代表用户,方形节点代表物品,圆形节点和方形节点之间的边代表用户对物品的行为。比如图 中用户节点A和物品节点a、b、d相连,说明用户A对物品a、b、d产生过行为。 图2-18 用户物品二分图模型 2.6.2 基于图的推荐算法 将用户行为表示为二分图模型后,下面的任务就是在二分图上给用户进行个性化推荐。如果 将个性化推荐算法放到二分图模型上,那么给用户u推荐物品的任务就可以转化为度量用户顶点 vu和与vu没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就 越高。 度量图中两个顶点之间相关性的方法很多,但一般来说图中顶点的相关性主要取决于下面3 —————————— ① 参见。 图灵社区会员 臭豆腐() 专享 尊重版权 74 第2 章 利用用户行为数据 个因素:  两个顶点之间的路径数;  两个顶点之间路径的长度;  两个顶点之间的路径经过的顶点。 而相关性高的一对顶点一般具有如下特征:  两个顶点之间有很多路径相连;  连接两个顶点之间的路径长度都比较短;  连接两个顶点之间的路径不会经过出度比较大的顶点。 举一个简单的例子,如图2-19所示,用户A和物品c、e没有边相连,但是用户A和物品c有两 条长度为3的路径相连,用户A和物品e有两条长度为3的路径相连。那么,顶点A与e之间的相关 性要高于顶点A与c,因而物品e在用户A的推荐列表中应该排在物品c之前,因为顶点A与e之间有 两条路径——(A, b, C, e)和(A, d, D, e)。其中,(A, b, C, e)路径经过的顶点的出度为(3, 2, 2, 2),而(A, d, D, e)路径经过的顶点的出度为(3, 2, 3, 2)。因此,(A, d, D, e)经过了一个出度 比较大的顶点D,所以(A, d, D, e)对顶点A与e之间相关性的贡献要小于(A, b, C, e)。 图2-19 基于图的推荐算法示例 基于上面3个主要因素,研究人员设计了很多计算图中顶点之间相关性的方法①。本节将介绍 一种基于随机游走的PersonalRank算法②。 —————————— ① 参见Fouss Francois、Pirotte Alain、Renders Jean-Michel和Saerens Marco的“ Random-Walk Computation of Similarities between Nodes of a Graph with Application to Collaborative Recommendation”(IEEE Transactions on Knowl edge and Data Eng ineering, 2007)。 ② 参见Taher H .Haveliwala的“Topic-Sensitive PageRank”()。 图灵社区会员 臭豆腐() 专享 尊重版权 2.6 基于图的模型 75 1 2 3 4 5 7 6 3 5 假设要给用户u进行个性化推荐,可以从用户u对应的节点vu开始在用户物品二分图上进行随 机游走。游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从vu节 点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一 个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率 会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。 如果将上面的描述表示成公式,可以得到如下公式: in( ) in( ) PR( ) ( )out( ) PR( ) PR( )(1 alpha ) ( )out( ) u v v u v v v vvv v v vvv             下面的Python代码简单实现了上面的公式: def PersonalRank(G, alpha, root): rank = dict() rank = {x:0 for x in G.keys()} rank[root] = 1 for k in range(20): tmp = {x:0 for x in G.keys()} for i, ri in G.items(): for j, wij in ri.items(): if j not in tmp: tmp[j] = 0 tmp[j] += 0.6 * rank[i] / (1.0 * len(ri)) if j == root: tmp[j] += 1 - alpha rank = tmp return rank 我们用上面的代码跑了一下图2-20的例子,给A用户进行推荐。图2-21给出了不同迭代次数 后每个顶点的访问概率。从图中可以看到,每个顶点的访问概率在9次迭代之后就基本上收敛了。 在这个例子中,用户A没有对物品b、d有过行为。在最后的迭代结果中,d的访问概率大于b,因 此给A的推荐列表就是{d, b}。 图2-20 PersonalRank的简单例子 图灵社区会员 臭豆腐() 专享 尊重版权 76 第2 章 利用用户行为数据 图2-21 不同次迭代中不同节点的访问概率 本节在MovieLens的数据集上评测了PersonalRank算法,实验结果如表2-15所示。 表2-15 MovieLens数据集中PersonalRank算法的离线实验结果  准 确 率 召 回 率 覆 盖 率 流 行 度 0.8 16.45% 7.95% 3.42% 7.6928 虽然PersonalRank算法可以通过随机游走进行比较好的理论解释,但该算法在时间复杂度上 有明显的缺点。因为在为每个用户进行推荐时,都需要在整个用户物品二分图上进行迭代,直到 整个图上的每个顶点的PR值收敛。这一过程的时间复杂度非常高,不仅无法在线提供实时推荐, 甚至离线生成推荐结果也很耗时。 为了解决PersonalRank每次都需要在全图迭代并因此造成时间复杂度很高的问题,这里给出 两种解决方案。第一种很容易想到,就是减少迭代次数,在收敛之前就停止。这样会影响最终的 精度,但一般来说影响不会特别大。另一种方法就是从矩阵论出发,重新设计算法。 对矩阵运算比较熟悉的读者可以轻松将PersonalRank转化为矩阵的形式。令M为用户物品二 分图的转移概率矩阵,即: 1(, ) out( )Mvv v 那么,迭代公式可以转化为: 图灵社区会员 臭豆腐() 专享 尊重版权 2.6 基于图的模型 77 1 2 3 4 5 7 6 3 5 0(1 ) TrrMr  对矩阵论稍微熟悉的读者都可以解出上面的方程,得到: 1 0(1 )(1 )TrMr   因此,只需要计算一次 1(1 )TM  ,这里1 TM 是稀疏矩阵。关于如何对稀疏矩阵快速求逆, 可以参考矩阵计算方面的书籍和论文①,本书就不再讨论了。 —————————— ① 比如Song Li的“Fast Algorithms For Sparse Matrix Inverse Compuataions”(2009)。 图灵社区会员 臭豆腐() 专享 尊重版权 78 第3 章 推荐系统冷启动问题 推荐系统冷启动问题 推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为 数据就成为推荐系统的重要组成部分和先决条件。对于很多像百度、当当这样的网站来说,这或 许不是个问题,因为它们目前已经积累了大量的用户数据。但是对于很多做纯粹推荐系统的网站 (比如Jinni和Pandora),或者很多在开始阶段就希望有个性化推荐应用的网站来说,如何在没有 大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统, 就是冷启动的问题。 下面各节将简单介绍一下冷启动问题的分类,以及如何解决不同种类的冷启动问题。 3.1 冷启动问题简介 冷启动问题(cold start)主要分3类。  用户冷启动 用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时, 我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他 做个性化推荐。  物品冷启动 物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。  系统冷启动 系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用 户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体 验到个性化推荐服务这一问题。 对于这3种不同的冷启动问题,有不同的解决方案。一般来说,可以参考如下解决方案。  提供非个性化的推荐 非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推 荐热门排行榜,然后等到用户数据收集到一定的时候,再切换为个性化推荐。  利用用户注册时提供的年龄、性别等数据做粗粒度的个性化。  利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然 后给用户推荐其好友喜欢的物品。  要求用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户 推荐那些和这些物品相似的物品。  对于新加入的物品,可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户。  在系统冷启动时,可以引入专家的知识,通过一定的高效方式迅速建立起物品的相关度表。 第3 章 图灵社区会员 臭豆腐() 专享 尊重版权 3.2 利用用户注册信息 79 1 2 3 4 5 7 6 6 6 下面几节将详细描述其中的某些方案。 3.2 利用用户注册信息 在网站中,当新用户刚注册时,我们不知道他喜欢什么物品,于是只能给他推荐一些热门的 商品。但如果我们知道她是一位女性,那么可以给她推荐女性都喜欢的热门商品。这也是一种个 性化的推荐。当然这个个性化的粒度很粗,因为所有刚注册的女性看到的都是同样的结果,但相 对于不区分男女的方式,这种推荐的精度已经大大提高了。因此,利用用户的注册信息可以很好 地解决注册用户的冷启动问题。在绝大多数网站中,年龄、性别一般都是注册用户的必备信息。 如3-1所示,个性化电台Pandora的注册界面就要求用户提供生日、邮编和性别等数据。Pandora在 解释为什么需要这些数据时表示是为了让用户能够看到和自己更加相关的广告。其实,这些数据 也可以用于解决用户听音乐的冷启动问题。 截取自Pandora网站,图中相关内容的著作权归原著作权人所有 图3-1 Pandora的用户注册界面 用户的注册信息分3种。  人口统计学信息 包括用户的年龄、性别、职业、民族、学历和居住地。  用户兴趣的描述 有一些网站会让用户用文字描述他们的兴趣。  从其他网站导入的用户站外行为数据 比如用户通过豆瓣、新浪微博的账号登录,就可以 在得到用户同意的情况下获取用户在豆瓣或者新浪微博的一些行为数据和社交网络数据。 图灵社区会员 臭豆腐() 专享 尊重版权 80 第3 章 推荐系统冷启动问题 这一节主要讨论如何通过用户注册时填写的人口统计学信息给用户提供粗粒度的个性化 推荐。 人口统计学特征包括年龄、性别、工作、学历、居住地、国籍、民族等,这些特征对预测用 户的兴趣有很重要的作用,比如男性和女性的兴趣不同, 不同年龄的人兴趣也不同。图3-2显示 了IMDB(IMDB网站中给出了每一部电影和电视剧的评分人数按照年龄和性别分布的数据①)中 给著名美剧评分的男女用户数的比例。这幅图中的数据只代表IMDB用户观看电视剧的性别分布, 因为IMDB网站用户的性别分布本身是不均匀的(男性用户较多)。如图3-2所示,用户选择电视 剧的行为和性别有很大的相关性,有些电视剧(比如《实习医生格雷》和《绝望主妇》)比较受 女性的欢迎,而一些电视剧(比如《生活大爆炸》和《荒野求生》)则比较受男性的欢迎。 基于人口统计学特征的推荐系统其典型代表是Bruce Krulwich开发的Lifestyle Finder②。首先, Bruce Krulwich将美国人群根据人口统计学属性分成62类,然后对于每个新用户根据其填写的个 人资料判断他属于什么分类,最后给他推荐这类用户最喜欢的15个链接,其中5个链接是推荐他 购买的商品,5个链接是推荐他旅游的地点,剩下的5个链接是推荐他去逛的商店。 图3-2 IMDB中不同美剧的评分用户的性别分布 为了证明利用用户人口统计学特征后的推荐结果好于随机推荐的结果,Krulwich做了一个AB 测试。相对于利用人口统计学特征的算法,Krulwich设计了一个对照组,该组用户看到的推荐结 果是完全随机的。实验结果显示,对于利用人口统计学特征的个性化推荐算法,其用户点击率为 89%,而随机算法的点击率只有27%。对于利用人口统计学特征的个性化算法,44%的用户觉得 推荐结果是他们喜欢的,而对于随机算法只有31%的用户觉得推荐结果是自己喜欢的。因此,我 们得到一个结论——使用人口统计学信息相对于随机推荐能够获得更好的推荐效果。当然, Krulwich的实验也有明显的缺点,即他没有对比和给用户推荐最热门的物品的推荐算法。因为热 —————————— ① 比如《豪斯医生》(House M.D.)的评分用户性别分布见。 ② 参见论文Bruce Krulwich的“Lifestyle finder : intelligent user profiling using large scale demographic data”(1997)。 图灵社区会员 臭豆腐() 专享 尊重版权 3.2 利用用户注册信息 81 1 2 3 4 5 7 6 6 6 门排行榜作为一种非个性化推荐算法,一般也比随机推荐具有更高的点击率。 基于注册信息的个性化推荐流程基本如下: (1) 获取用户的注册信息; (2) 根据用户的注册信息对用户分类; (3) 给用户推荐他所属分类中用户喜欢的物品。 图3-3是一个基于用户人口统计学特征推荐的简单例子。如图所示,当一个新的注册用户访 问推荐系统时,我们首先从用户注册信息数据库中查询他的注册信息。比如图3-3中的用户,我 们查到他是一位28岁的男性,是一位物理学家。然后,查询3张离线计算好的相关表:一张是性 别-电视剧相关表,从中可以查询男性最喜欢的电视剧;一张是年龄-电视剧相关表,从中可以查 询到28岁用户最喜欢的电视剧;一张是职业-电视剧相关表,可以查询到物理学家最喜欢的电视 剧。然后,我们可以将用这3张相关表查询出的电视剧列表按照一定权重相加,得到给用户的最 终推荐列表。 截取自Hulu网站,图中相关内容的著作权归原著作权人所有 图3-3 一个基于用户人口统计学特征推荐的简单例子 当然,实际应用中也可以考虑组合特征,比如将年龄性别作为一个特征,或者将性别职业作 为一个特征。不过在使用组合时需要注意用户不一定具有所有的特征(比如有些用户没有职业信 息),因为一般的注册系统并不要求用户填写所有注册项。 图灵社区会员 臭豆腐() 专享 尊重版权 82 第3 章 推荐系统冷启动问题 由图3-3中的例子可知,基于用户注册信息的推荐算法其核心问题是计算每种特征的用户喜 欢的物品。也就是说,对于每种特征f,计算具有这种特征的用户对各个物品的喜好程度p(f, i)。 (,)pfi可以简单地定义为物品i在具有f的特征的用户中的热门程度: (,) () ()pfi Ni Uf  其中 ()Ni是喜欢物品i的用户集合, ()Uf是具有特征f的用户集合。 上面这种定义可以比较准确地预测具有某种特征的用户是否喜欢某个物品。但是,在这种定 义下,往往热门的物品会在各种特征的用户中都具有比较高的权重。也就是说具有比较高的 ()Ni 的物品会在每一类用户中都有比较高的 (,)pfi。给用户推荐热门物品并不是推荐系统的主要任 务,推荐系统应该帮助用户发现他们不容易发现的物品。因此,我们可以将 (,)pfi定义为喜欢物 品i的用户中具有特征f的比例: () ( )(,) () Ni U fpfi Ni    这里分母中使用参数 的目的是解决数据稀疏问题。比如有一个物品只被1个用户喜欢过, 而这个用户刚好就有特征f,那么就有 (,)1pfi 。但是,这种情况并没有统计意义,因此我们为 分母加上一个比较大的数,可以避免这样的物品产生比较大的权重。 有两个推荐系统数据集包含了人口统计学信息,一个是BookCrossing数据集①,另一个是 Lastfm数据集②。 BookCrossing数据集包含用户对图书的行为信息,包含3个文件。  BX-Users.csv,包含用户的ID、位置和年龄。  BX-Books.csv,包含图书的ISBN、标题、作者、发表年代、出版社和缩略。  BX-Book-Ratings.csv,包含用户对图书的评分信息。 下面我们根据这个数据集研究一下年龄对用户喜欢图书的影响。我们研究两类用户,一类是 小于25岁的,一类是大于50岁的。 首先,我们利用 (,) () ()pfi Ni Uf  统计了这两部分用户最经常看的书,并将每一类用户 最经常看的5本书显示在表3-1中。同时我们也利用 () ( )(,) () Ni U fpfi Ni    计算了年轻用户比例最 高的5本书和老年用户比例最高的5本书(如表3-2所示)。我们可以看到,表3-1中年轻用户和老年 用户最热门的5本书有3本是相同的,重合度很高。这3本书其实是老少咸宜的。在年轻人最喜欢 的书中,只有《哈利波特和魔法石》(Harry Potter and the Sorcerer’s Stone)和《麦田里的守望者》 (The Catcher in the Rye)是比较符合年轻人兴趣的。而在老年用户喜欢的书中,似乎没有特别能 反映老年用户特点的书。由此可见, (,) () ()pfi Ni Uf  很难用来给用户推荐符合他们特征的 个性化物品。 —————————— ① 参见。 ② 参见。 图灵社区会员 臭豆腐() 专享 尊重版权 3.2 利用用户注册信息 83 1 2 3 4 5 7 6 6 6 不过观看表3-2就可以发现,列表中推荐给年轻用户的书都是符合年轻人兴趣的,而推荐给 老年人的书也是符合老年人兴趣的。 表3-1 年轻用户和老年用户经常看的图书的列表 年轻人 (小于25岁) Wild Animus, Rich Shapero, 2004, Too Far The Lovely Bones: A Novel, Alice Sebold, 2002, Little, Brown Harry Potter and the Sorcerer’s Stone (Harry Potter (Paperback)), J. K. Rowling, 1999, Arthur A. Levine Books The Catcher in the Rye, J.D. Salinger, 1991, Little, Brown The Da Vinci Code, Dan Brown, 2003, Doubleday 老年人 (大于50岁) Wild Animus, Rich Shapero, 2004, Too Far The Da Vinci Code, Dan Brown, 2003, Doubleday The Lovely Bones: A Novel, Alice Sebold, 2002, Little, Brown A Painted House, John Grisham, 2001, Dell Publishing Company Angels & Demons, Dan Brown, 2001, Pocket Star 表3-2 年轻用户比例最高的5本书和老年人比例最高的5本书 年轻人 (小于25岁) The Perks of Being a Wallflower, Stephen Chbosky, 1999, MTV The Catcher in the Rye, J.D. Salinger, 1991, Little, Brown And Then There Were None : A Novel, Agatha Christie, 2001, St. Martin’s Paperbacks Chicken Soup for the Teenage Soul (Chicken Soup for the Soul), Jack Canfield, 1997, Health Communications The Giver (21st Century Reference), LOIS LOWRY, 1994, Laure Leaf 老年人 (大于50岁) The No. 1 Ladies’ Detective Agency (Today Show Book Club #8), Alexander McCall Smith, 2003, Anchor A Painted House, John Grisham, 2001, Dell Publishing Company The Da Vinci Code, Dan Brown, 2003, Doubleday Deception Point, Dan Brown, 2002, Pocket A Thief of Time (Joe Leaphorn/Jim Chee Novels), Tony Hillerman, 1990, HarperTorch Lastfm数据集包含了更多的用户人口统计学信息,包括用户的性别、年龄和国籍。图3-4给出 了该数据集中用户性别的分布。如图所示,该数据集中男性用户占了绝大多数(大约占3/4)。图 3-5给出了该数据集中用户年龄的分布。如图所示,该数据集中20~25岁的用户占了绝大多数比 例。图3-6给出了该数据集中用户国家的分布。如图所示,该数据集中美国、德国和英国的用户 占了绝大多数比例。 图灵社区会员 臭豆腐() 专享 尊重版权 84 第3 章 推荐系统冷启动问题 图3-4 Lastfm数据集中男女用户的分布 图3-5 Lastfm数据集中用户年龄的分布 图3-6 Lastfm数据集中用户国家的分布 25 000 20 000 15 000 10 000 5000 10 000 20 000 30 000 40 000 50 000 60 000 0 0 女性 26% 男性 74% 图灵社区会员 臭豆腐() 专享 尊重版权 3.3 选择合适的物品启动用户的兴趣 85 1 2 3 4 5 7 6 6 6 我们准备用该数据集对比一下使用不同的人口统计学特征预测用户行为的精度。这里,我们 将数据集划分成10份,9份作为训练集,1份作为测试集。然后,我们在训练集上利用 (,) () ()pfi Ni Uf  计算每一类用户对物品的兴趣程度 (,)pfi。然后在测试集中给每一类用户 推荐 (,)pfi最高的10个物品,并通过准确率和召回率计算预测准确度。同时,我们也会计算推荐 的覆盖率来评测推荐结果。 我们按照不同的粒度给用户分类,对比了4种不同的算法。  MostPopular 给用户推荐最热门的歌手。  GenderMostPopular 给用户推荐对于和他同性别的用户最热门的歌手,这里我们将用 户分成男女两类。  AgeMostPopular 给用户推荐对于和他同一个年龄段的用户最热门的歌手,这里我们将 10岁作为一个年龄段,将用户按照不同的年龄段分类。  CountryMostPopular 给用户推荐对于和他同一个国家的用户最热门的歌手。  DemographicMostPopular 给用户推荐对于和他同性别、年龄段、国家的用户最热门的 歌手。 从算法的描述可见,这4 种算法具有不同的粒度,其中MostPopular 粒度最粗,而 DemographicMostPopular算法的粒度最细。一般说来,粒度越细,精度和覆盖率也会越高。 表3-3给出了实验结果。如结果所示,确实是DemographicMostPopular算法的准确率、召回率 和覆盖率更高。这说明,利用的用户人口统计学特征越多,越能准确地预测用户兴趣。同时,结 果显示: DemographicMostPopular

  CountryMostPopular

  AgeMostPopular

  GenderMostPopular

  MostPopular 表3-3 4种不同粒度算法的召回率、准确率和覆盖率 方 法 召 回 率 准 确 率 覆 盖 率 MostPopular 4.81% 2.36% 0.018% GenderMostPopular 4.95% 2.43% 0.027% AgeMostPopular 5.04% 2.47% 0.062% CountryMostPopular 5.58% 2.73% 0.80% DemographicMostPopular 6.00% 2.94% 3.85% 这说明在预测用户对音乐的兴趣时,国家比年龄、性别特征影响更大。这一点是显然的,比 如中国的年轻人和美国的年轻人喜欢的音乐差异是很大的。 3.3 选择合适的物品启动用户的兴趣 解决用户冷启动问题的另一个方法是在新用户第一次访问推荐系统时,不立即给用户展示推 荐结果,而是给用户提供一些物品,让用户反馈他们对这些物品的兴趣,然后根据用户反馈给提 图灵社区会员 臭豆腐() 专享 尊重版权 86 第3 章 推荐系统冷启动问题 供个性化推荐。很多推荐系统采取了这种方式来解决用户冷启动问题。以Jinni为例,当新用户访 问推荐系统时,它会给出一条提示语,表示用户需要给多部电影评分才能获取推荐结果(如图3-7 所示)。当用户选择给多部电影评分后,Jinni会首先展示一个页面让用户选择他喜欢的电影类别 (如图3-8所示),当用户选择了某一个类别后,Jinni会展示第三个界面让用户对电影进行反馈(如 图3-9所示)。 图3-7 Jinni在新用户登录推荐系统时提示用户需要给多部电影评分 截取自Jinni网站,图中相关内容的著作权归原著作权人所有 图3-8 Jinni让用户选择自己喜欢的电影类别 对于这些通过让用户对物品进行评分来收集用户兴趣,从而对用户进行冷启动的系统,它们 需要解决的首要问题就是如何选择物品让用户进行反馈。 一般来说,能够用来启动用户兴趣的物品需要具有以下特点。  比较热门 如果要让用户对一个物品进行反馈,前提是用户知道这个物品是什么东西。 以电影为例,如果一开始让用户进行反馈的电影都很冷门,而用户不知道这些电影的情 节和内容,也就无法对它们做出准确的反馈。 图灵社区会员 臭豆腐() 专享 尊重版权 3.3 选择合适的物品启动用户的兴趣 87 1 2 3 4 5 7 6 6 6 截取自Jinni网站,图中相关内容的著作权归原著作权人所有 图3-9 Jinni让用户对电影进行评分的界面  具有代表性和区分性 启动用户兴趣的物品不能是大众化或老少咸宜的,因为这样的物品 对用户的兴趣没有区分性。还以电影为例,用一部票房很高且广受欢迎的电影做启动物品, 可以想象的到的是几乎所有用户都会喜欢这部电影,因而无法区分用户个性化的兴趣。  启动物品集合需要有多样性 在冷启动时,我们不知道用户的兴趣,而用户兴趣的可能 性非常多,为了匹配多样的兴趣,我们需要提供具有很高覆盖率的启动物品集合,这些 物品能覆盖几乎所有主流的用户兴趣。以图3-8为例,Jinni在让用户反馈时没有直接拿电 影让用户反馈,而是给出了12个电影类型(截图中只显示了其中的6个电影类型),让用 户先选择喜欢哪种类型,这样就很好地保证了启动物品集合的多样性。 上面这些因素都是选择启动物品时需要考虑的,但如何设计一个选择启动物品集合的系统 呢?Nadav Golbandi在论文①中探讨了这个问题,提出可以用一个决策树解决这个问题。 首先,给定一群用户,Nadav Golbandi用这群用户对物品评分的方差度量这群用户兴趣的一 致程度。如果方差很大,说明这一群用户的兴趣不太一致,反之则说明这群用户的兴趣比较一致。 令 u U  为用户集合U中所有评分的方差,Nadav Golbandi的基本思想是通过如下方式度量一个 物品的区分度D(i): ()() ()() uNiuN i uN iDi  其中, ()Ni 是喜欢物品i的用户集合, ()Ni 是不喜欢物品i的用户集合, ()Ni是没有对物品 i评分的用户集合。 ()uN i  是喜欢物品i的用户对其他物品评分的方差, ()uN i  是不喜欢物品i的 —————————— ① “Adaptive Bootstrapping of Recommender Systems Using Decision Trees”,下载地址为 。 图灵社区会员 臭豆腐() 专享 尊重版权 88 第3 章 推荐系统冷启动问题 用户对其他物品评分的方差, ()uNi  是没有对物品i评分的用户对其他物品评分的方差。也就是 说,对于物品i,Nadav Golbandi将用户分成3类——喜欢物品i的用户、不喜欢物品i的用户和不知 道物品i的用户(即没有给i评分的用户)。如果这3类用户集合内的用户对其他的物品兴趣很不一 致,说明物品i具有较高的区分度。 Nadav Golbandi的算法首先会从所有用户中找到具有最高区分度的物品i,然后将用户分成3 类。然后在每类用户中再找到最具区分度的物品,然后将每一类用户又各自分为3类,也就是将 总用户分成9类,然后这样继续下去,最终可以通过对一系列物品的看法将用户进行分类。而在 冷启动时,我们从根节点开始询问用户对该节点物品的看法,然后根据用户的选择将用户放到不 同的分枝,直到进入最后的叶子节点,此时我们就已经对用户的兴趣有了比较清楚的了解,从而 可以开始对用户进行比较准确地个性化推荐。 图3-10通过一个简单的例子解释Nadav Golbandi的算法。如图所示,假设通过分析用户数据, 我们发现《变形金刚》最有区分度。而在喜欢《变形金刚》的用户中《钢铁侠》最有区分度,不 知道《变形金刚》的用户中《阿甘正传》最有区分度,不喜欢《变形金刚》的用户中《泰坦尼克 号》最有区分度。进一步分析,我们发现不喜欢《变形金刚》但喜欢《泰坦尼克号》的用户中, 《人鬼情未了》最有区分度。那么,假设来了一个新用户,系统会首先询问他对《变形金刚》的 看法,如果他说不喜欢,我们就会问他对《泰坦尼克》号的看法,如果他说喜欢,我们就会问他 对《人鬼情未了》的看法,如果这个时候用户停止了反馈,我们也大概能知道该用户可能对爱情 片比较感兴趣,对科幻片兴趣不大。 截取自IMDB网站,图中相关内容的著作权归原著作权人所有 图3-10 给用户选择物品以解决冷启动问题的例子 喜欢 不喜欢 不知道 喜欢 图灵社区会员 臭豆腐() 专享 尊重版权 3.4 利用物品的内容信息 89 1 2 3 4 5 7 6 6 6 3.4 利用物品的内容信息 物品冷启动需要解决的问题是如何将新加入的物品推荐给对它感兴趣的用户。物品冷启动在 新闻网站等时效性很强的网站中非常重要,因为那些网站中时时刻刻都有新加入的物品,而且每 个物品必须能够在第一时间展现给用户,否则经过一段时间后,物品的价值就大大降低了。 第2章介绍了两种主要的推荐算法——UserCF和ItemCF算法。首先需要指出的是,UserCF算 法对物品冷启动问题并不非常敏感。因为,UserCF在给用户进行推荐时,会首先找到和用户兴趣 相似的一群用户,然后给用户推荐这一群用户喜欢的物品。在很多网站中,推荐列表并不是给用 户展示内容的唯一列表,那么当一个新物品加入时,总会有用户从某些途径看到这些物品,对这 些物品产生反馈。那么,当一个用户对某个物品产生反馈后,和他历史兴趣相似的其他用户的推 荐列表中就有可能出现这一物品,从而更多的人就会对这个物品产生反馈,导致更多的人的推荐 列表中会出现这一物品,因此该物品就能不断地扩散开来,从而逐步展示到对它感兴趣用户的推 荐列表中。 但是,有些网站中推荐列表可能是用户获取信息的主要途径,比如豆瓣网络电台。那么对于 UserCF算法就需要解决第一推动力的问题,即第一个用户从哪儿发现新的物品。只要有一小部分 人能够发现并喜欢新的物品,UserCF算法就能将这些物品扩散到更多的用户中。解决第一推动力 最简单的方法是将新的物品随机展示给用户,但这样显然不太个性化,因此可以考虑利用物品的 内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户。关于如何利用内容信 息,本节将在后面介绍。 对于ItemCF算法来说,物品冷启动就是一个严重的问题了。因为ItemCF算法的原理是给用户 推荐和他之前喜欢的物品相似的物品。ItemCF算法会每隔一段时间利用用户行为计算物品相似度 表(一般一天计算一次),在线服务时ItemCF算法会将之前计算好的物品相关度矩阵放在内存中。 因此,当新物品加入时,内存中的物品相关表中不会存在这个物品,从而ItemCF算法无法推荐新 的物品。解决这一问题的办法是频繁更新物品相似度表,但基于用户行为计算物品相似度是非常 耗时的事情,主要原因是用户行为日志非常庞大。而且,新物品如果不展示给用户,用户就无法 对它产生行为,通过行为日志计算是计算不出包含新物品的相关矩阵的。为此,我们只能利用物 品的内容信息计算物品相关表,并且频繁地更新相关表(比如半小时计算一次)。 物品的内容信息多种多样,不同类型的物品有不同的内容信息。如果是电影,那么内容信息 一般包括标题、导演、演员、编剧、剧情、风格、国家、年代等。如果是图书,内容信息一般包 含标题、作者、出版社、正文、分类等。表3-4展示了常见物品的常用内容信息。 表3-4 常见物品的内容信息 图书 标题、作者、出版社、出版年代、丛书名、目录、正文 论文 标题、作者、作者单位、关键字、分类、摘要、正文 电影 标题、导演、演员、编剧、类别、剧情简介、发行公司 新闻 标题、正文、来源、作者 微博 作者、内容、评论 图灵社区会员 臭豆腐() 专享 尊重版权 90 第3 章 推荐系统冷启动问题 一般来说,物品的内容可以通过向量空间模型①表示,该模型会将物品表示成一个关键词向 量。如果物品的内容是一些诸如导演、演员等实体的话,可以直接将这些实体作为关键词。但如 果内容是文本的形式,则需要引入一些理解自然语言的技术抽取关键词。图3-11展示了从文本生 成关键词向量的主要步骤。对于中文,首先要对文本进行分词,将字流变成词流,然后从词流中 检测出命名实体(如人名、地名、组织名等),这些实体和一些其他重要的词将组成关键词集合, 最后对关键词进行排名,计算每个关键词的权重,从而生成关键词向量。 图3-11 关键词向量的生成过程 对物品d,它的内容表示成一个关键词向量如下: 11 2 2{( , ),( , ), }idewew  其中, ie 就是关键词, iw 是关键词对应的权重。如果物品是文本,我们可以用信息检索领域著 名的TF-IDF公式计算词的权重: TF( ) log DF( ) i i i ew e 如果物品是电影,可以根据演员在剧中的重要程度赋予他们权重。向量空间模型的优点是简 单,缺点是丢失了一些信息,比如关键词之间的关系信息。不过在绝大多数应用中,向量空间模 型对于文本的分类、聚类、相似度计算已经可以给出令人满意的结果。 在给定物品内容的关键词向量后,物品的内容相似度可以通过向量之间的余弦相似度计算: ij ij ij ddw dd  在具体计算物品之间的内容相似度时,最简单的方法当然是对两两物品都利用上面的余弦相 似度公式计算相似度,如下代码简单实现了这种方法: function CalculateSimilarity(D) for di in D: for dj in D: w[i][j] = CosineSimilarity(di, dj) return w 这里,D是文档集合。 但这种算法的时间复杂度很高。假设有N个物品,每个物品平均由m个实体表示,那么这个 算法的复杂度是 2()ONm。 在实际应用中,可以首先通过建立关键词—物品的倒排表加速这一计算过程,关于这一方法 —————————— ① 参见维基百科Vector Space Model词条。 图灵社区会员 臭豆腐() 专享 尊重版权 3.4 利用物品的内容信息 91 1 2 3 4 5 7 6 6 6 已经在前面介绍UserCF和ItemCF算法时详细介绍过了,所以这里直接给出计算的代码: function CalculateSimilarity(entity-items) w = dict() ni = dict() for e,items in entity_items.items(): for i,wie in items.items(): addToVec(ni, i, wie * wie) for j,wje in items.items(): addToMat(w, i, j, wie, wje) for i, relate_items in w.items(): relate_items = {x:y/math.sqrt(ni[i] * ni[x]) for x,y in relate_items.items()} 得到物品的相似度之后,可以利用上一章提到的ItemCF算法的思想,给用户推荐和他历史上 喜欢的物品内容相似的物品。 也许有读者认为,既然内容相似度计算简单,能频繁更新,而且能够解决物品冷启动问题, 那么为什么还需要协同过滤的算法。为了说明内容过滤算法和协同过滤算法的优劣,本节在 MovieLens和GitHub两个数据集上进行了实验。MovieLens数据集上一章已经详细介绍了,它也提 供了有限的内容信息,主要包括电影的类别信息(动作片、爱情片等类别),GitHub数据集包含 代码开发者对开源项目的兴趣数据,它的用户是程序员,物品是开源工程,如果一名程序员关注 某个开源工程,就会有一条行为记录。该数据集中主要的内容数据是开源项目的所有者名。 表3-5比较了内容过滤算法ContentItemKNN和协调过滤算法ItemCF在MovieLens和GitHub数 据集上的离线实验性能。为了对比,我们同时加入了Random和MostPopular两个非个性化的推荐 算法作为基准。 表3-5 MovieLens/GitHub数据集中几种推荐算法性能的对比 方 法 准 确 率 召 回 率 覆 盖 率 流 行 度 MovieLens Random 0.631% 0.305% 100% 4.3855 MostPopular 12.79% 6.18% 2.60% 7.7244 ItemCF 22.28% 10.76% 18.84% 7.254526 ContentItemKNN 6.78% 3.28% 19.06% 5.8481 GitHub Random 0.000985% 0.00305% 84.18% 0.9878 MostPopular 1.18% 4.36% 0.0299% 7.1277 ItemCF 2.56% 9.44% 33.71% 2.9119 ContentItemKNN 6.98% 25.75% 34.44% 1.7086 从MovieLens数据集上的结果可以发现,ContentItemKNN的准确率和召回率仅仅优于Random 算法,明显差于ItemCF算法,甚至比MostPopular算法还要差。不过在覆盖率和流行度指标上 ContentItemKNN却优于ItemCF。这主要是因为内容过滤算法忽视了用户行为,从而也忽视了物 品的流行度以及用户行为中所包含的规律,所以它的精度比较低,但结果的新颖度却比较高。 不过,事情不是绝对的。如果看GitHub数据集的结果,我们会发现完全相反的现象——Content- 图灵社区会员 臭豆腐() 专享 尊重版权 92 第3 章 推荐系统冷启动问题 ItemKNN在所有指标上都优于ItemCF。这主要是因为GitHub提供了一个非常强的内容特征,就是开 源项目的作者。在GitHub中,程序员会经常会关注同一个作者的不同项目,这一点是GitHub数据 集最重要的特征。而协同过滤算法由于数据稀疏的影响,不能从用户行为中完全统计出这一特征, 所以协同过滤算法反而不如利用了先验信息的内容过滤算法。这一点也说明,如果用户的行为强 烈受某一内容属性的影响,那么内容过滤的算法还是可以在精度上超过协同过滤算法的。不过这 种强的内容特征不是所有物品都具有的,而且需要丰富的领域知识才能获得,所以很多时候内容 过滤算法的精度比协同过滤算法差。不过,这也提醒我们,如果能够将这两种算法融合,一定能 够获得比单独使用这两种算法更好的效果。 ECML/PKDD在2011年举办过一次利用物品内容信息解决冷启动问题的比赛①。该比赛提供 了物品的内容信息,希望参赛者能够利用这些内容信息尽量逼近协同过滤计算出的相似度表。对 内容推荐感兴趣的读者可以关注该比赛的相关论文。 向量空间模型在内容数据丰富时可以获得比较好的效果。以文本为例,如果是计算长文本的 相似度,用向量空间模型利用关键词计算相似度已经可以获得很高的精确度。但是,如果文本很 短,关键词很少,向量空间模型就很难计算出准确的相似度。举个例子,假设有两篇论文,它们 的标题分别是“推荐系统的动态特性”和“基于时间的协同过滤算法研究”。如果读者对推荐系 统很熟悉,可以知道这两篇文章的研究方向是类似的,但是它们标题中没有一样的关键词。其实, 它们的关键词虽然不同,但却是相似的。“动态”和“基于时间”含义相似,“协同过滤”是“推 荐系统”的一种算法。换句话说,这两篇文章的关键词虽然不同,但关键词所属的话题是相同的。 在这种情况下,首先需要知道文章的话题分布,然后才能准确地计算文章的相似度。如何建立文 章、话题和关键词的关系是话题模型(topic model)研究的重点。 代表性的话题模型有LDA。以往关于该模型的理论文章已经很多了,本书不准备讨论太多的 数学问题,所以这里准备用形象的语言介绍一下LDA,并用工程师很容易懂的方法介绍这个算法。 关于LDA的详细理论介绍可以参考DM Blei的论文“Latent Dirichlet Allocation”②。 任何模型都有一个假设,LDA作为一种生成模型,对一篇文档产生的过程进行了建模。话 题模型的基本思想是,一个人在写一篇文档的时候,会首先想这篇文章要讨论哪些话题,然后 思考这些话题应该用什么词描述,从而最终用词写成一篇文章。因此,文章和词之间是通过话 题联系的。 LDA中有3种元素,即文档、话题和词语。每一篇文档都会表现为词的集合,这称为词袋模 型(bag of words)。每个词在一篇文章中属于一个话题。令D为文档集合,D[i]是第i篇文档。w[i][j] 是第i篇文档中的第j个词。z[i][j]是第i篇文档中第j个词属于的话题。 LDA的计算过程包括初始化和迭代两部分。首先要对z进行初始化,而初始化的方法很简单, 假设一共有K个话题,那么对第i篇文章中的第j个词,可以随机给它赋予一个话题。同时,用 —————————— ① 参见。 ② 参见David M. Blei、 Andrew Y. Ng、 Michael I. Jordan的“ Latent dirichlet allocation”(Journal of Machine Learning Research 3, 2003)。 图灵社区会员 臭豆腐() 专享 尊重版权 3.4 利用物品的内容信息 93 1 2 3 4 5 7 6 6 6 NWZ(w,z)记录词w被赋予话题z的次数,NZD(z,d)记录文档d中被赋予话题z的词的个数。 foreach document i in range(0,D): foreach word j in range(0, D(i)): z[i][j] = rand() % K NZD[z[i][j], D[i]]++ NWZ[w[i][j], z[i][j]]++ NZ[z[i][j]]++ 在初始化之后,要通过迭代使话题的分布收敛到一个合理的分布上去。伪代码如下所示: while not converged: foreach document i in range(0, D): foreach word j in range(0, D(i)): NWZ[w[i][j], z[i][j]]-- NZ[z[i][j]]-- NZD[z[i][j], D[i]]-- z[i][j] = SampleTopic() NWZ[w[i][j], z[i][j]]++ NZ[z[i][j]]++ NZD[z[i][j], D[i]]++ LDA可以很好地将词组合成不同的话题。这里我们引用David M. Blei在论文中给出的一个实 验结果。他利用了一个科学论文摘要的数据集,该数据集包含16 333篇新闻,共23 075个不同的 单词。通过LDA,他计算出100个话题并且在论文中给出了其中4个话题排名最高(也就是p(wz) 最大)的15个词。从图3-12所示的聚类结果可以看到,LDA可以较好地对词进行聚类,找到每个 词的相关词。 图3-12 通过LDA对词进行聚类的结果 在使用LDA计算物品的内容相似度时,我们可以先计算出物品在话题上的分布,然后利用两 个物品的话题分布计算物品的相似度。比如,如果两个物品的话题分布相似,则认为两个物品具 有较高的相似度,反之则认为两个物品的相似度较低。计算分布的相似度可以利用KL散度①: —————————— ① 参见。 图灵社区会员 臭豆腐() 专享 尊重版权 94 第3 章 推荐系统冷启动问题 KL ()D() ()ln()i pipq pi qi  其中p和q是两个分布,KL散度越大说明分布的相似度越低。 3.5 发挥专家的作用 很多推荐系统在建立时,既没有用户的行为数据,也没有充足的物品内容信息来计算准确的 物品相似度。那么,为了在推荐系统建立时就让用户得到比较好的体验,很多系统都利用专家进 行标注。这方面的代表系统是个性化网络电台Pandora和电影推荐网站Jinni。 Pandora是一个给用户播放音乐的个性化电台应用。众所周知,计算音乐之间的相似度是比 较困难的。首先,音乐是多媒体,如果从音频分析入手计算歌曲之间的相似度,则技术门槛很高, 而且也很难计算得令人满意。其次,仅仅利用歌曲的专辑、歌手等属性信息很难获得令人满意的 歌曲相似度表,因为一名歌手、一部专辑往往只有一两首好歌。为了解决这个问题,Pandora雇 用了一批懂计算机的音乐人进行了一项称为音乐基因的项目①。他们听了几万名歌手的歌,并对 这些歌的各个维度进行标注。最终,他们使用了400多个特征②(Pandora称这些特征为基因)。标 注完所有的歌曲后,每首歌都可以表示为一个400维的向量,然后通过常见的向量相似度算法可 以计算出歌曲的相似度。 和Pandora类似,Jinni也利用相似的想法设计了电影基因系统,让专家给电影进行标注。Jinni 网站对电影基因项目进行了介绍③。图3-13是Jinni中专家给《功夫熊猫》标注的基因。 截取自Jinni网站,图中相关内容的著作权归原著作权人所有 图3-13 Jinni中专家给《功夫熊猫》标注的基因 —————————— ① 参见“About The Music Genome Project”,地址为。 ② 参见。 ③ 参见。 图灵社区会员 臭豆腐() 专享 尊重版权 3.5 发挥专家的作用 95 1 2 3 4 5 7 6 6 6 可以看到,这里的基因包括如下分类。  心情(Mood) 表示用户观看电影的心情,比如对于《功夫熊猫》观众会觉得很幽默, 很兴奋。  剧情(Plot) 包括电影剧情的标签。  类别(Genres) 表示电影的类别,主要包括动画片、喜剧片、动作片等分类。  时间(Time/Period) 电影故事发生的时间。  地点(Place) 电影故事发生的地点。  观众(Audience) 电影的主要观众群。  获奖(Praise) 电影的获奖和评价情况。  风格(Style) 功夫片、全明星阵容等。  态度(Attitudes) 电影描述故事的态度。  画面(Look) 电脑拍摄的画面技术,比如《功夫熊猫》是用电脑动画制作的。  标记(Flag) 主要表示电影有没有暴力和色情内容。 Jinni在电影基因工程中采用了半人工、半自动的方式。首先,它让专家对电影进行标记,每 个电影都有大约50个基因,这些基因来自大约1000个基因库。然后,在专家标记一定的样本后, Jinni会使用自然语言理解和机器学习技术,通过分析用户对电影的评论和电影的一些内容属性对 电影(特别是新电影)进行自己的标记。同时,Jinni也设计了让用户对基因进行反馈的界面,希 望通过用户反馈不断改进电影基因系统。 总之,Jinni通过专家和机器学习相结合的方法解决了系统冷启动问题。 图灵社区会员 臭豆腐() 专享 尊重版权 96 第4 章 利用用户标签数据 利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介。GroupLens在一 篇文章①中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品。如图4-1所示,第 一种方式是利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品,这就是前面提到 的基于物品的算法。第二种方式是利用和用户兴趣相似的其他用户,给用户推荐那些和他们兴趣 爱好相似的其他用户喜欢的物品,这是前面提到的基于用户的算法。除了这两种方法,第三种重 要的方式是通过一些特征(feature)联系用户和物品,给用户推荐那些具有用户喜欢的特征的物 品。这里的特征有不同的表现方式,比如可以表现为物品的属性集合(比如对于图书,属性集合 包括作者、出版社、主题和关键词等),也可以表现为隐语义向量(latent factor vector),这可以 通过前面提出的隐语义模型习得到。本章将讨论一种重要的特征表现方式——标签。 本图根据“Tagsplanations : Explaining Recommendations using Tags”一文中的 插图重新绘制,本图的著作权归原著作权人所有 图4-1 推荐系统联系用户和物品的几种途径 根据维基百科的定义②,标签是一种无层次化结构的、用来描述信息的关键词,它可以用来 描述物品的语义。根据给物品打标签的人的不同,标签应用一般分为两种:一种是让作者或者专 家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用 户生成的内容)的标签应用。UGC的标签系统是一种表示用户兴趣和物品语义的重要方式。当一 个用户对一个物品打上一个标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的 语义,从而将用户和物品联系了起来。因此本章主要讨论UGC的标签应用,研究用户给物品打标 签的行为,探讨如何通过分析这种行为给用户进行个性化推荐。 —————————— ① 文章名是“Tagsplanations : Explaining Recommendations using Tags”。 ② 参见。 第4 章 图灵社区会员 臭豆腐() 专享 尊重版权 4.1 UGC 标签系统的代表应用 97 1 2 3 4 5 7 6 6 6 4.1 UGC 标签系统的代表应用 UGC标签系统是很多Web 2.0网站的必要组成部分,本节将讨论使用UGC标签系统的代表网 站——UGC标签系统的鼻祖Delicious、论文书签网站CiteULike、音乐网站Last.fm、视频网站Hulu、 书和电影评论网站豆瓣等。下面将分别介绍这些应用。 4.1.1 Delicious Delicous可算是标签系统里的开山鼻祖,它允许用户给互联网上的每个网页打标签,从而通 过标签重新组织整个互联网。图4-2是Delicious中被用户打上recommender、system标签最多的网 页,这些网页反应了用户心目中和推荐系统最相关的网页。图4-3是Delicious中“豆瓣电台”这个 网页被用户打的最多的标签,可以看到这些标签确实从各个角度准确地描述了“豆瓣电台”这个 物品。 截取自Delicious,图中相关内容的著作权归原著作权人所有 图4-2 Delicious中被打上recommender和system标签的网页 截取自Delicious,图中相关内容的著作权归原著作权人所有 图4-3 Delicious中“豆瓣电台”网页被用户打的最多的标签 图灵社区会员 臭豆腐() 专享 尊重版权 98 第4 章 利用用户标签数据 4.1.2 CiteULike CiteULike是一个著名的论文书签网站,它允许研究人员提交或者收藏自己感兴趣的论文并 且给论文打标签,从而帮助用户更好地发现和自己研究领域相关的优秀论文。我们知道,研究人 员搜索自己研究领域内值得参考的论文是很费时费力的工作,而CiteULike通过群体智能,让每 个研究人员对自己了解的论文进行标记,借此帮助其他研究人员更好更快地发现自己感兴趣的论 文。图4-4展示了CiteULike中一篇有关推荐系统评测的文章以及用户给这篇文章打过最多的标签, 可以发现,最多的两个标签是collaborative-filtering(协同过滤)和evaluate(评测),确实比较准 确地反应了这篇论文的主要内容。 截取自CiteULike网站,图中相关内容的著作权归原著作权人所有 图4-4 CiteULike中一篇论文的标签 4.1.3 Last.fm Last.fm是一家著名的音乐网站,它通过分析用户的听歌行为预测用户对音乐的兴趣,从而给 用户推荐个性化的音乐。作为多媒体,音乐不像文本那样可以很容易地分析内容信息。为了在不 进行复杂音频分析的情况下获得音乐的内容信息,Last.fm引入了UGC标签系统,让用户用标签 标记音乐和歌手。图4-5展示了披头士乐队在Last.fm中的标签云(tag cloud)。从这个标签云可以 看到,披头士应该是一个英国(british)的传统摇滚乐队(classic rock。

Copyright © 2002-2018 重庆幸运农场有限公司 版权所有 备案号: 琼ICP备589628号

网站地图