基于微博的趋势话题计算
郑昀 201012
国外的OneRiot示范了如何从实时信息流中提取趋势话题,大致步骤为:
- 提取短语、讲话片段或文字段落,标记为趋势话题候选者;
- 计算多种权重,包括传统的TF/IDF,包括Social特有的病毒式传播;
- 对候选者进行过滤,清洗掉那些不好的候选者,包括简单的去除spam;
- 对候选者(根据共同出现频率、文本相似性等)聚类;
- 计算每一个cluster的得分。
构建一个memeTracker应用,如果想要尽量全地涵盖互联网热点,从新浪微博、Twitter等国内外微博客网站的实时信息流出发算是一个比较省力的做法。
其他路径
我们以前曾经尝试过其他路径:
- 曾经构建的Big Event(大事件)是从搜索引擎网站的热词排行榜出发的,关联的是微博客信息。这个路径很轻,但由于拿不到搜索引擎真实的搜索关键词流,只能依赖更新很慢的热词榜单,所以不能涵盖全网热点。
- 早期构建的Onejoo(热点自动发现)则是从博客和主流论坛出发的,将博客、新闻和论坛帖子关联为一个一个话题。这个路径比较重,要抓取的数据很多(一次处理几十万篇文章),而且数据通常会有很长的正文等待处理。
- 玩聚SR是从RSS阅读器的分享、Twitter的推荐、delicious的收藏等出发的。这个路径还算是轻的,因为它是监测有限范围内的用户(A-List)。
Streaming
如果从微博客实时信息流的聚合出发做应用,前提条件是成为新浪微博等国内微博客厂商的合作伙伴,才能拿到实时信息流的推送接口(Streaming API),否则就只能通过微博搜索入口(或Search API)进行有限抽样了。
话题加工
假设已经提取出了趋势话题,那么我们还要精加工一下:
- 微博客消息区分出Verified用户或名人;
- 按照微博客用户的Authority和Rank排序关联消息;V用户或名人的消息以专区方式显示;
- 按照受欢迎程度(相似消息数、转发数和评论数)排序关联消息;
- 构造出微博间的对话,可折叠展示;
- 关联博客文章;
- 按照博客用户的Authority和Rank、受欢迎程度(传统的转载数、点击数和评论数,来自于Social Media领域的推荐、分享和收藏数)排序关联博文;
- 关联论坛帖子;
- 按照受欢迎程度(传统的转贴数、回复数和点击数,来自于Social Media领域的推荐、分享和收藏数)排序关联帖子;
- 关联新闻;
- 收集关联新闻的新闻评论;
- 传统数据分析
- 实体云
- 针对实体云的情感趋势分析;
- 标签云
- 媒体分布趋势
- 地域分布趋势(主要针对能提取出地域信息的新闻评论,以及微博客消息);
这里面既要照顾阅读的感觉,也要照顾分析的需求。
短语提取
回过头来,首先要从微博客消息中提取短语,注意不是分词。我们看新浪微博自己的热门话题榜,要么是被预先分类好的词典里的词,如“80后”、“1988”归类到“书籍”里,如“荷兰”归类在“足球”里;要么就是典型的被分词切碎的词,如今日的1小时最新话题榜Top10是“四川话”“棉被”“冰冷”“好觉”“冻着”“怀念”“睡着”“绝情”“舍友”“难过”。
本来,玩聚Big Event(大事件)采信搜索引擎用户输入的搜索关键词,就是因为这些词无需分词,就是最直接能涵盖事件的短语,如“河大飙车案”“郭德纲 道歉”。但如果我们试图让机器从海量微博客消息中提炼出这样的短语,那么就需要构建一个短语提取引擎。
这是一个需要长时间积累的技术。它对应着OneRiot所提出的“提取短语、讲话片段或文字段落,标记为趋势话题候选者”步骤 。
只有短语提取的好,才能找到人类能看懂的趋势话题候选者(每一个候选者应该包含了多个相似短语),否则即使去除停止词,或者(视每一个消息为一篇文章)用TF/IDF方法得到一组特征词,仍然会是一些没有主语没有宾语的切碎的词。
那么,如何做一个短语提取引擎(Keyphrase Extraction)呢?
如果单纯依靠手工建立的词典,问题在于,无法预测未来的话题,比如未来发生了一个“某某某去世”话题,那么词典就只能提取出“去世”的热门关键词而已。
其中一种解决办法是,基于N-grams短语标引的关键词自动抽取:
- 从最近数小时内发布的大量微博里做二元组和三元组发现;
- 根据TFIDF算法(视每一条微博消息为一篇文章)以及其他权重来过滤噪音;
- 结合词性信息来过滤短语,比如名词+名词或者形容词+名词是合法的,定义一组合法规则。
由于基于N元组的短语发现通常是局限在某一领域的,所以实作时可以先对微博消息做自动分类,在不同分类下做短语发现(微博消息的自动分类也是一个难题,文字太短没有足够的语言特征)。
短语的聚合
候选的短语需要做聚类,把相近的短语合并到一个话题下。
玩聚Big Event(大事件)有一种做法,它检查了每一个热门搜索词的“相关搜索建议”(谷歌和百度给出的),根据这些相关搜索建议词,做相似性分析,从而很容易把同一个事件的热词合并,比如“新疆骚乱”和“新疆动乱”,比如“金庸去世”和“金庸死了”。
(待续)
参考资源:
1、OneRiot的博文《A Deep Dive into Realtime Trending Topics》;
赠图一枚:

我的推特流:
1、
推荐阅读《程苓峰:围猎阿里》,讲述了郭去疾的LightInTheBox和冯剑峰的DinoDirect等新一代跨国B2C是如何做到阿里做不到的事情、打通从中国工厂到外国家庭消费者整个链条的。http://is.gd/j7eGO
2、
哈哈,太超前也有问题:2001年,王府井书店曾经为消费者在购物小票上,像美国一样分列了价款金额和税款金额。但令人意想不到的是,很多消费者质疑,买个书为什么还要纳税?是不是书店将企业税转嫁到消费者身上?最终王府井书店不胜烦扰,放弃了向购物者做纳税人教育的机会。