A.背景
在阅读本文之前,我们强烈建议您阅读一下郑昀 的《来,做一个社会化推荐引擎》和《一个想法从构思到实现只需7天》,本文所讨论的议题以及我们正在做的事情,都始于他以前在相同领域的工作与思考。我们的测试版社会化推荐引擎取名为“玩聚猫”(http://dullcat.com) ,也是在名称上延续郑昀在三年前发布的同类产品“玩聚SR”。
当然,我们并不是在探讨如何简单地复制郑昀以前的工作,而是探讨如何站在巨人的肩膀上,把社会化推荐引擎做得更好、更全面、更讨用户喜欢。
B.什么是社会化推荐(Social Recommendation,SR)?
郑昀在三年前对此的定义是“选择一批IT业界人士的社会化媒体分享源,如曹增辉、冯大辉的GoogleReader分享,白鸦、困兽的twitter,张亮的饭否,还有叽歪de、delicious等等。对这些信息源的分享链接进行汇总,一个信息源推荐就算一票,综合票数、信息源权重、推荐时间点、信息源类型等多种因素,最终形成像鲜果热文、digg或Reddit一样的跨平台社会化推荐引擎,并进一步引入语义关联技术,进化到协同过滤+语义过滤的自动化系统。”
由于数据源的原因,郑昀的定义比较强调“IT业界人士”,而我们想淡化这一点。
我们认为,社会化推荐系统是从社会化媒体中,根据一系列的算法,发现热门内容的系统。其使用的算法除了常规的数据挖掘、聚类外,主要是对各种信息源的『分享行为』进行汇总,对『分享行为』进行加权,综合『分享行为』的数量、信息源权重、推荐时间点、信息源类型等多种因素。她能分享最有价值的信息,能具有视野发散度,能削减信息爆炸。
『分享行为』是指用户在社会化媒体中对特定内容进行分享的行为,包括但不限于新浪微博的“转发”、人人网的“喜欢”、Google Plus的“+1”、以及Digg类网站的“顶”等等。
C.我们为什么要重复发明车轮?
原因很简单的,诞生于三年前的郑昀版社会化推荐系统有他的局限性:
a)由于过分依赖于IT业界人士,所推荐的内容难以吸引非IT人士
b)数据源较少(无论是种类还是数量),Google Reader Shared Item和Twitter占据了超过85%的信息。
c)由于b),没有形成在更大范围通用的排名公式。
d)没有像Google PR( Google PageRank)那样的指标,无法向用户直观地体现特定文章的价值。
e)推荐者权重模型(如名人效应)没有得到体现
因此,我们打算重新发明车轮,进行一场新的社会化推荐革命!
D.玩聚猫社会化推荐的数据源应该包含哪些?
我们把国内社会化分享媒体分为以下四类:
a) 微博、轻博客类。包含腾讯微博、新浪微博、网易微博、点点网、新浪Qing等;
b) SNS类。包含人人网、开心网、腾讯朋友等;
c) 书签、网摘类。包含强国网摘、CSDN网摘系统、爱库网、QQ书签、有道书签、百度搜藏等等;
d)RSS阅读器。包含Google Reader、鲜果、抓虾、豆瓣9点等等。
E.玩聚猫在处理不同类型社会化分享媒体的『分享行为』要考虑哪些因素?
上文也零星提及了一些,归纳起来有以下几点重要差异:
a) 『分享行为』类型不同。新浪微博有“转发”、人人网有“喜欢”、豆瓣9点有“推荐”、有的网站只有“阅读量”。
b) 网站权重不同。例如爱库网上最热的内容,权重肯定没有新浪微博上同一时间最热的内容权重高。
c)『分享行为』发起人的权重不同。例如李开复转发了一条微博,权重会比50个我转发同样一条微博更高。
d) 『分享行为』的时间也会影响权重。很多时候对于同一信息源、同一内容的『分享行为』是呈指数衰减的。例如在郭美美事件,我第一次在新浪微博看到时已经拥有了两万次转发,我看完后决定转发第两万零一次,明显我的这次转发的权重比第两千零一次转发的权重小。
e) 考虑去重复。例如我同时在我新浪微博和腾讯微博转发了同样一条微博,只能计数一次。
当然,我们希望这些差异对用户透明,因为用户不需要了解这么多。用户只需要一个类似Google PR的数字直接了当地告诉他文章价值就可以了。
所以我们引入了SR(Social Rank),范围0~10,标识在每篇文章的标题后面。一篇文章的SR能够精确表示它在其他各种社会化媒体的火热程度。
F.玩聚猫SR的计算公式
设置我们有N种数据源,分别是 {S1,S2,S3….Sn} ∈ S
如前文所述,数据源有4种类型,分别是{T1,T2,T3,T4}∈ T。
设类型权重 {WT1,WT2,WT3,WT4}∈W T
对于数据源Si ,
设数据源自身权重为SW(i), SW(i)由网站的Alexa排名、PV量、修正值决定。
T(i)表示它所属于的分类,WT(T(i) ) 表示Si的类型权重
在计算某篇文章的SR时,设A(i) 是该文章在Si数据源里的『分享行为』计数。
那么,
对于这篇文章而言,
SR = Logx ∑i=1..nA(i) ×WT(T(i) )× SW(i)
为什么是Logx 呢? 有两点原因,一是它可以使得早期的投票获得更大的权重,比如,当x=10时,前 10 票获得的权重,与 11 到 101 票所获得的权重是一样的;二是使信息的层级呈金字塔型分布,就像Google PR、地震里氏等级一样。
Logx 中x的取值非常重要,玩聚猫的取法是这样的:从已知的m篇预料信息中计算最大的推荐价值
MaxV= Max( Vj= ∑i=1..nA(i) ×WT(T(i) )× SW(i) | j=1..m )
由于SR的范围是0至10,我们令 x^10 =MaxV
从而计算出 x = 10√MaxV
如果MaxV为35000,则X应该设定为2.847,SR = Log2.847 ∑i=1..nA(i) ×WT(T(i) )× SW(i);推荐价值约200的文章SR为5,推荐价值约4500的文章SR为8,推荐价值大于35000的文章SR为10。
通过这样的公式,为每篇文章都计算出一个Rank值,用户就能直观又精确地了解到文章的价值了。
×注意:玩聚猫的SocialRank和《来,做一个社会化推荐引擎》里提到的排序依据SR Rank不同。玩聚猫的SR跟列表排序依据没关系,只跟内容本身的价值有关系;郑昀 只跟排序有关系。
G.玩聚猫还有哪些需要改进的地方?
我们正在以下领域进行奋斗:
1.强化用户权重系统,尤其是引入模糊计算和估值,强调名人效应。
2.通过实验数据,不断改进排名算法。
3.引入智能语义、自然语言,使玩聚猫在面对文本信息时,能够以人类而非机械的方式进行思考、归类、关联、过滤、总结。
4.引入机器学习(如Prediction),使玩聚猫能够记住每一个用户的口味,个性化地推荐文章。
如果你对社会化推荐感兴趣的话,不妨到玩聚猫看看(目前是测试版本,服务器在国外,可能不太稳定,请见谅)。我们热忱欢迎您的一切宝贵意见、建议和批评。