内容决定社区,品质选择用户
到底是什么决定了 2011 年社区产品(以 SNS 为代表)在国内外发展的红红火火,Web2.0 大行其道?点点虽给不出一个绝对的答案,不过不难看出,信息爆炸对时代的冲击,彻底地改变着人们的生活方式,也为这个时代的发展全方位拓宽了方向。从最初的基础的信息获取渠道——报纸电视,到新生的高速信息渠道——互联网,大量信息获取对日常生活的冲击越来越大,使得人们对信息的实时性要求变得越来越高。在 Web1.0 时代,网站创造、整合、推送内容,用户仅仅作为内容的消费者,这样对用户来说,获取内容的品质有保证,对网站来说,也可以很好地主导社区走向,相对容易形成社区良好的氛围。可是随着用户对数据量的要求越来越大,Web1.0 社区逐渐有些力不从心,需求催生了 Web2.0 里用户既是内容和数据的产生者,整理收集者,信息守门员,同时也作为内容消费者的新型互动模式,让用户自发地形成圈子,可新的问题随之到来:用户产生内容良莠不齐,话题也不集中,怎么办?在这个状况下,就有了相应的数据挖掘 / 推荐系统。
“人工”智能
众所周知,数据挖掘与推荐是在有一定数据量基础上的算法,所以大家在比较大的网站做数据挖掘相对容易,数据的分类聚类效果会更好,那么在网站初期,或者大网站在开辟一个新的内容形式时该如何进行机器学习?
在点点网最初就遇到了这样的问题,我们采取的方案就是采用“人工”智能,让用户参与进来对内容进行分类与高品质数据的筛选,通过鼓励用户给不同内容增加不同的标签来进行精准的分类,通过用户对一个内容的喜欢分享,对博客的分类推荐来收集精品内容,精品博客。也即:增加数据的多样性,从尽可能多的角度去考查现有的少量数据,同时采用类似 PAGE RANK 的思想,好的内容由好博客产生,好博客产生好的内容。
在处理点点的数据时主要有以下几个方面
- 文章聚合 在处理文章时首先会根据作者带的标签情况做有监督的聚合,可有时也会发现用户误用标签的情况,比方说为了增加文章的曝光率加入了许多同义标签,对这样的标签就需要进行初步的同义词筛选。做了聚合之后的数据就可以应用于标签系统。其次就是对原文做切词处理,并且加入原博客自带属性。这部分数据可以应用于内容推荐
- 标签相关度 相关度主要用于测量不同标签之间的向量距离,用来衡量不同标签之间的相关程度,包括用户对标签的误拼等修正,从数据方面提供给其它算法以提高文章分类的准备度,另一方面从产品角度在用户填写标签时做相关标签建议
- 博客聚合 在点点里,一个用户可以拥有多个不同兴趣爱好的博客,这提供给用户便利的管理内容与关系网络的方法,我们在对文章按照博客进行聚合时会依据博客类型进行区分,对默认博客划分为用户关系网络,在默认博客里的关注与被关注假定为线下 / 线上关系的映射,不参与内容向量划分。
对于关注量较大的子博会用历史的标签以及博客本身标签构建聚合中心,对内容向量进行权重加成。
4. 热度排序 在对所有内容做好向量图规划后,会依据不同展现需求做图切割。对达到阈值的内容做热度排序,主要通过用户对内容的喜欢,转发等交互,以及小编的评分来考究这方面的加权,对排序靠前的内容在无用户兴趣指向性等推荐位进行展现,比方说发现墙,针对有兴趣指向性的内容在原图切割的基础上再做好排序,这样就可以在雷达等位置进行有针对性地展现。
“你的数据挖掘!” “是点点的数据挖掘。”
数据挖掘算法在不同的场景下需要做相应的调整,这样才能很好地适应不同的环境,算法做出的推荐内容也最符合用户的胃口。特别是点点最初的这一套方案上线运行一段时间后,我们发现热点数据越来越集中,推荐的效果逐渐变差,同时不利于隐性内容的挖掘。而且在点点更注重的是人与内容的关系,需要提炼人与内容的共性,使两者更紧密的聚合在一起。人是会变化的,而内容是不变的,所以这里就需要分别对待,对内容的分类处理时效性更长,而对人的分类时效性就会没那么长。
这世界上唯一不变的就是“变化”
在面对上面的问题时,将后端推荐算法做相应的改进,把用户的关系网络以及兴趣网络做了数据分析:
- 用户关系模型 用户的主博客主要体现了线上 / 线下的好友关系,对于互相 follow 的情况聚合成用户关系簇,通过对数据的分析,会发现同一个群体的用户在关系划分时会更集中在同一个集合内,同时用户的交互行为也更加密切,所以当出现新用户在做博客推荐的时候就可以通过查找好友的好友来促进用户生成自己的圈子。提高用户的粘性,随后通过分析单向 follow 关系来考查用户兴趣圈子。
- 用户兴趣模型 用户的兴趣圈子与关系圈子最大的区别在于它会随着时间推移在不断地改变,在不同的阶段,每个人的兴趣爱好也在发生着变化。如果在这时做推荐还是基于历史所有的数据,那未免会让用户有“这个推荐以前不是挺好的么,现在怎么越来越差了”的想法。所以在做推荐的时候,需要把有时效性的数据独立出来考虑,这里还需要有折中,如果时间选择的太短,那数据量小就会波动特别大,如果时间选择的太长,那实时性又得不到保证。在这里我们选择时效性就需要依据不同的内容。点点里对“滑雪”这类的内容归类为“seasonally”,而“阅读”就归类为“decade”(同时归在这一类的还有摄影等…),同时还对一级子类进行细分,比方说在“音乐”类别下的“摇滚”就归类为“yearly”。这样对人做分类时,他的历史数据就可以有不同的权重,然而上文已经把内容做好了分类,如此这般就可以提高推荐算法的精确度。
在“变化”这个话题里还有一类的变化时效性更高,它已经有别于“兴趣”,那就是位置数据。在移动互联网火地烧屁股的当下,如何高效地利用用户的碎片时间,提高即时的数据推荐的准确性也是正在内部研究的一个方向,包括用户到达一个商区后是提高美食的内容还是电影影评?这些算法都基于事先把内容分好类(省下了很多的计算量),然后通过用户的一两个关键信息做出实时准确推荐等。
我知道你想知道你不知道的东西
一个社区的好坏,能否留住新用户,很大一部分关系就在于显性内容的优质程度,一个新用户进来一看,哇,都是喜欢的好东西。赞!那他就会不自觉地看看这,点点那,增加在社区停留的时间,才有可能深入体验产品细节。所以很多社区都在做的一件事,就是隐性内容的挖掘,每个社区都或多或少地有些人力贡献在寻找隐性高品质内容上面,而把不那么优秀的数据权重调低,相信在运营了一些时日的网站里都已经沉淀了很多很好的数据,那么如何把老数据展现给用户呢?如果是个新闻,那就没有重现天日的价值了,如果是一个游记,那就有很高的价值再次推荐给用户看,在这里再次出现了“时间”的概念,所以把内容和人做区别处理,“时间”标签打在“人”身上是很有必要的,这样内容就更多地与时间无关,只要是用户没看过的内容,多一次展现机会又何妨?
数据挖掘与推荐是个很有趣的话题,在这里浅显地分享些 SNS 数据挖掘的思路,避开枯燥无味的公式和理论,点点也还有很长的路要走,欢迎对这方面有兴趣的朋友一起交流。
感谢张龙对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论