亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2021-03-21 05:12:00趙佳斌趙海燕陳慶奎
        小型微型計算機系統(tǒng) 2021年3期
        關(guān)鍵詞:方法

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

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

        1 引 言

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

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

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

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

        2 相關(guān)工作

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

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

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

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

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

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

        3.1 算法思想

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

        圖1 算法框架Fig.1 Algorithm framework

        3.2 項目主題抽取

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

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

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

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

        (1)

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

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

        3.3 主題順序頻繁模式挖掘

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

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

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

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

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

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

        GSP-SS算法偽代碼如下:

        輸入:項目所對應(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)一次重要度計數(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的候選項

        1. Join step.

        si′=si-1st //-1st,表示去掉第一個元素項

        sj′=sj-Last //-Last,表示去掉最后一個元素項

        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-主題順序模式,其中會有剪枝操作和最小支持度判斷;然后用3-順序主題模式L3挖掘直到不產(chǎn)生候選項.在挖掘的過程中設(shè)置了數(shù)組topicSupportArray來存放所挖掘出主題模式的重要度,最后在得到主題順序模式的同時附帶將其重要度一并輸出.其中完成連接操作和剪切操作的generate-candiate-SPM是該算法的核心.連接階段:對于兩個順序模式Si和Sj,如果刪除Si的第一個項目得到序列與刪掉Sj的最后一個項目所得序列相同.那么對Si和Sj做連接操作.剪切階段:對于任意一個序列模式,如若它的子序列不是序列模式,那么這個序列模式就不可能成為序列模式,將其剪切即刪除掉.

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

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

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

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

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

        Social(u,i)=n(uinteract)

        (2)

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

        3.4.2 項目流行度

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

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

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

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

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

        (3)

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

        3.5 推薦方法

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

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

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

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

        (4)

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

        算法描述如下:

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

        輸出:Top-N推薦項目列表.

        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個位置得到ri

        6.endif

        7.endfor

        8.H←H∪HPj

        9.endfor

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

        11.returnTop-N 推薦項目列表

        4 實驗與討論

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

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

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

        4.2 評價指標(biāo)采用召回率

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

        (5)

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

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

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

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

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

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

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

        4.4 實驗結(jié)果分析

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

        表1 實驗結(jié)果表Table 1 Experiment resultTable

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

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

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

        5 總結(jié)與展望

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

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

        猜你喜歡
        方法
        中醫(yī)特有的急救方法
        中老年保健(2021年9期)2021-08-24 03:52:04
        高中數(shù)學(xué)教學(xué)改革的方法
        河北畫報(2021年2期)2021-05-25 02:07:46
        化學(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
        賺錢方法
        真实国产老熟女粗口对白| 亚州av高清不卡一区二区 | 国产精品日日摸夜夜添夜夜添| 国产av在线观看91| 亚洲av成人综合网成人| 奇米影视777撸吧| 亚洲精品国产一二三无码AV| 精品综合久久久久久97超人| 亚洲欧美日韩在线观看一区二区三区| 日韩二三区| 国产大片在线观看三级| 日韩亚洲一区二区三区四区 | 一区二区精品天堂亚洲av| 国产精品 无码专区| 久久不见久久见免费视频7| 久国产精品久久精品国产四虎| 国产一区二区三区口爆在线| 玩弄放荡人妇系列av在线网站| av人摸人人人澡人人超碰小说| 无码国产一区二区色欲| 亚洲一区二区日韩精品在线| 人妻久久久一区二区三区| 久久亚洲道色宗和久久| 成人性生交大片免费看i| 国产av熟女一区二区三区| 国产无遮挡又黄又爽又色| 色窝窝手在线视频| 国产国语按摩对白av在线观看| 亚洲中文字幕成人无码| 亚洲自拍另类欧美综合| 国产视频免费一区二区| 国产精品免费看久久久无码| 99亚洲精品久久久99| 亚洲中文字幕有综合久久| 久久精品国产亚洲av麻豆瑜伽| 无码国产精品一区二区高潮| 久久久久亚洲AV片无码乐播| 国产高清人肉av在线一区二区 | 国产精品成人免费视频网站京东| 亚洲av中文aⅴ无码av不卡| 二区视频在线免费观看|