计算机应用   2017, Vol. 37 Issue (5): 1382-1386  DOI: 10.11772/j.issn.1001-9081.2017.05.1382
0

引用本文 

姚彬修, 倪建成, 于苹苹, 李淋淋, 曹博. 基于多源信息相似度的微博用户推荐算法[J]. 计算机应用, 2017, 37(5): 1382-1386.DOI: 10.11772/j.issn.1001-9081.2017.05.1382.
YAO Binxiu, NI Jiancheng, YU Pingping, LI Linlin, CAO Bo. Micro blog user recommendation algorithm based on similarity of multi-source information[J]. Journal of Computer Applications, 2017, 37(5): 1382-1386. DOI: 10.11772/j.issn.1001-9081.2017.05.1382.

基金项目

国家自然科学基金资助项目(61402258);山东省本科高校教学改革研究项目(2015M102);校级教学改革研究项目(jg05021)

通信作者

姚彬修 (1991-), 男, 山东青州人, 硕士研究生, CCF会员, 主要研究方向:分布式计算、数据挖掘、微博推荐yaobinxiu02@163.com

作者简介

倪建成 (1971-), 男, 山东曲阜人, 教授, 博士, CCF高级会员, 主要研究方向:分布式计算、机器学习、数据挖掘;
于苹苹 (1991-), 女, 山东济南人, 硕士研究生, 主要研究方向:分布式计算、数据挖掘;
李淋淋 (1991-), 女, 山东德州人, 硕士研究生, 主要研究方向:并行与分布式计算、数据挖掘;
曹博 (1992-), 女, 黑龙江伊春人, 硕士研究生, 主要研究方向:并行与分布式计算、数据挖掘

文章历史

收稿日期:2016-10-14
修回日期:2016-11-02
基于多源信息相似度的微博用户推荐算法
姚彬修1, 倪建成2, 于苹苹1, 李淋淋1, 曹博1    
1. 曲阜师范大学 信息科学与工程学院, 山东 日照 276826;
2. 曲阜师范大学 软件学院, 山东 曲阜 273100
摘要: 针对传统的协同过滤(CF)推荐算法中存在的数据稀疏性和推荐准确率不高的问题,提出了基于多源信息相似度的微博用户推荐算法(MISUR)。首先,根据微博用户的标签信息运用K最近邻(KNN)算法对用户进行分类;然后,对得到的每个类中的用户分别计算其多源信息(微博内容、交互关系和社交信息)的相似度;其次,引入时间权重和丰富度权重计算多源信息的总相似度,并根据其大小进行TOP-N用户推荐;最后,在并行计算框架Spark上进行实验。实验结果表明,MISUR算法与CF算法和基于多社交行为的微博好友推荐算法(MBFR)相比,在准确率、召回率和效率方面都有较大幅度的提升,说明了MISUR算法的有效性。
关键词: 多源信息    稀疏性    相似度    时间权重    丰富度权重    
Micro blog user recommendation algorithm based on similarity of multi-source information
YAO Binxiu1, NI Jiancheng2, YU Pingping1, LI Linlin1, CAO Bo1     
1. College of Information Science and Engineering, Qufu Normal University, Rizhao Shandong 276826, China;
2. College of Software, Qufu Normal University, Qufu Shandong 273100, China
Abstract: Focusing on the data sparsity and low accuracy of recommendation existed in traditional Collaborative Filtering (CF) recommendation algorithm, a micro blog User Recommendation algorithm based on the Similarity of Multi-source Information, named MISUR, was proposed. Firstly, the micro blog users were classified by K-Nearest Neighbor (KNN) algorithm according to their tag information. Secondly, the similarity of the multi-source information, such as micro blog content, interactive relationship and social information, was calculated for each user in each class. Thirdly, the time weight and the richness weight were introduced to calculate the total similarity of multi-source information, and the TOP-N recommendation was used in a descending order. Finally, the experiment was carried out on the parallel computing framework Spark. The experimental results show that, compared with CF recommendation algorithm and micro blog Friend Recommendation algorithm based on Multi-social Behavior (MBFR), the superiority of the MISUR algorithm is validated in terms of accuracy, recall and efficiency.
Key words: multi-source information    sparsity    similarity    time weight    richness weight    
0 引言

随着信息技术的迅猛发展,参与社交网络的人越来越多,微博作为社交网络的一种表现形式,拥有数以亿计的用户,如何在海量用户中快速、准确地实现好友推荐成为当前研究的一个热点问题。

传统的用户推荐的算法如协同过滤 (Collaborative Filtering,CF) 不仅能为用户推荐出目标好友,而且过程相对简单、高效且被广泛使用; 然而,其中也存在着许多不足,数据存在稀疏性、推荐准确率不高的问题是一直以来亟待解决的难题。目前,国内外的许多学者对于以上问题相继作出了研究,主要着眼于解决数据的稀疏性问题和提出新的推荐策略来提高推荐准确率。

通过解决数据稀疏性来提高推荐准确率的方法主要包括以下几个方面:Hu等[1]为了缓解数据稀疏性问题提出了一种混合个性化随机游走算法来推断更多的间接用户的相似性和服务的相似性,提高了推荐的准确性;Xu等[2]提出了一种新颖的微博用户特征表示方法,将待推荐问题转换为二进制的分类问题,侧重于分析和提取微博用户的多维特征,解决了传统协同过滤算法的稀疏性缺陷,取得了良好的推荐效果;Yu等[3]为了克服算法在解决稀疏性问题时不适合高度动态和大规模的环境,提出了一种新的基于聚类的协同过滤 (Clustering-Collaborative Filtering,Clu-CF) 方法,采用用户聚类和服务聚类来解决数据稀疏性问题并且通过位置因素来进行新用户或者新业务的分类推荐;Xie等[4]为了解决数据稀疏性问题,提出了灰色预测 (Grey Forecast,GF) 模型,该模型的特点是在建立时需要更少的数据,在一定程度上能够缓解数据稀疏性问题带来的影响。Han等[5]将所有用户分为多个二元组,把传统的推荐问题转换为二元组的分类问题,同时结合用户社交内容、社交等级和社交关系特征来进行分类推荐,解决了传统协同过滤算法稀疏性问题,提高了推荐的准确率。

通过构造新的推荐模型来提高推荐准确率的方法主要包括以下几个方面:Shang等[6]在用户兴趣方面采用文档主题生成模型LDA (Latent Dirichlet Allocation) 建模,社交网络方面使用带权重的PageRank算法进行建模,提出了一种融合用户兴趣和社交网络的混合推荐算法,提高了推荐的准确率; 徐志明等[7]主要讨论了微博用户关系分析技术,分别给出了基于多种用户属性的用户相似度计算方法,并应用于用户推荐的相关实验中,取得了良好的推荐效果; Tang等[8]提出了一种基于微博用户相似度模型的好友推荐方法,整合了用户之间相似度的计算方法,提出了混合相似度计算策略; Yan等[9]通过对用户标签信息进行张量分解来构造新颖的推荐框架,提高了推荐的准确率。

本文在上述研究基础上不仅考虑解决推荐过程中数据的稀疏性,而且考虑到相似度的大小会随着时间段的改变而改变这一特性,据此提出了新的推荐算法MISUR (User Recommendation algorithm based on the Similarity of Multi-source Information)。首先将微博的标签信息运用K最近邻 (K-Nearest Neighbor, KNN)[10]算法对用户进行分类,然后对于得到的每个预分类中的用户分别计算其社交信息相似度、微博内容相似度和交互关系相似度,最后融合各个分相似度得出两个用户的总相似度来进行推荐。算法的优点主要表现为:一方面充分利用了用户的多源信息 (即微博内容、社交信息和交互行为) 来进行推荐,并在计算用户之间相似度时引入了丰富度权重,过滤掉数据稀疏的用户,解决了传统协同过滤算法的数据稀疏性问题;另一方面引入时间权重,适应随着时间变化,微博用户的多源信息对用户相似度的反映程度不断变化的特点,从而在解决稀疏性的基础上进一步提高用户推荐的准确率。

1 多源信息相似度计算 1.1 用户微博内容相似度计算

微博内容短小精悍,字数限定在140字左右,能够便于用户随时随地地发表自己的见解感触,同时还能够转发、评论其感兴趣用户的微博内容,这些微博内容在一定程度上都能够反映出用户间的兴趣,因此本文通过计算用户微博内容的相似度来进行用户推荐。

首先,将用户u某个时间段内的微博内容拼接成一个文档d,并进行分词处理;然后,将分词后的词语运用TextRank排序方法[11],选取节点分数较大的词语作为用户微博内容的关键词表;最后,使用词频-逆向文档频率 (Term Frequency-Inverse Document Frequency, TF-IDF) 方法来计算关键词表的权重信息。计算方法如式 (1)、(2) 所示:

$ \overline d = \left\langle {{t_1}, {w_1};{t_2}, {w_2}; \cdots ;{t_i}, {w_i};{t_n}, {w_n}} \right\rangle $ (1)
$ {w_i} = \left[{t{f_i}*\lg (N/d{f_{{t_i}}})} \right]/\left\| {\overline d } \right\| $ (2)

其中: tfi表示词语ti出现的频率,N表示训练集中所有文档的数量,dfti表示包含词语ti的文档出现频率。将用户u的微博内容表示成文本向量的形式即m(u)=(wu1, wu2, …, wun), 用户v的微博内容表示为文本向量形式即m(v)=(wv1, wv2, …, wvn),并通过余弦相似度计算两个用户uv的微博内容相似度。计算方法如式 (3) 所示:

$ si{m_1}(u, v) = \cos ({\boldsymbol{m}}(u), {\boldsymbol{m}}(v)) = \frac{{\sum\limits_{i = 1}^n {{w_{ui}}{w_{vi}}} }}{{\sqrt {\sum\limits_{i = 1}^n {w_{ui}^2} \sqrt {\sum\limits_{i = 1}^n {w_{vi}^2} } } }} $ (3)
1.2 用户交互行为相似度计算

用户交互行为是指用户间的直接或间接交互关系的紧密程度,本文利用两个用户间对彼此微博的兴趣度来计算用户交互行为相似度。

用户对一条微博可以有多种且重复的交互行为,如:转发 (retweet)、评论 (comment)、点赞 (like) 和@某条微博 (at) 等,而这些行为也在一定程度上代表了用户对微博的喜爱程度, 因此可以根据用户对一条微博的交互行为来计算用户对该微博的兴趣度。设所有微博用户集合为user,所有用户发布的微博集合为blog,同时用wi表示这四种交互行为的权重,通常认为wretweet > wcomment > wat > wlike,且wretweet+wcomment+wat+wlike=1。因此用户u对一条微博j的兴趣度uj通过式 (4) 进行计算:

$ {u_j} = \left[{\sum\limits_{i = 1}^4 {({w_i} \times nu{m_i})} } \right]/{u_{\max }} $ (4)

其中: numi表示用户u对微博j的第i种交互行为的次数。且umax 表示所有微博用户中对微博兴趣度的最大值,用来归一化用户对微博的兴趣。

计算完用户对一条微博的兴趣度,便可根据该兴趣度计算用户u和用户v交互行为相似度,计算方法如式 (5) 所示:

$ si{m_2}(u, v) = \frac{{\sum\limits_{r \in {\rm\mathit{{blog}}}} {({u_r}-\overline u )({v_r}-\overline v )} }}{{\sqrt {\sum\limits_{r \in {\rm\mathit{{blog}}}} {{{({u_r}-\overline u )}^2}} } \sqrt {{{({v_r} - \overline v )}^2}} }} $ (5)

其中: urvr分别表示用户u和用户v对共同交互过的微博r的兴趣度,$ \overline u $$\overline v $分别表示用户u和用户v对所有交互过微博的兴趣度的平均值。

1.3 用户社交关系相似度计算

用户关注与被关注的社交关系能够反映出用户重要的社交信息,因此用户社交关系的相似度计算与关注用户及粉丝用户密切相关。那么对于两个用户 (u, v) 来说,用户 (u, v) 的共同粉丝越多,用户间的相似性越大,用户 (u, v) 的共同关注用户越多,用户间也越相似,两者的社交信息可以分别表示为Relation(u)={Following(u), Follower(u)},Relation(v)={Following(v), Follower(v)}。因此用户 (u, v) 之间的社交关系相似度计算可以转换为用户 (u, v) 的关注用户和粉丝用户的相似度计算问题,计算方法分别如式 (6) 和式 (7) 所示:

$ \begin{array}{l} sim(Following(u), Following(v)) = \\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \frac{{\left| {Following(u) \cap Following(v)} \right|}}{{\left| {Following(u)} \right| + \left| {Following(v)} \right|}} \end{array} $ (6)
$ \begin{array}{l} sim(Follower(u), Follower(v)) = \\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \frac{{\left| {Follower(u) \cap Follower(v)} \right|}}{{\left| {Follower(u)} \right| + \left| {Follower(v)} \right|}} \end{array} $ (7)

最后,考虑将用户 (u, v) 的关注用户相似度和粉丝用户相似度进行加权融合来计算用户社交关系相似度,如式 (8) 所示:

$ \begin{array}{l} si{m_3}(u, v) = {w_1} \times sim(Following(u), Following(v)) + \\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \;\;\;\;\;\;\;\;\;\;\;\;\;{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {w_2} \times sim(Follower(u), Follower(v)) \end{array} $ (8)

其中:wi是关注用户相似度和粉丝用户相似度的权值,且w1+ w2=1。

2 MISUR微博用户推荐算法

MISUR微博用户推荐算法旨在向用户推荐其可能感兴趣的用户,为了保证推荐的准确率,算法首先加入了分类功能,使其在一个类簇内进行推荐,从而缩小了推荐范围,增加了算法的可行性。因此MISUR微博用户推荐算法主要包括下面几个部分。

1) 微博用户分类;

2) 影响多源信息总相似度的因素;

3) 微博用户推荐。

2.1 微博用户分类

在新浪微博中,用户可以添加标签信息对自己进行描述,以此来表明自己的个人兴趣或者属性。因此本文根据微博的用户标签信息利用KNN分类算法对微博用户进行分类。

据研究统计,新浪微博中有许多用户没有为自己添加标签或者添加的标签信息过少,所以为避免用户标签信息过于稀疏对分类精度造成的影响,本文对于没有为自己添加标签或者添加很少的标签用户使用1.1节提到的TextRank排序方法从用户微博中抽取分数较大的前10个关键词作为用户的标签信息,运用此方法减少标签稀疏性对分类效果的影响。

同时k值的选取对KNN算法的分类效率和准确率有很大影响:如果k值选取较小,就会获得较少的近邻数,噪声数据的干扰也会加大,从而得到较低的分类准确率;如果k值选取较大,就极易引入不同类的数据而产生异类噪声,造成分类不准确,降低分类效率。因此采用交叉检验的方法得出k值与准确率的关系,从而选取准确率最大情况下的k值来进行分类。

通常认为被分为一类的用户相似度较大,而且与目标用户在同一类中的用户被推荐的可能性也较大,为提高推荐算法的准确性本文将目标用户所属类别中其他的用户作为待推荐的用户集,也只考虑向目标用户推荐待推荐用户集中的用户。

2.2 影响多源信息总相似度的因素

不同的用户关注的内容不尽相同,有的可能对微博内容相似的用户感兴趣、有的可能对交互行为相似的用户感兴趣,还有的可能是对社交关系比较相似的用户感兴趣,因此,为产生较好的推荐集,算法应结合实际情况,考虑影响权重信息的主要因素。

现有的方法在进行相似度计算时,都是将所有时间段的微博信息以及微博关系当作一个整体来考虑,而这种方式并没有考虑到相似度会随时间段的变化而变化,为避免这种变化,本文相似度计算中引入时间权重信息,认为一个时间段就是一个时间粒度,并设置时间粒度的单位为月, 那么根据时间粒度便可定义时间权重如下。

定义1   时间权重。是指当前时间所在的时间粒度date与用户发布某些微博i所在的时间粒度timei之差的倒数,则相似度计算中的时间权重wt的计算公式, 如式 (9) 所示:

$ {w_t} = 1/\left( {\left| {date-tim{e_i}} \right|} \right) $ (9)

令当前时间所在的时间粒度date=1,并以当前时间为基准,当前时间的前一月所在的时间粒度则为2,按此方法依次进行加1操作,则timei所在的时间粒度为发布微博i的时间距离当前时间的月份个数再加1,且|datetimei|越小,wt就越大,表示用户发布某些微博i的时间距离当前时间越近,在计算相似度时,该部分的微博就具有较大的权重信息。

同时为了减少用户微博信息以及微博关系所具有的稀疏性影响,本文考虑将丰富度权重加入到相似度计算中,并将丰富度小于某个阈值的用户微博信息及微博关系信息过滤掉。丰富度权重定义如下。

定义2   丰富度权重。在某个时间粒度timei中,用户所具有的某种多源信息 (即用户微博内容、交互行为和社交关系三种多源信息中的某一种) 的微博数mi与用户所在类簇中所有用户平均具备这种多源信息的微博数ni之间的比值,则丰富度Ai的计算公式如式 (10)、式 (11) 所示:

$ {a_i} = \sum\limits_{k = 1}^3 {\frac{{{m_{ik}}}}{{{n_{ik}}}}} $ (10)
$ {A_i} = \left\{ \begin{array}{l} {a_i}{\kern 1pt}, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {a_i} \ge \alpha \\ 0{\kern 1pt} {\kern 1pt} {\kern 1pt}, {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {a_i} < \alpha \end{array} \right. $ (11)

在式 (10) 中,k表示用户微博内容、用户交互行为和用户社交关系三种多源信息,例如,当k=1时,考虑用户微博内容相似度的丰富度,即在时间粒度timei中,用户所发布的微博的数目mi与用户所在类簇中所有用户平均发布的微博数目ni之比,那么ai即为三种多源信息相似度的丰富度之和。计算完之后,便可对用户微博信息及微博关系进行过滤,即如式 (11) 所示,将ai < α的部分信息过滤掉以减少用户微博信息及微博关系的稀疏性影响。

2.3 微博用户推荐 2.3.1 多源信息总相似度计算

进行微博用户推荐时,首先需要对多源信息总相似度进行计算,如图 1所示,多源信息总相似度是将用户微博内容相似度、交互行为相似度和社交关系相似度3部分相似度进行拟合并计算得到。

图 1 多源信息总相似度框架 Figure 1 Framework of total similarity about multi-source information

多源信息总相似度的计算方法如下所示。

1) 首先以时间粒度月为单位,将每个类簇中的所有用户的微博信息、交互信息与社交信息根据时间粒度进行划分,并将一个时间粒度 (即一个月份) 内的微博信息合并成一个大文档i进行处理。划分完成后,计算类簇中的目标用户与同类簇中的所有用户在一个时间粒度内的多源信息总相似度,计算公式如式 (12) 所示:

$ si{m^i}(u, v) = {A_i}{w_t}\sum\limits_{k-1}^3 {si{m_k}(u, v)} $ (12)

2) 按照上述方式可计算目标用户与同类簇中用户在每个时间粒度内的用户多源信息总相似度,然后将每个时间粒度内的多源信息总相似度相加,可得到所有时间粒度内多源信息总相似度,即最后的总相似度。目标用户与同类簇中用户在所有时间粒度内的多源信息总相似度的计算公式, 如式 (13) 所示:

$ sim(u, v) = \sum\limits_{i = time}^{date} {si{m^i}(u, v)} = \sum\limits_{i = time}^{date} {{A_i}{w_t}\sum\limits_{k = 1}^3 {si{m_k}(u, v)} } $ (13)

其中:time表示每个类簇中的微博用户信息、交互信息或者社交信息中具有的最早时间所在的时间粒度; date表示当前时间所在的时间粒度; k表示三种多源信息相似度。

2.3.2 用户推荐过程

计算完每个类簇中的多源信息总相似度后,可对用户进行用户推荐。推荐步骤具体如下:

1) 按照用户的分类功能,找到目标用户所在类簇中的其他用户;

2) 获得每个时间粒度内目标用户与其所在类簇用户的多源信息 (微博信息、社交信息和社交关系);

3) 根据获得的多源信息、丰富度权重和时间粒度,运用式 (13) 计算目标用户与其所在类簇中的其他用户的多源信息总相似度;

4) 选择类簇内与目标用户总相似度较高的TOP-N用户进行推荐。

3 实验结果与分析 3.1 实验环境

硬件配置  由4块CPU为六核,主频2.10 GHz,内存8 GB,硬盘2 T的服务器组成的集群。

软件配置  服务器虚拟化平台软件VMware ESXI,服务器的客户端应用程序vSphere Client,并行计算框架Spark 1.4.0,程序开发工具Eclipse4.3,操作系统Ubuntu14.04.3-Server-AMD64,中科院分词系统ICTCLAS。

3.2 实验数据与预处理

目前,对于新浪微博的研究还没有统一的、标准的数据集。本文使用的实验数据是通过新浪微博API采集的2015-10-15— 2015-12-15共3万个用户发布的微博数据,抓取了用户的标签信息 (30 000条)、用户的微博内容 (30000条)、用户的交互信息 (457680条) 和社交关系信息 (150890条)。

为了保证数据的有效性,在实验中对实验数据进行以下预处理:

1) 去除部分没有意义的微博,即微博内容少于10个字或者被交互次数少于5次的微博;

2) 去除部分交互行为和社交关系较少的用户,即用户的点赞+评论+转发的行为不超过20次或者关注数+被关注数少于30的用户;

3) 去除停用词、表情符号和URL链接等对主题没有贡献的内容。

经过处理后,得到了21 364个用户的数据,其中包括用户的标签信息 (21 364条)、用户的微博内容 (21 364条)、用户的交互信息 (307 450条) 和社交关系信息 (100 853条)。选取17 000个用户的数据作为训练集,剩余的4 364个用户的数据作为测试集。

3.3 实验过程

中科院分词系统提供了在Hadoop上去停词的源码,所以去停词结果以〈key, value〉键值对的形式输出,然后用TF-IDF对向量中每一维的权重进行计算,计算结果以〈word, textID〉形式进行表示。调用Spark[12]中的FSOutputStream函数从Hadoop分布式文件系统 (Hadoop Distributed File System, HDFS) 中读取标签信息数据作为训练集,并将训练集分发到由分布式缓存机制构成的6个节点中,然后Map函数通过静态的方法UseDistributedCache () 实现对缓存数据的调用。

将待测样本集的预处理结果存入HadoopRDD中,在Map过程中计算待测样本向量m与训练样本向量n的距离,选出与m距离最近的k个训练样本组成样本集。计算测试样本m属于每个类别的权重w,比较权重w的大小,将测试样本向量m归入到权重最大的类别中,Reduce过程结合Map过程的结果判定是否进行下一步迭代,并进行规约操作输出结果。

利用partitionNum () 从partitionRDD中读入上述分类操作得到的数据,并确定分区个数,同时通过调用User_sim_dict={}方法计算用户微博内容相似度、交互行为相似度和社交关系相似度,然后在此基础上融合时间权重和丰富度权重计算总相似度并将结果存入SimilarityRDD中。使用usersSimi=usersSimiLines.map{}.cache语句导入总相似度。最后通过bestUser.get.predict ().collect ().sortBy ().take (n) 向用户推荐TOP-N个好友。

3.4 实验评价指标

本文采用以下3个指标对所提出的推荐算法进行评价。

1) 准确率Pm

定义原本是好友关系的用户列表作为推荐列表中已经成为好友的集合,为了保证推荐的准确性,在推荐出的TOP-N个好友名单中统计计算实际存在的好友数目与算法推荐出的好友数目的比重,即能用来判断推荐的性能。由此得到具体计算公式, 如式 (14) 所示:

$ {P_m} = \left( {{P_a}/{P_b}} \right)*100\% $ (14)

其中:Pa表示推荐列表中已经成为好友的数目,Pb表示算法推荐出的好友数目。

2) 召回率Pn

在推荐出的TOP-N个好友名单中,统计计算实际存在的好友数目与测试集中好友总数目的比重。由此得到具体计算公式, 如式 (15) 所示:

$ {P_n} = \left( {{P_a}/{P_c}} \right) * 100\% $ (15)

其中:Pc表示测试集中好友总数目。

3) 平均处理时间T

在相同数据集的情况下,使用平均处理时间T来探究随着节点数量增加运行时间的变化情况。

$ T = \sum\limits_{i = 1}^n {{t_i}} /n $ (16)

其中:n表示节点个数, ti表示第i个节点的运行时间。

3.5 实验结果分析

在实验中,分别取TOP-NN为10、20、30、40、50时的5种情况,在保证相同的实验数据集的前提下,将本文提出的基于多源信息相似度微博用户推荐算法MISUR与传统的CF算法和在分类框架下基于多社交行为的微博好友推荐算法MBFR[5]分别进行10次实验,在准确率、召回率和平均时间方面取多次实验的平均值进行比较,得出的实验结果如图 2~4所示。

图 2 三种算法准确率对比 Figure 2 Precision comparison of three algorithms
图 3 三种算法召回率对比 Figure 3 Recall comparison of three algorithms
图 4 三种算法随着节点数变化的运行时间对比 Figure 4 Running time comparison of three algorithms in different nodes

图 2图 3展示了本文提出的MISUR算法、MBFR算法和传统的CF算法在准确率和召回率的对比情况。从整体上看,随着推荐好友数的不断增加,各算法的准确率逐渐降低,这是因为在数据集中的每个节点分配的好友数是固定的,随着推荐好友数目的不断增加,推荐的准确率必然会逐渐降低。而随着推荐好友数的不断增加,各算法的召回率不断增加,这是因为测试集中的好友总数目是固定不变的,随着推荐好友数目中已经成为好友的数目的不断增加,召回率呈递增趋势。在TOP10时算法准确率达到最高,因此本文所提算法最佳的用户推荐数目为10。同时还可以看出本文提出的MISUR算法在准确率和召回率方面都高于MBFR算法和传统的CF算法:通过图 2可以看出MISUR算法在准确率方面相比MBFR算法和CF算法分别提高了约8.4%和16.8%,通过图 3也可以看出,在召回率方面MISUR算法比MBFR算法和CF算法分别提高了约9.6%和19.1%。这是因为传统的CF算法存在数据稀疏性的问题;MBFR算法虽然考虑了多种社交行为来解决数据稀疏性的问题,但是该算法没有考虑到时间对多种社交行为的影响,而本文算法不但考虑了多种信息融合来计算相似度,而且在计算相似度的同时加入丰富度来更好地解决稀疏性问题,加入时间权重适应用户兴趣的变化,从而在解决稀疏性的同时提高了推荐准确率。

图 4展示了在Spark并行计算框架下,随着节点数的增加,算法运行时间逐渐减少。因为把所有用户平均分到6个节点上进行并行计算,同时利用KNN算法预先对微博用户标签数据进行分类,所以本文提出的MISUR算法与MBFR算法和传统的CF算法相比,提高了算法的运行效率。同时,对三种算法在1~6个节点的运行时间进行计算可以得出本文提出的MISUR算法比MBFR算法缩短了1.7%~9.3%,比传统的CF算法缩短了9.1%~17.9%。总体来说,本文提出的MISUR算法在准确率、召回率和执行效率上都有一定的提高。

4 结语

本文针对传统的协同过滤推荐算法存在数据稀疏性和推荐准确率不高的问题,提出了基于多源信息相似度的微博用户推荐方法。算法充分运用了多源信息相互融合能够提高推荐准确率的优势,同时引入丰富度权重和时间权重解决了协同过滤中存在的数据稀疏性问题。通过实验验证,不仅推荐准确率得到了一定的改善,而且由于在并行计算框架Spark上运行算法,算法运行效率得到了较大的提高。然而,本文并没有考虑到使用微博用户的网络结构信息来进行好友推荐。因此,下一步的工作是研究融合网络结构的微博好友推荐算法。

参考文献
[1] HU Y, PENG Q, HU X. A time-aware and data sparsity tolerant approach for Web service recommendation[C]//Proceedings of the 2014 IEEE International Conference on Web Services. Washington, DC:IEEE Computer Society, 2014:33-40.
[2] XU Y, ZHOU M, HAN S. Feature representation for microblog followee recommendation in classification framework[C]//Proceedings of the 7th International Conference on Advanced Computational Intelligence. Piscataway, NJ:IEEE, 2015:318-322.
[3] YU C, HUANG L. CluCF:a clustering CF algorithm to address data sparsity problem[M]//Service Oriented Computing & Applications. Berlin:Springer, 2016:191-199.
[4] XIE F, CHEN Z, SHANG J, et al. Grey forecast model for accurate recommendation in presence of data sparsity and correlation[J]. Knowledge-Based Systems, 2014, 69: 179-190. doi: 10.1016/j.knosys.2014.04.011
[5] HAN S, YAN X. Friend recommendation of microblog in classification framework:using multiple social behavior features[C]//Proceedings of the 2014 International Conference on Behavior, Economic and Social Computing. Piscataway, NJ:IEEE, 2014:1-6.
[6] SHANG Y, ZHANG P, CAO Y. A new interest-sensitive and network-sensitive method for user recommendation[C]//Proceedings of the 8th IEEE International Conference on Networking, Architecture and Storage. Piscataway, NJ:IEEE, 2013:242-246.
[7] 徐志明, 李栋, 刘挺, 等. 微博用户的相似性度量及其应用[J]. 计算机学报, 2014, 37(1): 207-218. ( XU Z M, LI D, LIU T, et al. Similarity measurement and its application to the users of micro-blog[J]. Chinese Journal of Computers, 2014, 37(1): 207-218. )
[8] TANG F, ZHANG B, ZHENG J, et al. Friend recommendation based on the similarity of micro-blog user model[C]//Proceedings of the 2013 IEEE International Conference on Green Computing and Communications. Piscataway, NJ:IEEE, 2013:2200-2204.
[9] YAN Z, ZHOU J. User recommendation with tensor factorization in social networks[C]//Proceedings of the 2012 IEEE International Conference on Acoustics. Piscataway, NJ:IEEE, 2012:3853-3856.
[10] COVER T, HART P. Nearest neighbor pattern classification[J]. IEEE Transactions on Information Theory, 1967, 13(1): 21-27. doi: 10.1109/TIT.1967.1053964
[11] MIHALCEA R, TARAU P. TextRank:bringing order into texts[EB/OL].[2016-06-20]. https://www.mendeley.com/catalog/textrank-bringing-order-texts/.
[12] WINLAW M, HYNES M B, CATERINI A, et al. Algorithmic acceleration of parallel ALS for collaborative filtering:speeding up distributed big data recommendation in Spark[C]//Proceedings of the 2015 IEEE 21st International Conference on Parallel and Distributed Systems. Piscataway, NJ:IEEE, 2015:682-691.