前段时间学习了一些图论和图神经网络相关的知识,而在这个过程中,我发现有一些知识和方法是可以非常自然而有效地用在机核上面的。于是抽了几天时间,收集整理并分析了一下机核的数据,把这些数据、结论和一些有趣的地方整理了一下,写作这篇文章分享给机核的朋友们。
这篇文章主要包括两部分。第一部分主要是机核的 数据分析 ,例如总/平均点赞数的作者排名的图表,机核社交网络的一些关键或有趣的特点等;第二部分则是在第一部分的数据和社交关系的基础上,一个基于图神经网络(GNN)的适用于机核的 推荐系统 的尝试和介绍。
注:这篇文章听起来似乎既硬核又难懂的。但我一直相信一篇优秀的文章需要做到易于理解的同时,让阅读过程流畅而有乐趣的。所以我将尽量专注于直观和直觉上的介绍,省去了大部分复杂冗长的严谨定义和公式。希望你能喜欢。 ( •̀ ω •́ )
首先,我们先来介绍一下这篇文章进行分析所用到的数据:
我爬取了机核网在 2020年 所有发布的文章及其数据,这些数据包括: 文章相关的信息 ,如文章ID,文章标题,文章标签(即文章末尾的tags),文章所获的点赞,收藏和评论数等;以及 作者相关的信息 ,包括作者ID,作者昵称等。接下来,爬取所有作者的关注用户,以此来建模机核用户们的社交网络。
文章所用到的数据收集于 2022年5月 *,共收集了 4080篇文章 和 1082位作者 的信息,用于构建社交网络的用户数量为 4248名 (值得注意的是,这个数字比实际用户数低至少一个数量级,因为我只爬取了曾发表过文章的作者以及这些作者关注的用户们,而其他用户的信息则没有收集——一方面是所有用户的信息量很大,全部爬取会占用较多资源;另一方面是我们更倾向关注相对活跃的用户们的数据)。具体的数据请参考表1。
开场肯定要先来点大家喜闻乐见内容——比如,如果我们对所有作者进行分析,能得到些什么结论,谁是2020年度获得喜欢数最多的作者,而谁又将成为机核网的年度MVP呢?
震惊!机核网获得喜欢数排名第一的作者竟是——没错!就是那个男人!
我们的 大巴车司机 !大巴在2020年总共贡献了 49 篇文章,并以 7835 的总喜欢数成为机核2020年所获喜欢数最多的作者(´▽`)。 如果你想要看到全部的统计结果,或是想找找自己的位置的话,请点开 附录 中的防剧透图片。
下面, 图1 和 图2 分别显示了按照所获点赞数和评论数排列的作者的柱状图。
图3 和 图4 则分别显示了各个作者的 平均每篇文章 点赞数和评论数柱状图。
由图1和2可以看出,点赞和评论数的分布很相似:一小部分作者获得了大部分的点赞/评论数,而绝大部分作者的点赞/评论数则相对较少。这一分布也广泛存在于很多其他领域和场景中,被熟知为“ 二八定律 ”(指约仅有20%的因素影响80%的结果 ),也被称为“ 帕累托原则 ” [1]。
而相比之下, 平均每篇文章 点赞数和评论数的分布则更加均匀:所有作者的平均每篇文章所获点赞的平均数为 84.6 ,中位数为 61 ;每篇文章评论数的平均数为 47.5 ,中位数为 28.8 。
从更数学的角度来说,上面提到的点赞/评论分布其实可被看作为 幂律分布 的一种形式 [3]。
在分析中,我们经常对两边同时取log或直接画出x-y的log-log图,从而获得一个接近直线的更直观的形式。下图6和图7分别显示了点赞/评论分布的log-log图。
由上图也可以看出,除末尾部分,点赞/评论和作者的排名的log关系大致符合直线关系,而这也能清晰地表明,点赞/评论是符合幂律分布的。而点赞/评论曲线的后半段均有一个明显的 下降 ,这其实表明,有一部分的作者可能并没有得到足够的重视,他们所获得的点赞/评论数低于理想情况下的幂律分布。
这一现象这被称为“ 长尾效应 ”,在互联网领域尤为显著 [4],其原因可能是由于互联网上面的信息过多,以至于相当一部分的信息无法得到足够的关注。在机核,这一现象可能也是出于类似的原因,由于目前机核还没实现很好的推荐系统,而文章通常是按照时间顺序排列的,虽然我们有“机组闲聊” [5] 和疫情期间的“白话” [6] 这类推荐用户创作内容的节目,但可能还是有一部分文章被“埋没”了,不得不说是一件很可惜的事情。
不过,本文的第二部分将介绍一个基于用户社交和兴趣的推荐系统的尝试,希望能对机核日后的推荐系统有所参考和启发。
这一部分主要介绍了机核社交网络构建和分析。由于收集和分析机核所有用户的社交关系可能是一件相当耗时的事,所以这里我 只 收集了和作者们相关的信息。具体做法是:从上文提到的所有作者出发,收集他们的关注列表并以此构建社交网络。
上图即为机核社交网络的可视化结果,图中每个节点代表单个 用户 ,节点间的灰色实线代表用户间存在 关注/被关注关系 。而节点颜色与连接数量相关,连接数量越多,节点颜色越浅。表2显示了此网络的部分关键属性。
另外,如果你感兴趣的话,其实是可以找到自己在图中的位置的。如下图所示,图中的高亮黄点代表的其实就是 我 的位置。看起来可以说是一个相对中心的位置,这是不是意味着我也算是一个相对核心的机核用户和社区贡献者呢(´▽`)。 我们共收集和统计了4248名用户的相关信息,也即图5共有 4248个节点 ,这也是表2中第一项“节点数量”所表示的含义;而这些节点之间共存在 14372条边 ,也就是说,统计到的用户之间的关注/被关注关系共有14372条;将此数据除以用户总数即可得到每个节点的 平均邻居 (即平均每个节点与多少其他节点相连),这一数据意味着每个用户平均 关注6.461个 其他用户***。
关于表2中的第7项, 聚类系数 (clustering coefficient),这一系数是用来衡量图中节点倾向于聚集在一起的程度(可以理解为抱团倾向,或圈子的重合程度),节点的聚类系数是现有链接的数量与其邻居之间可能的链接数量的比率。而由表2,机核活跃用户所组成的社交网络的聚类系数为0.151,这一数值低于其他传统社交网络 [7]。
这一数字能告诉我们什么呢?与其他传统社交网络相比,也许我们可以认为机核用户可能更倾向于形成更为 松散 的社交关系。 这可能是合理的,因为机核上的大多数社交关系可能是基于相同的兴趣,而非现实世界中的社交关系。
特征路径长度 (characteristic path length)被定义为网络中所有节点间最短路径长度的平均值。也就是说,平均只需要 3.284个朋友 ,你就能认识到任何一个活跃的机核用户!
你可能听说过“只需要六个人就能联系到世界上任何一个人”,这个说法其实来自 Stanley Milgram 的一个著名实验 [8],而这个现象也被称为“ 小世界现象”,或“六度空间理论 ”、“ 六度分割理论”等 [9]。简单来说,由于节点之间存在的连接关系,一个大规模的网络可能要比看起来小得多,你可以通过比想象少得多的节点连接到任意节点。
而在机核,这个数值甚至比6还要小得多,平均来看,你只需要3.284个朋友就能认识到任何一个其他的活跃用户。这个数值更小的原因可能是,一方面,互联网的存在使得人和人之前的跨度更广;而另一方面,如上文提到的,机核的用户间基于兴趣的社交关系可能本身就倾向于保持更为松散的连接。这两方面的原因共同造成了机核网络的更小的特征路径长度。
网络的 中心性 (network centralization)一般是用来衡量网络中“关键节点” 重要性/影响力的一个指标。更高的数值通常意味着网络中关键节点的重要性和影响力更强,高中心性通常出现在广播,电台,新闻等具有明确中心节点的网络结构中 [10]。而这个数值在不同社交网络甚至不同的群组之间的变化很大,但作为参考,与Twitter这种传统的社交网络相比 [10],机核网的中心性似乎略微偏高 (0.329) ,这可能是因为媒体老师们会经常发布电台、新闻、活动等官方内容,从而吸引了较多其他用户的关注,进而表现出了一定的中心性。
网络的 分类性 (assortativity)被用来描述一个网络节点连接到相似的其他节点的偏好性,用来衡量节点连接方式的相似性 [11]。机核社交网络的分类性为 -0.118 ,略高于互联网的平均数值(-0.189)[11]。
不过我并没有找到有关传统社交网络(如Facebook,twitter或微博)此数值的统计,但如果仅从数值角度本身分析的话,当此数值等于0时意味着这是一个完全随机的网络,而较低的分类度通常意味着网络中的节点更有可能被具有更多连接的“枢纽节点”相连。 因此,机核小于0而又略大于互联网平均值的分类性可能表明,网络中存在部分关键成员和节点,但用户们似乎更倾向于根据他们的兴趣组成一个 广泛而松散 的社交网络。
简单总结一下,如果我们从机核的“核心用户”或“活跃用户”(如上文所述,这里只统计了作者和作者所关注的用户们)的角度出发,整体上来看,机核的社交网络似乎要比其他社交网络显得更为 松散 ,虽然可能由于机核员工,媒体老师们以及机组成员们的存在和贡献,网络表现出了一定的中心性,但总体来说,机核的用户们似乎更倾向于组成一个较为松散的社交网络****。
既不同于基于现实社交关系的社交网络(如朋友圈),也不同于“明星用户”或“大V”起到关键作用的传统社交网络(如Twitter,微博等),机核的用户们(特别是作者)有一个重要特征,即他们可能会有某些 特定的兴趣 。而如上文所述,这种基于兴趣的社交关系可能正是机核广泛而松散的社交网络的 形成原因 和 重要特点 。
也因此,如果我们想要开发一个适用于机核的内容推荐系统,单纯根据社交关系的推荐(如微信,QQ)或单纯根据内容的推荐(如知乎,它的关注和推荐似乎是分离的)可能都不是最好的。从上文的分析以及机核本身用户们的特点来看,合适的推荐系统也许应该 兼顾 用户们的 兴趣 以及他们的 社交关系 。
如上文所说,在我看来,适用于机核的推荐系统应该兼顾用户们的 兴趣 以及他们的 社交关系 。既然我们已经构建了机核的社交网络,那么一个很自然的想法便是,通过收集用户们的兴趣信息,并结合他们的社交关系,开发出一款适用于机核的推荐系统。
想要实现这个目的,最重要的任务便是如何将用户们的兴趣和他们的社交关系结合并用于推荐。 图神经网络 (Graph Neuron Network,GNN)可能是一个解决这个问题的非常自然而有效的方法。
实际上,图神经网络正是被专门设计出来用于解决具有图结构和图论的问题。所谓图结构,你可以参考上文的可视化图,其中的节点代表 用户 ,边代表用户间的 社交关系 。我们把这种具有节点和连接的结构称为图结构,而图论即是将图为研究对象的一门学科。 正因如此,图神经网络可以自然而有效地处理社交关系结构。
这里,我们用到的神经网络架构主要来自于“ Graph Neural Networks for Social Recommendation”这篇论文 [12],而核心原理来自图注意力网络(Graph attention networks,GAT) [13]。图注意力网络可以看作图神经网络和注意力机制的结合,它允许我们为不同节点间的连接分配不同的权重。
简单来说,如上图所示,我们把用户通过两部分进行建模(即图中 User Modeling ):一部分是用于描述 用户兴趣 的“ Item Aggregation”;另一部分是用于描述 用户社交关系 的“Social Aggregation”。通过这种方式我们可以实现用户兴趣和社交关系的结合。经过训练后,我们的神经网络可以将用户社交关系和兴趣标签建模,并通过 注意力机制 [13]为不同的兴趣标签/社交关系分配不同的权重。通过这种不同的权重,我们可以计算用户对不同标签的感兴趣程度,以及不同用户对此用户的影响力大小;而为了更好地描述标签本身,这里还用同样的方法对标签本身进行了建模(即图中 Item Modeling ),从而可以衡量兴趣标签本身的质量和影响力。
最后,以此为基础,我们可以实现根据用户本身的兴趣、用户的社交关系以及标签本身的受欢迎程度,预测每个用户的兴趣标签,进而可根据文章及其作者关系等相关信息,为每个用户生成特定的推荐内容,乃至推荐作者或更多朋友等功能。
而在实际的尝试中,我将文章的标签(见第一部分介绍)视作用户可能的兴趣标签( 共2179 ),而通过用户在具有某个标签的文章评论区的 互动次数 来计算此用户对相关兴趣标签感兴趣的程度*****。模型的训练曲线以及最终结果如下图所示。
不过,需要注意的是,模型本身仍存在一些可改进的地方:
首先 ,用户们的兴趣标签是简单地根据文章标签生成的,而实际上,两千多个标签中有相当一部分只出现了很少的次数,换句话说,用户-标签矩阵其实有相当一部分是很“ 稀疏 ”的,这不仅会减慢模型的训练速度,还有可能会因数据不够充分导致训练效果不佳的问题。解决这个问题的一个简单方法可以是直接放弃出现次数过少的标签。
另外,简单地使用文章标签可能并不足以准确地进行用户画像,若想达到更好的效果,也许可以引入 NLP (Natrue Language Process,自然语言处理)的方法直接处理并提取文章特征,这可能是上限最高,效果最好的方法之一。
其次 ,如前文所述,我并没有机核的后台数据,所以这里我爬取了评论区中的各个用户的评论次数用于衡量他们的感兴趣程度,但很可能这种做法并不是最优的方法。
最后 ,可以看到,在模型中,我们只考虑了用户间的 直接相关 的社交关系,也就是说,用于社交推荐时,系统只考虑了存在直接社交关系的用户们,而类似“ 朋友的朋友 ”这种关系并没有引入其中。即使注意力机制可能允许一定程度上的弥补和优化,但社交关系中的高阶影响仍不能被简单地忽视,特别是,这种关系可能在用户推荐上尤为重要。不过,最近已经有了一些相关的研究,而在实际的开发中,也许可以从这方面进行改进。
写这篇文章的初衷,一方面是想整理复习一下自己前段时间学到的知识,另一方面也是想为机核做出些贡献。在机核的几年收获了很多知识和有趣的故事,我也写过几篇文章,分享过一些自己知识和经历,并不夸张地说,这里的交流环境是我见过的最好的几个社区之一。这不仅仅需要机核员工们的维护,也更需要所有用户的贡献和付出。因此,这篇文章既是给机核的一个小礼物,也可以看作是给所有社区成员的感谢。
不过学海无涯,这篇文章肯定会有疏漏甚至错误之处,也希望各位多多交流,多多指教 (´▽`) 。
所有作者的相关信息及统计可以参考下面几张图( 巨长,慎点! )。
*注1:文章所用到的数据收集于2022年5月,而这篇文章是在7月中旬完成的(拖延症好像有些严重?(ง •_•)ง)。对代码感兴趣的朋友请注意,机核网页版好像在6月经历了一次改版,更新完成后的代码可能不太能适配目前的网页版,但所需修改的地方应该不多。
至于为什么收集的是2020年而非去年的数据,其实是因为我在2020年发过几篇文章,所以想统计下包括自己的数据(´▽`) 。当然,文章中用到的方法和代码是可以应用在任意时间段的。
***注3:需要注意的是,如前文统计方法所述,我们这里 只 从所有作者的信息出发, 只 统计了他们所关注的用户,也就是说,没有发表过文章的用户和作者们的被关注信息被忽略了,主要原因是统计所有用户以及被关注信息(通常作者的被关注用户数量要 显著多于 其关注的用户数量)是一件非常耗时(和对服务器压力大)的事情。另外,如果将把社交信息引入到推荐系统中,关注要远比被关注信息重要,因为它更能代表用户的兴趣。
另外还有一个很有趣的发现值得一提,机核社交网络的统计是去除了一个 “异常”用户 的,原因是,在作者的关注/被关注数量平均为6,只有一小部分比较活跃的用户的关注数达到几十甚至一百的情况下,有一个“ 异常用户 ”的关注数量远远高于其他所有用户,达到了惊人的 一千三百多 (话说真的可以关注得过来么...)。为了避免统计学上的偏差,我只能忍痛把CEO排除在机核社交网络外了。 ****注4:如上文所述,由于收集数据的局限性,这里的分析是建立在一个更小规模的用户网络上的。我认为,如果我们扩大统计规模,对所有用户进行统计和分析的话,结果与其他社交网络的差异可能会更小。
*****注5:由于机核的用户点赞数据并不对其他用户显示,而我也没有机核的后台数据,所以我用这种方法来收集数据。在收集完数据后,每个用户在每个标签下的互动次数被划分为5个等级,用于衡量此用户对各个标签感兴趣的程度。
[1] 帕累托原则(Pareto principle): 英文维基页面"Pareto principle"
[2] 图片来源:https://somin.ai/blog/long-tail-targeting
[3] 幂律分布(Power law): 英文维基页面"Power law"
[4] 长尾效应(Long tail): 英文维基页面"Long tail"
[7] Ahn, Yong-Yeol, Seungyeop Han, Haewoon Kwak, Sue Moon, and Hawoong Jeong. “Analysis of Topological Characteristics of Huge Online Social Networking Services.” In Proceedings of the 16th International Conference on World Wide Web , 835–844. ACM, 2007.
[8] S. Milgram. The small world problem. Psychology today , vol. 2, no. 1, 1967.
[9] https://baike.baidu.com/item/%E5%B0%8F%E4%B8%96%E7%95%8C%E7%8E%B0%E8%B1%A1/56374295
[10] Himelboim, Itai, Marc A. Smith, Lee Rainie, Ben Shneiderman, and Camila Espina. “Classifying Twitter Topic-Networks Using Social Network Analysis.” Social media + society 3, no. 1 (2017): 205630511769154.
[11] Newman, M E J. “Mixing Patterns in Networks.” Physical review. E, Statistical, nonlinear, and soft matter physics 67, no. 2 Pt 2 (2003): 026126–026126.
[12] Fan, Wenqi, Yao Ma, Qing Li, Yuan He, Eric Zhao, Jiliang Tang, and Dawei Yin. “Graph Neural Networks for Social Recommendation.” In The World Wide Web Conference , 417–426. ACM, 2019.
[13] Veličković, P., Cucurull, G., Casanova, A., Romero, A., Lio, P., & Bengio, Y. (2017). Graph attention networks. arXiv preprint arXiv:1710.10903 .
评论区
共 105 条评论热门最新