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

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

中国开源码力榜是由 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/

相关文章
|
12天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
54 8
|
12天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
42 7
|
7天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
23 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
7天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
38 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
18天前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
19天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
23天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
67 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
92 8
|
1月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
26 4