本發(fā)明屬于軟件工程技術(shù)領(lǐng)域,適用于規(guī)模不斷增大的大規(guī)模軟件信息站,實現(xiàn)自動推薦標(biāo)簽,是可擴(kuò)展的多標(biāo)簽推薦方法;具體涉及一種基于信息檢索的大規(guī)模軟件信息站標(biāo)簽推薦方法。
背景技術(shù):
軟件信息站為軟件開發(fā)者查詢解決方案,分享經(jīng)驗,提供幫助以及學(xué)習(xí)新的技術(shù)提供了不可或缺的平臺。軟件信息站包括在線開發(fā)者問答社區(qū),例如stackoverflow,askubuntu,askdifferent以及一些開源軟件社區(qū),例如freecode,github等。隨著軟件信息站的發(fā)展,軟件對象的數(shù)目顯著增長,導(dǎo)致軟件開發(fā)者不知道如何定位一個特別的軟件對象。為了解決這個問題,有一個典型的實踐方法,那就是開發(fā)者在發(fā)布一個軟件時對軟件貼上一些標(biāo)簽,而且是社會媒體中常見的標(biāo)簽。由于標(biāo)簽通常由幾個單詞或者僅僅是單詞縮寫組成,他們提供了軟件信息站上搜索,描述,識別,標(biāo)簽,分類以及組織軟件對象的元數(shù)據(jù)。大多數(shù)軟件信息站為了提高網(wǎng)站上不同操作的效率和準(zhǔn)確性,依靠標(biāo)簽來對網(wǎng)站內(nèi)容進(jìn)行分類。從而標(biāo)簽的質(zhì)量對于這些網(wǎng)站就顯得尤為重要。高質(zhì)量的標(biāo)簽通常是簡約的并且可以直接描述軟件對象最重要最顯著的特性。
然而定標(biāo)簽本身就是很不和諧的一個過程。每一個軟件開發(fā)者作為一個獨立的個體,他們對于軟件對象的認(rèn)知和理解是不一樣的,并且他們的英語水平以及語言習(xí)慣存在差異,這就導(dǎo)致軟件對象的標(biāo)簽快速增長以至出現(xiàn)大量冗余。例如,在stackoverflow上,如下標(biāo)簽scc,source-code-contrl,sccs以及幾個其他的單詞都是用來描述版本控制的。此外,軟件對象可以被多個不同的標(biāo)簽來標(biāo)記。比如,stackoverflow建議一個對象三至五個標(biāo)簽而freecode可以允許每個對象多于是個標(biāo)簽。隨著軟件對象的增多,標(biāo)簽的數(shù)目急劇增長。截至今日,stackoverflow已經(jīng)有超過兩千萬的問題和四萬六千多個標(biāo)簽。有如此多的的標(biāo)簽,其中甚至存在很多噪聲,導(dǎo)致軟件對象的分類效果很差。這種現(xiàn)象直接影響了軟件開發(fā)者的查詢體驗。
標(biāo)簽推薦已經(jīng)成為社交網(wǎng)絡(luò)和數(shù)據(jù)挖掘領(lǐng)域的一個熱門研究。2010年軟件工程領(lǐng)域的自動標(biāo)簽推薦第一次被ai-kofahi等人提出來。ai-kofahi提出了tagrec方法為ibmjazz的工作項目自動推薦標(biāo)簽。tagrec基于模糊集理論并且考慮了系統(tǒng)的動態(tài)發(fā)展。后來一個叫tagcombine的方法被提出。tagcombine可以為軟件信息站的軟件對象自動推薦標(biāo)簽,包含了多標(biāo)簽排名組件,基于相似性的排名組件以及標(biāo)簽項排名組件。tagcombine采用的多標(biāo)簽排名方法導(dǎo)致他的應(yīng)用只能限制在相當(dāng)小的數(shù)據(jù)集。對于大規(guī)模的軟件信息站如stackoverflow@large,需要訓(xùn)練超過四萬二分類模型并且每個訓(xùn)練集的估摸超過千萬。最近的一個叫entagrec的方法在精確率和召回率要優(yōu)于tagcombine,entagrec包括貝葉斯推理組件和頻率推理組件。因為entagrec是利用軟件信息站的所有信息來對軟件對象進(jìn)行推薦,所以它的可擴(kuò)展性也不好。
在軟件工程領(lǐng)域,標(biāo)簽已經(jīng)被廣泛應(yīng)用。為了努力弄明白在軟件開發(fā)運用社交媒體對于團(tuán)隊、項目以及社區(qū)有什么好處,風(fēng)險以及限制,storey等人提出一系列相關(guān)的研究問題。begel等人社交媒體對于改善開發(fā)團(tuán)隊的交流協(xié)調(diào)以及創(chuàng)建新類型的軟件開發(fā)社區(qū)的潛在好處。treude等人探究如何定標(biāo)簽可以在科技和社會方面組織工作項目之間構(gòu)建一座橋。他們指導(dǎo)關(guān)于如何定標(biāo)簽可以被采用并且在未來幾年更大的項目中可以被采用的實證研究。他們的研究結(jié)果顯示標(biāo)簽機(jī)制在許多非正式的流程中成為了非常重要的一部分。thung等人發(fā)現(xiàn)相似的軟件應(yīng)用使用相似的標(biāo)簽。wang等人分析freecode項目標(biāo)簽來推理標(biāo)簽的語義關(guān)系,即分類學(xué)。
技術(shù)實現(xiàn)要素:
為了解決上述的技術(shù)問題,本發(fā)明提供了一種基于信息檢索的大規(guī)模軟件信息站標(biāo)簽推薦方法。
本發(fā)明所采用的技術(shù)方案是:
步驟1:對軟件信息站的軟件對象數(shù)據(jù)進(jìn)行預(yù)處理,移除不帶標(biāo)簽的和標(biāo)簽頻率低于預(yù)設(shè)定閾值的軟件對象,最后移除這些軟件對象描述中的停詞,從而得到所有帶標(biāo)簽和描述的軟件對象集合;包括以下子步驟:
步驟1.1:基于已經(jīng)存在的標(biāo)簽,對軟件信息站的軟件對象,去除其中的不帶標(biāo)簽項;
步驟1.2:對于出現(xiàn)頻率小于臨界值threshold的標(biāo)簽,考慮其原因可能是拼寫錯誤或者某一個特殊的領(lǐng)域。顯然拼寫錯誤的標(biāo)簽不得推薦給用戶,而對于特殊領(lǐng)域的軟件對象,由開發(fā)者自行創(chuàng)建標(biāo)簽。
步驟2:為步驟1中的軟件對象創(chuàng)建索引,保存對象描述中的詞,稱為詞典,每個詞都指向包含該詞的文檔鏈表,此文檔鏈表稱為倒排表;也就是對步驟1中集合內(nèi)的軟件對象創(chuàng)建索引,利用軟件對象描述中的詞創(chuàng)建詞典,并且對于每個詞,創(chuàng)建一個鏈表,鏈表的每一個節(jié)點存放描述中包含該詞的軟件對象的索引以及該詞在節(jié)點對象中頻數(shù)。
步驟3:根據(jù)公式計算出給定的軟件對象和步驟1集合中軟件對象的相似得分,并取其中相似度最高的若干個軟件對象構(gòu)成候選集合;通過公式
步驟4:對步驟3得出的候選集合中軟件對象的相似得分進(jìn)行標(biāo)準(zhǔn)化,根據(jù)軟件對象標(biāo)準(zhǔn)化的相似得分以及對象標(biāo)簽頻率計算標(biāo)簽的得分,按照標(biāo)簽得分排序得到標(biāo)簽推薦列表,將得分最好的若干個推薦給開發(fā)者,具體是:
計算候選集中軟件對象的標(biāo)簽的得分。首先對步驟3中得出的相似得分進(jìn)行標(biāo)準(zhǔn)化,通過公式δnorm(o,oi)=(δ(o,oi)-cmin)/(cmax-cmin)將結(jié)果歸一化為[0,1]之間的值。用集合ti表示
本發(fā)明具有如下優(yōu)點:1.本方法對規(guī)模不斷增大的基于軟件對象語義的軟件信息站進(jìn)行自動推薦標(biāo)簽,通過移除不相關(guān)的標(biāo)簽以及減少多個不同標(biāo)簽指向同一內(nèi)容的標(biāo)簽來緩和標(biāo)簽急劇增長的問題;2.本方法提出了一個有效的基于標(biāo)簽多分類算法,可以處理上百萬的軟件對象;3.本方法通過stackoverflow,askubuntu,askdifferent以及freecode軟件信息站進(jìn)行了評估,結(jié)果顯示本方法相比于已經(jīng)存在的方法具有推薦準(zhǔn)確,并且具有更好的可擴(kuò)展性等優(yōu)勢;4.本發(fā)明創(chuàng)建的標(biāo)簽推薦方法tagmulrec與已經(jīng)存在的entagrec等標(biāo)簽推薦方法相比,具有更好的可擴(kuò)展性,能夠有效并且高效的應(yīng)用于大規(guī)模軟件信息站,速度上更是提高了三個量級,并且更加穩(wěn)定。
附圖說明
圖1是本發(fā)明總體方法步驟示意圖。
圖2是本發(fā)明創(chuàng)建索引具體結(jié)構(gòu)示意圖。
具體實施方式
以下結(jié)合附圖和具體實施例對本發(fā)明做進(jìn)一步的說明。
本發(fā)明提出的一種基于信息檢索的大規(guī)模軟件信息站標(biāo)簽推薦方法,根據(jù)軟件對象自動推薦標(biāo)簽。標(biāo)簽推薦的方法目前在開源軟件社區(qū)和在線開發(fā)者問答社區(qū)等軟件信息站都有應(yīng)用,可以根據(jù)軟件對象來推薦標(biāo)簽。利用標(biāo)簽推薦方法,可以提高網(wǎng)站運行效率和分類的準(zhǔn)確性,從而獲得更好的用戶體驗。本發(fā)明提出了tagmulrec工具來給開發(fā)者推薦標(biāo)簽,對規(guī)模不斷增大的軟件信息站進(jìn)行軟件對象分類。tagmulrec適用于動態(tài)的變化。除此以外,隨著每天都有大量的軟件對象加入到軟件信息站,開發(fā)者可以通過修改或者刪除標(biāo)簽來修改已經(jīng)發(fā)布的內(nèi)容。通過為軟件對象描述創(chuàng)建索引,tagmulrec可以高效的推薦軟件標(biāo)簽。基于這些索引,可以計算軟件對象的相似度,從而建立候選集合。tagmulrec利用多分類算法對候選集合中軟件對象的標(biāo)簽進(jìn)行排名,將排名得分最高的幾個標(biāo)簽推薦給開發(fā)者。本發(fā)明利用已經(jīng)存在的標(biāo)簽,創(chuàng)建索引,計算相似度,計算標(biāo)簽的得分,從而對信息對象進(jìn)行多標(biāo)簽的推薦。
請見圖1,為本發(fā)明總體方法步驟示意圖,主要包括預(yù)處理,創(chuàng)建索引,計算相似得分以及標(biāo)簽推薦這四個步驟。
請見圖2,為本發(fā)明的預(yù)處理以及創(chuàng)建索引具體結(jié)構(gòu)示意圖,整個圖可以分為兩個部分:軟件信息站數(shù)據(jù)預(yù)處理圖和創(chuàng)建索引圖。
步驟1:軟件信息站數(shù)據(jù)預(yù)處理圖根據(jù)一定的規(guī)則對數(shù)據(jù)進(jìn)行預(yù)處理,包括了三次篩選工作。首先對不帶標(biāo)簽的數(shù)據(jù)進(jìn)行刪除,主要由于本發(fā)明是利用已有的標(biāo)簽信息來進(jìn)行推薦的,則不帶標(biāo)簽的數(shù)據(jù)沒有意義。然后將標(biāo)簽頻率低于設(shè)定閾值的帶標(biāo)簽軟件對象進(jìn)行刪除,主要有以下兩種原因。原因之一,有的標(biāo)簽頻率之所以低,可能是因為拼寫錯誤,則對于此情形,應(yīng)當(dāng)刪除。原因之二,一部分標(biāo)簽可能代表某一特定的不常見的領(lǐng)域。由于是特殊領(lǐng)域的不常見的標(biāo)簽,則該標(biāo)簽是否會被用戶廣泛接受尚不可知。對于此情形,最好的方式是由開發(fā)者來自行創(chuàng)建標(biāo)簽??傊?,都可以歸結(jié)到一種情形,就是頻率低于預(yù)設(shè)閾值的,將該標(biāo)簽的軟件對象刪除。最后將篩選出的軟件對象的描述中的停詞刪除,因為停詞對于標(biāo)簽推薦沒有太大的意義。經(jīng)過上面幾個步驟,完成了預(yù)處理工作。
步驟2:創(chuàng)建索引圖包含軟件對象描述中的詞和該詞包含于哪些文檔設(shè)計的。對于步驟1中的,創(chuàng)建一個詞典,包括軟件對象描述中的所有詞,對于詞典中的每個詞,創(chuàng)建一個鏈表,鏈表的每個節(jié)點是包含該詞的軟件對象的索引以及該詞在節(jié)點軟件對象中的頻數(shù)。對于不斷發(fā)展的軟件信息站,這個詞典是可擴(kuò)展的。
步驟3:計算相似得分,選出候選軟件對象集合。給定一個新的軟件對象,可以通過公式
將某個詞的權(quán)重設(shè)置成較大值表示該詞比其他詞更加重要。#oi.d.w項表示w在oi軟件對象的描述oi.d中出現(xiàn)的頻率。#sw表示軟件對象描述中包含詞w的對象數(shù)目,也就是步驟2創(chuàng)建的詞典中w詞指向的鏈表的長度。ρ(oi.d)項是δ(o,oi)的一個標(biāo)準(zhǔn)化參數(shù),計算公式
步驟4:計算候選集中軟件對象的標(biāo)簽的得分。首先對步驟3中得出的相似得分進(jìn)行標(biāo)準(zhǔn)化,通過公式δnorm(o,oi)=(δ(o,oi)-cmin)/(cmax-cmin)將結(jié)果歸一化為[0,1]之間的值。用集合ti表示
本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實施例做各種各樣的修改或補(bǔ)充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。