本發(fā)明屬于數(shù)據(jù)處理技術領域,尤其涉及一種基于自然語義分析的用例提取方法。
背景技術:
自然語言處理是計算機科學領域與人工智能領域中的一個重要方向。它研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數(shù)學于一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言,所以它與語言學的研究有著密切的聯(lián)系,但又有重要的區(qū)別。自然語言處理并不是一般地研究自然語言,而在于研制能有效地實現(xiàn)自然語言通信的計算機系統(tǒng),特別是其中的軟件系統(tǒng)。因而它是計算機科學的一部分。
21世紀以來,由于國際互聯(lián)網(wǎng)的普及,自然語言的計算機處理成為從互聯(lián)網(wǎng)上獲取知識的重要手段。生活在信息網(wǎng)絡時代的現(xiàn)代人,幾乎都要與互聯(lián)網(wǎng)打交道,都要或多或少地使用自然語言處理的研究成果來幫助他們獲取或挖掘在廣闊無邊的互聯(lián)網(wǎng)上的各種知識和信息。
因此,世界各國都非常重視自然語言處理的研究,投入了大量的人力、物力和財力。當前國外自然語言處理研究,基于句法—語義規(guī)則的理性主義方法受到質疑,隨著語料庫建設和語料庫語言學的崛起,大規(guī)模真實文本的處理成為自然語言處理的主要戰(zhàn)略目標。
在過去的40多年中,從事自然語言處理系統(tǒng)開發(fā)的絕大多數(shù)學者,基本上都采用基于規(guī)則的理性主義方法,這種方法的哲學基礎是邏輯實證主義,他們認為,智能的基本單位是符號,認知過程就是在符號的表征下進行符號運算,因此,思維就是符號運算。著名語言學家j.a.fodor在“representations”一書(1980)中說:“只要認為心理過程是計算過程(因此是由表征式定義的形式操作),那么,除了將心靈看作別的之外,還自然會把它看作一種計算機。也就是說,假設的計算過程包含哪些符號操作,心靈也就進行哪些符號操作。因此,可以大致上認為,心理操作跟圖靈機的操作十分類似。”fodor的這種說法代表了自然語言處理中的基于規(guī)則(符號操作)的理性主義觀點。
在這樣的新形勢下,自然語言處理這個學科的交叉性和邊緣性顯得更加突出了。自然語言處理的研究者如果只是局限于自己原有的某一個專業(yè)的狹窄領域而不從其他相關的學科吸取營養(yǎng)來豐富自己的知識,在自然語言處理的研究中必將一籌莫展,處處碰壁。面對這樣的形勢我們應該怎樣做?是抱殘守缺,繼續(xù)把自己蜷縮在某一個專業(yè)的狹窄領域之內孤芳自賞,還是與時俱進,迎頭趕上,努力學習新的知識,以適應學科交叉性和邊緣性的要求?這是我國自然語言處理工作者必須考慮的問題。在工業(yè)革命時代,人類需要探索物質世界的奧秘,由于物質世界是由原子和各種基本粒子構成的,因此,研究原子和各種基本粒子的物理學成為非常重要的學科。在信息網(wǎng)絡時代,由于信息網(wǎng)絡主要是由語言構成的,因此,我們可以預見,在不久的將來,研究語言結構的自然語言處理必定也會成為像物理學一樣非常重要的學科。物理學研究物質世界中各種物理運動的規(guī)律,而自然語言處理則研究信息網(wǎng)絡世界中語言載體的規(guī)律。自然語言處理的重要性完全可以與物理學媲美,它們將成為未來科學世界中舉足輕重的雙璧。這是我在直覺上的一種估計,我相信這樣的估計將會成為活生的現(xiàn)實
但自然語言處理領域一直缺乏統(tǒng)一的理論基礎。思維語言(languageofthought,lot)框架與認知科學框架(即概念的聯(lián)結論構造)作為兩種對立的指導方法,長期影響著自然語言處理的發(fā)展路徑。對于認知科學和人工智能來說,無論哪一種指導理論,都建立在計算種類、表述載體種類、表述內容種類以及心理學解釋種類這四個分析層次之上。并且,這些層次之間并不相互獨立,“每一層次的分析都制約著相鄰層次的分析”。建立在聯(lián)結主義計算基礎之上的認知科學框架,以整體論的神經(jīng)科學為指導,把計算機看做建立大腦模型的手段,試圖用計算機模擬神經(jīng)元的相互作用,建構非概念的表述載體與內容。但由于神經(jīng)科學尚處于初級階段且應用范圍相對狹窄,使其發(fā)展受到了很大制約,至今尚未形成一個有影響力的處理自然語言的模式。
早在20世紀30年代,美國哲學家莫里斯(c.morris)把語言符號劃分為三個層面:語形學、語義學和語用學,之后,德國邏輯學家卡爾納普也提出了與莫里斯相類似的劃分。在自然語言處理中,語義是實詞進入句子之后詞與詞之間的關系,是一種事實上或邏輯上的關系。所謂語義框架分析,就是用形式化的表述方式,將具體句子中的動詞與名詞的語義結構關系(格局)表示出來。雖然現(xiàn)階段的框架建立在“場景(scene)”之上,并在一定程度上體現(xiàn)出“立場(standpoint)”的概念,但這僅是局限在單句范圍內的“小場景”和“施事方”的“小立場”,還不能反映站在語言使用者角度(或立場),在文章層次或隱喻著社會知識層次的這種“大場景”(即“語境”)下的語義關系。但是,自然語言中大量存在的歧義性和模糊性等現(xiàn)象,是現(xiàn)階段以詞語為核心,對句子的語義理解所不能處理的。它忽視了作為語言的使用者“人”的主體地位。如維特根斯坦所強調的,人是語言的使用者,語言的使用是同人的生命活動息息相關的。這一思路把語言的使用放在了人類生活這樣一個大背景中了。主體的參與性以及不同主體使用語言的不同方式,是考察語言的前提。詞語和語句作為工具,它們的意義只能在使用中表現(xiàn)出來。因為語句的意義并不是隱藏在它的分析中的,而是體現(xiàn)在它在具體的語言游戲中的使用。這就消解了存在于自然語言之中的歧義性、模糊性、隱喻等一直困擾語言學家的問題,從而為自然語言處理指出了發(fā)展方向:只有引進語言的使用者以及具體的語境描述,才能解決語句的意義問題。
對自然語言的方向進行研究,是對于該前沿學科的一種嘗試,也是豐富自己眼界的一種方法,研究自然語言也是對能力的一種提升。我國自然語言處理雖然已經(jīng)取得不少成績,但是,與國際水平相比,差距還很大。自然語言處理是國際性的學科,而應該參與到國際自然語言處理的研究中去,用國際的水平和國際的學術規(guī)范來要求研究。在這樣的新形勢下,自然語言處理這個學科的交叉性和邊緣性顯得更加突出了,自然語言處理的研究者如果只是局限于自己原有的某一個專業(yè)的狹窄領域而不從其他相關的學科吸取營養(yǎng)來豐富自己的知識,在自然語言處理的研究中必將一籌莫展、處處碰壁。
綜上所述,現(xiàn)有技術存在的問題是:
一.針對于特定的某些領域沒用屬于自己的語料庫,沒有訓練出一個和相關領域相關度高的詞語庫;原因有以下幾個方面:1.訓練一個相關領域的語料庫需要大量專業(yè)的文檔,并且這些文檔質量要求相對較高,但相應文檔的識別與獲取十分困難。2.由于工作量巨大語料庫不能由人工來完成,所以要求機器來進行專業(yè)語料庫的生成,但是當前機器學習的算法又不夠準確。3.即使存在某些相關語料庫,該語料庫中也存在大量的雜音以及干擾詞和錯誤的詞等。
二.現(xiàn)有技術不能有效地針對漢語提取出用需求描述中對于軟件需求的明確要求,以及各個角色相對應的功能。原因如下:1.漢語語法不夠清晰,即很多時候作者并不會按照語法的要求去書寫相應的描述。這導致句子中成分的識別存在很大困難2.對于用例并不能準確的識別,因為當前大部分是基于主題進行用例提取,其準確度十分低。3.對于用例的歸屬者,即參與者不能與其相應的用例聯(lián)系起來。因為基于主題的提取忽視了各個實體間的相互關系。4.語句中存在大料干擾成分,如:修飾性的形容詞和副詞,或是并列成分等。都給準確識別出用例和該用例的歸屬帶來困難
三.現(xiàn)有分詞系統(tǒng)不能正確的識別某些行業(yè)相關的技術用語,如:“軟件工程”。首先是由于目前的詞典沒有收錄某些行業(yè)術語。其次是由于某些詞在不同場景下存在不同的組合方式。導致分詞系統(tǒng)不能準確識別如何進行劃分。
技術實現(xiàn)要素:
針對現(xiàn)有技術存在的問題,本發(fā)明提供了一種基于自然語義分析的用例提取方法。
本發(fā)明是這樣實現(xiàn)的,一種基于自然語義分析的用例提取方法,包括:
通過大量相關專業(yè)需求文檔,運用基于大規(guī)模語料的新詞發(fā)現(xiàn)算法訓練屬于自己領域的詞庫;
對詞庫精度進行優(yōu)化,排除干擾分詞結果的錯誤詞匯;
運用相關領域的語料庫導入ansj開源工具進行分詞,并標識出用例以及參與者;
在分詞的基礎上運用斯坦福開源工具stanfordparser進行句子主干提取,并建立基于語義分析的語義樹;
針對提取的句子主干通過語法模型匹配進行用例的識別以及提取。
首先,我們采用的是基于大規(guī)模語料的開源新詞發(fā)現(xiàn)算法,該算法有三個特征值來進行新詞的提取和解析,分別是自由度,出現(xiàn)頻率,凝固程度。那么我們針對該工具進行參數(shù)的調優(yōu),最終確定三個參數(shù)分別為:0,0.018,0.94。該參數(shù)使得我們所得到的的語料庫雜質最少,關鍵詞最準確。相比于目前的語料庫,目前很少存在針對某個特定領域的專業(yè)語料庫,即使有,其語料庫中也會存在大量的雜質和某些關鍵詞的丟失。本發(fā)明通過對參數(shù)的調優(yōu)以及大量專業(yè)文本的訓練,得出一個雜質少,準確度高的,行業(yè)相關度高的語料庫供我們使用。
進一步,對于上一步驟生成的語料庫進行“雜音”過濾,即排除干擾詞匯和不準確的詞匯。我們定義我們希望得到的用例以及專業(yè)詞匯集為:
t(us)={neology|neology∈{nn∪nv}};
其中,nn為名詞的集合,nv為動名詞的集合,us為用例的集合。那么除了該集合外的詞匯都對我們沒有什么價值,但是存在一些雜質會影響我們的結果。對此,我們通過分析發(fā)現(xiàn),大部分雜質為介詞短語,那么我們定義雜質的集合為:
d(ne)={dirty|dirty∈{ne∩preposition}};
其中,ne為新詞的集合,preposition為介詞的集合。那么我們通過ansj工具中的詞性分析功能,通過掃描語料庫并過濾掉介詞短語和包含介詞的詞語等。相對于現(xiàn)有的語料庫,我們的語料庫的雜質更少,詞性標注更加準確,從而使得結果更加精確。
進一步,運用ansj對輸入文本進行第一次分詞,并標記出所有可能存在的用例及參與者。我們在上面定義過希望得到的用例以及專業(yè)詞匯集為:
t(us)={neology|neology∈{nn∪nv}};
那么我們針對該集合進行特征標識,用m來作為詞性的結尾符號,那么該集合的定義就變?yōu)?/p>
t(us)={neology|neology∈{fallow(se)}};
定義函數(shù)
即所有輸入語句分詞集合se中以'm'作為詞性后綴的詞的集合,那么我們就將用例及參與者標識出來了。相對于現(xiàn)有的技術,我們能更加清晰的標示出對我們很重要的詞匯,而不是像通過概率來進行提取一樣,會導致很多關鍵詞的丟失。相比于現(xiàn)有技術,我們有更明確的和更完整的對于關鍵詞的標識。
進一步,在分詞的基礎上,我們用stanfordparser工具進行該用例描述的主干提取。stanfordparser工具可以將句子的語法樹結構分析并輸出,所以經(jīng)過我們真對于漢語語法結構以及大量用例描述實驗的結果分析得出結論:用例描述通常在某個句子的賓語成分,即:
t(us)={use-case|use-case∈{object(se)}};
而用例的參與者通常處于句子的主語部分,聯(lián)系參與者與用例的是謂語動詞。當然,一些句子存在并列成分,以及省略成分,我們在下一個部分進行解決。
所以,針對于我們所發(fā)明的工具,句子提取主干主要工作是提取句子的主謂賓成分。即
result={(a,b,c)|a∈subject,b∈predicate,c∈object}
目前存在很少的工具有該功能,即使有該功能,現(xiàn)有工具不能很好地對句子成分進行識別,和主干提取。我們運用stanfordparser的強大的功能以及高的準確性,很好的將句子的主干從一個完整的句子中提取出來。從而過濾掉了一些不必要的形容詞,副詞,和修飾成分等。并且具有著較高的準確性和句子的完整性。
進一步,針對于提取出來的句子主干,我們對其進行最終用例的提取。我們通過對大量的實驗結果和漢語語法的分析,最終總結出5種模型來涵蓋大部分可能出現(xiàn)的語法結構(針對于上一階段提取出的句子主干result),并通過該模型來建立語義樹從而實現(xiàn)用例的提取和參與者的匹配。我們得出的5種語法模型可以表示為:
我們現(xiàn)在可以根據(jù)上述5種模型來進行語義樹的生成。
對于第一種模型,主謂賓已經(jīng)很明確了,但是分為兩種情況:
1.v前的所有名詞的組合可以看作是一個新的主語(前提與當前父節(jié)點不同),而v后面的所有名詞的組合為賓語,但是如果該賓語沒有被標記出來,(在第二階段進行分詞的時候標記)則認為是無效賓語。對于新的主語我們應該建立一個新的父節(jié)點。賓語為該父節(jié)點的子節(jié)點。
2.v前面為代詞,則認為當前的賓語屬于當前父節(jié)點(即上一個出現(xiàn)的主語)
對于第二種模型,v前是主語,但是沒有賓語存在,對于新的主語我們應該建立一個新的父節(jié)點。
對于第三種模型,不存在主語,但存在一個賓語(如果為有效賓語),則認為該賓語屬于前一個主語,為當前父節(jié)點生成一個子節(jié)點。
對于第四種模型,一般和第5種情況搭配出現(xiàn)并判斷,因為在第5種情況中,該名詞短語可能為主語,也可能為賓語,如果單獨的動詞后面出現(xiàn)一個動詞短語,則認為該動詞短語為當前主語的賓語,如果不存在單獨的動詞,則單獨的名詞為一個新的主語。
針對以上情形建立語義樹,并實現(xiàn)算法,我們定義生成語義樹的算法為accrete:
其中,createroot為在文本輸入時建立一個總的根節(jié)點,createchild(s)為為了賓語s建立一個樹的子節(jié)點,并插入當前父節(jié)點。createfather(f)為建立一個新的主語f的父節(jié)點,并插入當前的樹根。即:
createchild(s)=currentfather.add(newtreenode(s))∶s∈{usecase};
createroot=newtreenode(root)∶wordsin;
在進行完語義樹的建立后,我們通過對語義樹的先序遍歷,從而輸出用例以及其參與者。我們定義遍歷方法為traverse
當樹節(jié)點為葉子節(jié)點時(即該節(jié)點沒有子節(jié)點)輸出用例,該用例都屬于其父節(jié)點的參與者的。當遍歷至父節(jié)點時,輸出一個新的參與者,再進行其用例的遍歷。直到所有節(jié)點都遍歷一遍。
通過語義樹進行用例及其參與者的匹配使得結果更加準確,現(xiàn)有技術無法實現(xiàn)用例與參與者的明確匹配,即使有也存在大量的錯誤結果。本發(fā)明用5種模型以及語義樹保證了用例及其使用者間的密切聯(lián)系。從而使得用例和參與者精確的匹配并輸出。
本發(fā)明的優(yōu)點及積極效果為:
本發(fā)明新詞發(fā)現(xiàn)算法利用三個特性很好的對所需要的新詞進行了提取,在機器學習過程中,進行了大量的參數(shù)調控等,同時也進行了大量的樣本學習使得相關領域的語料庫的關鍵詞準確度達到90%左右,其次,運用針對詞語的過濾技術,使得語料庫關鍵詞的準確度達到了97%以上?,F(xiàn)有的新詞發(fā)現(xiàn)技術沒有針對特定的領域進行語料庫的訓練,即使有,他們也沒有針對用例匹配來進行用例描述的關鍵詞的訓練。本發(fā)明訓練了應于特定領域的用例描述的語料庫。并具有很高的準確率。
在分詞中,通過對我們訓練出的語料庫的應用,我們使得分詞結果準確率相比提高至95%以上,并且該語料庫使得關鍵詞的標記準確率達到了97以上?,F(xiàn)有的分詞系統(tǒng)無法針對特定的領域進行精確的分詞,即使有,也存在大量關鍵詞丟失的情況,本發(fā)明運用訓練出的語料庫使得針對于某個專業(yè)領域的分詞準確率大幅提高。
在主干提取部分,本發(fā)明運用漢語的語法結構和stanfordparser工具的運用,使得句子主干提取準確率達到了95%以上?,F(xiàn)有技術很少有針對句子主干提取進行應用,即使有,也存在丟失原本句子大量成分的問題,以及主干提取準確率十分低的問題。本發(fā)明通過對stanfordparser工具提供的參數(shù)的應用,可以準確高效的識別出漢語句子中主謂賓的成分,并排除干擾成分,使得主干提取的準確率大幅提高。
在用例提取和參與者匹配部分,通過運用本發(fā)明歸納出的5個語法結構模型使得對于用例和參與者的提取準確度達到了96%以上,并且運用樹形結構來存儲參與者和用例的關系,使得確定兩者關系的準確度達到了98%以上。針對于用例提取,現(xiàn)有技術大部分基于頻率提取,但是很多關鍵的用例出現(xiàn)頻率并沒有明顯的特征,所以目前提取準確率低下,即使可以通過參數(shù)使得對某一個文章的準確率有所提高,但是該參數(shù)無法適用于其他文本。本發(fā)明通過對句子結構的建模,總結出5個模型來提高提取的準確率,并且運用樹形結構來存儲參與者和用例的關系。使得針對于用例提取和分析的準確率和效率大幅提高。
附圖說明
圖1是本發(fā)明實施例提供的基于自然語義分析的用例提取方法。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
下面結合附圖對本發(fā)明的應用原理作詳細描述。
如圖1所示,本發(fā)明實施例提供的基于自然語義分析的用例提取方法,包括:
s101:通過大量相關專業(yè)需求文檔,運用基于大規(guī)模語料的新詞發(fā)現(xiàn)算法訓練屬于自己領域的詞庫;
s102:對詞庫精度進行優(yōu)化,排除干擾分詞結果的錯誤詞匯;
s103:運用相關領域的語料庫導入ansj開源工具進行分詞,并標識出用例以及參與者;
s104:在分詞的基礎上運用斯坦福開源工具stanfordparser進行句子主干提取,并建立基于語義分析的語義樹;
針對提取的句子主干通過語法模型匹配進行用例的識別以及提取。
采用新詞發(fā)現(xiàn)算法來訓練出一個和相關領域相關度高的詞語庫。
在訓練完詞庫后,對輸入的語句進行初步的分詞,對于出現(xiàn)的干擾詞,那進行篩選以及過濾;在過濾完成后,再進行分詞,提高相關用例發(fā)現(xiàn)度。
針對于句子中干擾用例提取以及主語發(fā)現(xiàn)的部分,進行句子主干的提取。
利用主干提取得出的結果,建立了一個語義樹,通過語義樹來實現(xiàn)詞匯之間主謂賓的匹配;在得到匹配結果后,對語義樹進行先序遍歷,最終得出用例描述輸出。
下面結合具體實施例對本發(fā)明的應用原理作進一步描述。
新詞發(fā)現(xiàn)算法
首先不依賴于任何已有的詞庫,僅僅根據(jù)詞的共同特征,將一段大規(guī)模語料中可能成詞的文本片段全部提取出來,不管它是新詞還是舊詞。然后,再把所有抽出來的詞和已有詞庫進行比較。
文本片段的凝固程度和自由程度,兩種判斷標準缺一不可。
分詞算法:
在分詞方面,本發(fā)明選用了基于詞典分詞的ansj分詞系統(tǒng),這是一個基于n-gram+條件隨機場模型的中文分詞的java實現(xiàn).分詞速度達到每秒鐘大約200萬字左右(macair下測試),準確率能達到96%以上目前實現(xiàn)了.中文分詞.中文姓名識別.用戶自定義詞典可以應用到自然語言處理等方面,適用于對分詞效果要求高的各種項目.。
條件隨機場是一種用于在給定輸入結點值時計算指定輸出結點值的條件概率的無向圖模型.若o是一個值可以被觀察的“輸入”隨機變量集合,s是一個值能夠被模型預測的“輸出”隨機變量的集合,且這些輸出隨機變量之間通過指示依賴關系的無向邊所連接.讓c(s,o)表示這個圖中的團的集合,crfs將輸出隨機變量值的條件概率定義為與無向圖中各個團的勢函數(shù)(potentialfunction)的乘積成正比:pa(so)=1zoπc∈c(s,o)υc(sc,oc)(1)其中,фc(sc,oc)表示團c的勢函數(shù).當圖形模型中的各輸出結點被連接成一條線性鏈的特殊情形下,crfs假設在各個輸出結點之間存在一階馬爾可夫獨立性,二階或更高階的模型可類似擴展.若讓o=(o1,o2,…,ot)表示被觀察的輸入數(shù)據(jù)序列,讓s=(s1,s2,…,st)表示一個狀態(tài)序列.在給定一個輸入序列的情況下,線性鏈的crfs定義狀態(tài)序列的條件概率為pa(so)=1zoexpσtt=1σkk=1lkfk(st-1,st,o,t)(2)其中,fk(st-1,st,o,t)是一個任意的特征函數(shù),lk是每個特征函數(shù)的權值.歸一化因子z0=σsexpσtt=1σklkfk(st-1,st,o,t)。
但是該分詞工具以詞典為基礎,通用的詞典中并不能很好的應用到專業(yè)領域的分析中,所以本發(fā)明用新詞發(fā)現(xiàn)算法訓練出了自己的詞庫,但是該詞庫中存在許多的干擾詞匯,那么本發(fā)明設計了一個模型來篩選對于最重要的詞匯以及過濾雜音詞匯。
該模型借助智能的詞性識別來進行,如果該詞中存在:p介詞,c連詞,u助詞等就要將其過濾。經(jīng)過過濾后,詞庫中大部分的詞都不會對項目產(chǎn)生干擾。
下面結合具體實施例對本發(fā)明作進一步描述。
1、本發(fā)明實施例提供的分類算法的選擇-樸素貝葉斯算法
貝葉斯分類算法是統(tǒng)計學分類方法,它是一類利用概率統(tǒng)計知識進行分類的算法。在許多場合,樸素貝葉斯(naï;vebayes,nb)分類算法可以與決策樹和神經(jīng)網(wǎng)絡分類算法相媲美,該算法能運用到大型數(shù)據(jù)庫中,且方法簡單、分類準確率高、速度快。由于貝葉斯定理假設一個屬性值對給定類的影響獨立于其它屬性的值,而此假設在實際情況中經(jīng)常是不成立的,因此其分類準確率可能會下降。
樸素貝葉斯算法步驟:
樸素貝葉斯是在獨立性假設的前提下實現(xiàn)的,即在給定目標值時,假設特征之間是相互獨立的。
樸素貝葉斯的公式表示為:
因為這部分需要獨立編寫代碼實現(xiàn)。
對已知的特征矩陣和標簽矩陣,定義:
x=[f1,f2,f3,.....,fn]為一個樣本特征向量,其中fi是每個特征的特征值。
y=[y1,y2,y3,......,yn]為每個樣本的真實所屬類別。
x=[x1,x2,x3,......,xn]為樣本集,其中每個樣本xi是x的構成形式。
假設這些樣本總共分為了3類,分別為class1,class2,class3。
第一步:
通過樣本集的類別分布,對每個類別計算先驗概率。也就是需要計算出這些樣本分屬3個類別各自的比例,比如:
這樣,分別計算出p(class1),p(class2),p(class3)。
第二步:
計算每個類別下每個特征屬性值的出現(xiàn)概率。比如,當為類別1時,特征1的值為f11時的頻率p(f11|class1)為:
第三步:
計算每個樣本所屬每個類別的概率。比如對于第一個樣本,根據(jù)它每個特征值的情況,依次從第二步的結果中提取對應值并相乘。得到它分別屬于這3個類別的概率,即
p(x1|class1)=p(class1)*p(f1a|class1)*p(f2b|class1)*...*p(fnq|class1)
p(x1|class2)=p(class1)*p(f1a|class2)*p(f2b|class2)*...*p(fnq|class2)
p(x1|class3)=p(class1)*p(f1a|class3)*p(f2b|class3)*...*p(fnq|class3)
第四步:
比較樣本預測屬于這三個類別的概率值,找出最大概率對應的分類作為這個樣本最終的預測分類結果。
2、本發(fā)明實施例提供的近義詞分析算法:
短文本/query分類算法特征選擇:
最近工作中有一個project需要對query進行行業(yè)分類(label較多,大于1k),在以往的長文本中,一般使用文本的詞向量結合tf-idf作為權重,分類的效果基本上還是非常不錯。但是短文本,特征向量非常稀疏,一般一個query只有1個或者幾個特征,因而在覆蓋率和準確率上將會大打折扣。
本發(fā)明分類模型可以使用me,svm或者dnn等。
1.字面特征:
a.n-gram特征(一般n為2)
比如:一個query可以被切詞為:t1t2t3,那么我們可以把t1、t2、t3、beg_t1,t1t2、t2t3、t3_end可以作為特征。權值可以計算tf-idf值歸一化后就可以b.摘要擴展使用一個query在搜索引擎得到其自然結果,作為特征的擴展
3.本發(fā)明實施例提供的語義特征:
現(xiàn)在應用比較廣泛的語義特征主要通過plsa/lda模型得到,因為是對query的分類,所以plsa的模型訓練使用query及其摘要數(shù)據(jù)進行訓練,訓練之后,得到p(z|q)、p(z)和p(w|z)向量。從而對于一個query向量,可以得到這個query的p(z|q)向量(具體的計算query的p(z|q)過程就不詳細敘述了)語義特征又可以分為兩類a.topic_id特征,plsa模型的p(zi|q)有一個意義就是q(query)屬于zi的概率,因而,可以把plsa作為一個聚類算法,而topicid,就是所在的簇id。在實驗中一般取p(zi|q)排前3的zi作為特征,而p(zi|q)則作為feature權值。如:“清華大學招生”的feature為:175:0.295605:0148646:0.096label:”本科教育”的feature為:175:0.185675:0.152119:0.084label:”汽車用品”的feature為:372:0.635682:0.084174:0.0506因為“清華大學招生”與lable“本科教育”同時有較大概率在簇:175而與lable“汽車用品”沒有在同一個簇中。所以更傾向于分類至label”本科教育”b.query與行業(yè)label的plsa向量。一般而言,一個query屬于某個行業(yè)類的label的plsa_sim值大,則屬于這個行業(yè)的概率也高比如:“清華大學招生”和行業(yè)label“本科教育”的語義相似度為:0.547,而與行業(yè)lable”汽車用品”的相似度僅為0.002.在實驗中通過引入語義特征,對query的召回和準確在me模型上都有了比較大的提升,稍后有時間再整理一個實驗評估效果。
4、本發(fā)明實施例提供的用例匹配算法:
用例提取本發(fā)明借助斯坦福工具的輔助,來實現(xiàn)用例提取,但是斯坦福工具在使用中存在一些問題,在實現(xiàn)中會提到,那么借助stanfordparser,針對于提出的主干再次進行分詞(第一次分詞是為了提取主干使用),并且,設計了如下模型,針對于主干出現(xiàn)詞性的情況有如下幾個:
1...+v+...;(其中,v前的詞匯大部分由個名詞組成的或者是代詞,但也有少部分情況,由于stanfordparser的結果問題,會出現(xiàn)一些助動詞,或者多個動詞的情況如:管理/v人員/n。v后的大多為用例/nvm已被我標記出來,也存在為名詞短語的情況)。
2...+v(其中,v前的詞匯大部分由個名詞組成的或者是代詞,但也有少部分情況,由于stanfordparser的結果問題,會出現(xiàn)一些助動詞,或者多個動詞的情況如:管理/v人員/n)。
3v+...(v后的大多為用例/nvm已被我標記出來,也存在為名詞短語的情況)。
4v(單獨出現(xiàn)的動詞)。
5...+...(該句子中無動詞出現(xiàn),為名詞短語)。
5、本發(fā)明實施例提供的新詞發(fā)現(xiàn)算法實現(xiàn):
本發(fā)明把文本中出現(xiàn)過的所有長度不超過d的子串都當作潛在的詞(即候選詞,其中d為自己設定的候選詞長度上限,設定的值為5),再為出現(xiàn)頻數(shù)、凝固程度和自由程度各設定一個閾值,然后只需要提取出所有滿足閾值要求的候選詞即可。為了提高效率,可以把語料全文視作一整個字符串,并對該字符串的所有后綴按字典序排序。
這樣的話,相同的候選詞便都集中在了一起,從頭到尾掃描一遍便能算出各個候選詞的頻數(shù)和右鄰字信息熵。將整個語料逆序后重新排列現(xiàn)在所有的后綴,再掃描一遍后便能統(tǒng)計出每個候選詞在原文中所有左鄰字的信息熵。另外,有了頻數(shù)信息后,凝固程度也都很好計算了。這樣,便得到了一個無須任何知識庫的抽詞算法,輸入一段充分長的文本,這個算法能以大致o(nlogn)的效率提取出可能的詞來。
實際上只需要在內存中儲存這些后綴的前d+1個字,或者更好地,只儲存它們在語料中的起始位置。
對不同的語料進行抽詞,并且按這些詞的頻數(shù)從高到低排序。
6、本發(fā)明實施例提供的分類算法實現(xiàn):
文本分類材料采集:
python.bs4中有一個beautifulsoup網(wǎng)頁解析器,它是一個從html或xml文件中提取數(shù)據(jù)的python庫,可以將復雜html文檔轉換成一個復雜的樹形結構。通過查看網(wǎng)頁源代碼,觀察想要獲取的內容在網(wǎng)頁html中的結構,利用soup.find_all(限定標簽名)就可以獲取這些標簽的內容。
對于第一種情況,主謂賓很明確了,但是分為幾種情況:
1).v前的所有名詞的組合可以看作是一個新的主語(前提與當前父節(jié)點不同),而v后面的所有名詞的組合為賓語,但是如果該賓語沒有被標記出來,則認為是無效賓語。對于新的主語我們應該建立一個新的父節(jié)點。賓語為該父節(jié)點的子節(jié)點。
2).v前面為代詞,則認為當前的賓語屬于當前父節(jié)點(即上一個出現(xiàn)的主語)。
對于第二種情況,v前是主語,但是沒有賓語存在,對于新的主語我們應該建立一個新的父節(jié)點。
對于第三種情況,不存在主語,但存在一個賓語(如果為有效賓語),則認為該賓語屬于前一個主語,為當前父節(jié)點生成一個字節(jié)點。
對于第四種情況,一般和第5種情況搭配出現(xiàn)并判斷,因為在第5種情況中,該名詞短語可能為主語,也可能為賓語,如果單獨的動詞后面出現(xiàn)一個動詞短語,則認為該動詞短語為當前主語的賓語,如果不存在單獨的動詞,則單獨的名詞為一個新的主語。針對以上情形建立語義樹,并實現(xiàn)算法。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。