1.概念及应用背景1.1 本文研究内容在过去的几年时间里,无论从用户数量还是内容数量来看,互联网都经历了爆炸式的增长。
人们逐渐从信息匮乏时代过渡到了信息过载(information overload)时代。
无论作为想获取信息的普通用户,还是作为产生信息的内容提供商或产品提供商,都面临着新的挑战。
作为普通用户,他们希望有一种从海量信息中方便实时快速地获取有用的信息的方式。
而作为内容或产品提供商,他们希望把自己的信息及时准确地传播给希望接收这些信息的目标群体。
用户获取信息的方式经历了如下几个阶段:从原始靠人工记忆各种网站,并且人工查找所需的信息,推出了按类别对网站进行分类以方便用户查询,再到近年来以为代表的搜索引擎的出现。
虽然搜索引擎极大地方便了人们获取信息的方式,但是依然存在不足。
比如,当用户无法用一些关键词准确描述自己的需求时,搜索引擎就无能为力了。
而且对于互联网信息的内容提供商来说,搜索引擎也不能帮助他们主动地把自己的内容传播给目标人群。
推荐系统的出现弥补了搜索引擎的不足。
从用户的角度出发,搜索引擎是一个拉(pull)模型,即用户主动地查找自己感兴趣的信息,而推荐系统是一个推(push)模型,即系统根据用户的历史行为记录,推荐新的信息给用户。
一个好的推荐系统,非常重要的一步就是对用户的兴趣进行建模。
常用的方法是根据用户的历史行为数据对用户兴趣进行建模。
用户的历史行为数据可以是用户的在线购买记录,搜索记录等。
这些数据存在许多缺点。
首先,数据的形式比较单一,只能反应用户的购买喜好,或者搜索喜好,并不能全面地描述用户的兴趣。
其次,这些数据更新缓慢,反应的是用户过去的兴趣。
而我们相信,用户的兴趣可能是经常变化的。
而且对于一个新的用户,在没有历史行为数据的情况下,推荐系统就无法正常工作,这也称为冷启动(cold start)问题。
另外一种获取用户兴趣的方式是让用户直接输入一些关键词列表来描述用户的兴趣。
但是通常情况下,用户并不愿意参与其中。
并且,用户可能不能完整地描述自己的兴趣。
另外,由于用户的兴趣会随时间经常变化,这就需要用户不停地更新关键词列表。
这些局限性大大降低了用户体验,也会影响推荐系统的质量。
微博作为一种新兴的社交网络和信息分享、传播方式,在最近几年变得尤为流行。
常用的微博服务,比如国外的,国内的新浪微博,腾讯微博等,都有上亿的注册用户。
最初的理念就是,让用户能够更加简单地与好友、家人分享自己正在做什么。
实际中,用户不仅使用微博发布我正在做什么之类的信息,还用它来与好友交流,转播突发的一些新闻事件,对某件事发表自己的观点,甚至在危险的时候作为一种求救的方式。
微博更像是传统博客与社交网络的一个结合体。
微博服务的一个重要特性就是它的实时性。
比如,传统的博客用户可能每过几天会更新一次博客的内容。
而微博用户经常会在一天内发布多条微博内容。
而且用户发布的微博内容大部分都是跟用户每天的活动相关。
因此,微博内容可以被看做是基于人的信息聚合种子(RSS Feed)。
微博的这些特性让我们有了新的途径去获取用户的实时兴趣。
与传统的获取用户兴趣的方法相比,微博提供了更海量,更实时的数据。
如何有效地从用户的微博数据中挖掘出用户的实时兴趣,对于提高个性化推荐的质量,提高用户体验,都具有重要意义。
1.2 本文研究内容本文主要对从微博数据集上分析用户兴趣并进行个性化推荐的过程中的一些关键问题进行分析和探索:1.2.1 使用外部知识库对微博文本进行语义丰富针对微博文本内容都比较短,语义信息不够充分的特点,我们提出使用在外部知识库上建立的主题模型分析微博内容,从而对短文本的微博内容进行语义上的丰富。
这样也避免了直接在微博数据上构建主题模型时,主题数目不容易确定的缺点。
1.2.2 过滤不能体现用户兴趣的微博用户使用微博的目的多样,因此并不是每条微博都能体现用户兴趣。
那些不能体现用户兴趣的微博,会对基于词袋的模型,包括主题模型等,产生负面的影响。
我们称这些微博为噪音微博。
我们从多个方面分析了识别一条微博是否是噪音微博的特征,并使用朴素贝叶斯分类器和支持向量机分类器过滤掉这些噪音微博。
1.2.3 用时间加权的主题分布表示用户兴趣我们认为用户的兴趣并不是一成不变的,而是随时间变化的。
因此,我们在用户兴趣的表达上,加上的时间的维度。
并基于此描述了分析用户兴趣及个性化推荐的方法。
2.基于微博的用户兴趣分析及信息推荐方法研究2.1概述微博服务作为目前主流的信息传播媒介,越来越多的用户每天在上面发布自己的状态,分享信息,表达自己的观点、想法和意图。
这使得微博服务成为一个有用的、信息量巨大的数据源,用来挖掘分析用户的兴趣。
根据从微博数据中分析得到的用户兴趣,我们可以给用户推荐他们感兴趣的新闻、团购信息等。
本文针对微博的特点,提出了从微博数据中分析用户兴趣并建模的方法,然后使用挖掘出的用户兴趣,推荐个性化信息给用户。
本文的工作分为三个主要部分。
首先是微博数据中噪音微博的过滤,过滤掉那些跟用户兴趣无关的微博数据。
然后,对过滤后的微博数据进行主题分析。
考虑到微博内容一般比较短,因此本文使用维基百科作为知识库进行语义扩充,通过主题模型分析用户兴趣。
同时考虑到用户兴趣会随时间经常变化的特点,提出了使用时间加权的主题分布来建模用户兴趣。
最后,使用挖掘得到的用户兴趣,向用户推荐个性化信息。
2.2噪音微博的过滤每个用户使用微博服务的方式不同。
用户使用微博服务主要用来记录自己每天的活动,分享新闻及他们对新闻的评论,与好友聊天等。
还有很多用户经常发布一些笑话等娱乐内容。
因此,并不是每条微博都能体现用户的兴趣。
但是,之前的很多研究,都是根据用户发布的所有微博,使用词包模型分析用户兴趣。
这样,那些与用户感兴趣的主题不相关的微博数据,就成为了噪音数据,严重影响了分析结果的准确度。
因此,本文提出在使用微博数据分析用户兴趣之前,先对微博数据进行过滤,去除那些与用户兴趣不相关的微博。
噪音微博的过滤可以看做一个二分类问题,即一条微博与用户兴趣的表达相关或者不相关。
本文使用两种经典的文本分类方法,朴素贝叶斯和支持向量机,分别采用不同的特征,训练得到两个分类器。
然后对这两个分类器以线性加权的方式组合成联合分类器,解决这个二分类问题。
2.2.1 构建朴素贝叶斯分类器对于朴素贝叶斯分类器,我们采用一元语言模型作为特征进行训练。
朴素贝叶斯分类器的训练非常简单。
每条微博看做一篇文档。
首先人工标注若干微博数据,分别标注为相关或不相关,得到训练集。
然后,在训练集上,估计出P(t k|c) 的概率以及 P (c) 的概率。
P (c) 即训练集中,属于类别 c 的文档个数占总文档数的比值。
P(t k|c) 的计算方法为其中,T ctk表示单词t k出现在属于类别 c 的文档中的次数,|Vc| 表示类别 c 中出现的所有单词的个数。
考虑到训练集的有限性,不能覆盖所有的词,因此本文采用加一平滑操作。
从训练集上得到 P(t k|c) 和 P (c) 的值后,就可以使用公式对每个微博进行分类,判断每条微博是否是与用户的兴趣有关的。
2.2.2 构建支持向量机分类器基于朴素贝叶斯的分类器把微博中的每个词作为特征,进行分类。
考虑到微博数据的特殊性,每条微博的字数都比较少,数据比较稀疏,这影响了朴素贝叶斯分类器的精度。
为了提高分类的精度,本文考虑到微博服务中不仅包含文本数据,还有很多其他丰富的数据资源,比如用户与用户之间组成的社会关系网,微博的一些特殊语法等,做为分类依据。
本文主要从四个方面抽取微博特征:1、微博本身的特征譬如该微博是否包含标签,是否包含等。
包含标签或者的微博通常涉及的是用户关注的话题。
2、社会关系网特征譬如该微博是否被好友转发,被好友评论的次数等。
因为我们认为,能够体现用户兴趣的微博,也同样会得到好友的关注。
3、时间特征譬如微博发布日期是一周中的星期几,是一天中的几点钟。
我们认为,用户可能经常会在一天中的某个时间段发布一些与用户兴趣无关的微博,而在另外一些时间段发布一些与兴趣相关的微博。
比如,一个上班族很可能在每天中午的时候会经常发布一些类似我好困啊之类的微博,而在周末的时候可能会经常发布一些海贼王真好看之类的微博。
4、用户的自然属性特性譬如用户的年龄、性别、教育情况、目前职业等本文用来训练支持向量机分类器的特征总结如表所示。
2.3用户兴趣分析2.3.1用户兴趣的表示用户兴趣的表示是个性化信息推荐、过滤等任务的一个非常重要的环节,它直接关系到后续任务效果的好坏。
但是由于影响用户兴趣的因素众多,如性别,年龄,性格等,因此很难从各个维度完整地描述用户兴趣。
同时,用户的兴趣经常变化,这给用户兴趣的表达带来了进一步的难度。
最基本的用户兴趣表示方法是用一组关键词来表达。
这些关键词可以是用户手动输入的,也可以是从用户的一些线上行为,如发表的微博、评论等,通过等文本处理技术挖掘得到的。
一些商品推荐系统则是通过用户的自然属性,如性别,年龄,身份等信息来刻画用户兴趣,或者通过用户之前购买过的商品组成的向量构建用户兴趣。
其他一些用户兴趣的表达方式有使用微博中的标签,或者用维基百科中的层次分类。
这些方式都能在一定程度上反应用户的兴趣,但是都有一定的局限性,要么局限于词的层面,要么不能表达用户兴趣多样性这样一个特点。
而且,这些表达方法都没有考虑到用户兴趣会随时间变化的特点。
本文针对微博的特点,提出使用时间加权的主题分布来表达用户兴趣。
时间加权的主题分布是一组二元组,每个二元组是由用户对一个主题感兴趣的程度和该主题对用户的时间权重表示的。
形式化地讲,假设用户的兴趣可以分为其中,(P(k),w t(k)) 表示一个时间加权的主题分布二元组。
P (k) 表示用户对主题 k 的感兴趣程度,这是从用户所有的微博历史数据得到的。
直观上看,如果一个用户发布的属于主题 k 的内容越多,计算得到的 P(k) 越大。
这样,如果用户在一年前发布了很多属于主题 k 的微博,那么即使最近一年该用户不再对主题 k 感兴趣,P(k) 仍然会很大。
为此,w t(k) 就起到了作用。
w t(k) 表示主题k 对于用户 u 的时间权重。
用户讨论主题 k 的时间越久远,w t(k) 就越小。
这样,Interest(u) 就从主题维度的层面上描述了用户随时间不断变化的兴趣。
2.3.2用户兴趣的分析由于每条微博都很短,因此如果直接在微博数据上使用等主题模型进行分析,势必会由于数据过于稀疏影响模型的精度。
同时,考虑到可以使用外部知识,比如维基百科等,对微博数据进行语义扩充,因此本文直接在维基百科数据上进行主题分析。
然后,把得到的主题模型,再用于分析每个用户的微博数据。
在维基百科等外部知识库数据上进行模型的学习和主题分析,与直接在微博数据集上进行分析,有如下优点。