京公网安备 11010802034615号
经营许可证编号:京B2-20210330
微博背后的那些算法_数据分析师
引言
微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针对的是用户之间的关系,关注某个人就意味着你成为他的粉丝,而他成为你的好友;@某个人意味着你想要他看到你的微博信息。
微博被人们认为是“自媒体”,即普通大众分享与本身相关的“新闻”的途径。最近,有些人使用自己在自媒体上的影响力而盈利的报道屡见不鲜。那微博上个人影响力是怎样计算的呢?微博上还有哪些算法作为看不见的手在管理着我们?我们的每一个行为怎样影响着算法呢?
直观上看,微博其实是人类社会的一个简单的缩影,微博网络的一些特点,也许可以启发我们得到真实的社会网络上的规律。得益于社交网络的爆发式发展,“社会计算”尤其是社交网络分析成为数据挖掘的新宠儿。下面我们就针对微博网络分析的一些算法进行简单的介绍,其中的有些算法对于其他的社交应用可能也适用。
标签传播
微博用户量浩大,不同的人有不同的兴趣。挖掘每个用户的兴趣有助于更加精准的广告投放、内容推荐。为了得到每个用户的兴趣,可以为用户打上标签,每个标签代表用户的一个兴趣,用户可以拥有一个或多个标签。为了得到最终的用户标签,先做第一个假设:
每个用户的好友(或粉丝)中与该用户具有相同兴趣的人占多数。
这就引出了本文介绍的第一个算法,即标签传播算法。在这个算法中,每个用户的标签取其好友或粉丝中标签最多的一个或多个。当然,可以将好友和粉丝的标签都考虑进来,整合的时候可以考虑赋予好友的标签和粉丝的标签不同的权重。标签传播算法的过程如下:
1)对一部分用户给出初始标签;
2)对每一个用户,统计其好友和粉丝的标签数目,赋予该用户出现次数最多的一个或者多个标签。
3)循环进行第2步,直到用户的标签不再发生大的变化为止。
用户相似度计算
标签传播算法实现起来比较简单,其缺点在于当所做的假设不符合事实时,比如为了社交上的礼貌,我们一般会把自己的亲友添加关注,这些人不一定和我们拥有同样的标签;该算法的结果就会变得很差。解决的办法就是通过计算用户之间的相似度来衡量好友或粉丝的标签对用户标签的贡献率。因而得到第二个假设:
与用户越相似的好友或粉丝,其标签越可能是用户的标签。
那么,如何衡量用户之间的相似度呢?这就需要考虑到用户发表的微博信息了,包括转发的和原创的。这里是要考虑用户之间的相似度而不是用户微博之间的相似度,因而在实际计算时,将某个用户的所有微博信息聚集到一起进行计算。一个可选的方法是使用词袋法将微博信息表示成词语向量,然后直接使用余弦方法等计算其相似度。但这个方法太过简单,不容易达到好的结果,这里介绍一种基于LDA(隐含狄利克雷分布)的相似度计算方法。
LDA仍然使用词袋法表示文本,但是在中间添加了一个主题层,形成了“文档-主题-词语”三层概率模型,即每篇文档看成是主题的一种概率分布,主题又被看成是单词的概率分布。在LDA模型下,文档可以被看成按照如下方式生成:
1)对于每篇文档:
2)从主题分布中抽取一个主题;
3)从该主题的词语分布中抽取一个词语;
4)重复第2步和第3步,直到该文档的所有词语都生成。
LDA模型参数的估计算法不在本文的讨论范围之内。这里只需要知道,通过LDA可以得到每个用户的微博信息的主题分布。然后使用余弦方法、KL距离等计算相似度的方法来得到用户间主题分布的相似度,以之作为用户之间的相似度。而后使用该相似度对标签传播进行加权。
时间因素和网络因素
上述的算法还有什么缺点呢?
随着时间的变化,用户的兴趣是会变化的,计算用户相似度的时候每次都把所有微博信息都聚合在一起不太合理。对此,可以通过选取距离当前时间较近的N条微博。比如,对每个用户,选取距离当前时间最近的50条微博聚在一起放到LDA中训练。此处的N既不能太大也不能太小。太大则不容易反映用户兴趣的时间变化,太小则由于用户发表微博的随机性容易引起兴趣的漂移。为了使效果最好,可以不拘泥于一个固定的N,比如可以考虑对每个用户按照其发表微博的时间序列做N值的自适应。
至此,在算法中还没有考虑微博关系中由回复、转发、@等所构成的网络信息。以转发为例,如果在用户的微博中频繁的转发某个好友的微博,那么用户和该好友的相似度相比其他好友来说应该会更高。这里可以看做是假设三:
用户转发某好友的微博的频率越高,用户与该好友的兴趣相似度越大。
相似的,可以得到假设四:
用户微博中@某用户的频率越高,用户与该好友的兴趣相似度越大。
由此就得到了计算相似度的另外的因素。有很多方法可以添加一个新的因素到原有的相似度计算方法中,比如可以考虑将转发频率量化为值,作为权重添加到相似度的衡量中去。
社区发现
微博社区是指在微博中关系紧密的人组成的团体,社区内部的人之间联系紧密,社区之间的联系则比较稀疏。这里所指的关系紧密有两层含义,第一是社区内部的人之间的兴趣相似度大;第二是指社区内部的人之间的关系要近,比如要求社区内部的两个用户不能超过二度关联,二度关联即好友的好友。
兴趣相似度在上文已有叙述,关系相似度则需要利用用户之间的关注关系来进行计算。以用户的关注关系为单向链,可以将所有的微博用户之间的关系表示为一个巨大的有向图。用户之间的关系相似度可以简单的考虑,比如使用用户间的最短路径的倒数。但是这种方法衡量的不精确,我们知道,在现实世界中,存在着六度理论,在微博网络及其他社交网络中,往往关系会更加紧密。因而这种简单的关系相似度只能有至多六个离散值,显然不够精确。
为了达到更好的效果,这里不仅以最短路径作为显式量度,还要考虑一些隐式的量度。这里先给出两个假设,分别为假设五和假设六:
这里可以借鉴Jaccard相似度的计算方式,将这两种假设的量化函数表示为交集的大小与并集的大小之商。以假设五为例,其量化指标又被称为共指向性相似度,量化时使用两个用户共同好友的数目除以两个用户所有好友的数目。假设六的量化指标被称为共被指向性相似度,计算方式与共指向性相似度类似。从意义上讲,这两种相似度不仅仅是关系上的度量,在一定程度上也衡量了用户之间的兴趣相似程度,直观上看,两个用户共同关注的好友越多,他们的兴趣相似程度也越大。这两种相似度还有一个专业的名字,是基于结构情景的相似度计算。
得到了最短路径相似度、共指向性相似度、共被指向性相似度后,可以采用一种加权函数将它们融合起来,得到最后的相似度。之后,可以采用一些聚类算法如K-Means、DBSCAN等进行聚类操作,得到最后的社区簇。也可以采用相似度加权的标签传播算法,把具有相同标签的人作为一个社区。
影响力计算
在社区发现中,使用微博中的关系网络可以提高相似度计算的精确度。但关系网络能做的事情还有很多,影响力计算便是其中比较重要的应用。
说到影响力的计算,这里借鉴了网页排名中的算法。网页排名中广为人知的算法当属PageRank了,该算法由google创始人拉里·佩奇和谢尔盖·布林发明,随着google在商业上的成功而声名鹊起。该算法根据网页之间的链接来确定网页的排名,其核心在于一个假设,质量高的网页所指向的网页的质量必定也高。
根据PageRank的思想,可以得到微博上影响力的假设,称之为假设七:
影响力高的用户关注的用户的影响力必定也高。
将用户看成是PageRank中的网页,将关注关系看做是网页中的链接关系。从而,可以根据PageRank的算法流程得到在微博关注网络上的影响力计算算法:
1)赋予所有用户相同的影响力权重;
2)将每个用户的影响力权重按照其关注的人数等量分配;
3)对每个用户来说,其影响力等于其粉丝分配给他的权重之和;
4)第2步和第3步迭代,直到权重不再发生大的变化为止。
在网页排名中,基于网络关系的算法还有HITS、HillTop算法等,这些算法也可以借鉴到影响力计算中来。
上面的算法有什么缺点呢?
如果只是基于关系网络的话,那么很容易就造成,粉丝数目多的人影响力必然会很高。这样就导致有些用户去购买一些僵尸粉就可以达到很高的影响力了。这样的算法显然是不能应对实际情况的,因为还有太多的信息没有用到。
用户的影响力除了他的微博关系之外,还与他的个人属性有很大的关系,比如用户的活跃度、微文的质量等。用户的活跃度可以使用其发表微博的频度来衡量,微文的质量可以采用其被转发的数目、被回复的数目来得到。通过对这些值进行衡量,再加上上面算法的结果,就可以得到更加精确的影响力结果。
当然,也可以这样考虑,用户之间的回复关系、转发关系、@关系均可以构成网络,它们也有相应的假设,分别为假设八、假设九、假设十:
影响力越高的用户回复的微博的影响力越高,从而使该微博主人的影响力变高。
影响力越高的用户转发的微博的影响力越高,从而使该微博原创作者的影响力变高。
影响力越高的用户倾向于在其微博中@影响力高的用户。
这样就又得到了转发网络、回复网络、@网络三种网络,借鉴PageRank算法,可以得到另外的三种影响力结果。将它们与关系网络的影响力结果进行融合,就可以最终的影响力结果了。这里的融合可以简单的考虑成结果的加权和,复杂的融合方法不在本文的范围之内。
话题因素和领域因素
得到了影响力的计算方法之后,可以做些什么呢?
可以对当前的热点话题进行影响力分析,得到谁在微博上成为当前热点话题的意见领袖。具体做法是这样,找到和当前热点话题相关的微文,从而找到参与当前热点话题的用户。如何找到和当前热点话题相关的微文呢?有话题标签的微文自不必说,对于没有话题标签的微文来说,可以使用上文中介绍的LDA算法,它可以在用户的所有微文中找到用户的主题分布,也可以对一条微文找到主题分布,一般来说,由于微文的字数限制在140以内,比较短,因而一条微文包含的主题数目不会太多,取该微文的主题分布中概率最高的主题当做其主题即可。
找到话题对应的微文与用户之后,运行影响力计算算法,就可以得到该话题中影响力较大的用户了。这也是舆情监测、社会热点监控的一个方面。
对于标签传播算法得到的结果,对同一标签下的用户运行影响力计算算法,可以得到该标签下的影响力排名,即领域内影响力排名。比如,李开复在全部领域内的影响力或许不是最高的,但在IT领域,其影响力绝对是数一数二的。
垃圾用户识别
在影响力计算中,提到要避免僵尸用户对影响力计算的干扰。在算法中,如果可以识别这样的用户,在计算影响力时将其排出在外,不仅可以提高效果,还可以降低计算量。
与影响力计算相似,垃圾用户的识别要同时考虑用户属性与链接关系两方面的因素。
对于垃圾用户来说,有一些统计上的特征与正常用户不同。比如如下几点:
垃圾用户一般发微文具有一定的时间规律性,可以使用熵值对此进行衡量,熵是衡量随机性的一种量度,随机性越大,熵值越小。具体做法为将一定的粒度进行时间切片统计,得到每个时间片内的博文概率,然后依照概率进行熵值的计算。熵值越大代表用户发微文的时间越有规律,越有可能是垃圾用户。
垃圾用户有些倾向于在微文中恶意的@其他人,因而有些垃圾用户的微文中@使用的比例比一般用户高。
有些垃圾用户的微文中为了进行广告的推广,添加大量的URL。可以通过微文中的URL比例进行衡量。也有些用户为了骗取URL的点击,微文中的内容与URL对应界面的内容不一致,这时需要判断微文与URL内容的一致程度,简单的做法可以使用词袋法将微文与URL对应界面表示成词语向量,查看微文中的词语在URL对应网页中出现的频度。
对于那些为做广告推销的用户,还可以对其微文进行文本分类,判断其微文是否是广告,如果某用户的相当一部分微文是广告,则该用户可能是垃圾用户。
垃圾用户一般随意的关注用户,故其粉丝数目与好友数目的比例与正常用户会有差别。而且正常用户一般是通过好友关系添加好友的,这样会形成关注三角形,如A看到其好友B关注了C,那么若A也去关注C,就形成了A关注B、C,B关注C的三角形。一般来说,由于垃圾用户关注的随意性,其关注三角形的比例与正常用户不同。
当然,垃圾用户与正常用户的不同之处不止这些,本文不再一一枚举。垃圾用户的识别本质上是一个二分类问题,获得了这些属性之后,就可以将这些信息输入到一个机器学习的分类模型中,比如逻辑斯蒂回归(LR)、决策树、朴素贝叶斯等,就可以对其进行分类了。
当然,还没有用到链接信息。一般来说,垃圾用户会去关注正常用户,而正常用户不会关注垃圾用户。这即是假设十一:
正常用户不倾向于关注垃圾用户。
这样就可以再次使用PageRank算法来对用户是否是垃圾用户的概率进行计算。这里需要注意的是,算法初始化时采用上面的分类器结果,将垃圾用户的概率设为1,正常用户的概率设为0。在PageRank计算过程中,不能通过简单的求和公式计算,比如如果一个用户关注了多个垃圾用户的时候,求和后概率可能大于1;因而需要使用一些归一化方法或指数族函数进行概率的更新。
结语
本文对微博中常见的问题的对应算法进行了简单的介绍,在实际应用中的算法比介绍的要复杂的多。当然,本文覆盖的主题并不全,比如好友推荐、热点跟踪等就没有涉及到。但古人云“窥一斑而见全豹”,希望本文的介绍能帮助大家更好的理解微博这样的社交网络应用。
在文中,可以看到黑体标出的假设,这些假设看起来都与我们的直观感觉一致。而根据这些可以引申出很多有效的算法。所以有时候,只要你肯发现,算法就在身边。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
一、问题:为什么 ID 会"断号" 很多刚接触 MySQL 的同学都会有一个困惑:表里的主键 ID 是自增的,删了中间几行数据之后,ID 变 ...
2026-10-22一、问题场景:为什么会重复 JOIN 同一个子查询 在写复杂 SQL 时,经常遇到这种需求:同一张表或同一个聚合子查询,要和主表关联 ...
2026-10-22人力资源专员是HR体系的执行入口。招聘信息发布、简历初筛、面试安排、考勤汇总、入离职手续、劳动合同与档案管理,大多由这个岗 ...
2026-10-22人力资源经理问“必学技巧”,真正要解决的不是知识清单不够长,而是时间有限、业务催得紧,学完却用不上。更有效的路径是:先用 ...
2026-10-22内容营销岗位的核心任务,不是“把文案写得更漂亮”,而是围绕目标受众,用持续的内容供给影响认知、推动转化并沉淀复购。它至少 ...
2026-10-22理财经理培训课程很多,难的是判断“先学什么、后学什么、学完能做什么”。与其按课程名称罗列,不如先看岗位任务:客户分层与维 ...
2026-10-22理财经理的知识结构,可以先用一句话概括:合规与产品知识决定“不出错”,客户经营与资产配置决定“够不够专业”,市场研判与数 ...
2026-10-22经济学背景做数据分析,优势不在工具,而在问题意识:供需如何相互作用、成本与收益如何权衡、变量之间是相关还是因果。真正的缺 ...
2026-10-22需要,但要把“需要”理解准确。经济学本身就在处理数据:GDP、物价、就业、企业营收、问卷调研,都是经济分析的原料。真正的区 ...
2026-10-22经济学分析能力不是单一技能,它至少由三层构成:把现实问题转成可检验假设的理论框架能力、用数据与统计方法验证假设的工具能力 ...
2026-10-22金融分析师的知识提升,先补的不是更多模型,而是让结论可复核的底层能力。按任务顺序,大致是四层:财务与业务理解、指标口径管 ...
2026-10-22金融分析师的“通用技能”,指换到不同机构、不同行业组仍用得上的底层能力,而非某家公司内部系统的操作经验。按任务拆,日常要 ...
2026-10-22先给结论:数据分析证书不是金融分析师的准入条件,招聘方也不会因为一张证书就直接判断你能做分析。要不要考,取决于你当前任务 ...
2026-10-22金融分析师的核心技能,不是“会看K线”或“会讲宏观”,而是能把一家公司、一个行业或一类资产,转化为可核查的数据判断与书面 ...
2026-10-22产品经理的知识提升,不是把需求文档、原型、SQL、数据分析、项目管理都学一遍,而是先对准目标岗位的真实任务,找出自己最缺的 ...
2026-10-22产品专员提升工作知识,最有效的方式不是先囤课程,而是围绕日常交付的四件事来补:需求调研与优先级判断、原型与PRD表达、竞品 ...
2026-10-22产品运营专员提升个人能力,常见误区是先把Excel、SQL、Python列成一张学习清单,然后从第一个工具开始学。更有效的做法是先回答 ...
2026-10-22产品运营的能力提升,最怕从“课程目录”出发:今天学增长模型,明天背SQL语法,学完却说不清自己负责的功能为什么激活率低。更 ...
2026-10-22产品经理的技能和影响力不是两条分开的赛道。技能决定你能不能把问题分析清楚、把方案设计对;影响力决定你的判断能否被团队接受 ...
2026-10-22产品经理要学的数据分析能力,不是“会写SQL”或“会用BI工具”这么简单。更准确地说,是围绕需求评估、功能迭代、指标监控、实 ...
2026-10-22