很久很久以前,大家获取信息的渠道可能就是读书,听广播,看报纸,看电视等等,可以获得的信息也非常少。然而当今的社会,我们整天都会发愁从无数的巨大的永远都不可能看完的信息中很轻松地找到需要的信息,也就是说“信息过载”的问题十分严重。
我们每天都会看一些新闻,关注一些社会热点。当然你可以在围脖上看到很多大家炒的很热的话题,但很多人更愿意看的是新闻和评论。
在本文中,我想虚构出一家提供新闻资讯的网站,在你的个人页面上会显示每天各个领域发生的新闻大事件,以及你可能会喜欢的新闻资讯。
我们的网站需要做好下面的工作:
1、搜索
用户面对海量的信息,他如何能够比较快速的相对准确地找到他想要的东西,答案就是搜索引擎。
搭建一个搜索引擎需要解决下面的问题。
- 抓取
- 解析
- 索引
- 所有不同的单词,当然这些单词都是经过分词器过滤出来的比较重要的有意义的单词,而不是“的”或者“地”之类的出现频率高但永远不会成为核心的词,最好是限定一个范围,只保留一些出现频率在5%-50%之间的词
- 这些单词所在的文本
- 单词在文本中的位置
- 搜索
2、分类
首先,先说明一个问题,为什么不先进行聚类,而是先做分类呢?
因为数据的噪声会在分类之后得到很大的抑制,聚类的效果就会非常好。但如果反过来的话,会看到很多的科技新闻被归到国内新闻或者其他很搞笑的事情。
我们的网站将会分为:国内新闻,国外新闻,科技新闻,娱乐新闻,体育新闻,军事新闻这六大类。
分类的思路有两个:
- 一个比较简单的分类就是爬取新闻的时候就做好分类,也就是说你从新浪的科技新闻版块爬新闻自然就会分到这个类,这种分类方法完全依靠专家分类,分类的准确性会很高。但这种办法不能用在所有的数据源,因为很多的新闻都是从很多并没有分类。但是,这些专家分类的数据源可以作为分类器的训练集。
- 机器分类是解决这个问题的主要方法,构造一个好的分类器对于整个网站的成功起着非常重要的作用。可以想象,一个用户如果在体育新闻中看到了中国房价常年居高不下的新闻他还是会再次访问这个网站吗?
3、聚类
新闻分好类后,要对新闻做一些分组的工作。这就会用到聚类算法。新闻分组有个好处在于,我们可以很容易地找到一篇新闻的相关新闻,对于每个分组会根据这个分组中的新闻提取一个关键词作为名称。
4、个性化推荐
终于写到重点了。
网站为用户提供的新闻是在太多太多了,而且每天都会更新大量的新闻,用户如何能够一一看的过来呢?
首先,我们会提供一个订阅的功能,订阅用户自己感兴趣的分类或者分组。
用户如何找到这个分组?他可以搜索,他可以点开分类,然后他可以看到一个像树一样的结构。
但如果说我是用户的话,我在一个目录中点开一个链接。然后又看到无数的链接等着我去点,我会吐得。
所以这里,我们可以采用标签云的方式来表示这些分组,当你打开一个分类时,你会看到许许多多的分组标签,标签的大小和颜色都不同,大小由这个分组中的新闻篇数决定。
然后,我们如何进行个性化推荐?
(1)我们会给用户提供一个表达自己对这个新闻的喜好程度的机会,一个红心,就像豆瓣电台的那个红心,当然也会让他轻易地将这条新闻一键转发至各大社交网站上。通过这个行为我们就可以知道用户是喜欢这篇新闻的,那么个性化推荐也就不是问题了。
(2)当然,看过了一条新闻之后,总得让用户评论几句吧。这个是用户最基本的权利,而且是最容易出亮点的地方,网易新闻在这方面做的非常好。(释永信为失足女事主开光的新闻下面网友的诗词接龙堪称经典啊!)我们可以通过对评论进行语义分析,来分析用户对这个新闻是否关注或者喜欢。但国内用户很多时候都是在上面问候各自的直系亲属,这点使得对于评论的语义分析显得没有太大的意义哈。
我们会用到哪些算法呢?
基于内容的推荐算法是肯定的,因为这是一个文本内容丰富而且可以利用IR的一些成熟技术来做的推荐。
基于条目的协同过滤貌似不太好用,因为新闻具有时效性,有热度效应,所以新闻会很频繁地更新,用户评分矩阵就会不断地朝着条目的这个方向快速地增长,如果我们不加取舍的话,很快就会发现这个矩阵变成一个零矩阵,失去了意义。所以我们可以给这些数据加个时间窗口,来分析用户的短期兴趣,同时隔一段时间对历史的陈旧的数据做一次挖掘,然后提取出用户的兴趣模型,然后丢掉这些数据。这样我们可以得到用户的长期兴趣和短期兴趣。
基于用户的协同过滤算法,因为它的优势(寻找taste相同的人)在新闻类网站中显得很单薄,所以我们弃用这种算法。
有了这些,个性化的推荐就变得简单多了。
如果,我们把以上的这些功能和算法都做好了的话,并且用在手机客户端上的话,可能就是这个样子:
如果我们做成ipad客户端后,也许就是这个样子:
PS:因为我是指阅的fans,真心喜欢这个产品,所以在这里自愿打了广告哈,大家可以尝试用一下这个产品。