论文读书笔记-google news personalization: scalable online collaborative filtering

来源:互联网 发布:知乎 智能晾衣架 编辑:程序博客网 时间:2024/05/01 20:59


 

简介:这篇论文介绍了google news推荐系统的实现。在用户量很大的前提下,原有的推荐算法适用性较差,需要对其进行改进,例如使用mapreducebigtable等技术提高运算速度,综合考虑多种推荐算法等等。

 

下面是一些要点:

1、处理google news的一些难点

-scalability:google news访客较多,新闻数据也较多

-item churn:物品(新闻)会动态变化,模型需要不断重建,这是一个非常费时的任务,对于google news来说,每分钟都会产生很多新闻,模型超过一段时间后效果会变差

 

2、google news的一些假设

这里假设用户点击某一条新闻即表示对该新闻感兴趣,之所以可以这样假设,因为google news前端页面已经显示了文章的摘要,用户能够了解这篇文章的大概信息,如果点击该新闻即可证明对此新闻感兴趣。

 

3、问题表述

对于N个用户,u={u1,u2,...uN}M个物品(文章)S={s1,s2...sm},给定一个用户的浏览记录集合Cu{s1,s2...si|cu|},推荐K个用户感兴趣的文章。

同时要求服务器的响应时间要短,服务器要做的事情如下:对新闻聚类;针对HTTP请求返回HTML内容;推荐系统产生推荐列表。比较下来

 

4、基于内存的算法

该算法根据用户过去的评价进行推荐,为此需要计算用户之间的相关性,w(ui,uj)矩阵衡量的就是任意两个用户的联系性,对于一个用户ua,他对于文章sk的评分如下:


 

I(ui,sk)1表明用户ui点击过sk。当计算得到的评分超过一定阈值后就可以假定用户ua喜欢文章sk。但是这个方法最大的问题就是可拓展性较差,由于所有数据要放入内存,当数据量较大值无法使用此方法。

 

5、基于模型的算法

此方法依据用户之前的评分为该用户建立模型,使用模型预测那些未被评价过的物品(协同过滤就是这种方法)。这种方法的缺陷是把每一个用户划分到一个指定的类别中,实际情况是用户对于不同的主题可能有不同的喜好,无法划分到一个指定的类别。

 

6、本文提出的算法

本文提出了的方法是对基于内存和基于模型的方法的结合,首先可以假设用户对于文章的评分正比于下面两个因素:


 

其中w(ua,ci)代表用户ua属于类别ci的程度。

 

6-1Minhash

衡量两个用户之间的相似度可以用他们的交集来表示,也被称为Jaccard 相似度


 

用户uj看过的新闻对于用户ui来说有s(ui,uj)的吸引力。

在计算的时候,可以使用LSH来缩减数据规模,其中LSH的思想就是相近的数据在哈希过程中更有可能产生冲突,具体查看这篇文章:

http://my.oschina.net/sulliy/blog/78777

hash时可以使用phash连结函数,于是用户之间的相关性为s^p,这样保证类别更多同时保证同一个类别中用户的相似度更高。为了提高recall值,可以并发处理,让用户映射到q个类别,针对每个类别用phash连结函数。

同时,在Minhash中也可以使用mapreduce的思想,在计算p*q minhash值的时候进行分布式计算,最终得到的是每一个类别id,其中包含属于该类别的用户id

 

6-2PLSI

PLSI把用户和物品看成随机变量对其建立模型,对用户和物品的联合分布建立混合分布模型,引入一个隐藏值Z来表示这种关系。混合模型如下:


 

具体查看这篇文章:

http://www.52nlp.cn/%E6%A6%82%E7%8E%87%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%8F%8A%E5%85%B6%E5%8F%98%E5%BD%A2%E7%B3%BB%E5%88%971-plsa%E5%8F%8Aem%E7%AE%97%E6%B3%95

 

7、计算新闻的推荐度

在计算一个新闻的推荐度时,首先获取用户所在的类别,查看属于该类别的用户组点击该新闻的次数(考虑时间效应),然后把这些次数加起来计算推荐评分。推荐值需要标准化,介于01之间。

 

8、Covisitation

Covisitation定义为同一个用户在一个时间段内点击两篇文章的事件。这样就可以在sjsk之间建立联系,不过为了时效性,可以把用户的点击行为限定在几个小时或几天内。

 

9、系统架构

系统架构由三个部分组成:离线部分用于根据用户的浏览记录对用户进行定期聚类;一系列在线的服务器执行在用户点击时更新用户和文章统计信息,给用户返回推荐信息;两种类型的数据表-UT(以用户ID作为索引存放用户点击历史和聚类信息)ST(以文章ID作为索引存储文章直接的点击情况和文章类别信息)。结构图如下:

 

对于UT,需要存储两种信息:

cluster info:一个列表,存储着用户属于类别IDPLSIMinhash

Click history:用户点击过的新闻id

对于ST,也需要存储两种信息:

Cluster statistics每个类别的用户点击了该文章的次数

Covisitation statistics:文章s和文章s’之间的covisit次数

 

上图的NPS计算推荐值时依据的是基于MinHashPLSI的文章类别值,加上文章直接covisitation值。也就是三个推荐值的叠加。

 

 

原创粉丝点击