999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

考慮開發(fā)者興趣遷移的開源項(xiàng)目推薦方法

2021-03-21 05:12:00趙佳斌趙海燕陳慶奎
關(guān)鍵詞:方法

趙佳斌,趙海燕,曹 健,陳慶奎

1(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院 上海市現(xiàn)代光學(xué)系統(tǒng)重點(diǎn)實(shí)驗(yàn)室光學(xué)儀器與系統(tǒng)教育部工程研究中心,上海 200093) 2(上海交通大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,上海 200030)

1 引 言

開源軟件已經(jīng)成為軟件開發(fā)與應(yīng)用中的重要模式.隨著開源項(xiàng)目托管系統(tǒng)如GitHub等的發(fā)展和普及,使得開源項(xiàng)目的數(shù)量大幅增加,開源社區(qū)也隨之受益.在開源項(xiàng)目托管系統(tǒng)中,開發(fā)者可以對感興趣的項(xiàng)目關(guān)注、分叉[1],在完成了一個(gè)功能的開發(fā)或者漏洞的修復(fù)后可進(jìn)行提交.開源社區(qū)通過分叉和pull-request將項(xiàng)目的修改與整合功能分開,這樣的模式吸引了大量的開發(fā)者,也便于他們參與貢獻(xiàn)[2,3].開發(fā)者也可以創(chuàng)建自己的公共倉庫,吸引其他的開發(fā)者參與貢獻(xiàn).因此,開發(fā)者的積極參與造就了許多繁榮的開源社區(qū).

開發(fā)者參與開源項(xiàng)目有著不同的需求和目的,例如專業(yè)的軟件開發(fā)人員會(huì)尋找新的編程挑戰(zhàn)或者是商業(yè)機(jī)會(huì),而初學(xué)者會(huì)利用社區(qū)中的優(yōu)質(zhì)資源來學(xué)習(xí)新的技能、提高能力等[4].為了尋找適合自己并有興趣的項(xiàng)目,開發(fā)者需要花費(fèi)時(shí)間在大量的項(xiàng)目中進(jìn)行尋找和決策.為了給這些開發(fā)者提供幫助,開源項(xiàng)目推薦系統(tǒng),它能幫助開發(fā)人員有效地發(fā)現(xiàn)那些潛在的、他們感興趣的開源項(xiàng)目.近年來,不少研究者提出了針對開源項(xiàng)目的推薦方法,如基于協(xié)同過濾的方法[6].然而,區(qū)別于傳統(tǒng)的電子商務(wù)推薦系統(tǒng),開發(fā)者通常不會(huì)對大量的開源項(xiàng)目貢獻(xiàn),這就使得開發(fā)者-項(xiàng)目的關(guān)聯(lián)矩陣較為稀疏.因此,研究者提出了根據(jù)開發(fā)者的行為對開發(fā)者的興趣進(jìn)行建模的方法[7,8],考慮項(xiàng)目的編程語言、主題等對開發(fā)者興趣建模的方法[9,10]等.這些方法的核心是基于開發(fā)者的歷史項(xiàng)目來對開發(fā)者進(jìn)行興趣建模.

然而,開發(fā)者在開源社區(qū)中的興趣是發(fā)生變化的.例如,出于能力拓展的需要,開發(fā)者可能會(huì)在小規(guī)模的開源項(xiàng)目中得到鍛煉后,切換到更大規(guī)模的項(xiàng)目.又如,新的編程語言出現(xiàn)后,開發(fā)者可能會(huì)進(jìn)入該語言的開源項(xiàng)目.目前提出的方法通過對一個(gè)開發(fā)者的歷史項(xiàng)目進(jìn)行分析難以反映其興趣遷移.

本文提出了一種混合方法來揭示開發(fā)者群體中存在的興趣遷移,首先對開源項(xiàng)目采用概率主題模型的方法進(jìn)行主題建模,其次對其中存在的主題順序模式進(jìn)行挖掘從而形成開發(fā)者群體的興趣遷移模式.在此基礎(chǔ)上,可以根據(jù)開發(fā)者的歷史項(xiàng)目信息預(yù)測其感興趣的項(xiàng)目,然后結(jié)合開發(fā)者的社交關(guān)系及項(xiàng)目流行度這兩項(xiàng)特征對候選池中的項(xiàng)目做排序進(jìn)而實(shí)現(xiàn)最相關(guān)的前N個(gè)開源項(xiàng)目的推薦.

2 相關(guān)工作

推薦系統(tǒng)已經(jīng)存在了很長一段時(shí)間了,軟件工程中的推薦系統(tǒng)近年來也逐漸得到了重視,為開發(fā)者推薦開源項(xiàng)目也引起了研究者的興趣.

協(xié)同過濾是推薦系統(tǒng)的重要算法之一,它基于如下假設(shè):如果兩個(gè)用戶執(zhí)行相似的操作,那么他們也更有可能以相同的方式執(zhí)行其他操作.文獻(xiàn)[5]就采用了協(xié)同過濾的推薦思想,他們根據(jù)開發(fā)者行為構(gòu)建了用戶行為矩陣,如果開發(fā)者參與過該項(xiàng)目則評(píng)分為1,否則為0.然后,基于項(xiàng)目協(xié)同過濾方法進(jìn)行TopN推薦.由于該矩陣的高度稀疏性,其實(shí)際性能不高.

為了揭示什么類型的行為數(shù)據(jù)適合用于項(xiàng)目推薦,文獻(xiàn)[6]中分析了在GitHub開源社區(qū)中開發(fā)者的多種不同行為,這些行為主要包括了分叉、關(guān)注、問題評(píng)論、推拉請求、成員等.在經(jīng)定量和定性的實(shí)驗(yàn)分析后,他們發(fā)現(xiàn)分叉行為適合推薦相關(guān)項(xiàng)目.文獻(xiàn)[7]進(jìn)一步研究了開發(fā)者的分叉行為.分叉行為主要用于對原項(xiàng)目進(jìn)行貢獻(xiàn),調(diào)查結(jié)果顯示42%的開發(fā)者表示自動(dòng)化推薦功能能夠有效幫助他們選擇項(xiàng)目進(jìn)行分叉操作;分叉的主要原因是開發(fā)者想要修改項(xiàng)目發(fā)起推拉請求并對項(xiàng)目做貢獻(xiàn);分叉行為不會(huì)產(chǎn)生不正當(dāng)競爭以及版本兼容性問題.他們的工作為開源社區(qū)中的項(xiàng)目個(gè)性化推薦提供了新的見解.文獻(xiàn)[8]采用了一種結(jié)合開發(fā)人員行為以及項(xiàng)目特征的推薦方法,從項(xiàng)目所包含的描述文件在內(nèi)的多種不同文件中提取項(xiàng)目特征進(jìn)而構(gòu)建項(xiàng)目相似矩陣,通過開發(fā)者行為構(gòu)建開發(fā)者項(xiàng)目關(guān)聯(lián)矩陣,同時(shí)還考慮了開發(fā)者反饋來提高推薦的準(zhǔn)確率.

開源項(xiàng)目的內(nèi)容特征也可以用于揭示開發(fā)者的興趣.文獻(xiàn)[9]使用了協(xié)同主題回歸的方式即結(jié)合用戶矩陣的傳統(tǒng)協(xié)同過濾與文本語料庫上的概率主題建模.文中提到的方法還為開發(fā)者和項(xiàng)目提供了高度可解釋的潛在結(jié)構(gòu).文獻(xiàn)[10]考慮了開源項(xiàng)目中出現(xiàn)的編程語言、主題和自述文檔,提出了一種混合方法來生成開源項(xiàng)目的推薦,最終的項(xiàng)目相似性為3種不同相似性的線性組合.具體做法是分別構(gòu)建語言向量、主題向量和項(xiàng)目自述文件向量,同時(shí)也為開發(fā)者構(gòu)建在這3個(gè)特征上的向量,然后計(jì)算得到最終的項(xiàng)目排序.文獻(xiàn)[11,12]主要關(guān)注項(xiàng)目的描述及源代碼來推薦開源項(xiàng)目,忽略了開發(fā)者的個(gè)性化需求.文獻(xiàn)[13]則用到了關(guān)聯(lián)規(guī)則挖掘的思想并結(jié)合了協(xié)同過濾,使用關(guān)聯(lián)規(guī)則挖掘共同參與的項(xiàng)目,而協(xié)同過濾被用于確定相似的項(xiàng)目.文獻(xiàn)[14]提出了一種基于深度學(xué)習(xí)的項(xiàng)目推薦方法,采用自動(dòng)編碼器來學(xué)習(xí)開發(fā)者與開源項(xiàng)目的向量表示.

不同于上述的工作,本文關(guān)注開發(fā)者在參與不同開源項(xiàng)目中存在的興趣遷移模式,提出了一種基于項(xiàng)目主題遷移頻繁模式挖掘的推薦算法.

3 基于項(xiàng)目主題遷移頻繁模式挖掘的推薦算法

3.1 算法思想

本文提出的算法關(guān)注了開發(fā)者參與不同開源項(xiàng)目的行為序列,在選擇項(xiàng)目的過程中會(huì)存在一定的規(guī)律和模式,通過主題建模的方式將開發(fā)者所參與的開源項(xiàng)目映射到不同的主題,由此開發(fā)者參與的項(xiàng)目序列轉(zhuǎn)化為主題序列;對不同的主題序列進(jìn)行順序模式挖掘,找到社區(qū)中開發(fā)者在選擇項(xiàng)目時(shí)的順序頻繁主題模式;然后用一種打分機(jī)制對產(chǎn)生的候選項(xiàng)目進(jìn)行打分,具體來說就是融合開發(fā)者社交關(guān)聯(lián)和項(xiàng)目流行度對項(xiàng)目進(jìn)行綜合打分,最后將得分最高的前N個(gè)項(xiàng)目作為最終的推薦結(jié)果.方法框架如圖1所示.

圖1 算法框架Fig.1 Algorithm framework

3.2 項(xiàng)目主題抽取

在該方法中,首先對開源項(xiàng)目的主題進(jìn)行挖掘,將類似的項(xiàng)目映射到同一個(gè)主題.用到的方法是LDA(Latent Dirichlet Allocation)概率主題模型,它是對文本隱含主題的一種建模方法,其主要功能是將文檔-詞匯矩陣轉(zhuǎn)化成文檔-主題分布和主題-詞匯分布.3層貝葉斯主題模型通過無監(jiān)督的學(xué)習(xí)方法發(fā)現(xiàn)文本所含主題,其基本思想就是文檔可以表示成一系列主題的混合分布.LDA模型的生成過程如圖2所示:1)對每篇文檔,從主題分布中提取一個(gè)主題;2)從該主題所對應(yīng)的單詞分布中抽取一個(gè)單詞;3)重復(fù)上述操作,直至遍歷整篇文檔.算法的輸入:分詞后為文檔集,超參數(shù)α,η.算法的輸出為:1)文檔中每個(gè)詞被分配的主題編號(hào);2)文檔的概率概率主題分布;3)每個(gè)主題下詞的概率分布;4)每個(gè)主題下概率從高到低排序的特征詞.

圖2 LDA概率主題生成模型Fig.2 LDA probabilistic topic generation model

圖2中α,η為分布的超參數(shù),θd表示對于任意文檔d的主題分布,βk對任意主題k的詞分布,文檔主題的先驗(yàn)分布和主題中詞的先驗(yàn)分布均為Dirichlet分布.Zd,n表示對文檔d中的第n個(gè)詞在θd下得到的主題編號(hào),wd,n表示在Zd,n主題編號(hào)下詞的概率分布.其中的核心公式如公式(1)所示,公式中以主題t作為中間層,通過當(dāng)前的θd和βk給出了文檔d中出現(xiàn)單詞w的概率,用θd計(jì)算得到p(t|d),用βk計(jì)算得到p(w|t).

p(w|d)=p(w|t)*p(t|d)

(1)

為了抽取開源項(xiàng)目的主題,對融合了開源項(xiàng)目描述、標(biāo)簽和開發(fā)語言的文本文檔做基于LDA的概率主題建模,從而將項(xiàng)目對應(yīng)的文本轉(zhuǎn)化成了若干主題的分布.首先對文本做預(yù)處理,包括分詞、去除標(biāo)點(diǎn)、去停用詞、詞干還原等;其次,將經(jīng)過預(yù)處理的文本用TF-IDF做文本向量化,然后進(jìn)行LDA主題建模,輸出項(xiàng)目對應(yīng)的概率主題分布.

LDA是一個(gè)概率主題模型,為了更多地保留項(xiàng)目的特征信息,本文在選出了每個(gè)項(xiàng)目最貼切的一個(gè)主題的基礎(chǔ)上,設(shè)置了一個(gè)閾值.具體做法是,將項(xiàng)目所對應(yīng)的多個(gè)主題分布按概率大小做排序保留大于該閾值的主題.如此,一個(gè)項(xiàng)目可能只對應(yīng)一個(gè)主題,也可能對應(yīng)多個(gè)主題.

3.3 主題順序頻繁模式挖掘

數(shù)據(jù)集中頻繁出現(xiàn)的項(xiàng)集、序列或子結(jié)構(gòu)稱之為頻繁模式,經(jīng)常被用于購物籃分析、網(wǎng)頁日志分析等.本文采用順序頻繁模式挖掘的方法對項(xiàng)目的主題的序列模式進(jìn)行挖掘.開發(fā)者的偏好變化通過參與項(xiàng)目的行為序列來凸顯,通過對開發(fā)者參與項(xiàng)目序列的主題的挖掘可以預(yù)計(jì)開發(fā)者在參與了某一主題的項(xiàng)目后會(huì)接著參與哪個(gè)主題對應(yīng)的項(xiàng)目.

對開源項(xiàng)目完成主題建模后,開發(fā)者原本參與項(xiàng)目的行為序列由轉(zhuǎn)化為<{topic11,topic12, …,topic1k1},{topic21,topic22, …,topic2k2},…,{topicn1,topicn2, …,topicnkn}>,其中repoi表示開發(fā)者參與的項(xiàng)目名,topicij表示項(xiàng)目i對應(yīng)的第j個(gè)主題,并且假設(shè)每個(gè)項(xiàng)目取kn個(gè)主題.本文對其中存在的順序頻繁主題模式進(jìn)行

圖3 GSP算法流程Fig.3 GSP algorithm flow

挖掘.順序頻繁模式挖掘的主要任務(wù)是找到數(shù)據(jù)庫中存在的所有順序模式,即在序列集合中出現(xiàn)頻率超過最小支持度的子序列.常用到的算法是GSP(Generalized Sequential Pattern mining algorithm)[16]算法,該算法增加了掃描過程中的條件約束包括時(shí)間、滑動(dòng)窗口和分類層次,是一種基于優(yōu)先級(jí)原則的算法,其中用來存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)為哈希樹.算法的輸入是主題序列數(shù)據(jù)、最小支持度閾值,輸出是順序頻繁模式.

GSP算法的主要流程如圖3所示.

但是,本文需要挖掘的序列是由數(shù)量不等的主題構(gòu)成的集合序列.因此,結(jié)合本文所涉及問題的特點(diǎn),對GSP算法進(jìn)行修改.在其基礎(chǔ)上本文提出了GSP-SS(GSP for Set Sequences)算法.在主題建模的過程中,一個(gè)項(xiàng)目對應(yīng)了多個(gè)主題,例如項(xiàng)目i,在經(jīng)閾值篩選后它的第1主題為topic52,第2主題為topic16,第3主題為topic44,采用GSP-SS算法在得到順序頻繁模式的同時(shí)也會(huì)得到該頻繁模式所對應(yīng)的重要度.

GSP-SS算法偽代碼如下:

輸入:項(xiàng)目所對應(yīng)的主題序列數(shù)據(jù),最小支持度閾值;

輸出:主題順序模式Li及其重要度.

1.C1←init-pass(S);//遍歷輸入數(shù)據(jù)并產(chǎn)生1頻繁模式

2.topicSupportArray=[repo1:[0,0,…,0k1],repo2:[0,0, …,0k2], … ,repon:[0,0,…,0kn].]

//空數(shù)組topicSupportArray保存重要度

3.L1←{<{l}>|l∈C1,Count(l)/n≥min_sup};

//最小支持度閾值的判斷

4.for(i=2,Li-1≠Φ,i++)do

5.Ci←generate-candidate-SPM(Ci-1)

//產(chǎn)生k-頻繁序列模式

6.foreachs∈Sdo

7.foreachc∈Cido

8.ifcis contained insthen

9. Count(c)++;//c的支持度

10.fortopicinc:

11.topicSupportArray[s.index][c′sindexins]++ //每出現(xiàn)一次重要度計(jì)數(shù)加1

12.endfor

13.endfor

14.Li={c∈Ci|Count(c)≥min_sup};

15.endfor

16. sort(topicSupportArray[data sequence index:])

//交換key,value;key填回topic

函數(shù)generate-candidate-SPM(Ci-1)偽代碼如下:

To generateCk//產(chǎn)生大小為k的候選項(xiàng)

1. Join step.

si′=si-1st //-1st,表示去掉第一個(gè)元素項(xiàng)

sj′=sj-Last //-Last,表示去掉最后一個(gè)元素項(xiàng)

ifsi′==sj′do

s←Joinsi′ andsj′ // 做連接操作

2. Prune step

ifany subsequence ofck-1is not infrequent

deleteck-1//做剪枝操作

S為主題序列數(shù)據(jù),Ck為候選k-頻繁序列模式,Lk為候選k-頻繁序列模式.

GSP-SS算法說明:對產(chǎn)生的主題序列S數(shù)據(jù)庫進(jìn)行掃描,得到長為1-主題順序模式L1并做最小支持度判斷將其作為初始種子集;對L1做連接操作并判斷是否滿足最小支持度,產(chǎn)生2-主題順序模式;用L2做連接操作產(chǎn)生3-主題順序模式,其中會(huì)有剪枝操作和最小支持度判斷;然后用3-順序主題模式L3挖掘直到不產(chǎn)生候選項(xiàng).在挖掘的過程中設(shè)置了數(shù)組topicSupportArray來存放所挖掘出主題模式的重要度,最后在得到主題順序模式的同時(shí)附帶將其重要度一并輸出.其中完成連接操作和剪切操作的generate-candiate-SPM是該算法的核心.連接階段:對于兩個(gè)順序模式Si和Sj,如果刪除Si的第一個(gè)項(xiàng)目得到序列與刪掉Sj的最后一個(gè)項(xiàng)目所得序列相同.那么對Si和Sj做連接操作.剪切階段:對于任意一個(gè)序列模式,如若它的子序列不是序列模式,那么這個(gè)序列模式就不可能成為序列模式,將其剪切即刪除掉.

3.4 開發(fā)者社交特征及項(xiàng)目流行度建模

3.4.1 開發(fā)者社交關(guān)聯(lián)

不同于企業(yè)有組織的軟件開發(fā)團(tuán)隊(duì),開源軟件團(tuán)隊(duì)具有多樣性和流動(dòng)性,通常以自組織[17]的方式參與到軟件項(xiàng)目開發(fā)中.Github開源社區(qū)提供了包括@、關(guān)注和評(píng)論等多種方式方便開發(fā)人員溝通和交流.

通過使用關(guān)注功能,開發(fā)者能關(guān)注自己感興趣的開發(fā)者,關(guān)注開發(fā)者能看到他們以往及近期的實(shí)踐工作,了解他們在相關(guān)領(lǐng)域的貢獻(xiàn)以及研究.通過評(píng)論功能,開發(fā)者們能夠在不同問題下展開討論進(jìn)而解決問題.對自組織網(wǎng)絡(luò)的研究表明,相較于新的合作,人們更喜歡重復(fù)合作,因?yàn)樗麄冋J(rèn)為這樣的合作往往更有凝聚性.文獻(xiàn)[18]研究了社會(huì)化因素對GitHub這個(gè)新興生態(tài)系統(tǒng)的影響,包括開發(fā)團(tuán)隊(duì)的形成已經(jīng)開發(fā)人員的遷移等.其中社交關(guān)系的強(qiáng)度會(huì)影響開發(fā)者的選擇,開發(fā)人員會(huì)優(yōu)先加入存在社交聯(lián)系的項(xiàng)目.有社交關(guān)聯(lián)的開發(fā)者們往往具有類似的興趣點(diǎn),同時(shí)基于先前的互動(dòng)或合作,開發(fā)人員對彼此的技能和社交習(xí)慣都有更多地了解.因此,本文將開發(fā)者的社交關(guān)系作為開源項(xiàng)目推薦過程中考慮的因素之一.

GitHub中所提供的項(xiàng)目issue功能是一種輕量級(jí)的協(xié)作系統(tǒng),在issue comment下可以進(jìn)行內(nèi)容豐富的交流,主要針對問題解決、項(xiàng)目存在的Bug和下一項(xiàng)功能的增加等展開討論.GitHub定義了pull-request為一種通知機(jī)制即你修改了他人的代碼希望原作者能合并你的修改,用pull-request來通知作者.它是一種軟件開發(fā)合作方式,將不同功能的代碼通過這一流程納入到項(xiàng)目主干.通過其自帶的評(píng)論功能對所提交的修改進(jìn)行討論、測試并決定是否將其合并.根據(jù)社區(qū)中的參與同一個(gè)issue問題評(píng)論、同一個(gè)pull-request評(píng)論來構(gòu)建每位開發(fā)者的社交關(guān)系.對于開發(fā)者u,其候選項(xiàng)目池中的項(xiàng)目i的社交關(guān)系計(jì)算如公式(2)所示:

Social(u,i)=n(uinteract)

(2)

其中n(uinteract)表示在項(xiàng)目i中與之有過互動(dòng)的開發(fā)者數(shù)量.

3.4.2 項(xiàng)目流行度

在開源社區(qū)中,也存在“馬太效應(yīng)”,相比于那些冷門的項(xiàng)目,活躍的、受關(guān)注度高的開源項(xiàng)目更容易吸引開發(fā)者.在每個(gè)GitHub項(xiàng)目頁面的右上方有watch、star、fork這3個(gè)不同的按鈕.其中的star更像是“點(diǎn)贊”,因此本文選擇了關(guān)注和分叉的數(shù)量來評(píng)價(jià)一個(gè)項(xiàng)目的流行與否.

Watch(關(guān)注)的數(shù)量,對于他人的項(xiàng)目默認(rèn)都是Not watching的狀態(tài),當(dāng)開發(fā)者對該項(xiàng)目感興趣時(shí)就能選擇關(guān)注該項(xiàng)目的所有動(dòng)態(tài),例如該項(xiàng)目有開發(fā)者提交pull request、提出了issue等,便能從系統(tǒng)推送中了解該項(xiàng)目發(fā)生的一切動(dòng)態(tài)變化.所以項(xiàng)目擁有的關(guān)注者數(shù)量能反應(yīng)其受用戶關(guān)注程度.

Fork(分叉)的數(shù)量,當(dāng)你有了對一個(gè)項(xiàng)目做貢獻(xiàn)的想法包括增加新功能、漏洞修復(fù)或者在該項(xiàng)目的基礎(chǔ)上開發(fā)一個(gè)自己的版本,可以點(diǎn)擊fork按鈕得到一份原項(xiàng)目的副本.

結(jié)合關(guān)注和分叉這兩者的數(shù)量來計(jì)算項(xiàng)目的流行度,對兩者者的數(shù)量歸一化后進(jìn)行求和.對于項(xiàng)目i的流行度,計(jì)算公式如公式(3)所示:

pop(i)=nor(n(iwatch))+nor(n(ifork))

(3)

其中n(iwatch)表示項(xiàng)目i關(guān)注者的數(shù)量,n(ifork)表示項(xiàng)目i分叉者的數(shù)量,nor()表示歸一化計(jì)算函數(shù).

3.5 推薦方法

通過概率主題建模的方法將開發(fā)者參與的開源項(xiàng)目映射成主題序列,將訓(xùn)練集中的開發(fā)者參與主題序列事務(wù)集記作C={C1,C2,C3,…,Cu}其中u為開發(fā)者人數(shù),Cu表示開發(fā)者參與項(xiàng)目經(jīng)過主題泛化后得到的主題序列.將主題順序模式記作P,min_supp是最小支持度閾值,當(dāng)模式P的支持度大于min_supp則P為順序主題模式.采用GSP-SS算法對順序主題序列模式做挖掘,將開發(fā)者參與的主題序列事物集作為GSP-SS算法的輸入,設(shè)置min_supp,運(yùn)行GSP-SS程序輸出主題頻繁順序模式項(xiàng),記作P={P1,P2,P3,…,Pj}其中j為產(chǎn)生的模式數(shù)量.

采用一個(gè)多叉樹的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)主題模式與模式庫中的模式項(xiàng)的對應(yīng)關(guān)系.將模式的候選集記作H={HP1,HP2,HP3, …,HPj}.

對于測試集中的數(shù)據(jù),給定開發(fā)者參與的歷史項(xiàng)目,將其映射為對應(yīng)的主題即,將其與多叉樹中存儲(chǔ)的主題模式做匹配,重復(fù)該操作得到候選推薦項(xiàng)目集合H(ri).對于產(chǎn)生的集合中的項(xiàng)目用計(jì)算評(píng)分的方法為其打分,將集合H中的項(xiàng)目按照分值做降序排列得到Top-N個(gè)推薦項(xiàng)目列表,開發(fā)者u對項(xiàng)目ri的得分計(jì)算如公式(4)所示:

S(u,ri)=α*nor(pop(i))+(1-α)*nor(social(u,i))

(4)

其中pop(i)表示項(xiàng)目的流行度,social(u,i)表示社交關(guān)聯(lián)度,α表示權(quán)重參數(shù),nor()表示歸一化函數(shù).

算法描述如下:

輸入:開發(fā)者參與的歷史項(xiàng)目集合X,順序模式P;

輸出:Top-N推薦項(xiàng)目列表.

1.使用LDA主題模型將X轉(zhuǎn)化為C={C1,C2,C3,…,Cu};

2.forj=1 tojdo

3.foreachCu∈Cdo

4.ifPjinCudo

5.Pj在Cu中的末尾位置記作l,從X中的第l+1個(gè)位置得到ri

6.endif

7.endfor

8.H←H∪HPj

9.endfor

10.用公式(4)為H中的項(xiàng)目打分并做降序排序

11.returnTop-N 推薦項(xiàng)目列表

4 實(shí)驗(yàn)與討論

4.1 數(shù)據(jù)集

本文使用的數(shù)據(jù)集是從GHTorrent[15]中轉(zhuǎn)儲(chǔ)得到的,GHTorrent項(xiàng)目提供了GitHub 的API數(shù)據(jù)的鏡像,可以離線查詢.它旨在用于與軟件存儲(chǔ)倉庫有關(guān)的研究與發(fā)現(xiàn).本文選取了2016-2018年間的數(shù)據(jù),為了讓實(shí)驗(yàn)數(shù)據(jù)更具有代表性,篩選出的開發(fā)者和開源項(xiàng)目滿足如下條件:1)開發(fā)者至少參與了5個(gè)不同的開源項(xiàng)目;2)與其他開發(fā)者有過互動(dòng)即在同一個(gè)問題或推拉請求下有過討論;3)開源項(xiàng)目為原始項(xiàng)目即不是從其他項(xiàng)目分叉而來;4)開源項(xiàng)目至少有5名開發(fā)者參與過.開發(fā)者參與項(xiàng)目數(shù)據(jù)格式如:開發(fā)者編號(hào)-項(xiàng)目編號(hào)-時(shí)間戳.開源項(xiàng)目信息包含:項(xiàng)目編號(hào)、項(xiàng)目開發(fā)語言、項(xiàng)目描述和項(xiàng)目標(biāo)簽.經(jīng)篩選后得到了開發(fā)者數(shù)量18399個(gè),開源項(xiàng)目數(shù)量23076個(gè).根據(jù)開發(fā)者參與項(xiàng)目的時(shí)間戳的先后順序來創(chuàng)建開發(fā)者參與項(xiàng)目序列數(shù)據(jù),根據(jù)項(xiàng)目開發(fā)語言、項(xiàng)目描述和項(xiàng)目標(biāo)簽來創(chuàng)建項(xiàng)目文檔數(shù)據(jù)用作主題建模.

關(guān)于訓(xùn)練集和測試集的劃分.本文將開發(fā)者近一年參與的項(xiàng)目作為測試集用作實(shí)驗(yàn)的預(yù)測數(shù)據(jù),剩余的其他數(shù)據(jù)用作實(shí)驗(yàn)?zāi)P偷挠?xùn)練數(shù)據(jù).

4.2 評(píng)價(jià)指標(biāo)采用召回率

考慮到本文的推薦場景為Top-N的前N個(gè)項(xiàng)目的推薦即向開發(fā)者提供一個(gè)推薦的列表讓其進(jìn)行選擇,故采用了召回率Recall來評(píng)價(jià)所提算法的推薦效果.召回率表示用戶感興趣的項(xiàng)目被推薦系統(tǒng)成功推薦的概率,計(jì)算公式如公式(5)所示:

(5)

其中R(u)為根據(jù)開發(fā)者u在訓(xùn)練集上的表現(xiàn)向其推薦的項(xiàng)目集,T(u)為開發(fā)者u在測試集上參與過的項(xiàng)目集.

4.3 基準(zhǔn)推薦算法

本文選擇了3種常見的推薦算法作為對比方法.

1)基于項(xiàng)目流行度的推薦方法,該方法圍繞項(xiàng)目“熱度”展開,將對用戶有著強(qiáng)吸引力的項(xiàng)目推薦給其他開發(fā)者.采用這一方法做推薦的主要工作就是計(jì)算每個(gè)項(xiàng)目的流行度,推薦列表為開發(fā)者未曾參與過的流行的Top-N個(gè)開源項(xiàng)目;

2)基于用戶的協(xié)同過濾推薦[19],這個(gè)算法通常分為兩個(gè)步驟,首先找到與目標(biāo)開發(fā)者相似的若干開發(fā)者,然后將這個(gè)集合中開發(fā)者參與過的但目標(biāo)開發(fā)者未曾參與的項(xiàng)目作為推薦列表.設(shè)置最相似的開發(fā)者數(shù)量K=20,相似度計(jì)算采用余弦相似性;

3)基于內(nèi)容的推薦算法,根據(jù)開發(fā)者做過的項(xiàng)目描述、開發(fā)語言及標(biāo)簽來推薦類似的開源項(xiàng)目,采用文本處理方法:詞頻-逆文檔頻率(TF-IDF)將文本向量化隨后計(jì)算項(xiàng)目之間的余弦相似度,推薦列為與其最相似的Top-N個(gè)項(xiàng)目.

本文所提推薦的推薦算法,將主題個(gè)數(shù)K設(shè)置為90,主題模式挖掘中的最小支持度min_supp設(shè)置為5.

4.4 實(shí)驗(yàn)結(jié)果分析

不同推薦方法下實(shí)驗(yàn)結(jié)果如表1所示,采用的評(píng)價(jià)方法為召回率.

表1 實(shí)驗(yàn)結(jié)果表Table 1 Experiment resultTable

開發(fā)者社交特征及項(xiàng)目流行度建模中的公式(4),不同α的取值對推薦結(jié)果的影響如圖4所示.實(shí)驗(yàn)中本文將α值設(shè)置為0.3.

圖4 α的取值對推薦結(jié)果的影響Fig.4 Value of α versus the recommended result

實(shí)驗(yàn)結(jié)果表明,當(dāng)推薦項(xiàng)目數(shù)量N值增大的時(shí)候,四種不同推薦方法的召回率均逐漸增大,說明在推薦列表中開發(fā)者感興趣的項(xiàng)目數(shù)量增多了.本文提出的基于主題模式挖掘的推薦方法在召回率上優(yōu)于其余3種對比方法,對項(xiàng)目的主題模式挖掘考慮到了開源項(xiàng)目的內(nèi)容特征,引入的評(píng)分機(jī)制兼顧了開發(fā)者的社交情況以及項(xiàng)目自身的流行度特點(diǎn),進(jìn)而提高了推薦效果.

5 總結(jié)與展望

近年來,分布式軟件開發(fā)與社交化編程得到了人們的廣泛認(rèn)可,GitHub開源社區(qū)更是引領(lǐng)了新的開源文化.GitHub“去中心化”的開源模式,不斷彰顯和強(qiáng)調(diào)作為個(gè)體的開發(fā)者的作用,鼓勵(lì)他們對他人的項(xiàng)目做修復(fù)和改進(jìn).開源社區(qū)的壯大也使得開源項(xiàng)目的數(shù)量大幅增加,開源項(xiàng)目推薦系統(tǒng)能幫助開發(fā)者找到他們有意愿參與的項(xiàng)目.

本文提出了一種基于項(xiàng)目主題模式挖掘的推薦方法,關(guān)注了開發(fā)者在項(xiàng)目遷移過程中存在的規(guī)律,用開源項(xiàng)目的內(nèi)容特征為項(xiàng)目進(jìn)行主題建模,開發(fā)者參與項(xiàng)目的項(xiàng)目序列轉(zhuǎn)化為主題序列;隨后對其中存在的主題順序模式進(jìn)行挖掘;接著融合開發(fā)者的社交關(guān)聯(lián)和項(xiàng)目自身的流行度這兩個(gè)特點(diǎn)實(shí)現(xiàn)了Top-N個(gè)開源項(xiàng)目推薦;最后在實(shí)驗(yàn)數(shù)據(jù)集上與傳統(tǒng)推薦方法進(jìn)行對比,推薦效果得到了有效的提升.未來的工作可以關(guān)注對項(xiàng)目的主題建模和開發(fā)者在項(xiàng)目遷移過程中是選擇下一個(gè)項(xiàng)目的其他因素,考慮更多的文本內(nèi)容比如代碼所蘊(yùn)含的注釋、函數(shù)名等,有助于提高項(xiàng)目與主題的契合程度.

猜你喜歡
方法
中醫(yī)特有的急救方法
中老年保健(2021年9期)2021-08-24 03:52:04
高中數(shù)學(xué)教學(xué)改革的方法
化學(xué)反應(yīng)多變幻 “虛擬”方法幫大忙
變快的方法
兒童繪本(2020年5期)2020-04-07 17:46:30
學(xué)習(xí)方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
最有效的簡單方法
山東青年(2016年1期)2016-02-28 14:25:23
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 日韩国产精品无码一区二区三区 | 国产精品一区不卡| www.国产福利| 尤物亚洲最大AV无码网站| 久草美女视频| 久久香蕉国产线看精品| 亚洲娇小与黑人巨大交| 亚洲成人一区二区三区| 五月婷婷丁香综合| 久久久黄色片| 不卡无码网| 精品视频一区二区三区在线播| 26uuu国产精品视频| 亚洲精品天堂自在久久77| 久热这里只有精品6| 国产精品无码久久久久AV| 亚洲精品无码不卡在线播放| 成人va亚洲va欧美天堂| 91精品视频播放| 91美女视频在线观看| 福利姬国产精品一区在线| 毛片最新网址| 欧美综合激情| 国产毛片基地| 欧美黄色网站在线看| 国产福利拍拍拍| 亚洲成人动漫在线观看| 四虎国产精品永久一区| 亚洲热线99精品视频| 午夜三级在线| AV在线天堂进入| 国产精品熟女亚洲AV麻豆| 久久伊伊香蕉综合精品| 国产欧美日韩综合一区在线播放| 就去吻亚洲精品国产欧美| 嫩草国产在线| 亚洲人成电影在线播放| 亚洲国产欧美国产综合久久| 五月天香蕉视频国产亚| 婷婷亚洲天堂| 欧美亚洲香蕉| 国产欧美日韩另类精彩视频| 久久人与动人物A级毛片| 最新亚洲av女人的天堂| 97超碰精品成人国产| 天天综合色网| 成人av专区精品无码国产 | 999国产精品永久免费视频精品久久| 午夜福利亚洲精品| 欧美精品成人一区二区在线观看| 九九热精品免费视频| 婷婷开心中文字幕| 中文字幕乱码二三区免费| www.99在线观看| 青青草原国产av福利网站| 亚洲天堂啪啪| 国产 日韩 欧美 第二页| 九色免费视频| 欧美日韩免费| 国产啪在线91| 日韩精品成人网页视频在线 | 日本高清免费一本在线观看| 色播五月婷婷| 亚洲av无码久久无遮挡| 国产在线98福利播放视频免费| 自拍中文字幕| 国产本道久久一区二区三区| 男女男精品视频| 免费观看精品视频999| 亚洲一级毛片在线观| 精品一区二区三区视频免费观看| 午夜精品国产自在| 亚洲青涩在线| 久久综合丝袜长腿丝袜| 成人免费视频一区二区三区| 亚洲天堂伊人| 欧美日韩国产系列在线观看| 色婷婷在线影院| 超清无码一区二区三区| 免费毛片全部不收费的| 国产幂在线无码精品| 高潮毛片免费观看|