严长春 生佳根 於跃成 李 君
(江苏科技大学计算机学院 镇江 212003)
微博是近年来出现的新兴媒体,是一个基于用户关系的信息分享、传播以及获取平台。它具有便捷性、原创性、时效性、随意性等特性。尤其是便捷性,用户可以随时随地发布自己的信息,这给人们的信息交流带来质的飞跃。然而,微博中充斥着各种各样的短信息,也给用户获取自己感兴趣的突发话题增加了难度[1]。在数据爆炸的今天,用户不可能通过阅读大量的微博信息来获取实时的突发事件。
但是面对海量信息,用户很难快速发现自己真正感兴趣的东西;并且,互联网服务提供商也很难在短时间内把自己产品信息推送到对其真正感兴趣的用户面前。推荐系统(Recommendation System,RS)正是解决这一矛盾的有效途径,它能为用户快速推荐满足其兴趣爱好的产品,并帮助提供商寻找到自己的忠实客户。
微博信息量庞大,不能只通过人工方式发现突发事件,需要一个全自动或半自动的检测系统辅助发现突发事件。为解决以上的问题,本文主要内容包括两方面,微博突发事件检测、微博个性化实时推荐。通过突发事件检测,能够自动、快速地检测出即将发生传播的突发事件。通过个性化实时推荐,用户能更早地获得朋友圈内流行的话题,而不是被动地接收新闻推送。
本文使用主题模型 LDA[2](Latent Dirichlet Allocation)推断微博的主题分布和用户的兴趣取向,从而实时、连续地向用户推荐他们感兴趣的微博。
协同过滤是一种被广泛使用的推荐算法,是通过收集与目标用户历史选择相似的用户对项目的评价,来预测目标用户对未知项目的喜好。该算法基于这样的假设:具有相同历史选择的用户,他们在某种潜在因素上的倾向是一致的,那么在未来对于其他项目的选择喜好也是一致的。主要分为两类:邻域方法(Neighborhood-based CFApproach)[3-4]和潜在因素模型(Latent Factor Model)[5~6]。本文主要研究基于用户的邻域方法,该算法的步骤可概括如下:1)收集用户的历史行为记录,获得用户的偏好信息;2)基于兴趣程度计算相似度,搜索目标用户的K近邻;3)根据邻域信息产生推荐。邻域方法主要包括基于物品的协同过滤(Item-Based CF)[3]和基于用户的协同过滤(User-Based CF)[7]。基于用户的协同过滤分为以下三步:首先计算用户之间的相似度,构造用户相似度矩阵;然后选择与目标用户相似度最大的前K个用户;最后根据目标用户的邻居集的已知评分的加权来预测他对未知项目的评分。基于项目的协同过滤基本类似,主要是寻找和目标用户兴趣相似的项目。实际应用场景中,用户和项目的数量非常庞大,并且用户只能对很小一部分项目进行操作,因此,该类方法存在着严重的数据稀疏问题。导致通过计算得到的用户相似度并不准确,影响了推荐质量。
在进行文本挖掘时,需要在大量的文本中挖掘出文档的特征,在出现主题模型前,主要采用向量空间模型和统计语言模型,这两种模型都将文本内容映射到向量空间来简化运算,认为文档是在词典空间的表示,用向量空间中的向量相似度来表示语义的相似度。但是词语存在同义多义的问题,直到隐语义模型的出现,将文档从高维词汇空间映射到低维主题空间,原来的“文档→词”映射表示变成了“文档→语义→文档”映射表示,Hoffman在此基础上又提出了pLSA[8],它引入了概率统计的思想,避免了复杂的向量计算,但是pLSA对于文档中主题的权重没有任何先验假设,使得模型参数和训练数据相关,容易出现过拟合现象,为了解决这一问题,Blei等人提出一个更为完全和更为彻底的概率主题模型LDA[2],它是一个层次贝叶斯模型,将模型参数作为随机变量,该变量服从一定的概率分布,从而引入可以控制模型参数的参数。
LDA模型本质上是一种非监督的机器学习模型,是一种使用概率的生成式模型,将高维文本单词空间表示为低维主题空间,它采用了词袋(bag of words)的方法,该方法没有考虑词与词之间的顺序,这简化了问题的复杂性,也避免了陷入分析语句和获取语义的复杂计算的陷阱,该方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息,忽略了跟文本相关的类别信息。
对于语料库中的每篇文档,LDA定义了如下生成过程:
1)对每篇文档,从主题分布中抽取一个主题;
2)从上述被抽到的主题所对应的单词分布中抽取一个单词;
3)重复上述过程至遍历文档中的每个单词。
图1 LDA概率图模型
其中,D代表文档数目,T代表主题数目,词汇表中有V个词,Nd表示第d篇文档的单词个数,w和z表示可观测到的单词和其主题,θ表示每篇文章的主题多项式分布,φ表示每个主题与词汇表V个单词的多项式分布,语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。θ和φ分别有一个带有超参数α和β的Dirichlet先验分布。对于一篇文档d中的每一个单词,我们从该文档所对应的多项分布θ中抽取一个主题z,然后我们再从主题z所对应的多项分布φ中抽取一个单词w。将这个过程重复Nd次,就产生了文档d。
该模型有两个参数需要推断:一个是“文档-主题”分布θ,另外是T个“主题-单词”分布φ。通过学习这两个参数,我们可以知道文档作者感兴趣的主题,以及每篇文档所涵盖的主题比例等。本文实验采用的是现在常用的Gibbs抽样法。
为了推荐具有突发(bursty)[9]性质的,同时符合用户兴趣的微博给目标用户,本文改进了结合主题模型的协同过滤算法,该算法是结合了突发词筛选,潜在因素模型和邻域方法的混合协同过滤方法。分为以下几个步骤:
突发词筛选:对一定时间内的微博进行突发词筛选,过滤不具有时效性的,具有噪音的微博,同时对带有突发词的微博进行标记;
主题建模:使用UserLDA主题模型对标记微博进行建模;再根据用户已发微博进行主题建模;
计算相似度:将通过UserLDA模型训练得到的用户-主题概率分布进行相似度计算;
产生推荐:根据邻域方法预测目标用户对微博的感兴趣程度,最后选择感兴趣程度高的微博进行推送。
突发词是指在短时间内大量出现的有意义的代表话题走向的词,但并不是所有在一段时间内出现频率高的词就能成为突发词,微博中有一类词语,它们的突发词是指在短时间内大量出现的有意义的代表话题走向的词,但并不是所有在一段时间内出现频率高的词就能成为突发词,微博中有一类词语,它们的词频增量较高,但却不能归为突发词的范畴。例如到晚餐的时候,关于饮食的词汇会突然增多。然而,这类词语并不具有突发性质,将其用于突发事件检测,往往会对检测结果造成一定的干扰。因此本文从相对词频、词频增长率、突发权重三个维度来对突发词进行筛选,使抽取的突发词更能准确地表征突发事件。
3.1.1 相对词频
如果一段时间内,一个词汇出现的频率明显高于该时间段内出现的其他词汇,说明该词汇热度比较高,很可能是热门或者突发事件的主题词,需要注意的是,讨论同一个话题时,应该把同义词或者近义词算作同一种词,常用方法是通过使用基于语义的知识词典的词语语义度来进行相似度计算。相对词频的定义如下:段时间内,一个词汇出现的频率明显高于该时间段内出现的其他词汇,说明该词汇热度比较高,很可能是热门或者突发事件的主题词,需要注意的是,讨论同一个话题时,应该把同义词或者近义词算作同一种词,常用方法是通过使用基于语义的知识词典的词语语义度来进行相似度计算。相对词频的定义如下:
式中:Rij是词汇i在时间窗口j上的相对词频Fij是词汇i在时间窗口j出现的频率,Fmax是该时间窗口下出现的最高词频。
3.1.2 词频增长率
热点话题的主题词的相对词频一般都很高,因此仅仅依靠相对词频的计算会将热点话题的主题词归纳进来。如果一个词汇在某一时间段内不仅相对词频较高,而且出现频率比上一个时间段有大幅度的提升,则一定程度上表示该词汇有可能是突发话题的主题词。词频增长率定义如下:
式中:Gij表示词汇i在时间窗口j的增长率,Fi(j-1)是词汇i在时间窗口(j-1)的出现频率。
3.1.3 突发词权重
TF-IDF(term frequency-inverse document frequency)[11]是一种用于资讯检索的常用权重计算方法,用以评估词汇对于一个文件集中的其中一份文件的重要程度。该方法能够使相对词频高,且区分度大的词汇拥有更大的权重。然而,在微博应用场景中,突发事件中的主题词汇以较高频率出现在不同微博中,因此主题词汇的区分度不高,使用TF-IDF算法会降低具有突发性质的词汇的权重,容易被忽略。本文使用另一种由Bun等提出的词汇权重模式 TF-PDF[12]。
其中,wj表示词汇j的权重;Fjc表示词汇j在时间窗口c出现的频率;njc表示词汇j所在时间窗口的全部文档数量;Nc表示时间窗口c中文档的总数量;D表示时间窗口的数量,由公式可知,某个时间窗口内,一个词汇的权重与它在该时间窗口出现的频率是线性关系,与该时间窗口包含词汇的文档是指数关系。词汇的总权重是该词汇在每个时间窗口的权重之和。
标准主题模型LDA并不适用于处理微博短文本,微博长度限制在140字符以内,相比于传统的博客,长度相差很大,其中也会出现很多错误的拼写,俚语和缩写,给主题建模造成了一定的干扰,因此,本文采用UserLDA[13]模型,该模型将标准LDA模型的“文档-主题-词”结构转化成“用户-主题-词”结构,能够更好地应用于社交网络中,根据用户文档,更好地挖掘用户主题,从而体现用户对感兴趣话题的兴趣度。基于UserLDA模型的用户主题建模步骤如下:
1)将微博中目标用户所发微博dt,转发的微博dr,和转发过程中的所有用户的评论文本dc聚集成用户文档du;
2)对用户文档du预处理,进行中文分词,删除停用词和特征词的提取;
3)将处理好的文档作为LDA模型的输入,训练模型;
模型训练完成后,我们可以得到用户文档-主题概率分布,用户在某一主题上的概率分布越大,说明用户对该主题感兴趣程度越高,反之亦然。进而,可以利用这个分布来计算用户的相似性。
协同过滤算法基于用户的历史行为来计算相似度,搜索目标对象的K近邻,最后根据邻域信息产生推荐。本文在主题建模时使用的是UserLDA,得到用户-主题概率分布,因此,本文使用基于用户的协同过滤推荐方法,该算法认为,一个用户会喜欢和他兴趣爱好相似的邻居喜欢的东西。其核心是计算用户相似度,并构造与目标用户相似的邻居集。
通过UserLDA主题模型得到的用户-主题概率分布,实际上是一种降维的思想,可以有效地解决数据稀疏的问题,即使共同操作过的微博数量并不多,但是只要这些微博属于同一个主题,那么用户之间的兴趣也会相似。
KL(Kullback-Leibler divergence)[14]散度和 JS(Jensen-Shannon divergence)散度是典型的计算两个概率分布之间距离的方法,KL散度也叫相对熵(Relative Entropy),是两个概率分布P和Q差别的非对称性度量,计算公式如下:
其中P和Q是两个不同用户的用户-主题概率分布,p(xi)和q(xi)是这两其中P和Q是两个不同用户的用户-主题概率分布,p(xi)和q(xi)是这两个用户在第i个主题上的概率分布,T为主题总数。由公式可知,KL散度是非对称的,个用户在第i个主题上的概率分布,T为主题总数。由公式可知,KL散度是非对称的,即DKL(P||Q)≠DKL(Q||P),但在实际的应用中,主题的概率分布是具有对称性的,即P和Q的概率分布的距离会等于Q和P的概率分布距离,因此引入JS散度,公式如下:
计算完用户相似度之后,采用邻域方法预测目标用户对未知微博的感兴趣程度[15]。本文采用考虑了用户个体差异的加权平均偏差方法(Weighted Average Deviation)。公式如下:
其中,|Ni,u|=K表示为已经对项目i评分的用户集合Ui中,与用户u最为相近的K名邻居用户。rv,i表示邻居用户v对物品i的评分,su,v表示用户u和用户v的相似度。
为了评估结合突发词筛选的混合协同过滤算法的有效性,结合新浪API,从新浪微博上使用爬虫程序爬取了900个用户,一共302086条微博记录。从数据集中抽取80%的微博作为训练输入语料,20%作为测试算法性能的测试集,使用5折交叉平均实验结果来减少误差。
首先我们设定主题数目K=20,观察邻居数目K对MAE值的影响。选择邻域方法作为基准方法,根据皮尔逊相关系数和JS散度计算用户的相似度,简写为ItemCF和UserLDA-CF-JS,使用平均绝对误差(MAE)作为评价指标,MAE值越小则算法的预测越准确。
图2 邻居数目对MAE的影响
从图2中可以看出,邻居数目在不断变大时,ItemCF和UserLDA-CF-JS算法的MAE值都在不断下降,说明基于邻域方法的算法对于邻居数目的多少很敏感,也可以清晰辨别UserLDA-CF-JS算法性能明显优于ItemCF算法。
然后固定邻居数目K=26,观察主题数目对MAE值的影响,我们使用基于用户和基于项目的两种不同的思路,相似度计算使用JS散度和KL散度,分别简写为UserLDA-CF-KL,UserLDA-CF-JS,ItemLDA-CF-KL和ItemLDA-CF-JS。由图3可知主题数目的变化对MAE值的变化影响不明显,基于KL散度的相似度计算方法无论在基于用户还是基于项目的协同过滤算法上,性能都优于基于JS散度的相似度计算方法。并且基于用户的UserLDA-CF-KL,UserLDA-CF-JS算法性能都分别优于ItemLDA-CF-KL和ItemLDA-CF-JS,说明基于用户的协同过滤算法更适合用户数量和微博数量都很多的微博场景下。
图3 不同算法MAE值比较
该论文以传统的LDA主题模型为基础,鉴于微博平台的特点,加入了突发话题筛选和用户已发微博UserLDA方法,对传统的协同过滤算法进行改进,提出了基于主题模型的微博突发话题推荐方法。
实验结果可以看出,结合主题模型和时效性的协同过滤模型与传统模型相比较,不仅话题的时效性有很大程度地提高,而且相对来说降低了噪音,减少信息冗余,提高了检测结果的准确性和时效性。但推荐系统还存在很多挑战,如冷启动问题、推荐解释性问题、安全性等问题。因此,本文以后的工作将在不同场景下致力于研究和改进更多的算法来解决推荐系统所面临的各种挑战,以提高推荐系统的性能。