发明名称 一种基于开发者实践技能相似性的同行推荐方法
摘要 本发明公开了一种基于开发者实践技能相似性的同行推荐方法,本发明通过结合Sourceforge.net社区开发者的实践技能相似性与共同开发者数,计算两个开发者之间的得分,并通过对实践技能与共同开发者数之间的比重系数,以及表示开发者实践技能的各属性的比重系数分配情况进行分析,最终确定为社区开发者提供潜在合作同行推荐的最佳方案。本方法具有如下优点:(1)没有局限于单个开源项目下开发者社区推荐,而是以整个社区为推荐对象(如sourceforge.net),从一个更大的视角审视知识共享与群体智能优势;(2)不仅考虑了共同开发者数,还引入了开发者的实践技能相似性,确保在具有相同的共同开发者数情况下,实践技能越相似的开发者优先推荐。
申请公布号 CN103530428A 申请公布日期 2014.01.22
申请号 CN201310538491.0 申请日期 2013.11.04
申请人 武汉大学 发明人 李兵;何鹏;杨辉;汪文娟
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 武汉科皓知识产权代理事务所(特殊普通合伙) 42222 代理人 张火春
主权项 一种基于开发者实践技能相似性的同行推荐方法,其特征在于,包括以下步骤:步骤1:计算开发者间的实践技能相似性,其具体实现包括以下子步骤,步骤1.1:根据获得的社区数据,从中提取用于表示开发者实践技能的各种属性信息,将开发者实践技能Expertise表示为由开发者在项目中担任的角色ATp、项目的状态ATs、项目的主题ATt、项目的开发语言ATlan、项目的目标受众ATia和项目的认证ATlic六个属性构成的向量,即Expertise=(ATp,ATs,ATt,ATlan,ATia,ATlic),其中每一个属性又表示为ATi=(wi1,wi2,wi3,...,win),n为每个属性中所涉及的元素个数,wij为第i个属性的第j个元素的权值;步骤1.2:采用文本挖掘方法中的TF‑IDF公式,经对数变换处理得到一个开发者d在第i个属性的元素j上的权重wdij与属性向量|AT|标准化的表达式为: <mrow> <msub> <mi>w</mi> <mi>dij</mi> </msub> <mo>=</mo> <mrow> <mo>(</mo> <mi>log</mi> <msub> <mi>f</mi> <mi>dij</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mi>log</mi> <mfrac> <mrow> <mo>#</mo> <mi>devs</mi> </mrow> <mrow> <mo>#</mo> <msub> <mi>dev</mi> <mi>j</mi> </msub> </mrow> </mfrac> </mrow> <mrow> <mo>|</mo> <mi>AT</mi> <mo>|</mo> <mo>=</mo> <mfrac> <mn>1</mn> <msqrt> <msub> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>&Element;</mo> <msub> <mi>d</mi> <mi>i</mi> </msub> </mrow> </msub> <msup> <mrow> <mo>(</mo> <mrow> <mrow> <mo>(</mo> <mi>log</mi> <msub> <mi>f</mi> <mi>dij</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mi>log</mi> <mfrac> <mrow> <mo>#</mo> <mi>devs</mi> </mrow> <mrow> <mo>#</mo> <msub> <mi>dev</mi> <mi>j</mi> </msub> </mrow> </mfrac> <mo>)</mo> </mrow> </mrow> <mn>2</mn> </msup> </msqrt> </mfrac> </mrow>对于开发者d,如果第i个属性的第j个元素在他参与的项目中出现的次数fdij越多,且参与含有属性元素j的项目开发的开发者数#devj与总开发者数#devs的比值越小,则这个开发者在该属性元素上的实践技能越高;步骤1.3:采用余弦相似性计算两个开发者A和B的实践技能相似性Sim(A,B),则开发者A和B在第i个属性上的实践技能相似性为: <mrow> <mi>cos</mi> <mrow> <mo>(</mo> <msub> <mi>A</mi> <mrow> <mi>A</mi> <msub> <mi>T</mi> <mi>i</mi> </msub> </mrow> </msub> <mo>,</mo> <msub> <mi>B</mi> <msub> <mi>AT</mi> <mi>i</mi> </msub> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <msub> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>&Element;</mo> <msub> <mi>AT</mi> <mi>i</mi> </msub> <mo>&cap;</mo> <msub> <mi>BT</mi> <mi>i</mi> </msub> </mrow> </msub> <mrow> <mo>(</mo> <mi>log</mi> <msub> <mi>f</mi> <mi>Aij</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mrow> <mo>(</mo> <mi>log</mi> <msub> <mi>f</mi> <mi>Bij</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <msup> <mrow> <mo>(</mo> <mi>log</mi> <mfrac> <mrow> <mo>#</mo> <mi>devs</mi> </mrow> <mrow> <mo>#</mo> <msub> <mi>dev</mi> <mi>j</mi> </msub> </mrow> </mfrac> <mo>)</mo> </mrow> <mn>2</mn> </msup> </mrow> <mrow> <msqrt> <mrow> <msub> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>&Element;</mo> <msub> <mi>AT</mi> <mi>i</mi> </msub> </mrow> </msub> <msup> <mrow> <mo>(</mo> <mrow> <mo>(</mo> <mi>log</mi> <msub> <mi>f</mi> <mi>Aij</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mi>log</mi> <mfrac> <mrow> <mo>#</mo> <mi>devs</mi> </mrow> <mrow> <mo>#</mo> <msub> <mi>dev</mi> <mi>j</mi> </msub> </mrow> </mfrac> <mo>)</mo> </mrow> <mn>2</mn> </msup> </mrow> </msqrt> <mo>&CenterDot;</mo> <msqrt> <msub> <mi>&Sigma;</mi> <mrow> <mi>j</mi> <mo>&Element;</mo> <msub> <mi>BT</mi> <mi>i</mi> </msub> </mrow> </msub> <msup> <mrow> <mo>(</mo> <mrow> <mo>(</mo> <mi>log</mi> <msub> <mi>f</mi> <mi>Bij</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>&CenterDot;</mo> <mi>log</mi> <mfrac> <mrow> <mo>#</mo> <mi>devs</mi> </mrow> <mrow> <mo>#</mo> <msub> <mi>dev</mi> <mi>j</mi> </msub> </mrow> </mfrac> <mo>)</mo> </mrow> <mn>2</mn> </msup> </msqrt> </mrow> </mfrac> </mrow>因此,两个开发者A和B的实践技能相似性Sim(A,B)为: <mrow> <mi>Sim</mi> <mrow> <mo>(</mo> <mi>A</mi> <mo>,</mo> <mi>B</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>&alpha;</mi> <mi>i</mi> </msub> <mi>cos</mi> <mrow> <mo>(</mo> <msub> <mi>A</mi> <msub> <mi>AT</mi> <mi>i</mi> </msub> </msub> <mo>,</mo> <msub> <mi>B</mi> <msub> <mi>AT</mi> <mi>i</mi> </msub> </msub> <mo>)</mo> </mrow> <mo>,</mo> <mi>n</mi> <mo>=</mo> <mn>6</mn> </mrow>其中,αi依次为六个属性对应的比重系数,且αi满足∑αi=1,(i=1,2,...6);步骤2:计算开发者间共同开发者数,其具体实现包括以下子步骤,步骤2.1:根据开发者与项目的隶属关系,构建开发者‑项目二分网络BDEV_Net=(Nd,Np,Edp),Nd表示开发者的节点集,Np表示项目的节点集,Edp为开发者与项目之间的隶属关系集;步骤2.2:根据上述的BDEV_Net网络投影得到开发者合作网络DEV_Net=(Nd,Ed),即如果两个开发者参与了同一个项目的开发,则视为他们之间存在一条合作连边,Nd表示开发者的节点集,Ed为开发者合作连边集;步骤2.3:基于开发者合作网络DEV_Net,网络中最短路径为2的两个开发者A,B之间存在共同的合作同行,路径条数便为开发者间共同开发者数CDAB;步骤2.4:为标准化开发者间共同开发者数的影响,采用平方根函数处理CDAB,得到标准化后的两个开发者A和B的共同开发者数: <mrow> <mi>F</mi> <mrow> <mo>(</mo> <msub> <mi>CD</mi> <mi>AB</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mn>1</mn> <mo>-</mo> <mfrac> <mn>1</mn> <msqrt> <msub> <mi>CD</mi> <mi>AB</mi> </msub> <mo>+</mo> <mn>1</mn> </msqrt> </mfrac> <mo>;</mo> </mrow>步骤3:开发者潜在合作同行推荐,其具体实现包括以下子步骤,步骤3.1:给定任意一个开发者,结合该开发者与其他开发者的实践技能相似性与共同开发者数,计算开发者之间的得分Score(A,B): <mfenced open='' close=''> <mtable> <mtr> <mtd> <mi>Score</mi> <mrow> <mo>(</mo> <mi>A</mi> <mo>,</mo> <mi>B</mi> <mo>)</mo> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>E</mi> <mi>ab</mi> </msub> <mo>)</mo> </mrow> <mrow> <mo>(</mo> <mi>&beta;Sim</mi> <mrow> <mo>(</mo> <mtext>A,B</mtext> <mo>)</mo> </mrow> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&beta;</mi> <mo>)</mo> </mrow> <mi>F</mi> <mrow> <mo>(</mo> <msub> <mi>CD</mi> <mi>AB</mi> </msub> <mo>)</mo> </mrow> <mo>)</mo> </mrow> <mtext></mtext> </mtd> </mtr> <mtr> <mtd> <mo>=</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>E</mi> <mi>ab</mi> </msub> <mo>)</mo> </mrow> <mrow> <mo>(</mo> <mi>&beta;</mi> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>&alpha;</mi> <mi>i</mi> </msub> <mi>cos</mi> <mrow> <mo>(</mo> <msub> <mi>A</mi> <msub> <mi>AT</mi> <mi>i</mi> </msub> </msub> <mo>,</mo> <msub> <mi>B</mi> <msub> <mi>AT</mi> <mi>i</mi> </msub> </msub> <mo>)</mo> </mrow> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&beta;</mi> <mo>)</mo> </mrow> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mfrac> <mn>1</mn> <msqrt> <msub> <mi>CD</mi> <mi>AB</mi> </msub> <mo>+</mo> <mn>1</mn> </msqrt> </mfrac> <mo>)</mo> </mrow> <mo>)</mo> </mrow> </mtd> </mtr> </mtable> </mfenced>其中,β用来权衡实践技能相似性与共同开发者数的影响比重,β满足0≤β≤1;在开发者合作网络DEV_Net的Ed集中,若开发者A,B有合作,则Eab=1,否则为Eab=0;步骤3.2:根据开发者间的得分情况,对潜在的合作同行按照得分降序排列,最后为开发者返回前10个最可能建立合作的同行;步骤3.3:将推荐的结果与之后一年内开发者的实际合作情况进行对比,推荐的十个同行中,开发者只要与其中的任何一个建立了合作,则推荐成功,然后采用平均排序倒数MRR 和平均准确率MAP进行评价推荐效果。
地址 430072 湖北省武汉市武昌区珞珈山武汉大学