本發(fā)明涉及的是一種軟件工程領(lǐng)域的技術(shù),具體是一種基于半監(jiān)督學(xué)習(xí)的軟件工程知識(shí)庫(kù)的自動(dòng)化構(gòu)建實(shí)現(xiàn)方法。
背景技術(shù):
當(dāng)今社會(huì)是以語(yǔ)義萬(wàn)維網(wǎng)(Semantic Web)作為未來(lái)發(fā)展主要方向的時(shí)代,構(gòu)造能讓計(jì)算機(jī)理解和處理的Web信息成為現(xiàn)階段非常重要的工作。而知識(shí)庫(kù)(Knowledge Base)作為具有概念、實(shí)體、關(guān)系所組成的知識(shí)集合,使其在信息檢索,知識(shí)問(wèn)答等蓬勃發(fā)展的環(huán)境下,具有越來(lái)越重要的應(yīng)用價(jià)值和工業(yè)價(jià)值。而軟件工程領(lǐng)域知識(shí)庫(kù)作為知識(shí)庫(kù)中的一個(gè)重要分支,同樣凸顯著難以替代的作用。尤其是在:缺陷預(yù)測(cè)、語(yǔ)義關(guān)聯(lián)性計(jì)算、文本正確性分析、軟件文檔相關(guān)性監(jiān)測(cè)、軟件質(zhì)量度量等領(lǐng)域的研究,大都基于軟件工程領(lǐng)域知識(shí)庫(kù)展開(kāi)。因此,軟件工程領(lǐng)域知識(shí)庫(kù)的質(zhì)量,很大程度上決定并影響研究的質(zhì)量與效果。因此,構(gòu)建高質(zhì)量、大規(guī)模的軟件工程領(lǐng)域知識(shí)庫(kù)具有非常重要的意義。
由于現(xiàn)階段大規(guī)模的軟件工程知識(shí)庫(kù)尚無(wú)完備的構(gòu)建方法和構(gòu)建成果,獲取軟件工程知識(shí)庫(kù)主要通過(guò)以下兩種方法:
通過(guò)一般領(lǐng)域的開(kāi)源知識(shí)庫(kù)獲得軟件工程領(lǐng)域知識(shí)。
該方法主要通過(guò)開(kāi)源的且為一般領(lǐng)域的知識(shí)庫(kù),例如:WordNet、YAGO、DBpedia、WikiTaxonomy等知識(shí)庫(kù),或者通過(guò)著名知識(shí)搜索計(jì)算平臺(tái)如Google知識(shí)圖譜、Wolfram Alpha、Data.gov等平臺(tái)獲取。首先,獲得其中一個(gè)一般領(lǐng)域的知識(shí)庫(kù)或知識(shí)平臺(tái),然后通過(guò)人工驗(yàn)證、類別驗(yàn)證(根據(jù)知識(shí)庫(kù)中標(biāo)注的類別,選取相關(guān)類別抽取知識(shí)集)的方式,將其中關(guān)于軟件工程領(lǐng)域的知識(shí)分離出來(lái)構(gòu)造集合,并進(jìn)行結(jié)構(gòu)化的構(gòu)建,以此來(lái)作為軟件領(lǐng)域的知識(shí)庫(kù)。但由于一般領(lǐng)域知識(shí)庫(kù)中關(guān)于軟件工程領(lǐng)域知識(shí)不夠全面,同時(shí)人工驗(yàn)證和類別驗(yàn)證的準(zhǔn)確度不高,得到的軟件工程領(lǐng)域知識(shí)庫(kù)存在關(guān)系稀疏、構(gòu)建質(zhì)量低的問(wèn)題,同時(shí)會(huì)投入極大的人工成本。
通過(guò)現(xiàn)階段已有的軟件工程領(lǐng)域知識(shí)庫(kù)獲得。
該方法是直接使用現(xiàn)階段已構(gòu)建的軟件工程領(lǐng)域知識(shí)庫(kù)。其相關(guān)可供使用的知識(shí)庫(kù)有:Kavi Mahesh等人發(fā)布的LOaD-IT,這個(gè)知識(shí)庫(kù)致力于幫助軟件工程師更快閱讀文檔而構(gòu)建,其中的概念的語(yǔ)義關(guān)系非常稀疏,難以運(yùn)用到軟件工程的其它領(lǐng)域。Mr.Izzeddin A.O.Abuhassan等人構(gòu)造的關(guān)于軟件工程編程語(yǔ)言方面的知識(shí)庫(kù),該知識(shí)庫(kù)沒(méi)有涉及到全部的軟件工程領(lǐng)域范圍。Lexical Views,該知識(shí)庫(kù)通過(guò)運(yùn)用自然語(yǔ)言處理技術(shù)從軟件工程領(lǐng)域抽取出部分的概念,其概念大多為軟件工程中術(shù)語(yǔ),并將其組織成類似于WordNet的樹(shù)狀結(jié)構(gòu),構(gòu)建成知識(shí)庫(kù)。上海交通大學(xué)的Software.Zhishi.Schema,該知識(shí)庫(kù)主要抽取StackOverflow中的標(biāo)簽作為知識(shí)庫(kù)的概念集合,并抽取標(biāo)簽之間的關(guān)系構(gòu)建知識(shí)庫(kù),其構(gòu)建結(jié)果局限于StackOverflow的標(biāo)簽范圍之內(nèi)。上述研究成果都具有各自的局限性,其主要特點(diǎn)是缺乏包含較為全面的、大規(guī)模的軟件工程領(lǐng)域概念,并且其中語(yǔ)義關(guān)系的豐富性(如上下位關(guān)系的數(shù)目與深度),都有待進(jìn)一步的提高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)現(xiàn)有技術(shù)在關(guān)系抽取上難以達(dá)到較高的準(zhǔn)確度和較大的規(guī)模、概念數(shù)目難以達(dá)到大規(guī)模程度、概念間的關(guān)系較為稀疏、需要通過(guò)人工標(biāo)注的方法完成樣本構(gòu)建需要投入大量人工精力的問(wèn)題,提出一種基于半監(jiān)督學(xué)習(xí)的軟件工程知識(shí)庫(kù)的自動(dòng)化構(gòu)建實(shí)現(xiàn)方法,通過(guò)半監(jiān)督的自動(dòng)化構(gòu)建方式,減小構(gòu)建軟件工程知識(shí)庫(kù)的人工精力和時(shí)間成本;使得構(gòu)建的軟件工程領(lǐng)域知識(shí)庫(kù)具有更大的規(guī)模和更好的質(zhì)量,解決現(xiàn)階段軟件領(lǐng)域知識(shí)庫(kù)的匱乏和不足。
本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
本發(fā)明包括以下步驟:
步驟一、以StackOverflow上提供的軟件工程領(lǐng)域標(biāo)簽作為種子詞匯,并獲得維基百科提供的概念數(shù)據(jù)集,通過(guò)種子詞匯標(biāo)簽迭代傳播,擴(kuò)充維基百科上全部軟件工程領(lǐng)域概念并得到包含維基結(jié)構(gòu)的軟件工程領(lǐng)域知識(shí)集合。
步驟二、結(jié)合語(yǔ)義及概念在維基百科中的結(jié)構(gòu)特征,對(duì)軟件工程領(lǐng)域概念構(gòu)建上下位關(guān)系的機(jī)器學(xué)習(xí)特征,即將步驟一得到的軟件工程領(lǐng)域知識(shí)集合中每一個(gè)概念與當(dāng)前概念在維基百科頁(yè)面中所有錨鏈接的軟件工程領(lǐng)域概念進(jìn)行上下位關(guān)系的判別。
所述的上下位關(guān)系的機(jī)器學(xué)習(xí)特征包括:詞干共現(xiàn)度、非對(duì)稱的公共字串相似度、基于維基結(jié)構(gòu)的錨鏈接共現(xiàn)度、基于維基結(jié)構(gòu)的結(jié)構(gòu)體信息相似度和基于KL散度的主題分布相似度,其中:
所述的詞干共現(xiàn)度是指:對(duì)于概念的詞義進(jìn)行相關(guān)性計(jì)算,通過(guò)采用Standford Parser工具提取概念的詞干,即中心詞,并計(jì)算詞干的共現(xiàn)度其中:HA,HB為概念A(yù)、B的詞干,LCA(HA,HB)計(jì)算詞干HA和HB的最小公共祖先,depth(HA)計(jì)算詞干HA在WordNet中的深度。
所述的非對(duì)稱的公共字串相似度是指:由于上下位是一種非對(duì)稱的關(guān)系(當(dāng)概念A(yù)是概念B的上位詞,則概念B一定不是概念A(yù)的上位詞),因此該特征可以有效避免概念間存在關(guān)系密切但不為上下位關(guān)系的干擾,即計(jì)算概念間公共字串的相似值其中:LCS(A,B)計(jì)算概念A(yù),B的最長(zhǎng)公共子串長(zhǎng)度,Len(A)計(jì)算概念A(yù)的名稱長(zhǎng)度。
所述的基于維基結(jié)構(gòu)的錨鏈接共現(xiàn)度是指:由于每一個(gè)概念均與維基百科的某一頁(yè)面相對(duì)應(yīng),因此,維基百科頁(yè)面中的結(jié)構(gòu)及結(jié)構(gòu)中的文本信息可以良好地反映概念指代的信息與含義。通過(guò)采用NGD(Normalized Google Distance)分別對(duì)概念的維基百科頁(yè)面的各個(gè)結(jié)構(gòu)進(jìn)行共現(xiàn)相似度的分析,相似度其中:N為常量,指代維基百科錨鏈接的總數(shù)目。IA和IB分別指代概念A(yù)、B的維基百科頁(yè)面中某一特定結(jié)構(gòu)(例如:引文、正文、屬類)中錨鏈接的集合。由于維基百科頁(yè)面中的結(jié)構(gòu)如:引文(Abstract)、正文(Text)、屬類(Category)中的錨鏈接集合均能良好反映概念的含義,因此分別基于上述三種結(jié)構(gòu)進(jìn)行NGD的計(jì)算,得到三個(gè)不同的特征值。另外,由于屬類(Category)結(jié)構(gòu)能明確表示上下位的關(guān)系,若概念A(yù)包含在概念B的屬類(Category)的錨鏈接集合中或概念B包含在概念A(yù)的屬類(Category)錨鏈接的集合中,則為計(jì)算的屬類結(jié)構(gòu)NGD值等于當(dāng)前計(jì)算結(jié)果加附加系數(shù)V,根據(jù)NGD在本實(shí)施例中的取值范圍,設(shè)定附加系數(shù)V=0.05。
所述的基于維基結(jié)構(gòu)的結(jié)構(gòu)體信息相似度是指:維基百科為每個(gè)概念提供了大綱(guideline)和信息框(infobox)兩個(gè)維基結(jié)構(gòu),上述兩個(gè)結(jié)構(gòu)體都通過(guò)關(guān)鍵字來(lái)體現(xiàn)概念的主要信息,其中大綱(guideline)主要描述當(dāng)前概念維基頁(yè)面主要從哪幾個(gè)方面進(jìn)行描述,而信息框(infobox)主要描述當(dāng)前概念所具有的特性和屬性。而關(guān)聯(lián)密切的軟件工程領(lǐng)域概念往往具有較為相近的大綱(guideline)和信息框(infobox)結(jié)構(gòu),因此通過(guò)如下Jaccard對(duì)結(jié)構(gòu)所描述信息的相似度進(jìn)行計(jì)算,其中:KA和KB表示概念A(yù)、B分別在結(jié)構(gòu)體(大綱或信息框)中的關(guān)鍵字集合。本實(shí)施例分別根據(jù)大綱和信息框兩種結(jié)構(gòu),分別進(jìn)行兩次結(jié)構(gòu)體信息相似度的計(jì)算。
所述的基于KL散度的主題分布相似度是指:對(duì)于存在上下位關(guān)系的軟件工程領(lǐng)域概念,部分概念不具備完整的維基結(jié)構(gòu)。因此,為了挖掘結(jié)構(gòu)不完整的軟件工程領(lǐng)域概念的上下位關(guān)系,本實(shí)施例通過(guò)KL散度進(jìn)行概念之間關(guān)聯(lián)度的計(jì)算。首先采用LDA(Latent Dirichlet Allocation)對(duì)軟件工程領(lǐng)域概念進(jìn)行主題分布的建模。在判斷任意兩個(gè)概念之間的關(guān)系時(shí),首先根據(jù)主題分布計(jì)算概念分布在不同主題內(nèi)的概率分布。隨后采用KL散度計(jì)算兩個(gè)概念之間的主題分布相似性其中:PwA(n)和PwB(n)分別指代概念A(yù)、B分布在第n個(gè)主題內(nèi)的概率。
步驟三、根據(jù)機(jī)器學(xué)習(xí)特征,分別采用模版匹配和規(guī)則匹配的方法對(duì)軟件工程領(lǐng)域知識(shí)集合中的正例數(shù)據(jù)和反例數(shù)據(jù)進(jìn)行標(biāo)注,得到基于模板匹配和規(guī)則匹配的數(shù)據(jù)標(biāo)注。
步驟四、采用半監(jiān)督的學(xué)習(xí)方法從包含維基結(jié)構(gòu)的軟件工程領(lǐng)域知識(shí)集合中進(jìn)行迭代的關(guān)系抽取工作,并建立迭代結(jié)果的評(píng)估規(guī)則以進(jìn)行優(yōu)化,具體為:首次迭代采用步驟三得到的基于模板匹配和規(guī)則匹配的數(shù)據(jù)標(biāo)注進(jìn)行學(xué)習(xí),隨后每次迭代均以上次迭代的學(xué)習(xí)結(jié)果為輸入,進(jìn)行新一輪迭代的學(xué)習(xí);對(duì)于每一次迭代結(jié)果,通過(guò)優(yōu)化規(guī)則進(jìn)行迭代結(jié)果的判斷與過(guò)濾,從而通過(guò)半監(jiān)督學(xué)習(xí)的方式逐漸提高關(guān)系抽取結(jié)果,即構(gòu)建的知識(shí)庫(kù)的準(zhǔn)確度。
步驟五、對(duì)步驟四構(gòu)建得到的知識(shí)庫(kù)進(jìn)行RDF標(biāo)準(zhǔn)化,完成最終大規(guī)模軟件工程領(lǐng)域知識(shí)庫(kù)的構(gòu)建。
本發(fā)明涉及一種實(shí)現(xiàn)上述方法的系統(tǒng),包括:用于解析維基百科的概念數(shù)據(jù)和StackOverflow的標(biāo)簽數(shù)據(jù)的數(shù)據(jù)解析模塊、領(lǐng)域數(shù)據(jù)擴(kuò)充模塊、數(shù)據(jù)標(biāo)注模塊、關(guān)系擴(kuò)充模塊以及RDF格式化模塊,其中:數(shù)據(jù)解析模塊與領(lǐng)域數(shù)據(jù)擴(kuò)充模塊相連并傳輸解析后的維基百科概念集合以及StackOverflow標(biāo)簽數(shù)據(jù)集合的信息,領(lǐng)域數(shù)據(jù)擴(kuò)充模塊基于StackOverflow標(biāo)簽在維基百科概念集合中擴(kuò)充軟件工程領(lǐng)域知識(shí)集合,與數(shù)據(jù)標(biāo)注模塊和關(guān)系擴(kuò)充模塊相連并傳輸軟件工程領(lǐng)域知識(shí)集合的信息,數(shù)據(jù)標(biāo)注模塊標(biāo)注機(jī)器學(xué)習(xí)需要用到的標(biāo)注數(shù)據(jù)包括正例、反例數(shù)據(jù),該模塊與關(guān)系擴(kuò)充模塊相連并傳輸標(biāo)注數(shù)據(jù)信息,關(guān)系擴(kuò)充模塊采用機(jī)器學(xué)習(xí)的方法構(gòu)建上下位關(guān)系的機(jī)器學(xué)習(xí)特征,并采用軟件工程知識(shí)集合提取軟件工程領(lǐng)域上下位關(guān)系的集合后輸出至RDF格式化模塊,RDF格式化模塊將軟件工程領(lǐng)域上下位關(guān)系的集合進(jìn)行RDF化,完成軟件工程領(lǐng)域知識(shí)庫(kù)的最終構(gòu)建。
技術(shù)效果
與現(xiàn)有技術(shù)相比,本發(fā)明對(duì)提高軟件工程領(lǐng)域和一般領(lǐng)域知識(shí)庫(kù)在關(guān)于規(guī)模和質(zhì)量的研究上有促進(jìn)作用。本發(fā)明提出的一種基于半監(jiān)督機(jī)器學(xué)習(xí)的大規(guī)模軟件工程知識(shí)庫(kù)的自動(dòng)化構(gòu)建方法,不僅提高了軟件工程知識(shí)庫(kù)的知識(shí)規(guī)模和質(zhì)量,同時(shí)減少了人工成本的消耗,構(gòu)建的大規(guī)模軟件工程知識(shí)庫(kù)彌補(bǔ)了軟件工程領(lǐng)域大規(guī)模和高質(zhì)量并存的知識(shí)庫(kù)的匱乏。
本發(fā)明通過(guò)采用StackOverflow中關(guān)于軟件工程領(lǐng)域的標(biāo)簽作為種子詞匯,以維基百科上的概念詞匯作為數(shù)據(jù)源,通過(guò)標(biāo)簽傳播的方法,以種子詞匯作為標(biāo)簽傳播的發(fā)起者,并建立傳播規(guī)則,將標(biāo)簽傳播至維基百科中符合規(guī)則的相關(guān)詞匯,完成領(lǐng)域詞匯的擴(kuò)充。該方法擴(kuò)充的軟件工程領(lǐng)域概念既保持了StackOverflow中的準(zhǔn)確度,又保持了維基百科的大規(guī)模的特性。本發(fā)明基于從維基百科擴(kuò)充的軟件工程領(lǐng)域概念,結(jié)合詞匯語(yǔ)義和當(dāng)前詞匯在維基百科中的結(jié)構(gòu)性質(zhì)建立機(jī)器學(xué)習(xí)特征,用于擴(kuò)充軟件工程領(lǐng)域概念之間的上下位關(guān)系。通過(guò)建立機(jī)器學(xué)習(xí)特征提高軟件工程領(lǐng)域概念關(guān)系擴(kuò)充的準(zhǔn)確性。
本發(fā)明中采用自動(dòng)化的方式進(jìn)行正例、反例數(shù)據(jù)的自動(dòng)化標(biāo)注。對(duì)于正例數(shù)據(jù),通過(guò)采用模版匹配的方式基于維基百科的文本內(nèi)容提取滿足要求的軟件工程領(lǐng)域概念上下位關(guān)系;對(duì)于反例數(shù)據(jù),基于已經(jīng)建立的概念的上下位關(guān)系特征,構(gòu)建多個(gè)判定規(guī)則。在對(duì)任意兩個(gè)領(lǐng)域概念進(jìn)行關(guān)系判定時(shí),若違反其中任一規(guī)則即標(biāo)注當(dāng)前規(guī)則為反例,同時(shí)規(guī)定,對(duì)于任意軟件工程領(lǐng)域的概念關(guān)系,滿足所有規(guī)則是成為正例標(biāo)注數(shù)據(jù)的必要不充分條件。
本發(fā)明通過(guò)建立半監(jiān)督學(xué)習(xí)結(jié)果的評(píng)估規(guī)則,對(duì)關(guān)系抽取每次迭代的結(jié)果進(jìn)行評(píng)估,通過(guò)移除不滿足評(píng)估規(guī)則的關(guān)系從而提高擴(kuò)充的準(zhǔn)確性。迭代的軟件工程領(lǐng)域概念的關(guān)系擴(kuò)充在關(guān)系評(píng)估結(jié)果收斂時(shí)停止(迭代次數(shù)達(dá)到上限或不再出現(xiàn)更多的不滿足規(guī)則的關(guān)系)。
本發(fā)明對(duì)構(gòu)建的軟件工程領(lǐng)域的知識(shí)庫(kù)進(jìn)行RDF化,RDF是W3C提出的統(tǒng)一描述萬(wàn)維網(wǎng)中不同種類的信息資源以及資源間的語(yǔ)義關(guān)系的規(guī)范。通過(guò)RDF化使得本方法構(gòu)建的知識(shí)庫(kù)在軟件工程領(lǐng)域具備標(biāo)準(zhǔn)化的特征,同時(shí)具有廣泛的適用性。
附圖說(shuō)明
圖1為本發(fā)明方法流程圖。
具體實(shí)施方式
如圖1所示,本實(shí)施例包括以下步驟:
步驟一、以StackOverflow上提供的軟件工程領(lǐng)域標(biāo)簽作為種子詞匯,并獲得維基百科提供的概念數(shù)據(jù)集,通過(guò)種子詞匯標(biāo)簽迭代傳播,擴(kuò)充維基百科上全部軟件工程領(lǐng)域概念并得到包含維基結(jié)構(gòu)的軟件工程領(lǐng)域知識(shí)集合。
所述的概念數(shù)據(jù)集是指:基于原始的StackOverflow標(biāo)簽和維基百科概念均以XML數(shù)據(jù)源的形式存在,本實(shí)施例以JAVA為編程語(yǔ)言,通過(guò)采用SAX工具分別解析XML文件得到軟件工程領(lǐng)域種子詞匯和維基百科概念數(shù)據(jù)集。
所述的標(biāo)簽迭代傳播是指:從構(gòu)建的軟件工程領(lǐng)域種子詞匯出發(fā),分多次迭代進(jìn)行傳播,每次迭代僅傳播至與當(dāng)前概念相鄰步數(shù)為1(當(dāng)前概念的頁(yè)面包含目標(biāo)概念的錨鏈接)并且滿足任一傳播關(guān)系的概念,當(dāng)?shù)諗?當(dāng)前迭代沒(méi)有新的概念被標(biāo)記)時(shí)標(biāo)簽傳播結(jié)束,得到擴(kuò)充完成的軟件領(lǐng)域知識(shí)集合。
所述的傳播關(guān)系包括:同義關(guān)系、上下位關(guān)系、關(guān)聯(lián)關(guān)系,滿足任一關(guān)系即可獲得被傳播的標(biāo)簽。
所述的同義關(guān)系,其判定方法具體為:當(dāng)待定概念(未獲得標(biāo)簽的概念)在當(dāng)前概念(獲得標(biāo)簽的概念)中的Redirect結(jié)構(gòu)中出現(xiàn),或當(dāng)前概念在待定概念的Redirect結(jié)構(gòu)中出現(xiàn),則判定為同義概念。上下位關(guān)系判定方法:當(dāng)待定概念在當(dāng)前概念的Category結(jié)構(gòu)中出現(xiàn),或當(dāng)前概念在待定概念的Category中出現(xiàn),則判定為上下位概念。
所述的關(guān)聯(lián)關(guān)系,其判定具體通過(guò)歸一化Google距離NGD(Normalized Google Distance)進(jìn)行判斷:其中:N為常量這里定義為維基百科總的錨鏈接數(shù)(概念名稱指向概念主頁(yè)的鏈接);f(A)、f(B)分別指代概念A(yù)、B頁(yè)面中的錨鏈接數(shù)目,f(A,B)指代概念A(yù)、B在維基百科頁(yè)面中共同出現(xiàn)的錨鏈接的數(shù)目,當(dāng)關(guān)聯(lián)關(guān)系的NGD值達(dá)到限定標(biāo)準(zhǔn)(本實(shí)施例設(shè)定當(dāng)NGD值大于0.157),則將其關(guān)系判定為關(guān)聯(lián)關(guān)系。
步驟二、將步驟一得到的軟件工程領(lǐng)域知識(shí)集合中每一個(gè)概念與當(dāng)前概念在維基百科頁(yè)面中所有錨鏈接的軟件工程領(lǐng)域概念進(jìn)行上下位關(guān)系的判別。
所述的機(jī)器學(xué)習(xí)特征包括:詞干共現(xiàn)度、非對(duì)稱的公共字串相似度、基于維基結(jié)構(gòu)的錨鏈接共現(xiàn)度、基于維基結(jié)構(gòu)的結(jié)構(gòu)體信息相似度和基于KL散度的主題分布相似度。
所述的詞干共現(xiàn)度是指:對(duì)于概念的詞義進(jìn)行相關(guān)性計(jì)算,通過(guò)采用Standford Parser工具提取概念的詞干(中心詞),并計(jì)算詞干的共現(xiàn)度其中:HA,HB為概念A(yù)、B的詞干,LCA(HA,HB)計(jì)算詞干HA和HB的最小公共祖先,depth(HA)計(jì)算詞干HA在WordNet中的深度。
所述的非對(duì)稱的公共字串相似度是指:由于上下位是一種非對(duì)稱的關(guān)系(當(dāng)概念A(yù)是概念B的上位詞,則概念B一定不是概念A(yù)的上位詞),因此該特征可以有效避免概念間存在關(guān)系密切但不為上下位關(guān)系的干擾,即計(jì)算概念間公共字串的相似值其中:LCS(A,B)計(jì)算概念A(yù),B的最長(zhǎng)公共子串長(zhǎng)度,Len(A)計(jì)算概念A(yù)的名稱長(zhǎng)度。
所述的基于維基結(jié)構(gòu)的錨鏈接共現(xiàn)度是指:由于每一個(gè)概念均與維基百科的某一頁(yè)面相對(duì)應(yīng),因此,維基百科頁(yè)面中的結(jié)構(gòu)及結(jié)構(gòu)中的文本信息可以良好地反映概念指代的信息與含義。通過(guò)采用NGD(Normalized Google Distance)分別對(duì)概念的維基百科頁(yè)面的各個(gè)結(jié)構(gòu)進(jìn)行共現(xiàn)相似度的分析,相似度其中:N為常量,指代維基百科錨鏈接的總數(shù)目。IA和IB分別指代概念A(yù)、B的維基百科頁(yè)面中某一特定結(jié)構(gòu)(例如:引文、正文、屬類)中錨鏈接的集合。由于維基百科頁(yè)面中的結(jié)構(gòu)如:引文(Abstract)、正文(Text)、屬類(Category)中的錨鏈接集合均能良好反映概念的含義,因此分別基于上述三種結(jié)構(gòu)進(jìn)行NGD的計(jì)算,得到三個(gè)不同的特征值。另外,由于屬類(Category)結(jié)構(gòu)能明確表示上下位的關(guān)系,若概念A(yù)包含在概念B的屬類(Category)的錨鏈接集合中或概念B包含在概念A(yù)的屬類(Category)錨鏈接的集合中,則為計(jì)算的屬類結(jié)構(gòu)NGD值等于當(dāng)前計(jì)算結(jié)果加附加系數(shù)V,根據(jù)NGD在本實(shí)施例中的取值范圍,設(shè)定附加系數(shù)V=0.05。
所述的基于維基結(jié)構(gòu)的結(jié)構(gòu)體信息相似度是指:維基百科為每個(gè)概念提供了大綱(guideline)和信息框(infobox)兩個(gè)維基結(jié)構(gòu),上述兩個(gè)結(jié)構(gòu)體都通過(guò)關(guān)鍵字來(lái)體現(xiàn)概念的主要信息,其中大綱(guideline)主要描述當(dāng)前概念維基頁(yè)面主要從哪幾個(gè)方面進(jìn)行描述,而信息框(infobox)主要描述當(dāng)前概念所具有的特性和屬性。而關(guān)聯(lián)密切的軟件工程領(lǐng)域概念往往具有較為相近的大綱(guideline)和信息框(infobox)結(jié)構(gòu),因此通過(guò)如下Jaccard對(duì)結(jié)構(gòu)所描述信息的相似度進(jìn)行計(jì)算,其中:KA和KB表示概念A(yù)、B分別在結(jié)構(gòu)體(大綱或信息框)中的關(guān)鍵字集合。本實(shí)施例分別根據(jù)大綱和信息框兩種結(jié)構(gòu),分別進(jìn)行兩次結(jié)構(gòu)體信息相似度的計(jì)算。
所述的基于KL散度的主題分布相似度是指:對(duì)于存在上下位關(guān)系的軟件工程領(lǐng)域概念,部分概念不具備完整的維基結(jié)構(gòu)。因此,為了挖掘結(jié)構(gòu)不完整的軟件工程領(lǐng)域概念的上下位關(guān)系,本實(shí)施例通過(guò)KL散度進(jìn)行概念之間關(guān)聯(lián)度的計(jì)算。首先采用LDA(Latent Dirichlet Allocation)對(duì)軟件工程領(lǐng)域概念進(jìn)行主題分布的建模。在判斷任意兩個(gè)概念之間的關(guān)系時(shí),首先根據(jù)主題分布計(jì)算概念分布在不同主題內(nèi)的概率分布。隨后采用KL散度計(jì)算兩個(gè)概念之間的主題分布相似性其中:PwA(n)和PwB(n)分別指代概念A(yù)、B分布在第n個(gè)主題內(nèi)的概率。
步驟三、根據(jù)機(jī)器學(xué)習(xí)特征,分別采用模版匹配和規(guī)則匹配的方法對(duì)軟件工程領(lǐng)域知識(shí)集合中的正例數(shù)據(jù)和反例數(shù)據(jù)進(jìn)行標(biāo)注,得到基于模板匹配和規(guī)則匹配的數(shù)據(jù)標(biāo)注。
所述的標(biāo)注數(shù)據(jù)是指:給定概念間的關(guān)系,標(biāo)注當(dāng)前關(guān)系是否為上下位關(guān)系。
所述的正例數(shù)據(jù)是指:給定的概念間關(guān)系,標(biāo)注當(dāng)前關(guān)系是上下位關(guān)系。
所述的反例數(shù)據(jù)是指:給定的概念間關(guān)系,標(biāo)注當(dāng)前關(guān)系為非上下位關(guān)系。
對(duì)于正例數(shù)據(jù)的標(biāo)注,本實(shí)施例采用以下模版,以維基百科文本為數(shù)據(jù)源,抽取部分上下位關(guān)系標(biāo)注為正例:
NP1{,}“such as”NPList2;
NP1{,}“and other”NP2;
NP1{,}“including”NPList2;
NP1“is a”NP2;
NP1“is the”NP2“of”NP3。
若匹配任一上述模版,可確定概念之間存在上下位關(guān)系,因此具有較高的準(zhǔn)確度,滿足正例數(shù)據(jù)標(biāo)注的要求。抽取正例的上下位關(guān)系后進(jìn)行特征值的計(jì)算(參見(jiàn)步驟二),以投入到步驟四的工作中。
對(duì)于反例數(shù)據(jù)的標(biāo)注,隨機(jī)抽取部分概念組成概念對(duì)(A,B),判斷概念對(duì)(A,B)是否是上下位關(guān)系(概念A(yù)是否為B的上位詞),首先為概念對(duì)(A,B)計(jì)算步驟二所述的特征值。
其次,本實(shí)施例構(gòu)造如下規(guī)則,判定概念對(duì)(X,Y)標(biāo)注為反例數(shù)據(jù)當(dāng)且僅當(dāng)滿足下述任一規(guī)則:
WUP(A,B)<M;
Len(A)>Len(B);
Jaccard info=0;
Jaccard gdl=0;
|KL(A,B)-KL(B,A)|<N。
以上規(guī)則中,WUP(A,B)計(jì)算概念A(yù),B的詞干相似度,Len(A)計(jì)算概念A(yù)的名稱長(zhǎng)度,Jaccardinfo計(jì)算概念A(yù),B之間信息框(infobox)的結(jié)構(gòu)相似度,Jaccardgdl計(jì)算概念A(yù),B之間大綱(guideline)的結(jié)構(gòu)相似度。KL(A,B)和KL(A,B)分別計(jì)算KL散度。M,N為常量,根據(jù)實(shí)施結(jié)果,設(shè)定M=0.4,N=0.03。
步驟四、采用半監(jiān)督的學(xué)習(xí)方法從包含維基結(jié)構(gòu)的軟件工程領(lǐng)域知識(shí)集合中進(jìn)行迭代的關(guān)系抽取工作,并建立迭代結(jié)果的評(píng)估規(guī)則以進(jìn)行優(yōu)化,具體為:首次迭代采用步驟三得到的基于模板匹配和規(guī)則匹配的數(shù)據(jù)標(biāo)注進(jìn)行學(xué)習(xí),隨后每次迭代均以上次迭代的學(xué)習(xí)結(jié)果為輸入,進(jìn)行新一輪迭代的學(xué)習(xí);對(duì)于每一次迭代結(jié)果,通過(guò)優(yōu)化規(guī)則進(jìn)行迭代結(jié)果的判斷與過(guò)濾,從而通過(guò)半監(jiān)督學(xué)習(xí)的方式逐漸提高關(guān)系抽取結(jié)果,即構(gòu)建的知識(shí)庫(kù)的準(zhǔn)確度。
本實(shí)施例中的迭代,設(shè)定5次為迭代上限,半監(jiān)督學(xué)習(xí)停止當(dāng)且僅當(dāng)?shù)Y(jié)果收斂或迭代次數(shù)達(dá)到迭代上限。
所述的優(yōu)化規(guī)則包括:環(huán)狀沖突、關(guān)系傳遞冗余和自閉環(huán)沖突,滿足沖突條件的關(guān)系將從迭代結(jié)果中刪除。
所述的環(huán)狀沖突具體是指:上下位關(guān)系作為非對(duì)稱關(guān)系,不能出現(xiàn)概念之間的關(guān)系環(huán)路。例如,對(duì)于概念“QuickSort”和概念“Sorting Algorithm”,如果同時(shí)出現(xiàn)“QuickSort”是“Sorting Algorithm”上位詞和“Sorting Algorithm”是“QuickSort”上位詞的結(jié)果,則將上述兩個(gè)關(guān)系都移除。
所述的關(guān)系傳遞冗余具體是指:結(jié)果中會(huì)出現(xiàn)下述情況:概念間存在關(guān)聯(lián)關(guān)系,但存在跨粒度較大的情況(上位詞是較抽象的概念粒度大,下位詞是較具體的概念,粒度小)。例如,結(jié)果中出現(xiàn)概念“Machine Learning”是概念“Deep Learning”的上位詞,概念“Deep Learning”是概念“word2vec”的上位詞,同時(shí),出現(xiàn)概念“Machine Learning”是概念“word2vec”的上位詞。這里“Machine Learning”是“word2vec”上位詞這一關(guān)系可通過(guò)前兩條關(guān)系推斷出。然而由于概念“Machine Learning”和概念“word2vec”之間跨較大粒度,因此其語(yǔ)義和維基結(jié)構(gòu)特征相似度較小。為避免過(guò)擬合,理應(yīng)將該結(jié)果移除。
所述的自閉環(huán)沖突具體是指:根據(jù)概念不能成為自己的上位詞或下位詞,進(jìn)行符合本規(guī)則關(guān)系的移除。例如,迭代結(jié)果中出現(xiàn)概念“Heap”是“Heap”的上位詞,則將當(dāng)前關(guān)系移除。
步驟五、對(duì)步驟四構(gòu)建得到的知識(shí)庫(kù)進(jìn)行RDF標(biāo)準(zhǔn)化,完成最終大規(guī)模軟件工程領(lǐng)域知識(shí)庫(kù)的構(gòu)建。
所述的RDF標(biāo)準(zhǔn)化是指:將概念和概念間存在的關(guān)系分別采用RDF語(yǔ)言進(jìn)行描述,例如:概念“.NET Compact Framework controls”和概念“Compact Framework”的上下位關(guān)系用RDF語(yǔ)言描述為:
“<rdf:Description rdf:about="http://SETaxonomy/subsumption/4"><page:Hypernym>.NET Compact Framework controls</page:Hypernym><page:Hyponym>Compact Framework</page:Hyponym></rdf:Description>”。其中:“SETaxonomy”為本實(shí)施例最終構(gòu)建的軟件工程領(lǐng)域知識(shí)庫(kù)的名稱,“4”為當(dāng)前關(guān)系在本知識(shí)庫(kù)中的編號(hào)。
通過(guò)實(shí)施上述步驟后,最終本實(shí)施例構(gòu)建的軟件工程領(lǐng)域知識(shí)庫(kù)包含193,593個(gè)軟件工程領(lǐng)域概念,包含357,662個(gè)上下位關(guān)系,平均深度7.02,相比現(xiàn)有的軟件領(lǐng)域知識(shí)庫(kù)具有更大規(guī)模和更高的質(zhì)量,彌補(bǔ)了軟件工程領(lǐng)域知識(shí)庫(kù)的缺乏。同時(shí),通過(guò)采用自動(dòng)化的半監(jiān)督學(xué)習(xí)方法,減少了構(gòu)建軟件領(lǐng)域知識(shí)庫(kù)的人工成本,提高了構(gòu)建效率。
上述具體實(shí)施可由本領(lǐng)域技術(shù)人員在不背離本發(fā)明原理和宗旨的前提下以不同的方式對(duì)其進(jìn)行局部調(diào)整,本發(fā)明的保護(hù)范圍以權(quán)利要求書(shū)為準(zhǔn)且不由上述具體實(shí)施所限,在其范圍內(nèi)的各個(gè)實(shí)現(xiàn)方案均受本發(fā)明之約束。