码迷,mamicode.com
首页 > 其他好文 > 详细

基于PageRank的社交网络用户影响力

时间:2014-11-17 14:08:11      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:社交网络   pagerank   

1. 绪论

1.1背景和目的

社交网络作为一个全新的互联网交友平台与信息传播平台,每天都有海量数据在这个平台上发布。社交网络是一个虚拟社会网络,它是由许多节点构成,是现实社会在网络上的体现。每个节点都代表了现实生活中的一个人或者一个组织,节点之间的好友关系也是现实社会中的社会关系。在这个虚拟社会中,人们从事着大量的社交活动,如交友、分布消息、关注好友状态与分享视频等。在社交网络的平台上,人们可以分享自己的心情、关注朋友的状态以及了解一些热门话题等。目前社交网络的形式主要有交友网络、博客、视频共享等形式。

拥有庞大的用户群体以及海量的信息,微博在应用领域与研究领域都有着重大的意义。研究社交网络的主要目的在于挖掘网络用户行为以及商业、应用价值等。

社会网络的信息传播与影响力的研究已经存在于各个领域,如市场营销、同性、社会学、政治学等。在传播学理论中认为人际传播网络存在一种人,这种人经常为他人提供建议或者见意等,他的想法、信息传播给其他人或者影响到其他人的行为、思想等。通过这个人人之间相传的传播方式,信息传播的成本远远小于其它方式的传播,并且传播速度也比其它方式快速。传播学中称这种人对信息的效应为影响力。

SNS 类的社交网络是基于现实社会人际关系网络组成,社交网络用户是现实世界中的个体,所以社交网络用户的影响力类似于现实世界的个人影响力。现实世界中的个人影响力不仅仅与其社会地位、教育背景等因素有关,其中包含了许多主观因素,比在线社交网络更为复杂。而在线社交网络中,我们可以提取用户的相关属性值来定量衡量一个用户在网络中影响力,对用户潜在的传播学价值与商业价值进行评估。

2. 数据集的获取

为了分析设计网络中用户影响力,我们需要从新浪微博网络的海量信息中获取所需的信息和数据,并对这些原始信息进行处理。另外新浪微博用户是现实生活中有着自主意识的个人、或者一个组织,用户在微博网络上的一切行为都是受其主观意识支配的。因此研究新浪微博用户的转发行为规律,可以获得用户影响力。

目前获得微博数据的方法主要有两种,一种是通过网络爬虫程序去读取 Web 页面的微博消息。另外一种是通过微博网络官方的 API 获取用户微博数据。通过网络爬虫的方式是指通过程序模拟用户登陆页面的操作,直接访问 Web 页面,获得 HTML 文本文件。将 HTML 文本读到内存,然后通过正则表达式来进行信息抽取,获得指定的数据。爬虫的基本原理如下:从一个指定的 URL 出发,访问该 URL 指向的页面,读取文本数据以及该页面所包含的 URL 集。抽取所关心的信息数据,再根据广度优先搜索或者深度优先搜索的方式访问下一个 URL。最后爬虫根据某种标准停止运行。

通过 API 方式获取主要是程序调用官方的 API,会返回 API 相应的官方信息数据。然后根据需求,我们再次抽取信息来获取数据。与 Web 爬虫的方式相比,调用 API 方式的优点在于程序实现简单、返回值内容比较少,处理起来方便与快速。其劣势在于 API 接口调用次数受到户门网站的限制,以及调用 API 的返回值是官方指定的数据,这些数据不一定是开发者所需要的全部信息数据。比较两种获取信息数据方法之后,本文采用调用 API 方式来获取新浪微博网络好友信息与微博信息,主要是基于以下理由:

l 经过观察新浪微博开发的 API 返回值中信息数据有本文所需要的信息数据。即本文需求的信息数据均可从调用 API 获得。

l 新浪站点对新浪微博网络做了防爬虫机制,即每个 IP 地址在一个小时内访问微博页面的次数受到限制。

所以最后我们采用调用 API 的方式来获取实验工程数据集。

基于广度优先搜索原则,本文通过调用 API 方式、多节点获取新浪微博用户的好友列表信息与微博消息列表,将获得的信息集中保存在本地服务器机器上。具体流程如下:从一个特定微博用户出发,获取其粉丝列表,然后将其粉丝列表作为下一次的搜索对象,搜索其粉丝的粉丝列表,如此地一层层获取用户关系,直到数据集满足预期要求。

我们选取 MySQL 作为后台数据库。根据实验要求,对API返回信息数据做了进一步的处理,只存储了用户的微博信息列表与粉丝关系列表。在新浪微博服务中,每个注册账号都有全网络唯一的ID,每条微博信息都有一个唯一的 ID。因此我们设计的 MySQL 数据库结构图,如下图

       
  bubuko.com,布布扣
    bubuko.com,布布扣
 

其中,表 friendship_info 存储用户的好友关系,表中 userid 表示微博用户的 ID,fans_id 表示用户粉丝的用户 ID。表 message_info 中存储了表 friendship_info 用户的微博消息,userid 是每条微博消息的发表者 ID,m_id 是每条微博消息的 ID,create_time 是每个 m_id 的创建时间,如果某条微博消息是转发了其他用户的微博消息,那么我们还要记录原始微博消息的 user_id、m_id 和创建时间 create_time。表中pre_user_id、pre_user_id 和 pre_create_time 存储了原创消息的用户 ID、消息 ID 与创建时间。

采用广度优先原则,我们从姚晨微博节点开始获取粉丝列表,并将用户的粉丝数据压入表 friendship_info 中,之后把表 friendship_info 中的 fans_id 作为下一个获取信息的起始节点。表 message_info 存放了表 friendship_info 所有 user_id 与fans_id 的微博信息列表。在获取用户好友信息与用户微博信息的流程图如下图:

bubuko.com,布布扣

获取用户好友关系流程图

bubuko.com,布布扣

获取用户微博消息流程图

从 2014 年3月份开始抓取新浪微博数据,到 2014年7月份共获取了近2千万条用户微博消息。

3. 用户影响力算法

在社交网络中,如人人网、新浪微博等,一个用户对另外一个用户的影响力只能通过他们之间的关注关系,以及其他用户对其发布的信息内容的感兴趣程度等。一个用户对信息的处理动作主要有转发、浏览、评价与原创等动作,其中对信息传播起到作用,只有用户的转发行为。当用户的微博消息被转发之后,这条微博消息会沿着网络结构传播下去,被更多的网络用户看到。我们提出用户影响力算法的目的在于快速地找出影响力高的用户,便于我们理解信息传播模型等,而用户的转发行为是信息传播过程中的一个重要动作,因此我们把用户之间的转发行为作为用户影响力算法的一个重要因素。

新浪微博的网络结构类似于 Web 页面的网络结构。评估 Web页面的权威性或者影响力的算法有 PageRank 算法、HITS 算法等。其中 PageRank 算法是著名 Google 的创始人提出的,之后它吸引了许多学者对它的研究,学者们提出了许多基于 PageRank 的改进算法。因此,我们基于 PageRank 算法的基本思想,提出适用于评估社交网络用户影响力的算法。

3.1 基于 PageRank 的 WBRank 算法

在新浪微博网络中,微博用户的基本动作主要有浏览信息、发布信息与评论其他人的微博消息,其中发布信息有两种形式:1、自己原创微博消息,消息内容包括某时刻的心情、路上见到的事物等;2、看到自己关注者的微博消息,认为这个消息有价值、有趣等,对这个消息进行转发。新浪微博网络中微博消息传递形式,发现新浪微博信息是单向传递。

如果一个用户的消息只是被粉丝浏览,那么该条消息的传播范围仅仅限于该用户的粉丝圈子里,而一个用户的粉丝数量是有限的。但是如果这条微博消息被所有粉丝转发之后,粉丝的所有粉丝也转发了这条微博,如此一层层的转发下去,根据“六度分割理论”理论,这条微博消息最多被转发六层,那么微博网络上绝大部分的人都可以看到这条微博。因此用户的转发微博行为,对于微博消息传播有着至关重要的意义。

研究用户影响力就是研究用户对其周围用户的影响程度。如果一个用户对周围用户影响程度越大,那么他的影响力越大,即很多人认可或者采纳了他的观点与意见等。在传播学研究领域中,这种用户被称为意见领袖。在新浪微博网络中,如果用户的微博消息被粉丝转发,那么粉丝认为这条微博是有价值,间接的认可了该用户的见识等。因此如果某用户的微博消息被许多人转发,那么该用户就是一个意见领袖,进而这个用户具有极高的权威性。而现实生活中并不是所有粉丝都以一个恒定的概率转发用户的微博消息。我们可以得出结论:衡量用户权威性的一个重要因素是其粉丝是否转发他的微博消息。所以这个转发概率是用户影响力算法中的一部分。

基于PageRank 算法的思想与用户之间的关注度数学模型,我们分析了微博网络节点结构,提出了一种实时性的用户影响力算法,名为 WBRank。在 PageRank 算法的基本思想中网页的 PR 值是均匀的分配给链出的网页上,这个思路造成旧网页由于存在时间比较久,那么它会被链接的次数会明显高于新网页,而旧网页的信息往往是过时的、没有价值的,这种现象导致了旧网页的 PR 值高但是内容陈旧,而新网页的内容用过,但是 PR 值却很低。本文分析了用户转发行为的时间间隔分布,表明用户之间的关注程度不是一成不变的。因此把 PageRank 算法模型运用到新浪微博网络用户影响力模型中的同时,我们将用户之间的关注度引入影响力算法的模型中,认为如果一个粉丝高度关注某个用户,那么该粉丝分配给该用户相对较高的 WBRank 值,反之,如果一个粉丝对某用户关注程度比较弱,那么该粉丝分配给该用户相对较少的WBRank 值。这样子,同一时刻粉丝将分配不同的 WBRank 值给不同的关注者,也就体现了粉丝对不同关注者的关注程度是不一样的。这个分配机制也是符合现实生活中一个常见现象:一个人不可能对其朋友一视同仁的,总会存在对亲昵朋友相对比较好,对泛泛之交的朋友相对比较疏远。基于上述的分析与 PageRank 算法基本思想,我们提出了WBRank 算法。WBRank 算法的数学表达式如下:

bubuko.com,布布扣 公式3-1

WBRank 算法模型中的参数描述如下:

(1): bubuko.com,布布扣

为 t 时刻,用户v的微博消息被粉丝转发的平均概率。本文定义了这个消息转发的概率bubuko.com,布布扣的数学表示式,如下:

bubuko.com,布布扣

公式3-2

式中bubuko.com,布布扣:t时刻,(u,v)关系的关注度。bubuko.com,布布扣 :t 时刻,用户 v 的粉丝数。E:用户 v的粉丝集合。例如,在某个时刻,有许多新粉丝加一个用户为关注者,那么该用户的微博消息被新粉丝们转发的概率就会比较大,反应在公式中,就是 bubuko.com,布布扣 就会相对比较大。bubuko.com,布布扣 类似于 PageRank 中的阻尼系数(d),表明了用户对其所有粉丝的影响程度。

(2):影响力分配比例 bubuko.com,布布扣

bubuko.com,布布扣是用户u分配给其关注者的 WBRank 值的比例,是根据用户u对用户的关注度占用户u 对所有关注者的关注度总和的比例。bubuko.com,布布扣的数学表示式如下:

bubuko.com,布布扣

公式3-3

便于理解 WBRank 算法中用户 WBRank 值的传递过程,本文做了一个简单的 WBRank值的分配比例示意图,如图

bubuko.com,布布扣

用户 A 总共关注了用户 B、C 和 D 用户。其中用户 A 分别在bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣时刻关注了用户 B、C 和 D。那么在 t 时刻,用户 A 对于这三个用户的关注度分别为bubuko.com,布布扣(t),bubuko.com,布布扣(t)与bubuko.com,布布扣(t)。根据公式 3-3 可知道,t 时刻用户 A 分配给用户 B的 WBRank 值比例是 bubuko.com,布布扣,同理可以得到用户A分配给C,D的WBRank值。从上述分析,可以看出用户 A 分配给用户 B、C 和 D 的 WBRank 值是相对值,而不是绝对值,这与 PageRank 算法中的 PageRank 值分配情况相似,也是保证 WBRank 算法收敛性的一个重要步骤。

3.2算法的计算流程

WBRank 的计算过程是一个不断的迭代计算过程,直到网络中用户的 WBRank 值达到一个稳定值。因此,计算 t时刻用户 WBRank 值的基本步骤如下:

1. 根据用户关注度的数学模型,计算出每个关注关系在 t 时刻的关注度。计算 t时刻,一个用户的微博消息被其所有粉丝转发的概率。

2. 每个用户的 WBRank 的初始值均设置为 1;

3. 根据公式 3-1,进行计算每个用户的新的 WBRank 值

4. 将步骤 2 中的新的 WBRank 值作为下次迭代的用户 WBRank 初始值。

5. 如此重复步骤 2、3 的计算过程,直到两次迭代之间的每个用户 WBRank 值之差的和的绝对值小于某个极小数(§),我们就认为用户的 MURank 值达到一个稳定状态,停止 WBRank 运算。

6. 退出计算流程。最后根据网络中每个用户的 WBRank 值,进行从小到大的排名。

4.实验结果与分析

4.2 实验环境与结果

我们的实验环境如下所示:

1. 硬件平台:1 台 DELL 服务器,2.4GHz Intel E56020,32GB,1TB 硬盘,2 台 DELL PC 1.8GHz Intel,2G 内存,160G 硬盘;

2. 软件平台:Windows 7 操作系统,Eclipse 编辑器,MySQL 5.5 数据库。

运算过程中,本文采用多线程机制实现 MURank 算法的运行。具体实现如下:

1) 建立表 MURank_info,表字段有 Userid,rank0,rank1 …,将每个用户的 rank0设置为 1,rank1,rank2 …设置为-1;

2) 每台 PC 运行三个线程,根据 Userid 的范围,平均分为六份,分别交给这六个线程计算每个用户的 MURank 值,更新用户的 MURank 值。

3) 当一个线程提前完成任务,则读取数据库中还没完成 MURank 值计算的用户 ID,读取其中 Userid 号最大值,进行计算该 Userid 号的 MURank 值。

4) 当本次迭代中每个用户都计算完成,进入下一次迭代。例如第 i 次迭代中,如果数据库里没有用户的 ranki是-1,则表明所有用户的本次 MURank值计算完成,进入下一次迭代。

5. 如此不断的迭代计算,直到用户的相邻迭代 MURank 值的差的和的绝对值小于事前设定的极小数,停止 MURank 算法的运行

在计算过程中,我们采用了两台计算机同时进行计算用户的 WBRank 值,每台机器运行了三个线程,将用户集近似平均分配给这六个线程。WBRank 算法在第五次迭代趋于收敛状态,并且在实验过程中发现从第二十次迭代开始用户排名情况不再发生变化。因此,WBRank 算法在第二十四次迭代的运行结果是个稳定、收敛状态,每个用户都得到一个稳定的 WBRank 值。这也表明了 MURank 具有良好的收敛性。

4.1与转发次数相关性

用户影响力体现了用户节点能给其它节点提供有用的建议、观点等,具体表现形式有浏览、转发与加为关注者。其中浏览动作只是表示了粉丝看到该用户的消息,而没有进一步的动作,无法判断粉丝是否认同这条消息等。而转发动作表明粉丝认可这条消息以及希望粉丝喜欢他的粉丝也能看到这条消息,这对于信息传播来说是一个重要的动作。还有一个动作是加某个用户为关注者,当用户在其它地方看到用户 A 的消息时候,他认为与用户 A 兴趣一致或者他对于用户 A 的状态等很感兴趣,希望接着还能看到用户A 的消息时候,那么用户就会加用户 A 为关注者。例如,在新浪微博中,有许多人对于明星感兴趣,他们就会加明星为关注者,喜欢能实时得到明星的动态,还有基于共同兴趣爱好的,如微博用户“冷笑话“等的粉丝数量都会达到十几万,甚至更多。我们把一个时间段内用户微博消息被转发的总次数,作为该用户影响力的一种指标。通过观察,我们发现 WBRank 算法的前十名用户,他们在 t2 时刻之后的一周内被转发次数的大小排序基本与他们 WBRank 名次相符。

5.总结与心得体会

建立了新浪微博网络中用户转发行为的数学模型。将经典的搜索算法 PageRank 算法的基本思想应用到社交网络的用户影响力实践中,进而提出了社交网络用户的实时影响力算法(WBRank)。通过新浪微博的 API 等来获取实验数据集,对新浪微博用户进行实验分析,证明了算法的有效性。

文中也有存在一些不足之处,主要有以下几个方面:第一,数据量的问题。由于受到 API 调用的限制,我们只获取了新浪微博中的一小部分数据,因此对于该数据集是否比较全面的代表整个新浪微博网络还需要进一步的研究与分析。第二、在建立用户之间关注度模型上,我们只是考虑了时间间隔这个因素。而实现生活中,用户之间的兴趣爱好、地理位置等因素都会影响到了用户之间的关注程度。


(这是我读研究生时的作业)

基于PageRank的社交网络用户影响力

标签:社交网络   pagerank   

原文地址:http://blog.csdn.net/alvalan/article/details/41207949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!