开源码力榜背后的算法模型

简介: 开源码力榜背后的算法模型

中国开源码力榜是由 SegmentFault 思否、开源社、腾源会、X-lab 实验室共同发起的中国开源开发者榜单。

来自 X-Lab 的 OpenDigger 团队对 GitHub 开放的归档日志进行分析,筛选出了 2021 全年 GitHub 协作影响力排名前 10,000 的账号,并号召了社区中数十位开发者及十余家合作社区,通过开放式协作共同核实标注信息、排除机器人账号,并在第一阶段甄选出了 99 位中国开发者。

中国开源码力榜发布后得到了很多开发者的关注,非常多开发者非常关心这个排名是如何产生的,背后的算法模型是什么样的?我们邀请了 OpenDigger 开源项目发起人赵生宇博士写了一篇博客来分享开源码力榜背后的算法模型

image.png

赵生宇是开源社 2022 年度理事,同济大学计算机博士在读,Wuhan2020、OpenDigger 等开源项目发起人,在 2020 年入选中国开源先锋 33 人

以下内容转载自赵生宇博士的博客《开源码力榜背后的算法模型


近期与思否合作发布的中国开源码力榜受到了众多开发者的关注,而其中大部分开发者会更加好奇这个排名是如何产生的,背后的算法是什么,为什么有些开发者上榜了,而有些没有。这篇博客就会大家了解一下这个榜单背后的算法,并希望得到大家的一些反馈,可以持续优化该榜单,使其可以更加全面和公正。

开源价值网络

之前的三篇博客已经介绍了一种基于协作数据的开源价值网络的异质图 PageRank 算法,而本次使用的就是仅包含协作数据的 GitHub 全域开发者-项目的价值网络,其结构如下所示:

image.png

这是原先设计的价值网络的一个简化版本,没有纳入开发者对项目的关注度关系(star、fork)、开发者之间的关注关系(follow)和项目之间的依赖关系(dependent),主要是考虑到算力的问题,以及某些尚未支持的对于缺失数据的鲁棒问题。

在建立起完整的网络后,我们按月对全域的开发者和项目进行协同排序,并得到所有开发者和项目的价值排名。即我们可以得到 2015 年至今每个月全域中活跃的所有开发者和项目的排名情况,而中国开源码力榜使用的则是 2021 全年的开发者加和数据。

与传统 PageRank 相比

这个算法模型与传统的 PageRank 算法类似,是使用全域的关系数据来进行协同排序,有几个基本的价值主张:

1、越有价值的项目容易吸引到越有价值的开发者来贡献

2、越有价值的项目容易吸引到越多的开发者来贡献

3、越有价值的开发者会在越有价值的项目上活跃

而与传统 PageRank 算法不同的地方在于,在开源价值网络中,不同类型的节点(开发者、项目)的计算方式可以是不同的,而且这个算法引入了先验知识,即节点的固有属性作为一部分参考,而不仅仅使用网络关系的数据。

也就是说:在开源价值网络中,每个月的项目和开发者的价值,将不仅仅取决于开发者和项目当月的活跃情况,也有一部分是继承于上个月的数据,这使得整个算法得到的结果具有非常好的平滑性,而且也是因为我们相信开源的长期价值,是不仅仅依赖当下的情况的。

具体参数

在本次的模型中,我们使用了如下的一些参数:

1、开发者-项目活跃度,使用的是实验室在往年的中国开源年报、GitHub 洞察报告中使用的计算方式,即

A=\sqrt{1 * C_{issue_comment} + 2 * C_{open_issue} + 3 * C_{open_pull} + 4 * C_{pull_review_comment} + 2 * C_{merged_pull}}A=1Cissuecomment+2Copenissue+3Copenpull+4Cpullreviewcomment+2Cmergedpull

即 Issue 评论计 1 分,打开新 Issue 计 2 分,提交 PR 计 3 分,PR 上的 review 评论计 4 分,合入 PR 额外计 2 分,最终开方,用以修正过高的活跃度。

2、开发者和项目的初始价值,即第一次开始活跃时的价值均为 1。

3、开发者每个月有 50% 的价值来源于自身的历史价值,50% 来源于当月的开源价值网络。

4、项目每个月有 30% 的价值来源于自身的历史价值,70% 来源于当月的开源价值网络。

常见问题

  • 为什么有些用户量和人气极高的项目作者没有入选,如 Vue 的作者尤大?

其实看完上面的说明,大家就应该明白了,本次的算法主要是以协作关系来计算的,并没有纳入如开源软件的用户数量这样的指标(当然,开源软件用户量一直是非常难以获取的,即便是项目自己可能也无法知道具体的数值)。所以对于那些有大批开发者持续活跃的项目来说,其较有优势,而对于用户量较大的项目,则无法体现,这与使用的数据和模型的参数有极大的关系,尤其是 Vue 是一个以尤大为核心相对独立维护的项目(可参考2019 年 Vue 项目协作网络图)。

  • 为什么有些非常活跃的开发者没有出现在榜单中?

虽然我们对全域的开发者和项目进行的协同排序,但我们没有办法准确知道哪些账号是中国开发者,所以我们花了较大精力进行了人工标注,但依然难免疏漏,目前已经有标注的中国用户清单已沉淀到 OpenDigger 中,可以从这里看到。如果有新的账号希望标注为中国开发者,可以提 Issue给 OpenDigger,合入后之后的计算就会纳入进来。

未来改进

1、引入 star、fork 关系。在本次的榜单中,从算力角度考虑,我们没有引入 star 和 fork 等数据,因为类 PageRank 的迭代类算法的时间复杂度与图密度是正相关的,而 star 这种低成本的操作会使得整个图的密度非常快的提升,从而使运算时间大幅增加,尤其是在对数千万节点的协同排序时。

2、引入开发者之间的 follow 关系。开发者的 follow 关系对于识别开发者 KOL 有很好的指导意义,但这里有一个数学层面的问题,就是在解决不完全数据下的 Rank Sink 问题,目前还没有来得及实现,会考虑引入类似 LeaderRank 的方式来低成本解决单向关系导致的一些问题。

3、项目依赖关系。事实上从用户角度出发,如果无法有效得到用户数量,那么项目的依赖关系是一个非常适合的数据,可以用来标识项目之间的使用关系,尤其在语言生态内会极为有效。但同样有与上述开发者 follow 关系一样的问题,并且还有额外的一些其他工程问题。

  • 以 Node.js 生态为例,已经发布到 npm 的包很好追踪其依赖关系,而只有仓库并未发布制品包的项目,就需要进一步以仓库中 package.json 文件的内容来解析其依赖关系,在全域上做这件事的成本是极高的。
  • 以 Java 生态为例,Maven 中心仓的元数据中并不包含上游仓库地址的信息,所以制品和仓库的关联是较大的问题,而且 Java 的发布策略中,仓库与制品包多对多的情况较多,这使得构建项目依赖关系更加复杂。

如果有同学对上述问题比较熟悉,而且知道如何解决,请一定联系我~~


image.png

关于中国开源码力榜

中国开源码力榜是由 SegmentFault 思否、开源社、腾源会、X-lab 实验室共同发起的中国开源开发者榜单。

来自 X-lab 的 OpenDigger 团队对 GitHub 开放的归档日志进行分析,筛选出了 2021 全年 GitHub 协作影响力排名前 10,000 的账号,并号召了社区中数十位开发者及十余家合作社区,通过开放式协作共同核实标注信息、排除机器人账号,第一阶段选出了 99 位中国开发者。

榜单发布后,我们收到社区反馈,新增了一位符合标准的来自中国的“开源码丽”Huan (李卓桓),也请开源世界的每一位开发者通过 Github 项目地址能积极的向我们反馈,我们会不间断的进行更新。

通过中国开源码力榜,我们希望开源世界的超级码丽、开源项目背后的开发者们可以被更多人知道、认识和 respect。让更多人关注开源、关注开源开发者成长。

项目地址:https://github.com/OpenSourceWin

项目官网:http://opensource.win/

相关文章
|
3月前
|
机器学习/深度学习 人工智能 JSON
微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
Microsoft Research最新推出的rStar2-Agent在AIME24数学基准测试中以80.6%的准确率超越超大规模模型DeepSeek-R1,展现“思考更聪明”而非“更长”的AI推理新方向。
178 8
微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
|
3月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
244 2
|
3月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
|
3月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
3月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
3月前
|
机器学习/深度学习 运维 算法
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
230 0
|
3月前
|
机器学习/深度学习 数据采集 传感器
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
246 0
|
4月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
158 2
|
3月前
|
机器学习/深度学习 存储 算法
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
127 0
|
5月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。

热门文章

最新文章