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

        ?

        基于大數(shù)據(jù)的軟件項(xiàng)目知識(shí)圖譜構(gòu)造及問答方法

        2021-01-21 04:29:54鄒艷珍王敏謝冰林澤琦
        大數(shù)據(jù) 2021年1期
        關(guān)鍵詞:代碼文檔圖譜

        鄒艷珍,王敏,謝冰,林澤琦

        1. 北京大學(xué)信息科學(xué)技術(shù)學(xué)院,北京 100871;2. 高可信軟件技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室(北京大學(xué)),北京 100871;3. 微軟亞洲研究院,北京 100080

        1 引言

        軟件復(fù)用可以提高軟件開發(fā)的效率和質(zhì)量。但隨著現(xiàn)代軟件規(guī)模的不斷擴(kuò)大和復(fù)雜度的日益提高,復(fù)用一個(gè)軟件項(xiàng)目越來(lái)越難[1-2]。軟件項(xiàng)目在其整個(gè)生命周期中形成并積累了大量的數(shù)據(jù),如源代碼、郵件列表、缺陷報(bào)告和問答文檔等。這些數(shù)據(jù)中蘊(yùn)含了規(guī)模龐大、結(jié)構(gòu)復(fù)雜、語(yǔ)義關(guān)聯(lián)豐富的軟件知識(shí),能夠幫助軟件開發(fā)人員理解軟件功能,進(jìn)行軟件復(fù)用[3]。然而,組織、利用這些知識(shí)面臨著以下挑戰(zhàn)。

        ● 軟件規(guī)模擴(kuò)大引發(fā)的軟件知識(shí)爆炸問題。隨著軟件規(guī)模的擴(kuò)大和軟件復(fù)雜度的提高,在軟件開發(fā)與復(fù)用中需要理解與掌握的知識(shí)越來(lái)越多,開發(fā)者的學(xué)習(xí)成本越來(lái)越高。

        ● 軟件數(shù)據(jù)中蘊(yùn)含的信息在多源異構(gòu)數(shù)據(jù)中呈碎片化分散的形態(tài)。在一個(gè)軟件項(xiàng)目中,有助于復(fù)用者學(xué)習(xí)與理解這個(gè)軟件項(xiàng)目的信息通常以相對(duì)獨(dú)立的形態(tài)碎片化地分散在多源異構(gòu)的數(shù)據(jù)之中,缺乏全局、統(tǒng)一的組織整理,彼此之間也缺乏關(guān)聯(lián)。

        ● 大量信息是以無(wú)結(jié)構(gòu)文本的形式表示的,如代碼標(biāo)識(shí)符、代碼注釋、郵件、用戶手冊(cè)、缺陷描述。文本信息具有很高的隨意性和模糊性,對(duì)于同一件事情,不同的人可能會(huì)使用完全不同的單詞對(duì)其進(jìn)行描述。因此,即使復(fù)用者可以通過(guò)關(guān)鍵詞來(lái)對(duì)無(wú)結(jié)構(gòu)文本進(jìn)行檢索,其效果也不盡如人意。

        為了有效地組織和利用多源異構(gòu)軟件大數(shù)據(jù),更好地進(jìn)行軟件理解和復(fù)用,本文提出了基于大數(shù)據(jù)的軟件項(xiàng)目知識(shí)圖譜構(gòu)造及問答方法。這里,軟件項(xiàng)目知識(shí)圖譜是指由不同類型軟件數(shù)據(jù)的軟件知識(shí)圖有機(jī)融合構(gòu)成的用于描述某一軟件的知識(shí)體系。軟件知識(shí)圖是指由同一類型軟件數(shù)據(jù)的軟件知識(shí)實(shí)體及其之間的關(guān)聯(lián)關(guān)系構(gòu)成的圖。具體地,本文提出了以代碼結(jié)構(gòu)為核心的軟件項(xiàng)目知識(shí)圖譜模型,以及“知識(shí)抽取-知識(shí)融合”兩層插件框架,從而實(shí)現(xiàn)基于多源異構(gòu)軟件大數(shù)據(jù)的軟件項(xiàng)目知識(shí)圖譜自動(dòng)構(gòu)造;提出了基于知識(shí)圖譜的軟件智能問答方法和系統(tǒng),從而有效地支持面向軟件項(xiàng)目知識(shí)圖譜的自然語(yǔ)言查詢以及面向多源異構(gòu)軟件大數(shù)據(jù)的智能問答。在此基礎(chǔ)上,本文設(shè)計(jì)并實(shí)現(xiàn)了軟件項(xiàng)目知識(shí)圖譜構(gòu)造及智能問答平臺(tái)SnowGraph,并為Apache開源社區(qū)中的192個(gè)軟件項(xiàng)目和5家軟件企業(yè)(浪潮通用軟件有限公司、神州數(shù)碼信息系統(tǒng)有限公司、東軟集團(tuán)股份有限公司、中創(chuàng)軟件工程股份有限公司、金蝶軟件(中國(guó))有限公司)中的10個(gè)技術(shù)領(lǐng)域自動(dòng)構(gòu)造出軟件項(xiàng)目知識(shí)圖譜,并提供問答服務(wù)。

        2 軟件項(xiàng)目知識(shí)圖譜模型設(shè)計(jì)

        針對(duì)一個(gè)軟件項(xiàng)目,本文的目標(biāo)是基于多源異構(gòu)軟件數(shù)據(jù)自動(dòng)構(gòu)造出一個(gè)軟件知識(shí)圖譜。軟件知識(shí)圖譜是一個(gè)有向圖G=(V,E),G中的點(diǎn)集V={v_(1),v_(2),…,v_(|V|)}代表軟件項(xiàng)目中的概念和實(shí)體,G中的邊集E={e_(1),e_(2),…,e_(|E|)}代表這些實(shí)體之間的關(guān)系。本文將軟件復(fù)用中的知識(shí)模型簡(jiǎn)單地記為T=(A,R),其中,A是所有實(shí)體類型的集合,存在一個(gè)從實(shí)體到實(shí)體類型的映射函數(shù)τ:V→A,使得知識(shí)圖譜中的每個(gè)實(shí)體v∈V都具有一個(gè)特定的實(shí)體類型τ(v)∈A;R是所有關(guān)系類型的集合,存在一個(gè)從關(guān)系到關(guān)系類型的映射函數(shù)?:E→R,使得知識(shí)圖譜中的每條關(guān)系e∈E都具有一個(gè)特定的關(guān)系類型?(e)∈R。因此,在構(gòu)造知識(shí)圖譜之前,首先需要分析軟件大數(shù)據(jù),并進(jìn)行軟件知識(shí)圖譜模型的設(shè)計(jì)。

        2.1 多源異構(gòu)軟件大數(shù)據(jù)

        對(duì)于一個(gè)軟件項(xiàng)目來(lái)說(shuō),常見的數(shù)據(jù)來(lái)源和類型包括源代碼及其版本控制記錄、需求與設(shè)計(jì)文檔、用戶手冊(cè)、開發(fā)者郵件列表、用戶論壇等。不同來(lái)源的數(shù)據(jù)有不同的存儲(chǔ)格式,且其中包含的信息類型也各不相同。本節(jié)總結(jié)軟件項(xiàng)目中有助于軟件復(fù)用的幾類代表性數(shù)據(jù),分析并討論其中包含的信息類型,這是實(shí)現(xiàn)知識(shí)建模以及知識(shí)圖譜自動(dòng)構(gòu)造的基礎(chǔ)。

        (1)代碼庫(kù)

        源代碼是軟件項(xiàng)目中最核心的資產(chǎn)。代碼庫(kù)中包含豐富的有助于復(fù)用者學(xué)習(xí)與理解該軟件項(xiàng)目的信息,代碼庫(kù)信息大致可以分為以下3個(gè)部分。

        ● 結(jié)構(gòu)信息:包括抽象語(yǔ)法樹、抽象語(yǔ)法樹中的結(jié)點(diǎn)綁定和結(jié)點(diǎn)引用關(guān)系、從抽象語(yǔ)法樹中可以抽取到的控制流和數(shù)據(jù)流等。

        ● 描述信息:包括各個(gè)代碼實(shí)體的標(biāo)識(shí)符以及代碼中的注釋。這些描述信息是機(jī)器的底層表示(即結(jié)構(gòu)信息)與人在高層認(rèn)知和理解之間的溝通橋梁。

        ● 演化信息:指在版本控制系統(tǒng)中記錄的源代碼變更歷史。演化信息有助于幫助復(fù)用者了解源代碼中的每一個(gè)子部分的來(lái)龍去脈。

        (2)正式文檔

        為了在項(xiàng)目中建立良好的溝通與協(xié)作,或?yàn)轫?xiàng)目的用戶和復(fù)用者提供指導(dǎo)和幫助,軟件項(xiàng)目的開發(fā)者或管理者需要編寫各種說(shuō)明文檔。常見的文檔類型包括需求分析文檔、系統(tǒng)架構(gòu)與設(shè)計(jì)文檔、接口文檔、用戶手冊(cè)等。一般而言,這些文檔具有規(guī)范的編寫模板、準(zhǔn)確規(guī)范的用詞和敘述方式,以及良好的組織結(jié)構(gòu)和索引目錄。本文將符合以上特點(diǎn)的軟件文檔統(tǒng)稱為正式文檔。

        軟件項(xiàng)目中的正式文檔可能以不同的數(shù)據(jù)格式進(jìn)行存儲(chǔ)與管理。對(duì)于軟件企業(yè)內(nèi)部的可復(fù)用軟件項(xiàng)目而言,正式文檔大多為DOC、PDF、PPT等數(shù)據(jù)格式。正式文檔中的信息大致可以分為文本描述信息、篇章結(jié)構(gòu)信息和關(guān)聯(lián)引用信息。

        (3)交流渠道

        在一個(gè)軟件項(xiàng)目中,開發(fā)者和復(fù)用者經(jīng)常使用Web2.0形式的交流渠道進(jìn)行溝通與討論。這些交流過(guò)程被歸檔記錄下來(lái),對(duì)于后續(xù)的軟件項(xiàng)目理解和軟件復(fù)用都具有重要的參考價(jià)值。目前常見的交流渠道包括以下幾種。

        ● 郵件列表:是最常見的交流渠道,很多老牌的開源社區(qū)以及軟件企業(yè)將郵件列表作為溝通的主要工具。

        ● 事務(wù)跟蹤系統(tǒng):近年來(lái),越來(lái)越多的軟件項(xiàng)目開始使用事務(wù)跟蹤系統(tǒng)(如JIRA、Bugzilla、Trac等)對(duì)大量的變更需求進(jìn)行系統(tǒng)化的管理。在事務(wù)跟蹤系統(tǒng)中,參與者可以提交一個(gè)事務(wù),并通過(guò)自然語(yǔ)言、異常信息、代碼片段等形式對(duì)事務(wù)進(jìn)行描述。

        這些交流渠道可以被看作更廣泛意義上的軟件文檔。與正式文檔類似,交流渠道中也包含文本描述信息、篇章結(jié)構(gòu)信息和關(guān)聯(lián)引用信息,但在具體形態(tài)和分布上,其與正式文檔有所不同:交流渠道中的信息總量更大,但碎片化特點(diǎn)明顯,篇章結(jié)構(gòu)信息弱化,缺乏有效的組織與索引機(jī)制;交流渠道中的參與者一般較多,因此對(duì)描述格式的要求并不嚴(yán)格。

        2.2 以代碼結(jié)構(gòu)為核心的軟件知識(shí)圖譜模型

        源代碼是軟件項(xiàng)目中最核心的資產(chǎn),也是軟件復(fù)用過(guò)程中最重要的知識(shí)來(lái)源。筆者提出了一種代碼結(jié)構(gòu)知識(shí)模型,如圖1所示。模型中的實(shí)體細(xì)分為3類:Class(類或接口)、Method(成員方法)和Field(成員變量)。這些不同類型的實(shí)體之間具有各種不同類型的結(jié)構(gòu)依賴關(guān)系,例如:Class實(shí)體之間的繼承關(guān)系(Extend)、Method實(shí)體之間的調(diào)用關(guān)系(Invoke)。

        代碼結(jié)構(gòu)知識(shí)能夠反映出軟件項(xiàng)目中高層的領(lǐng)域知識(shí),從而能夠?qū)o(wú)結(jié)構(gòu)文本的語(yǔ)義分析提供支持。在軟件復(fù)用的語(yǔ)境下,基于代碼結(jié)構(gòu)知識(shí)對(duì)無(wú)結(jié)構(gòu)文本的語(yǔ)義進(jìn)行結(jié)構(gòu)化表示是可行的,這也是本文以代碼結(jié)構(gòu)為核心來(lái)構(gòu)造軟件項(xiàng)目知識(shí)圖譜的最重要原因?;诖a結(jié)構(gòu)的文本語(yǔ)義表示方法在后續(xù)的知識(shí)利用過(guò)程中扮演著重要的角色。

        圖1 代碼結(jié)構(gòu)知識(shí)模型

        圍繞代碼結(jié)構(gòu)知識(shí),筆者提出軟件復(fù)用中的知識(shí)模型,從而支持對(duì)源自版本控制系統(tǒng)、正式文檔、交流渠道等源代碼之外的其他數(shù)據(jù)中的知識(shí)進(jìn)行組織與關(guān)聯(lián)。圖2展示了該知識(shí)模型的主體,以加粗的邊框來(lái)標(biāo)注模型中最基本的實(shí)體類型,包括:Code(代碼實(shí)體)、Commit(代碼提交實(shí)體)、Document(文檔實(shí)體)和Participant(參與者實(shí)體)。該知識(shí)模型中共有22種實(shí)體和17種關(guān)系。

        本文將軟件項(xiàng)目的正式文檔和交流渠道中的各種形態(tài)的數(shù)據(jù)統(tǒng)一抽象為知識(shí)圖譜中的Document類型的實(shí)體。其中,文本描述信息被抽象為Document實(shí)體的內(nèi)部屬性,篇章結(jié)構(gòu)信息被抽象為Document實(shí)體之間的Parent關(guān)系,關(guān)聯(lián)引用信息則被抽象為Document實(shí)體之間以及Document實(shí)體到Commit實(shí)體或代碼實(shí)體的Ref關(guān)系。文檔實(shí)體可以被進(jìn)一步細(xì)化為更多的實(shí)體類型。例如,對(duì)于軟件企業(yè)中的DOC/PDF格式的需求文檔和設(shè)計(jì)文檔,根據(jù)文檔的模板將其中合適的章節(jié)細(xì)化為需求實(shí)體(Requirement)或設(shè)計(jì)實(shí)體(Design),并通過(guò)章節(jié)的名稱自動(dòng)建立這兩類實(shí)體之間的追蹤關(guān)系(Trace);使用Mail實(shí)體表示郵件列表中的每一條消息,并抽取出它們之間的回復(fù)關(guān)系(Reply)和轉(zhuǎn)發(fā)關(guān)系(Forward);對(duì)于來(lái)自像Stack Overflow這樣的在線問答社區(qū)中的數(shù)據(jù),將從中抽取出的Document實(shí)體,并將其細(xì)化為問題實(shí)體(Question)和答案實(shí)體(Answer)。

        圖2 軟件項(xiàng)目知識(shí)圖譜的元模型

        3 軟件項(xiàng)目知識(shí)圖譜的自動(dòng)構(gòu)造

        軟件項(xiàng)目知識(shí)圖譜的自動(dòng)構(gòu)造是關(guān)鍵技術(shù)。這部分要解決的主要問題是:面對(duì)種類繁多,而且可能層出不窮的各種擴(kuò)展知識(shí)和新來(lái)源、新格式的數(shù)據(jù),如何設(shè)計(jì)一個(gè)框架以滿足知識(shí)圖譜構(gòu)造的自動(dòng)性和可擴(kuò)展性。

        針對(duì)上述問題,本文將知識(shí)圖譜的自動(dòng)構(gòu)造過(guò)程劃分為兩個(gè)階段:首先,對(duì)于不同的數(shù)據(jù)源,分別對(duì)其中的信息進(jìn)行解析與整理,抽取出實(shí)體與關(guān)系,形成特定于該數(shù)據(jù)源的子知識(shí)圖譜;其次,在這些相互獨(dú)立的子知識(shí)圖譜之間建立廣泛關(guān)聯(lián)、跨數(shù)據(jù)源的關(guān)系,并從中進(jìn)一步提煉出更多的知識(shí),從而形成最終的軟件項(xiàng)目知識(shí)圖譜。筆者將這兩個(gè)階段分別稱為知識(shí)抽取和知識(shí)融合,如圖3所示。

        在知識(shí)抽取階段,需要各種不同的知識(shí)自動(dòng)抽取算法提供支持。每個(gè)知識(shí)自動(dòng)抽取算法對(duì)應(yīng)于一種特定的數(shù)據(jù)類型,將這種類型的數(shù)據(jù)作為輸入,對(duì)其中的信息進(jìn)行自動(dòng)解析與整理,抽取出實(shí)體與關(guān)系,從而構(gòu)造出相應(yīng)的子知識(shí)圖譜。例如,對(duì)于Java源代碼數(shù)據(jù),使用Eclipse JDT對(duì)其進(jìn)行解析,獲得源代碼的抽象語(yǔ)法樹,再?gòu)某橄笳Z(yǔ)法樹中抽取出代碼實(shí)體以及這些代碼實(shí)體之間的結(jié)構(gòu)依賴關(guān)系,從而形成一個(gè)由代碼結(jié)構(gòu)知識(shí)構(gòu)成的子知識(shí)圖譜;對(duì)于從JIRA事務(wù)追蹤系統(tǒng)中導(dǎo)出的JSON格式數(shù)據(jù),可以從中解析出Issue、Patch、Issue Comment、Issue User等類型的實(shí)體,并建立這些實(shí)體之間的關(guān)系,從而形成一個(gè)以事務(wù)跟蹤知識(shí)構(gòu)成的子知識(shí)圖譜。這些知識(shí)自動(dòng)抽取算法只負(fù)責(zé)處理原始數(shù)據(jù)中已有的結(jié)構(gòu)化信息,并不涉及更深層次的分析與挖掘(如對(duì)無(wú)結(jié)構(gòu)文本的語(yǔ)義分析)。

        返回ROM碼存在地址addr處的數(shù)組中的DS18B20的溫度,如果多個(gè)器件首先讀取ROM碼對(duì)每個(gè)器件進(jìn)行識(shí)別,然后才能調(diào)用該函數(shù)對(duì)ROM碼進(jìn)行地址匹配。

        圖3 兩階段的知識(shí)圖譜自動(dòng)構(gòu)造框架

        在知識(shí)融合階段,需要各種不同的知識(shí)自動(dòng)融合算法提供支持。在這些知識(shí)自動(dòng)融合算法中,有些用于建立知識(shí)抽取階段構(gòu)造的各個(gè)子知識(shí)圖譜之間廣泛、跨數(shù)據(jù)源的關(guān)系,從而將這些原本相互獨(dú)立的子知識(shí)圖譜整合為一個(gè)完整、統(tǒng)一的軟件項(xiàng)目知識(shí)圖譜;有些用于對(duì)現(xiàn)有的簡(jiǎn)單知識(shí)進(jìn)行進(jìn)一步的分析與挖掘,提煉出更復(fù)雜的知識(shí)(如API使用示例實(shí)體、軟件功能特征實(shí)體),并將其加入知識(shí)圖譜中,從而更好地支持復(fù)用者的學(xué)習(xí)理解及計(jì)算機(jī)的分析利用[2,4-5]。后文將這些知識(shí)自動(dòng)抽取算法與知識(shí)自動(dòng)融合算法統(tǒng)稱為知識(shí)自動(dòng)獲取算法[6-10]。

        此外,為了實(shí)現(xiàn)動(dòng)態(tài)的軟件項(xiàng)目知識(shí)圖譜構(gòu)造和演化,筆者提出了一種可擴(kuò)展的插件框架:系統(tǒng)為知識(shí)自動(dòng)獲取算法提供統(tǒng)一的接口,并將各種不同的知識(shí)自動(dòng)獲取算法實(shí)現(xiàn)為各個(gè)不同的插件;對(duì)于不同的軟件項(xiàng)目,根據(jù)具體的數(shù)據(jù)情況與知識(shí)需求配置合適的插件,框架將自動(dòng)按照特定的契約依次執(zhí)行這些插件,漸次地向知識(shí)圖譜中加入各個(gè)插件所負(fù)責(zé)獲取的知識(shí),從而形成最終的軟件項(xiàng)目知識(shí)圖譜。譬如在知識(shí)抽取階段,對(duì)于代碼結(jié)構(gòu)知識(shí),當(dāng)前可以先實(shí)現(xiàn)針對(duì)Java、C#等常見的編程語(yǔ)言的知識(shí)自動(dòng)抽取算法,但在將來(lái)還可能面對(duì)由Python、JavaScript等其他類型的編程語(yǔ)言所實(shí)現(xiàn)的源代碼,需要在后續(xù)實(shí)現(xiàn)相應(yīng)的自動(dòng)抽取算法,并將它們擴(kuò)展到現(xiàn)有的知識(shí)圖譜自動(dòng)構(gòu)造過(guò)程中。

        4 基于軟件項(xiàng)目知識(shí)圖譜的智能問答方法

        基于上述軟件項(xiàng)目知識(shí)圖譜自動(dòng)構(gòu)造框架和方法,筆者設(shè)計(jì)并實(shí)現(xiàn)了相應(yīng)的軟件項(xiàng)目知識(shí)圖譜構(gòu)造及智能問答平臺(tái)——SnowGraph(software knowledge graph),其系統(tǒng)框架如圖4所示。SnowGraph遵循數(shù)據(jù)-信息-知識(shí)-智慧(data-informationknowledge-wisdom,DIKW)的層次體系:對(duì)于一個(gè)待復(fù)用的軟件項(xiàng)目,以自動(dòng)化方法對(duì)其中的多源異構(gòu)數(shù)據(jù)進(jìn)行處理,將分散、非結(jié)構(gòu)化的軟件數(shù)據(jù)提煉為廣泛關(guān)聯(lián)、語(yǔ)義性強(qiáng)的知識(shí),并以知識(shí)圖譜的形式進(jìn)行表示;在此基礎(chǔ)上,將知識(shí)圖譜融入機(jī)器對(duì)無(wú)結(jié)構(gòu)文本的處理過(guò)程之中,進(jìn)而為復(fù)用者提供準(zhǔn)確、有效的智能問答服務(wù),從而提高軟件復(fù)用過(guò)程的效率與質(zhì)量。

        4.1 面向軟件項(xiàng)目知識(shí)圖譜的自然語(yǔ)言問答

        軟件項(xiàng)目知識(shí)圖譜往往采用Neo4j等圖數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu),支持基于Cypher的形式化查詢;需要開發(fā)人員熟悉并掌握Cypher語(yǔ)法,人工將用戶意圖轉(zhuǎn)化為Cypher查詢語(yǔ)句。許多軟件知識(shí)圖譜的數(shù)據(jù)量較大、數(shù)據(jù)類型較多,開發(fā)人員在查詢過(guò)程中存在較高的學(xué)習(xí)成本,因此,筆者研究并提出了一種基于自然語(yǔ)言的知識(shí)庫(kù)/知識(shí)圖譜查詢方法[11]。該方法能夠?qū)⒂脩舻淖匀徽Z(yǔ)言問句自動(dòng)轉(zhuǎn)化為Cypher形式化查詢語(yǔ)句,有效支持了面向軟件項(xiàng)目知識(shí)圖譜的自然語(yǔ)言問答。

        該方法首次提出了推理子圖的概念,并通過(guò)構(gòu)造和度量推理子圖,建立自然語(yǔ)言到形式化查詢語(yǔ)句之間的轉(zhuǎn)化橋梁。具體地,首先抽取軟件項(xiàng)目知識(shí)圖譜元模型(即針對(duì)軟件項(xiàng)目知識(shí)圖譜的實(shí)體類型以及關(guān)系類型進(jìn)行提煉得到的元模型)。其次,對(duì)不同類型的自然語(yǔ)言查詢語(yǔ)句進(jìn)行分析,對(duì)自然語(yǔ)言語(yǔ)句進(jìn)行切詞、去停用詞等基本預(yù)處理,同時(shí)解析得到自然語(yǔ)言詞語(yǔ)的詞性、主被動(dòng)態(tài)等信息,并將自然語(yǔ)言詞語(yǔ)與知識(shí)圖譜元素進(jìn)行匹配,得到詞語(yǔ)匹配圖。再次,生成與度量推理子圖,將自然語(yǔ)言轉(zhuǎn)換成知識(shí)圖譜元模型上的一系列子圖,這些子圖被稱為推理子圖。筆者提出并實(shí)現(xiàn)了一個(gè)基于隱藏結(jié)點(diǎn)擴(kuò)展的推理子圖生成方法,同時(shí)基于推理子圖的結(jié)構(gòu)特征和自然語(yǔ)言的文本信息,研究了如何對(duì)不同的子圖進(jìn)行合理度量,并給出了一個(gè)統(tǒng)一的度量方法。最后,構(gòu)造形式化查詢,目標(biāo)是將推理子圖轉(zhuǎn)化為Cypher查詢語(yǔ)句,并在Neo4j數(shù)據(jù)庫(kù)上執(zhí)行,最后返回用戶查詢結(jié)果。查詢中同時(shí)提供推理子圖的中間結(jié)果,使用戶可以理解形式化查詢構(gòu)造方法的前因后果,從而選擇合適的候選結(jié)果,解決了許多查詢及檢索系統(tǒng)需要用戶自行驗(yàn)證答案正確性的問題。

        圖5展示了一個(gè)面向軟件項(xiàng)目知識(shí)圖譜的自然語(yǔ)言問答示例。軟件開發(fā)者在復(fù)用Apache Lucene的開源項(xiàng)目時(shí),提出了這樣的一個(gè)問題:Which issue written by Alex that modifies a method called by IndexWriter?關(guān)于這個(gè)問題,可以在知識(shí)圖譜上進(jìn)行自然語(yǔ)言單詞與圖譜元素(如實(shí)體、邊等)匹配,得到詞語(yǔ)匹配圖,然后進(jìn)行邏輯推導(dǎo),理解問題含義,推導(dǎo)出符合語(yǔ)義的推理子圖,構(gòu)造約束條件,最終構(gòu)造形式化查詢語(yǔ)句(Cypher查詢語(yǔ)句),并執(zhí)行得到返回結(jié)果。

        圖5 自然語(yǔ)言查詢示例

        4.2 面向多源異構(gòu)軟件大數(shù)據(jù)的智能問答

        針對(duì)開發(fā)者給出的面向多源異構(gòu)軟件大數(shù)據(jù)的復(fù)雜問題,需要從軟件項(xiàng)目的各類自然語(yǔ)言文檔中抽取出一段最合適的文本作為答案。然而傳統(tǒng)的基于關(guān)鍵詞匹配的方法并不準(zhǔn)確,在實(shí)際過(guò)程中開發(fā)者還必須對(duì)大量的搜索結(jié)果進(jìn)行瀏覽與篩選。為了解決這一問題,筆者提出了融合代碼知識(shí)的智能問答方法[12-13]。該方法借助軟件項(xiàng)目的知識(shí)圖譜來(lái)計(jì)算不同單詞之間的潛在語(yǔ)義相關(guān)度,從而對(duì)候選文本集合進(jìn)行篩選與評(píng)估,返回更準(zhǔn)確的答案。

        具體解決方案是:以單詞匹配為主,結(jié)合多種歧義消除技術(shù),識(shí)別出與一段軟件文本相關(guān)的代碼實(shí)體集合;參考信息檢索領(lǐng)域的指標(biāo),度量軟件文本與代碼實(shí)體之間的關(guān)聯(lián)關(guān)系的強(qiáng)弱程度,從而將軟件文本的語(yǔ)義結(jié)構(gòu)化地表示為一個(gè)帶權(quán)重的代碼實(shí)體的集合;基于知識(shí)圖譜表示學(xué)習(xí)技術(shù),以代碼實(shí)體之間的關(guān)聯(lián)關(guān)系為橋梁,度量軟件文本間的語(yǔ)義相似度;以語(yǔ)義相似度為核心特征,綜合考慮多方面特征,建立對(duì)候選答案段落的評(píng)估模型,從而抽取出最合適的文本片段,并將其作為答案返回給復(fù)用者。具體方法流程如圖6所示。

        不同于現(xiàn)有的相關(guān)工作中常用的基于LDA、Word2Vec等統(tǒng)計(jì)學(xué)習(xí)方法的文檔搜索改進(jìn)策略[5],該方法借助軟件項(xiàng)目源代碼中的代碼實(shí)體對(duì)自然語(yǔ)言文本的語(yǔ)義進(jìn)行結(jié)構(gòu)化表示,并利用代碼實(shí)體之間的結(jié)構(gòu)依賴關(guān)系實(shí)現(xiàn)了對(duì)文本之間的潛在語(yǔ)義關(guān)聯(lián)的更直接、更有效的挖掘與利用,從而顯著地改進(jìn)文檔搜索的效果。

        5 軟件項(xiàng)目知識(shí)圖譜的應(yīng)用

        目前,SnowGraph已在開源社區(qū)與軟件企業(yè)分別開展應(yīng)用實(shí)踐。在開源社區(qū)方面,針對(duì)Apache開源軟件基金會(huì)中的192個(gè)開源軟件項(xiàng)目,筆者共收集了包含軟件源代碼、軟件版本記錄、軟件變更提交、軟件缺陷追蹤數(shù)據(jù)以及在線問答社區(qū)數(shù)據(jù)等在內(nèi)的約80 GB的原始數(shù)據(jù),并為這些軟件項(xiàng)目分別構(gòu)建了相應(yīng)的知識(shí)圖譜。由此形成了面向Apache開源軟件整體的軟件項(xiàng)目知識(shí)圖譜集,驗(yàn)證了本文方法的有效性。在企業(yè)應(yīng)用方面,SnowGraph目前已經(jīng)在神州數(shù)碼信息系統(tǒng)有限公司、中創(chuàng)軟件工程股份有限公司、金蝶軟件(中國(guó))有限公司、東軟集團(tuán)股份有限公司、浪潮通用軟件有限公司等軟件企業(yè)進(jìn)行了安裝運(yùn)行,為這些公司的優(yōu)勢(shì)領(lǐng)域構(gòu)建了10個(gè)技術(shù)領(lǐng)域的軟件知識(shí)圖譜(見表1),并在此基礎(chǔ)上提供了智能問答服務(wù)。

        圖6 融合代碼知識(shí)的答案檢索模塊方法流程

        表1 企業(yè)知識(shí)圖譜情況簡(jiǎn)介

        5.1 面向Apache開源社區(qū)的軟件項(xiàng)目知識(shí)圖譜構(gòu)造

        這里以Apache Lucene開源軟件項(xiàng)目為例,介紹軟件項(xiàng)目知識(shí)圖譜構(gòu)造的基本過(guò)程和情況。與該項(xiàng)目相關(guān)的軟件數(shù)據(jù)具體如下。

        ● 源代碼:總代碼行數(shù)超過(guò)80萬(wàn)行。

        ● Git版本控制數(shù)據(jù):共有67次大的版本變更,合計(jì)超過(guò)26 000次代碼提交記錄。

        ● 郵件列表數(shù)據(jù):積累了超過(guò)16萬(wàn)封郵件。

        ● JIRA事務(wù)跟蹤數(shù)據(jù):積累了7 500多個(gè)事務(wù)報(bào)告。

        ● Stack Overflow上的相關(guān)問答對(duì):包括9 300多個(gè)問題及其答案。

        基于這些數(shù)據(jù),SnowGraph進(jìn)行了Apache Lucene開源軟件項(xiàng)目知識(shí)圖譜的自動(dòng)構(gòu)造。在一個(gè)具有32 GB內(nèi)存和2.9 GHz處理器的服務(wù)器上,自動(dòng)構(gòu)造出這個(gè)軟件項(xiàng)目知識(shí)圖譜所耗費(fèi)的時(shí)間為39 min。表2、表3分別給出了這一知識(shí)圖譜中的實(shí)體和關(guān)系的基本統(tǒng)計(jì)信息。

        表2 Apache Lucene的軟件知識(shí)圖譜中實(shí)體的基本統(tǒng)計(jì)信息

        表3 Apache Lucene的軟件知識(shí)圖譜中關(guān)系的基本統(tǒng)計(jì)信息

        圖7展示了最終生成的Apache Lucene的知識(shí)圖譜弦圖。Apache Lucene軟件項(xiàng)目知識(shí)圖譜共抽取了16種類型的知識(shí)實(shí)體,共計(jì)323 578個(gè)實(shí)體,17種主要類型的關(guān)聯(lián)關(guān)系,共計(jì)2 200 683條邊。

        圖7 Apache Lucene知識(shí)圖譜弦圖

        5.2 面向軟件企業(yè)的應(yīng)用示范

        本節(jié)以神州數(shù)碼技術(shù)有限公司為例,介紹SnowGraph在企業(yè)中的應(yīng)用狀況。在與神州數(shù)碼技術(shù)有限公司的合作研發(fā)和應(yīng)用示范過(guò)程中,SnowGraph為該公司智慧城市的市民服務(wù)與小額支付兩個(gè)領(lǐng)域的軟件智能開發(fā)提供了有效的支持。

        神州數(shù)碼技術(shù)有限公司智慧城市公共信息服務(wù)開發(fā)平臺(tái)規(guī)模大、功能繁多復(fù)雜、平臺(tái)文檔龐雜,這使得軟件開發(fā)人員熟練使用該平臺(tái)進(jìn)行軟件項(xiàng)目開發(fā)的學(xué)習(xí)成本較高。為此,神州數(shù)碼技術(shù)有限公司將筆者團(tuán)隊(duì)研發(fā)的軟件項(xiàng)目知識(shí)圖譜自動(dòng)構(gòu)造方法與智能問答工具作為解決方案,對(duì)平臺(tái)以及智慧城市領(lǐng)域已開發(fā)完成的軟件項(xiàng)目所包含的各種資源(包括源代碼、需求文檔、設(shè)計(jì)文檔、測(cè)試文檔、用戶手冊(cè)、參考文獻(xiàn)等)進(jìn)行了深度的解析與挖掘,實(shí)現(xiàn)了大規(guī)模軟件項(xiàng)目數(shù)據(jù)的知識(shí)化,有效提高了智慧城市領(lǐng)域與稅務(wù)領(lǐng)域的軟件構(gòu)造效率與質(zhì)量。例如,針對(duì)市民服務(wù)領(lǐng)域,從109 GB的軟件項(xiàng)目源數(shù)據(jù)中提取了2 715 134條軟件實(shí)體知識(shí)、31 104 408條軟件屬性知識(shí)和11 270 694條軟件語(yǔ)義關(guān)聯(lián)知識(shí),形成了一個(gè)面向市民服務(wù)領(lǐng)域的詳盡且語(yǔ)義豐富的軟件知識(shí)圖譜。

        6 相關(guān)工作

        近年來(lái),關(guān)于知識(shí)圖譜的相關(guān)研究工作逐漸增多。相關(guān)工作可以大致劃分為知識(shí)抽取、知識(shí)融合和知識(shí)利用3個(gè)方面。

        知識(shí)抽取是知識(shí)圖譜構(gòu)建的第一步,指的是從原始數(shù)據(jù)中自動(dòng)抽取出實(shí)體、關(guān)系和屬性等知識(shí)單元。對(duì)于結(jié)構(gòu)性較強(qiáng)的數(shù)據(jù),一般可以采用人工編寫規(guī)則與啟發(fā)式算法相結(jié)合的方法來(lái)抽取知識(shí)。目前,學(xué)術(shù)界主要關(guān)注如何從互聯(lián)網(wǎng)上海量的開放領(lǐng)域(open domain)的無(wú)結(jié)構(gòu)文本數(shù)據(jù)中自動(dòng)抽取知識(shí)。代表性的工作有:Finkel J R等人[14]提出了一種基于條件隨機(jī)場(chǎng)(conditional random field,CRF)序列模型的實(shí)體抽取方法,并將其集成到Stanford自然語(yǔ)言處理工具集中;Angeli G等人[5]提出了一種基于句法結(jié)構(gòu)分析的三元組抽取方法,研發(fā)了相應(yīng)的工具OpenIE,并將其集成到Stanford自然語(yǔ)言處理工具集中。

        從開放領(lǐng)域的無(wú)結(jié)構(gòu)文本數(shù)據(jù)中抽取出的知識(shí)可能存在缺失,同時(shí)也可能包含大量冗余甚至錯(cuò)誤的內(nèi)容,因此必須對(duì)其進(jìn)行清理、整合和補(bǔ)全。這一過(guò)程被稱為知識(shí)融合。這方面的代表性工作有:Dong X等人[6]提出了一種基于有監(jiān)督機(jī)器學(xué)習(xí)的三元組可信度評(píng)估方法,并在該方法的指導(dǎo)下為谷歌知識(shí)圖譜擴(kuò)充了大量來(lái)自互聯(lián)網(wǎng)的無(wú)結(jié)構(gòu)文本數(shù)據(jù)的三元組知識(shí);Gardner M等人[7]提出了一種基于隨機(jī)路徑游走的知識(shí)推理方法PRA(path ranking algorithm),該方法能夠根據(jù)知識(shí)圖譜中已有的三元組推測(cè)出新的三元組;Socher R等人[8]基于神經(jīng)網(wǎng)絡(luò)對(duì)知識(shí)圖譜中的三元組進(jìn)行了表示學(xué)習(xí),從而能夠推測(cè)出新的三元組。

        在知識(shí)利用方面,現(xiàn)有的研究工作主要關(guān)注如何為知識(shí)圖譜提供自然語(yǔ)言查詢支持,以及如何基于知識(shí)圖譜實(shí)現(xiàn)語(yǔ)義化的搜索引擎。

        面向知識(shí)圖譜的自然語(yǔ)言查詢方法指的是對(duì)用戶以自然語(yǔ)言問句的形式提出的問題進(jìn)行語(yǔ)義解析,將其轉(zhuǎn)換為某種結(jié)構(gòu)化的語(yǔ)義表示形式,從而在知識(shí)圖譜上進(jìn)行符號(hào)化的推理,進(jìn)而找到符合要求的實(shí)體作為答案返回給用戶。這一問題的關(guān)鍵在于從自然語(yǔ)言問句到結(jié)構(gòu)化的語(yǔ)義表示形式的轉(zhuǎn)換,即語(yǔ)義解析(semantic parsing)。早期人們大多采用規(guī)則驅(qū)動(dòng)的方法,多見于特定領(lǐng)域的語(yǔ)義解析任務(wù)。這類方法通過(guò)人工制定的模板或語(yǔ)法規(guī)則來(lái)解析自然語(yǔ)言問句的語(yǔ)義,例如,Woods W A[15]研發(fā)了一個(gè)規(guī)則驅(qū)動(dòng)的自然語(yǔ)言查詢系統(tǒng)LUNAR,用來(lái)支持科研人員對(duì)月球地質(zhì)數(shù)據(jù)的查詢。此外,以本文所處的軟件工程領(lǐng)域?yàn)槔珺egel A等人[16]研發(fā)了一個(gè)面向軟件項(xiàng)目數(shù)據(jù)的自然語(yǔ)言查詢系統(tǒng)Hoozizat,可以支持形如“FileModifiedByFileRevision Modified ByChangesetCommittedByNeeseBarke ma”的自然語(yǔ)言查詢語(yǔ)句;Lin J等人[17]研發(fā)了一個(gè)面向軟件項(xiàng)目數(shù)據(jù)的自然語(yǔ)言查詢系統(tǒng)TiQi,該系統(tǒng)中制定了更加復(fù)雜的語(yǔ)法規(guī)則,從而對(duì)更多的自然語(yǔ)言問句句式進(jìn)行支持。近年來(lái),隨著深度學(xué)習(xí)技術(shù)的飛速發(fā)展,研究者們提出了各種基于深度神經(jīng)網(wǎng)絡(luò)模型的語(yǔ)義解析方法。代表性的工作有:Dong L等人[18]使用帶注意力機(jī)制的長(zhǎng)短期記憶(long short-term memory,LSTM)網(wǎng)絡(luò)將自然語(yǔ)言問句轉(zhuǎn)換為相應(yīng)的邏輯表達(dá)式;Jia R等人[19]使用指針網(wǎng)絡(luò)(pointer network)解決了語(yǔ)料庫(kù)中的單詞稀疏問題;Yin P C等人[20]提出了一種能夠?qū)湫谓Y(jié)構(gòu)進(jìn)行編解碼的深度語(yǔ)義解析器;等等。

        基于知識(shí)圖譜的語(yǔ)義搜索方法指的是在信息檢索的過(guò)程中對(duì)知識(shí)圖譜中的實(shí)體和關(guān)系進(jìn)行利用,從而實(shí)現(xiàn)語(yǔ)義化的文本搜索引擎。典型地,Xu Y等人[21]提出了一種基于Wikipedia描述信息的查詢擴(kuò)展方法。對(duì)于一個(gè)查詢語(yǔ)句,首先識(shí)別出其中提到了Wikipedia中的哪些實(shí)體。在Wikipedia中,這些實(shí)體各自有具體的文本描述信息,包括標(biāo)題、概述、詳細(xì)內(nèi)容、分類標(biāo)簽、附注、相關(guān)鏈接等不同的部分。這一方法將各個(gè)實(shí)體的這些不同部分的文本描述信息作為附加的查詢內(nèi)容,分別計(jì)算它們與待查詢文本的相似度。之后,將這些相似度與原始的文本相似度線性地組合在一起,作為新的相似度計(jì)算方法,并通過(guò)有監(jiān)督機(jī)器學(xué)習(xí)的方式來(lái)獲得這些相似度在線性組合時(shí)的權(quán)重。Bendersky M等人[22]利用Wikipedia中的實(shí)體描述信息來(lái)度量實(shí)體的重要性,據(jù)此來(lái)計(jì)算查詢語(yǔ)句中單詞的重要性,從而改善文本檢索。Dalton J等人[23]提出了一種基于多維度實(shí)體特征的查詢擴(kuò)展方法EQFE(entity query feature expansion)。這一方法不僅考慮了查詢語(yǔ)句中提及的實(shí)體,還考慮了原始查詢結(jié)果中排在前列的文本中提及的實(shí)體。同時(shí),在查詢擴(kuò)展時(shí),該方法不僅考慮了實(shí)體的名稱,還考慮了它們?cè)谥R(shí)圖譜中的別名、類別、具體文本描述等。這些特征通過(guò)一個(gè)機(jī)器學(xué)習(xí)模型綜合在一起,從而形成了新的相似度計(jì)算方法。Pan D Z等人[24]提出了一種使用Freebase知識(shí)圖譜中的實(shí)體名稱來(lái)實(shí)現(xiàn)查詢擴(kuò)展的方法。有兩類實(shí)體的名稱被用于對(duì)原始的查詢語(yǔ)句進(jìn)行擴(kuò)展:第一類是其名稱在原始的查詢語(yǔ)句中完整或部分出現(xiàn)了的實(shí)體;第二類是這些實(shí)體在知識(shí)圖譜中的鄰接實(shí)體。在此基礎(chǔ)上,使用Dempster-Shafer證據(jù)理論進(jìn)行不確定推理,從這些候選實(shí)體中選出具有足夠證據(jù)支持的實(shí)體,并以它們的名稱來(lái)擴(kuò)充原始查詢語(yǔ)句。Guisado-Gámez J等人[25]提出了一種基于知識(shí)圖譜子圖模式特征的查詢擴(kuò)展方法SQE(structural query expansion)。這一方法指出,在Wikipedia中,若某個(gè)實(shí)體和在查詢語(yǔ)句中出現(xiàn)的實(shí)體之間符合某些特定的子圖模式,則這個(gè)實(shí)體與查詢語(yǔ)句具有較高的語(yǔ)義相關(guān)性,可以加入擴(kuò)展后的查詢語(yǔ)句中。

        7 結(jié)束語(yǔ)

        本文研究并提出了基于大數(shù)據(jù)的軟件項(xiàng)目知識(shí)圖譜的自動(dòng)構(gòu)造及問答技術(shù)。本文首先對(duì)軟件項(xiàng)目中多源異構(gòu)的數(shù)據(jù)進(jìn)行了分析和總結(jié),給出了一種以代碼結(jié)構(gòu)為核心的軟件復(fù)用中的知識(shí)模型。該知識(shí)模型具有很好的通用性與可擴(kuò)展性,能夠?qū)ξ磥?lái)可能出現(xiàn)的新的知識(shí)需求、知識(shí)來(lái)源,以及知識(shí)抽取、關(guān)聯(lián)、提 煉方法進(jìn)行適應(yīng)與支持。在此基礎(chǔ)上,本文提出了軟件項(xiàng)目知識(shí)圖譜的自動(dòng)構(gòu)造方法和基于知識(shí)圖譜的智能問答方法,并介紹了基于上述研究工作所實(shí)現(xiàn)的支持平臺(tái)SnowGraph及其目前的應(yīng)用狀況。未來(lái),基于軟件開發(fā)過(guò)程中的更多數(shù)據(jù)類型,進(jìn)一步的工作是進(jìn)行軟件知識(shí)圖譜知識(shí)實(shí)體的擴(kuò)充,以及建立更多的語(yǔ)義關(guān)聯(lián),并提供更精準(zhǔn)的交互式智能問答服務(wù)。

        猜你喜歡
        代碼文檔圖譜
        有人一聲不吭向你扔了個(gè)文檔
        繪一張成長(zhǎng)圖譜
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        補(bǔ)腎強(qiáng)身片UPLC指紋圖譜
        中成藥(2017年3期)2017-05-17 06:09:01
        基于RI碼計(jì)算的Word復(fù)制文檔鑒別
        主動(dòng)對(duì)接你思維的知識(shí)圖譜
        Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
        岛国精品一区二区三区| 中文字幕日本人妻久久久免费| 日本不卡一区二区三区在线| 伊人色综合久久天天人手人停| 蜜桃网站在线免费观看视频| 日韩有码在线观看视频| 亚洲中文字幕一区精品自拍| 熟妇人妻中文av无码| 国产精品亚洲ΑV天堂无码| 东京热加勒比国产精品| 亚洲av日韩精品久久久久久a| 欧美日韩国产一区二区三区不卡| 欧美 亚洲 国产 日韩 综AⅤ| 亚洲情久久久精品黄色| 久久久久亚洲精品男人的天堂| 日韩成人大屁股内射喷水| 久久国产精品视频影院| 一区二区三区日韩毛片| 中文字幕免费在线观看动作大片| 无码少妇a片一区二区三区| 日韩中文字幕一区二区高清| 国产亚洲精品视频网站| 一本大道av伊人久久综合| 爱情岛永久地址www成人| 国产成人一区二区三区视频免费蜜| 亚洲中文乱码在线观看| 免费国产黄网站在线观看视频| 国产精品卡一卡二卡三| 色窝综合网| 按摩师玩弄少妇到高潮av| 国产午夜精品一区二区| 国产一极毛片| 久久夜色精品亚洲天堂| 国产玉足榨精视频在线观看| 亚洲午夜福利在线观看| 午夜无码熟熟妇丰满人妻| 天天色天天操天天日天天射| 中文字幕人妻中文| 一区二区无码中出| 亚洲粉嫩视频在线观看| 最近中文字幕国语免费|