个性化阅读的过去、现在和未来

 ·概述

    以前曾经撰文讲过Topic Engine的过去、现在和未来。Topic Engine是一个生生不息的应用方向,因为从News Group、邮件列表、聊天室、论坛、Google News、博客圈子、群组。。。,人们一直因话题(有人也叫主题,英文为Topic)而聚集而交友,话题一直在生生不息层出不穷,组织形式在不断变异。

    现在再讲讲个性化阅读的过去、现在和未来,也算是这个话题的延续。

一、概念定义

    泛泛地说,只要是根据用户的历史行为(发言、标签等数据,点击流、分享、收藏、推荐、跳过等动作),动态决定哪些资讯内容(论坛帖子、新闻资讯、博客、微博、等)呈现给用户,都叫个性化阅读。

二、历史阶段

2005年~2007年:

    这个阶段还没有Social数据,所以:

首先需要用户选定对哪些分类频道感兴趣,比如历史、人文、明星、体育等。稍微聪明一点的做法,不让用户选分类,而是问用户几个问题,然后就大致匹配出用户的兴趣点。

其次,系统决定给用户展现哪些分类的资讯。

随着用户点击,资讯实时不断变化,点击越多,系统越了解用户的阅读喜好。

这阶段的问题是:

1、利用成熟的协同过滤算法,但由于都在追求实时计算,运算量较大,有一定技术门槛;

2、对用户背景还是不够了解,仅仅通过用户点击流终究太浅。

3、普遍存在冷启动问题。

2008年~2010年:

    有了Twitter,有了Facebook,有了Social Graph,个性化阅读器纷纷利用Twitter/Facebook帐号登录,展现的资讯是用户自己好友的Timeline聚合,主要是合并那些被诸多好友推荐的热点链接、图片和视频。不过,这波潮过去之后,像http://thoora.com/http://twittertim.es/等都没有找到足够的用户群,还没有像2005年杀出来的TechMeme那么成功。

这阶段的问题是:

1、依赖于Twitter/Facebook的Social Graph,依赖于好友推送,可供阅读的数据过少,可供计算的数据过少,限制了自身应用的发展;

2、除非与Twitter保持良好的关系,能拿到 Streaming Firehose 接口,提前积累用户数据,否则用户Timeline信息需要积累一段时间,造成大量用户登录后没有可阅读的数据。

2010年:

    FlipBoard杀出重围,自动排版技术独步天下。

2011年:

    随着国内新浪微博、豆瓣等拥有Interest Graph(兴趣图谱)+Social Graph(社交图谱)海量数据的网站崛起,成为主流数据源,如何把2005年到2010年这些探索择其优点都整合起来,成为一个大课题。

    Zite的横空出世,被众人热捧为“Flipboard Killer”,强调的是基于社会化关系的个性化推荐阅读方式。而Flipboard目前的战略重点主要还是集成各种社会化应用及内容源,并以其创造性的阅读体验方式展现出来。国内已经有几家也在Zite的方向上,尤其是iPad应用上,动了起来。

social media

三、热门?还是个性化?

    在2009年SXSW大会上,SheGeeks 直言不讳:『

热门内容(Popularity)已经过时了,某种程度上令人讨厌。

我不想知道什么是最流行的,Techmeme已经帮我做到了。我想知道什么东西和我相关。我们需要更多“相关性过滤服务”。

    此时,会有几种做法:

1、以热点资讯为主(先有蛋),以社交图谱为辅(后引入鸡):将社交图谱引入热点资讯阅读中,像Quora(或中国的知乎)一样按人来隔离不同话题(不同热点)的讨论。Zite的方式类似于此。

2、以社交图谱为主:组织一度好友和二度好友的数据,做好数据挖掘。曾经有人在很久远的年代说过,“建立一个Social Network,每一个用户都推荐出自己喜欢的内容,那么被推荐得最多的,就一定是大多数人最受欢迎的内容。如果把这些推荐内容的用户区分成不同的群体, 就会得到特定群体欢迎的内容。Digg的想法就源于此。不过,这需要用户有足够的动力去推荐自己喜欢的内容,否则,Network也无法形成”。

3、以为阅读中心:有人很多年前说过“许多人的blog阅读体验和阅读闲谈专栏是相似的,他们选择读什么不读什么的判断依据不是话题,而是作者,因为只有这样才能保证阅读到的内容的质量”。

4、以Topic为中心:用户定义或发掘用户感兴趣的Topic,只要是一篇文章谈及了用户关注的某一个主题,那么就推送给他。或者来自于不同人的文章集中地探讨某个话题,那么把这些文章自动聚合为一个Dialogue(虚拟对话),推送给用户。

    除了第一种做法之外,我曾经尝试过其他三种做法。在中国的大环境下,要么数据过少,要么数据质量不高,都不能很好地做到有“发现、探索”、“新鲜、有趣”的冲击力。

    当Social能完整地提供三重元素时:
1、 你的身份标识(Indentity):Who you are;
2、 你的联系人或圈子(Contacts):Who you know;
3、 你的网际行为(Activities):What you do 。

    那么,Social Graph,Interrest Graph,再联合热点资讯,揉入2005年以来的协同过滤算法,至少能做到make something people want吧。

四、Interest Graph的变化

    以前,郑昀针对不同人群做的信息聚合,单纯从内容分类(也就是靠自然语言处理的自动分类算法)做,属于从信息本身下手。这种方式有一个问题:Social Media Iceberg
   某一类人群,虽然有一些集中的阅读点,但还有边缘的共同兴趣。举例,如IT人群,虽然共享和推荐的大多数是IT科技文章,但也涌现出很多受欢迎的兴趣点,如韩寒的文章,如冷笑话,如创意趣味产品。
    这也就是为何基于 Tag 方式的阅读模式,以及基于指定主题的追踪模式,都不容易持久耐用的原因。一个人群的阅读兴趣点是比较模糊的。对于一个人来说,如果一个信息过滤器供应点科技,供应点娱乐,适当补充些人文历史,就能保证一定的粘度。
    所以,郑昀后来觉得从内容分类,由于不引入人工,只靠比较大条的自然语言处理分类,对于博文、微博、论坛帖子等文字质量不稳定的信息会分得很粗糙,所以改变思路,从人群分类开始做。
    也就是,划分出目标人群,依靠人群来挑拣信息,NLP算法为辅。这样有一个额外的好处,人群的兴趣点在动态变,短期地变,长期地变,但由于锁定人群,所以筛选出来的信息也在变。而相比之下,自动分类做出的信息,隔几个月或半年后,就要重新训练机器,因为往往信息包含的语言特征变了。
    这也是信息聚合中的一个实际考虑点。

    现在,中国也有了自己的Interest Graph,比如新浪微博,它的数据天然就表明一个人的兴趣喜好,以及连续波动,都可以跟踪和挖掘出来。以前依靠遍历Twitter、Google Reader、FriendFeed的好友所得到的社群分离,现在通过新浪微博等Social Graph都可以得到类似的。

五、人员配比

    一般我对这个领域(Topic Engine啦、个性化阅读啦、Meme Tracker啦),研发人员配比是这么建议的:

爬虫2人,
文本挖掘4人(新词发现+分词+分类一个人,实体识别与发现+情感趋势分析一个人,事件识别与发现一个人,User Interest Profile一个人),
数据挖掘和分析2人,
Web前端展现(包括手持设备)3人,
产品经理1人,
12人是一个比较不错的开局。

前面说到Topic Engine/个性化阅读/Meme Tracker这几个方向所需要的研发团队大致是12个人起。下面着重说一下在现如今如何做个性化阅读。

    Zite 的战略就是直接从Social Graph+Interest Graph切入,通过将Google Reader、Twitter、Facebook等拥有Interest Graph图谱的社会化数据导入,从而获得用户初始的兴趣爱好及社会化关系,由此引发阅读推荐,有效避免了推荐引擎的“冷启动”问题。如果用户不提供这些账号,Zite 需要你选择一些话题,然后就开始给你呈现相关的内容,这就和郑昀上一篇文章所介绍的2005~2007年活跃的个性化推荐没什么区别了。据说,国内已经有一家公司在做类似的产品,最近就会推出。

第一步,资讯聚合

    热门资讯聚合有几种方法,郑昀以前在里都讲过:

一、基于链接检测的聚合模式

    这个模式非常好理解。只不过,我定义之所以叫链接“检测”,是因为链接并不显著,或在正文中隐藏,或在 Tweets 中隐藏,需要你特地提取出来。

    2005年9月上线的 Techmeme 作为本模式的最优秀代表,就深刻地教育了 mashup 开发者,原来 链接检测 混搭 适当的A-List 有如此高的信息过滤效率。

Techmeme 在 Blog 时代称雄一时。到了 Twitter 时代,后起之秀是 TweetMeme ,上线之初,它并没有像 Techmeme 一样大放光彩,但随着 Twitter 的如日中天,它终于爆发了,它的 Alexa全球排名已经抵达在500名左右。

二、基于重复文字检测的聚合模式

    Google News和百度新闻的新闻聚合,都属于本模式。它们可以通过检测近期发布的资讯之间的内容重合度,能将同一个主题的资讯合并在一起,也就是以文本相似性为技术基础的。

    本模式一般是广泛收集新闻媒体信源,标记不同的权重度,做成扫描列表;然后通过爬虫抓取最新的新闻。通过对最近一段时间内的新闻计算文本相似性,可以获知哪些文章的相似度高于预设阈值,那么就说明这些文章是近似一个话题,可以合并。

三、Reddit模式

    让新鲜且投票数还不足够多的文章能快速突破进入热门榜单,是很重要的。所以郑昀曾经在《榜单类应用我所喜欢的算法》中写道:“Reddit算法是我最喜欢用的算法。这个算法的解释参见我的文章:《Hacker News与Reddit的算法比较》”。

    在郑昀撰写的《从Social Media海量数据中寻找专家的五大手法》中,SPEAR模式认为:“专家应该是发现者,而不是趋势的跟随者。experts应该是第一批收藏和标记高质量文章的人,从而召唤起社区内其他用户的围观。用户发现优质内容越早,表明该用户专业程度越高。所以,要区分“Discoverers”和“Followers”。”Reddit 正是通过log10 的使用,使得早期的投票(即Discoverers)获得更大的权重。比如,前10票获得的权重,与11到101票所获得的权重是一样的。

    以Reddit算法为依托,针对资讯或社会化媒体数据做出不同分类的榜单,即热文列表。

四、Seeds模式

    这是一种第三方应用深入某个 Social Media的常见刺探式统计方法。事先选定一个key users集合(比如创始人以及其他核心用户,被称之为“seeds”),然后从这批用户开始扫描建立Social Graph,通过统计inbound links和好友关系,得出被扫描的social media的不同指标的排行榜,这就是Spinn3r rank所用到的手法。这种模式并不限于计算Top Users。

    它所用到的两个技巧倒是经常看到:

  • 从 Approved Sources 开始扫描:一个好的算法,当然要从好源开始,Techmeme和玩聚SR都是这么做的;
  • 遍历 friendship :spammers或水平不那么高的用户,要想从 seeds 这里获得连接显然是不大可能的。

    资讯聚合之后,要做到自动分类。此处用到了NLP的东西。

第二步,Interest Graph的建立

    收集用户初始数据。此时有两种方式。

    第一种,授权式:

让用户以自己的新浪微博、豆瓣、Google(Reader)等Social帐号登录;

获得用户OAuth授权后,获得用户(以及他的好友的)timeline,实时分析其潜在阅读喜好,构建Interest Graph。

    第二种,预先计算式:

拿到Twitter、GR、新浪微博的类似Firehose(Streaming API)接口,提前存储大多数用户的社会化数据;

用户一旦输入(或叫“绑定”)自己的社会化帐号,后台根据已收集好的数据,立刻开始计算Interest Graph。

如何计算Interest Graph?

    郑昀认为,可以把计算一个(微博/twitter)的Interest Graph视为短文本分类问题

    那么可以采用改进后的LDA算法,区分并且去除了容易造成主题混淆的关键词,只考虑主题明晰化的关键词。

什么是LDA?

    即Latent Dirichlet allocation(硬翻译为 潜在狄利克雷分布或隐含狄利克雷分配)。关联关键词:Topic Modeling。

    参考《基于LDA的Topic Model变形》或《LDA模型理解》。比较通俗的解释可以看这篇SEO的:《Latent Dirichlet Allocation (LDA)与Google排名有着相当显著的相关性》。

具体如何做?

    去年曾经有一位rickjin在新浪微博上如是说,颇有参考价值:

用户的潜在的兴趣分布计算

    从代码层次上如何具体做,我就不说了。(注:你要是手头没工具包,也没做过NLP,也可以参考这么一个工具ROST CM。)

第三步,提供关联阅读列表

    开源的推荐引擎,一个是easyrec.org

背景1:http://en.wikipedia.org/wiki/Easyrec

easyrec is an open source Web application that provides personalized recommendations using RESTful Web services to be integrated into Web enabled applications. It is distributed under the GNU General Public License by the Studio Smart Agent Technologies and hosted at SourceForge.

It is written in Java, uses a MySQL database and comes with an administration tool.

    另一个是Apache Mahout 。

背景2:http://www.ibm.com/developerworks/cn/java/j-lo-mahout/
Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等。
Taste 是 Apache Mahout 提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。Taste 既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste 不仅仅只适用于 Java 应用程序,它可以作为内部服务器的一个组件以 HTTP 和 Web Service 的形式向外界提供推荐的逻辑。

    此处的难点是,如何根据前面计算的Interest Graph,给用户推荐资讯。最简单的做法是,把Interest Graph映射到不同分类,这样只需要先期计算好每一个分类下的热门资讯,那么知道用户喜欢哪些分类,就直接推送对应的热文即可;然后根据用户点击流和分享收藏等动作做个性化推荐,调整资讯内容。

第四步,再次分发、共享和传播

    不能让传播链在这里断掉,所以必须鼓励用户再次分享、推荐、共享、收藏到其他社会化媒体渠道。

第一篇:《个性化阅读的过去、现在和未来(一)·概述》;

第二篇:《个性化阅读的过去、现在和未来(二)·实作》。

例行赠图一枚:

http://ww4.sinaimg.cn/bmiddle/64b1ba03jw1dfv2u17lhvj.jpg

我的最新推特流:

1、

这个故事发生在距离中国不远的某俄罗斯边陲小镇硬盘维修中心。某天一位顾客带来了一块损坏的500Gb移动硬盘,这块硬盘来自河对岸的中国店铺,价格低廉的不可思议。这块移动硬盘竟然是由一个128MB的U盘和两个大螺帽组成。http://t.cn/hBgycH

2、

RT @shifeike: 这大半年来,没有一件让人开心的事儿,总是坏消息连着坏消息。我总在想,等到解放以后,罄竹难书和倒行逆施这两个成语,该拿出来用多少次啊!

3、

当《风声传奇》最后顾晓梦的父亲意欲杀死老潘,节奏越来越急促的背景音乐响起,两岁半的宝宝突然说:好像要死人了。。。

4、

下午百分点周涛教授给我们讲了个性化推荐如何与电商实际结合,非常精彩,信息量极大,深入浅出,全是干货,很久没听过这么酣畅淋漓的讲座了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值