首页> 中国专利> 一种基于社会化编程网站的领域专家发现方法

一种基于社会化编程网站的领域专家发现方法

摘要

本发明公开了一种基于社会化编程网站的领域专家发现方法,该方法在给定输入搜索关键字的前提下,基于用户开发的历史项目,从GitHub所有用户中,找出该搜索关键字领域专家并进行排序。本发明能够基于GitHub数据集对用户在特定领域的编程能力进行建模,并发现给定领域的专家,实现IT领域的在线招聘;本发明方法在概率评分的基础上,引入了一种约束性假设,并以图正则的方式整合到概率评分模型中,有效地提升了搜索效率。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-05-07

    授权

    授权

  • 2017-01-11

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20160715

    实质审查的生效

  • 2016-12-14

    公开

    公开

说明书

技术领域

本发明属于信息检索技术领域,具体设计一种基于社会化编程网站的领域专家发现方法。

背景技术

随着社交网络的发展,整合社交媒体与分布式版本控制系统的社会化编程网站(Social Coding Sites,SCS)正逐渐改变着传统的软件开发模式。GitHub作为目前最大、最受欢迎的社会化编程网站之一,记录了所有用户的操作记录,项目信息。自2008年上线以来,最近几年一直以加速的方式快速发展,据统计,截至2015年6月10日,GitHub上的注册用户及托管项目已分别达到11,610,094和20,598,603。

在IT领域,程序员的招聘一直是一个高代价、困扰公司的难题,根据搜索关键字有效地搜索相关领域的编程人员,能够极大减少公司在招聘上的开销,并且能为公司的发展带来极大的价值。目前已有的招聘方式是基于LinkedIn来进行的,招聘方通过浏览应聘者在LinkedIn上传的简历来寻找合适的人员。但LinkedIn上的简历是需要应聘者去更新的,是“静态”的、不可信的。这样往往导致招聘方招不到合适的人员,或应聘者的能力与简历上的能力有较大的偏差。而GitHub能够为用户提供一个动态的、更加真实的编程能力的呈现。

GitHub的核心思想是强调以协同开发为主。GitHub不仅记录了用户在GitHub上参与开发的项目以及贡献的具体代码,而且用户之间形成了一个协作开发网络。在GitHub上用户之间可以进行关注,用户对项目可以进行修改、提交、关注等操作。GitHub很好地刻画了用户的编程能力,从用户开发的项目以及贡献量来衡量一个人对知识的掌握程度正好弥补了招聘领域只看简历的不足。因此,结合GitHub数据能为IT公司提供一种更加实际的招聘方式。

发明内容

基于上述,本发明提供了一种基于社会化编程网站的领域专家发现方法,在给定输入搜索关键字的前提下,基于用户开发的历史项目,从GitHub所有用户中,找出该搜索关键字领域专家并进行排序。

一种基于社会化编程网站的领域专家发现方法,包括如下步骤:

(1)对于社会化编程网站中的任一项目,从该项目的自述文件中抽取项目的描述文本,进而利用描述文本计算该项目与搜索关键词之间的语义相似度;依此遍历所有项目,组成项目与搜索关键词之间的语义相似度向量x0

(2)根据所述的语义相似度向量x0,建立以下目标函数Ω(x)并对其进行最小化求解,得到项目与搜索关键词之间的关联度向量x;

Ω(x)=xT(I-SR)x+μR||x-x0||2

其中:I为单位矩阵,SR为项目之间的相似度矩阵,μR为正则化因子,T表示转置;

(3)根据公式计算出开发者在搜索关键词领域的专业度向量,该专业度向量中的每一元素值即对应各开发者在搜索关键词领域的专业分值,进而按专业分值从高到低对开发者进行排序展现;其中:QR为n维对角矩阵且其中第i行第i列对角线元素值即对应为第i个项目的质量,n为社会化编程网站中的项目总数,PRD为开发者与项目之间的关联矩阵。

所述的步骤(1)中从自述文件中抽取项目的描述文本,具体过程如下:首先,将自述文件分割成多段,其中对于markdown格式的自述文件,以markdown中特殊标签(如“##”,“==”,“-”)对其进行文本切割;对于纯文本格式的自述文件,取其中字符数小于40且全为字母的行为标题行,并以标题行对其进行文本切割;然后,取自述文件的前三段进行分析,若存在某段标题中含有description或feature,则抽取该段作为项目的描述文本,否则抽取第一段作为项目的描述文本。

所述的步骤(1)中采用TF-IDF(term frequency–inverse document frequency)计算描述文本与搜索关键词之间的余弦相似度作为项目与搜索关键词之间的语义相似度。

所述的步骤(2)中采用以下迭代方程对目标函数Ω(x)进行最小化求解,待迭代收敛或达到最大迭代次数时的输出作为所述的关联度向量x;

xt+1=αSRxt+(1-α)x0

其中:xt+1和xt分别为第t+1次和第t次迭代项目与搜索关键词之间的关联度向量,α=1/(1+μR),t为自然数。

所述的相似度矩阵SR的表达式如下:

SR=Π-1/2-1/2

其中:W为n维方阵,若第i个项目与第j个项目被同一个人开发过,则方阵W中第i行第j列元素值Wij=1,否则Wij=0;∏为n维对角矩阵且其中第i行第i列对角线元素值i和j均为自然数且1≤i≤n,1≤j≤n。

任一项目的质量采用其在社会化编程网站中被关注数来表征。

所述的关联矩阵PRD为n×m维矩阵,其中第i行第k列元素值对应为第k个开发者对于第i个项目的贡献率,若第k个开发者未开发过第i个项目,则该贡献率为0;若第k个开发者开发过第i个项目,则该贡献率为li为第i个项目的总代码量,为第k个开发者对第i个项目的代码贡献量;k为自然数且1≤k≤m,m为社会化编程网站中的开发者总人数。

本发明的有益技术效果如下:

(1)本发明能够基于GitHub数据集对用户在特定领域的编程能力进行建模,并发现给定领域的专家,实现IT领域的在线招聘。

(2)本发明方法在概率评分的基础上,引入了一种约束性假设,并以图正则的方式整合到概率评分模型中,有效地提升了搜索效率。

附图说明

图1为本发明方法的流程示意图。

具体实施方式

为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。

GitHub作为一个社会化编程网站,记录了所有用户的操作记录,项目信息。本发明在给定输入搜索关键字的前提下,基于用户开发的历史项目,从GitHub所有用户中,找出该搜索关键字领域专家并进行排序。

本发明首先提出了一种概率评分模型,然后在概率模型之上基于用户协同开发网络引入了一个约束假设。图1描述了在给定搜索关键字的前提下,发现该领域的专家并排序的算法流程。本发明方法及其系统的思路在于:在评定一个专家候选者在某领域的专业程度时,我们认为该候选者的专业分数为他所开发项目与给定搜索关键字的相关性及开发质量的和;具体过程如下:

步骤一:数据抽取

在专家发现的过程中,需要计算给定搜索关键字与用户开发项目之间的语义相关性,在本实施方式中我们采用Language Model进行语义相关性计算。由于项目之间的文本信息主要出现在description字段以及README文件中,而README文件中含有大量的代码,这将成为计算相关性的噪声,所以我们需要从README文件中提取出真正描述项目的文本。

首先对README文件进行分类,经过分析README主要以markdown和纯文本形式存在。对于markdown格式的README,我们以markdown中特殊标签,如“##”,“==”,“-”进行文本切割。对于纯文本格式的README,我们认为字符数小于40且全为字母的行为标题行,并以此标题行进行文本切割。

对于分段好的README文件,我们取出前3段进行分析,如果段标题中含有“description”,“feature”等搜索关键字的我们认为该段为描述文本,否则我们取第一段为描述文本。

步骤二:网络构建

将开发者集合表示为D={d1,d2,…,dm},项目集合表示为R={r1,r2,…,rn},开发者与项目之间的网络可以表示称G=<V,E>,其中V=VD∪VR,E=ED∪ER∪ED,R。在项目-项目之间的网络中,如果两个项目被同一个人开发过,我们认为这两个项目是连接的,它们之间存在一条边。

步骤三:基于概率模型的评分算法

将专家候选者di在给定搜索关键字领域q的专业分数用概率p(di|q)表示。

其中,表示由开发者di所开发的项目集合。

在式1中,p(di|r)表示给定项目r属于开发者di的概率,体现了开发者对项目的贡献率。在本实施方式中,我们以开发者所贡献的代码量表示开发者在该项目中占有的份额。设项目r的总代码量为lr,开发者di对项目r的贡献量为那么式1中的p(q|r)表示项目r与给定搜索关键字q之间的语义相似度,本实施方式中我们采用TF-IDF和余弦相似度来计算。p(r)可以表示项目r的质量,本实施方式中我们用项目的被关注数来表示项目的质量。

为了表示方便起见,用x表示搜索关键字q与项目之间的关联度向量xi=p(q|ri),QR为一对角矩阵,其对角线上的值表示项目的质量。用表示开发者与项目之间的关联矩阵。式1可以表示成如下公式:

f=PRDTQRx---(2)

其中,f向量表示候选开发者在搜索关键字领域的专业分数;输出的专家排名将根据f排名。

步骤四:引入约束性假设的评分算法

在概率模型的基础上,基于经验,我们认为地引入一个项目之间的约束性假设。项目约束假设:相似的项目与给定的搜索关键字之间的语义相似度应该也相似。

在概率模型中,本实施方式采用TF-IDF和余弦相似度来计算搜索关键字与项目之间的语义相似度向量,用x0表示。在概率模型的基础上,我们以正则的方式引入项目之间的约束假设,定义如下的损失函数:

Ω(x)=xT(I-SR)x+μR||x-x0||2(3)

其中,SR表示项目之间的相似度矩阵,μR表示正则因子。式3的第一项约束了相似的项目与给定搜索关键字的相似度应该也相似,第二项则表明约束后的x应该接近其初始值x0

设x*为x的最终解,可以得到如下公式:

(I-αSR)x*=(1-α)x0(4)

其中,α=1/(1+μR)。式4中,我们需要计算I-αSR的逆(I-αSR)-1。然而计算矩阵的逆具有较高的复杂度,本实施方式给出了一种数值近似解。

x(t+1)=αSRx(t)+(1-α)x0(5)

其中,x*=x(∞)为x的最终解,将x*代入式2中即可求的最终的候选开发者在搜索关键字领域的专业分数向量f*

接下来,我们给出在项目网络GR中,如何计算项目之间的相似度。基于图理论,对于无向图,项目节点之间的相似度SR可以定义为如下公式。

SR=∏-1/2-1/2(6)

其中,W表示项目网络GR的连接矩阵。如果项目i与项目j之间存在边,Wij=1,否则,Wij=0。Π为对角矩阵,其中Πii=∑jWij

利用上述1~4步骤,本发明基于GitHub数据集建立一个领域专家搜索系统,该系统共分为以下四个模块:

数据抽取模块,主要负责利用爬虫不断地从GitHub网站上爬取所需信息,并抽取相关数据。例如,很多项目都含有README文件(一个描述程序如何工作的文件),由于README含有大量的代码,在进行专家发现的过程中,会产生噪声,我们需要从README文件中抽取有用的文本描述信息,从而减少噪声的影响。

存储模块,主要负责将从GitHub中爬取的信息进行有效存储。本实施方式采用Mongodb进行数据存储,采用倒排文件索引进行文件检索。所有对数据库的操作通过调用接口来实现。

算法模块,主要负责在给定搜索关键字的前提下有效地发现该领域的专家,并进行排序返回结果。

服务模块,主要负责将该系统所实现的功能以Web服务的方式提供给用户。

上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号