楊菊英,江 兵,羅 佳
(1.電子科技大學(xué)成都學(xué)院 計(jì)算機(jī)系, 成都 611731; 2.四川農(nóng)業(yè)大學(xué) 商學(xué)院, 四川 都江堰 611830)
自然語言處理(natural language processing,NLP)是為了模擬人與機(jī)器之間的通信而提出[1-3]。語義語料庫構(gòu)造是實(shí)現(xiàn)這一目標(biāo)的有效方式,可以幫助人們組織、計(jì)算和分類語言作為數(shù)據(jù),以便人們更客觀和全面地理解這些數(shù)據(jù)以及這些數(shù)據(jù)表示的意義[4-5]。云計(jì)算是存儲(chǔ)語義語料庫的有效方式[6],其關(guān)鍵技術(shù)是對(duì)機(jī)器的自然語言的理解和推理。
Francis和Kuceral建立了第一個(gè)名為Brown的全球計(jì)算機(jī)可讀語料庫[7-8]。目前,語義語料庫的構(gòu)建受到研究者越來越多的關(guān)注,出現(xiàn)一些英語基礎(chǔ)語料庫,如LOB,Bank of English和ACL/DCI等[9-10]。中文常用語料庫包括人民日?qǐng)?bào)注釋語料庫、ZW大型漢語語料庫系統(tǒng)、TH通用語料庫系統(tǒng)和現(xiàn)代漢語語法研究語料庫等[11-12]。語料庫構(gòu)建主要包括7個(gè)步驟:數(shù)據(jù)采集、刪除網(wǎng)頁鏈接、網(wǎng)頁清理、網(wǎng)頁解析、網(wǎng)頁內(nèi)容刪除、語料庫存儲(chǔ)和文本向量化。文獻(xiàn)[13]提出了一種從多語言文檔圖像中提取打印和手寫字符以構(gòu)建語料庫的有效方法,該方法使用連通分量分析方法來移除圖形,引入了多種類型的功能和AdaBoost算法,以更通用和更健壯的方式對(duì)打印和手寫字符進(jìn)行分類。文獻(xiàn)[14]提出了用于多文檔摘要的新的hMDS語料庫,其中包含來自多種文本類型的異構(gòu)源文檔以及具有不同長(zhǎng)度的摘要。在語料庫的構(gòu)建方面,提出了一種新的構(gòu)建方法,該方法適合于構(gòu)建大型、異構(gòu)的摘要語料庫。
文獻(xiàn)[16]提出一種面向充滿語義框架注釋的需求文檔語料庫,通過選擇合適的語義幀和相關(guān)的幀元素,由兩個(gè)注釋器手動(dòng)標(biāo)記每個(gè)需求語句,為編寫軟件提供可靠的自然語言注釋。文獻(xiàn)[17]用語料庫和語義詞典的聯(lián)合詞匯表示學(xué)習(xí),該方法在語義詞典給出的關(guān)系約束下,對(duì)句子中兩個(gè)詞的共現(xiàn)進(jìn)行變分預(yù)測(cè)。文獻(xiàn)[18]提出一種基于動(dòng)態(tài)信任語義庫的Web服務(wù)匹配算法,該方法根據(jù)可信實(shí)體的服務(wù)描述構(gòu)建動(dòng)態(tài)的語義庫,在模糊語義情況下,匹配效果更好。文獻(xiàn)[19]給出了漢語口語互動(dòng)分級(jí)語料庫的構(gòu)建,該語料庫為國內(nèi)首個(gè)漢語口語互動(dòng)分級(jí)語料庫。隨著機(jī)器人和大數(shù)據(jù)的發(fā)展,現(xiàn)有語義庫出現(xiàn)一些缺陷,如構(gòu)建規(guī)模小、查詢速度慢等,而云計(jì)算的發(fā)展使得云環(huán)境下的語義庫構(gòu)建規(guī)模不再受限,并縮短了查詢速度,有效解決現(xiàn)有語義庫的缺點(diǎn)。
本文主要關(guān)注網(wǎng)頁鏈接刪除、網(wǎng)頁內(nèi)容刪除和文本向量化,提出了一種在云服務(wù)下構(gòu)建基于自然語言的語義語料庫的方法,即基于TF-IDF和向量距離的Web內(nèi)容重復(fù)數(shù)據(jù)刪除算法。該方法專注于解決語音識(shí)別中的存儲(chǔ)問題,它為分詞和句法分析提供功能支持。文本分段jar包基于名為ansj的開源項(xiàng)目,語法分析jar包基于Standford Parser。基于上述算法,選擇并矢量化非重復(fù)語料庫,然后將其存儲(chǔ)在Hbase中,實(shí)驗(yàn)結(jié)果表明了該方法的有效性。
Web爬蟲程序?qū)W(wǎng)頁進(jìn)行爬蟲處理以獲取內(nèi)容, 每個(gè)網(wǎng)頁通常嵌套有指向其他一些頁面的鏈接,因此爬蟲解析的鏈接可能會(huì)重復(fù)。如果多次抓取一個(gè)網(wǎng)頁,可能會(huì)導(dǎo)致不必要的死循環(huán),這可能會(huì)降低爬蟲的整體效率。有兩種方法可以消除重復(fù)的頁面:① 刪除重復(fù)的Web鏈接;② 刪除從網(wǎng)頁中提取的重復(fù)內(nèi)容。本節(jié)主要關(guān)注鏈接重復(fù)數(shù)據(jù)刪除方法的研究,包括鏈接標(biāo)準(zhǔn)化和鏈接重復(fù)數(shù)據(jù)刪除。
1.1.1鏈接標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化的目的是檢查是否URL已被抓取或未被抓取,以減少重復(fù)的頁面并避免時(shí)間和內(nèi)存消耗。URL的組成如下:protocol://hostname[:port]/path/[;parameters][?Query] #fragment。表1描述了URL地址標(biāo)準(zhǔn)化的標(biāo)準(zhǔn)。
1.1.2Web鏈接重復(fù)數(shù)據(jù)刪除
Web鏈接重復(fù)數(shù)據(jù)刪除方法的主要思想是基于BloomFilter:密鑰的哈希值將通過多個(gè)哈希函數(shù)分配給大位數(shù)組,然后檢查哈希的對(duì)應(yīng)位是否為1,以判斷密鑰是否存在。當(dāng)且僅當(dāng)所有哈希值都為1時(shí),密鑰才存在,否則它不存在。該方法通過優(yōu)化BloomFilter的復(fù)雜參數(shù)、哈希函數(shù)的個(gè)數(shù)和位陣列的大小,可以盡可能地降低錯(cuò)誤率。此方法將為每個(gè)任務(wù)創(chuàng)建一個(gè)新的BloomFilter,而如果任務(wù)數(shù)量很大,則可能發(fā)生內(nèi)存溢出,基于BloomFilter的方法更適合單任務(wù)爬蟲。

表1 規(guī)范化URL過程
在本文方法中,爬蟲任務(wù)是單一的,這使得資源成本相對(duì)較小,不會(huì)導(dǎo)致內(nèi)存溢出。同時(shí),如果使用基于BloomFilter的網(wǎng)頁鏈接去重方法確實(shí)會(huì)出錯(cuò),那么系統(tǒng)可能只爬蟲幾個(gè)鏈接,而不會(huì)重復(fù)爬蟲相同的鏈接。
盡管這些網(wǎng)頁具有不同的URL地址,但Web內(nèi)容可能大致重復(fù)或完全重復(fù)。但是,Web爬蟲程序無法自動(dòng)識(shí)別重復(fù)的內(nèi)容,因此本文設(shè)計(jì)了一種算法來消除重復(fù)的Web內(nèi)容。
根據(jù)網(wǎng)頁的整體布局和內(nèi)容,復(fù)制可以在以下4種情況下進(jìn)行:① 完全重復(fù)的頁面,即頁面的整體布局和內(nèi)容完全相同;② 內(nèi)容重復(fù)頁面,即頁面整體布局不同,頁面內(nèi)容相同;③ 局部重復(fù)頁面,即頁面的總體布局是相同的,但是頁面的內(nèi)容是不同的;④ 部分重復(fù)頁面,即頁面的整體布局是不同的,一些網(wǎng)頁內(nèi)容是相同的。
詞頻-逆文本頻率 (term frequency-inverse document frequency,TF-IDF)是一種評(píng)估方法,可以對(duì)一個(gè)字詞的重要程度進(jìn)行評(píng)估,這一字詞的重要性與其在文件中的出現(xiàn)次數(shù)成正比,與其在語料庫的出現(xiàn)頻率成反比,式(1)~(3)給出了TF-IDF的實(shí)現(xiàn)[20]。
文件中詞語ti的重要性可表示為
(1)
其中:詞ti在文件di中出現(xiàn)的次數(shù)用nij來表示;∑knk, j表示dj中所有字詞出現(xiàn)次數(shù)的總和。
IDF能度量一個(gè)詞語的重要性,式(2)給出了詞ti的IDF表達(dá)式。
(2)
其中語料庫中文件總數(shù)由|D|表示,式中分母表示包含詞語ti的文件數(shù)目。為了避免該詞語不在語料庫中導(dǎo)致分母為0的情況發(fā)生,將分母修正為1+|{j∶ti∈dj}|。之后得出該詞語的TF-IDF:
tf-IDFij=tfij×IDFi
(3)
由上述3式可知,對(duì)于某詞的高詞頻和低文件頻率能夠得到高的TF-IDF,TF-IDF的優(yōu)點(diǎn)是對(duì)文件中詞語進(jìn)行過濾,保留了重要詞語,將常見詞語過濾掉。
采用文本表示法對(duì)爬蟲語料庫進(jìn)行分割,過濾掉常用的停止詞,提取特征向量詞,計(jì)算特征向量的權(quán)重,最后生成文本的向量空間集。在文本矢量化中,有兩個(gè)任務(wù):特征向量的選擇和每個(gè)特征向量的權(quán)重計(jì)算。
1) 特征向量提取是將文本分割成中文分詞,去除無用詞,將文本轉(zhuǎn)化為由單詞組成的無序集合,可以表示為式(4)。
d=(W1,…,Wn)
(4)
其中:d是語料庫文本;W是文本中的特征向量。
2) 由于文本中每個(gè)特征向量的重要性不同,因此有必要給出一個(gè)直觀的數(shù)字來顯示文本中的權(quán)重。根據(jù)先前提出的TF-IDF算法,可以定義每個(gè)特征向量的權(quán)重,如式(5)所示。
Wi=TF(wi,d)×IDF(Wi)
(5)
3) 在計(jì)算每個(gè)特征向量的權(quán)重之后,可以將文本表示為由特征向量組成的多個(gè)特征向量集,從而完成文本向量化的過程:
d=W={W1,…,Wn}
(6)
本文將詞庫分為普通詞庫和領(lǐng)域詞庫,數(shù)據(jù)存儲(chǔ)在關(guān)系數(shù)據(jù)庫MySQL中,該數(shù)據(jù)庫存儲(chǔ)id、字、詞性、字頻和字段。
1) 詞性標(biāo)注。根據(jù)句子的語法構(gòu)成,詞性標(biāo)記在文本分割后標(biāo)記每個(gè)單詞的正確詞性。這是一個(gè)判斷每個(gè)單詞的詞性并對(duì)其進(jìn)行標(biāo)記的過程,例如名詞以及動(dòng)詞、代詞、形容詞、輔助詞或單詞的其他部分。有些單詞具有多種詞性,可以稱為多類詞,系統(tǒng)可以根據(jù)自定義詞典和域詞庫智能識(shí)別相應(yīng)的詞性。本文使用分詞工具Ansj來分詞,這是基于隱馬爾可夫模型(HMM)的。
2) 字頻率計(jì)數(shù)。字頻率計(jì)數(shù)用于關(guān)于每個(gè)單個(gè)字的分詞,由于存在多類別詞,因此也會(huì)識(shí)別出同一個(gè)詞的不同詞性。通過計(jì)算語料庫中每個(gè)單詞的頻率,獲得結(jié)果可以可視地描述詞匯的分布。
3) 領(lǐng)域詞的提取。使用文獻(xiàn)[15]中的方法來提取域字。該算法由3個(gè)子函數(shù)組成:語料庫預(yù)處理,語義模型提取和域表示挖掘。
4) 語料庫預(yù)處理。使用Ansj完成中文分詞和詞性標(biāo)記,在語料庫中找出名詞,形容詞和其他單詞,然后過濾出“是”這樣的單詞,這些單詞經(jīng)常以動(dòng)詞的形式出現(xiàn),但實(shí)際上具有很少的意義。
5) 語義模型提取。通過比較語義向量之間的余弦角相似度來確定候選字段詞中的詞擴(kuò)展部分之間的語義結(jié)合強(qiáng)度,可以獲得更準(zhǔn)確的候選字段字,矢量的余弦角相似度計(jì)算如下:
(7)
其中A和B是兩個(gè)向量。
6) 領(lǐng)域代表性挖掘?qū)印J褂肞ageRank算法來計(jì)算字段中每個(gè)單詞組件的重要性,候選域詞中最具代表性的詞匯表是通過添加和排序獲得的,從而提高域詞提取的效果。
在提取當(dāng)前語料庫中的字段詞之后,可以擴(kuò)展和豐富域語庫。
基于TF-IDF和單詞向量的距離,提出了一種新的Web內(nèi)容去除算法,具體描述如下:
首先,TF-IDF模型用于從文本中提取關(guān)鍵字,然后通過Word2Vec單詞向量訓(xùn)練關(guān)鍵字,以找出文本中最接近關(guān)鍵字單詞向量的幾個(gè)單詞。通過比較這些詞,可以確定網(wǎng)頁的內(nèi)容是否重復(fù),具體算法如下:
1)使用TF-IDF獲取關(guān)鍵字。
① 首先分割文檔并刪除無意義的停用詞。
② 然后根據(jù)式(8)計(jì)算詞頻TF:

(8)
其中:count(w,d)表示文件d中詞w的頻率;size(d)是文檔d中的單詞總數(shù)。
③ 之后計(jì)算逆文檔頻率(IDF),即整個(gè)文檔集合中文檔總數(shù)與文檔編號(hào)之比的對(duì)數(shù)。
④ 最后計(jì)算TF和IDF的乘積為單詞w的TF-IDF。
2)使用Word2vec訓(xùn)練單詞,提取類似于文檔的關(guān)鍵詞。
Word2vec通過核心模型CBOW和Skip-gram,對(duì)給定的語料庫,通過優(yōu)化訓(xùn)練模型將詞語轉(zhuǎn)化成向量。CBOW(continuous bag-of-words model)模型中,當(dāng)前詞的預(yù)測(cè)概率是通過上下文決定的。上下文中所有詞對(duì)當(dāng)前詞的影響權(quán)重是相同的,通過分層訓(xùn)練策略,分為輸入層,隱藏層和輸出層,單隱層的訓(xùn)練結(jié)構(gòu)如圖1所示。

圖1 CBOW模型
Skip-gram模型與CBOW模型方向相反,其訓(xùn)練策略輸入層是單個(gè)單詞,通過訓(xùn)練,Word2vec將文本轉(zhuǎn)化為詞向量,Skip-gram模型見圖2。

圖2 Skip-gram模型
本文使用Word2vec的CBOW模型進(jìn)行分層訓(xùn)練單詞,對(duì)待處理文本進(jìn)行預(yù)處理,提取類似于文檔關(guān)鍵詞步驟如下所示。
① 使用Word2vec將劃分的單詞訓(xùn)練到bin中文件。
② 使用LoadModel方法加載bin文件下的相關(guān)路徑,并選擇前5個(gè)相似的關(guān)鍵字。
③ 通過單詞匹配判斷重復(fù)的頁面。如果超過3個(gè)關(guān)鍵字相似,則該網(wǎng)頁被視為重復(fù)的關(guān)鍵字,不應(yīng)包括在內(nèi)。
本節(jié)對(duì)文本W(wǎng)eb內(nèi)容刪除算法進(jìn)行了評(píng)估。實(shí)驗(yàn)使用的指標(biāo)有精確率Precision和召回率Recall,并將Simhash算法與本文算法進(jìn)行比較。一個(gè)好的算法通常具有較高的精確率和召回率,而這兩個(gè)標(biāo)準(zhǔn)是相互制約的,只能采取適當(dāng)?shù)姆椒▽烧弑3衷谙鄬?duì)較高的值。
驗(yàn)證網(wǎng)頁是否處于基于TF-IDF和數(shù)據(jù)集字向量距離的網(wǎng)頁刪除算法中的標(biāo)準(zhǔn),即判斷兩個(gè)文本的關(guān)鍵詞是否相同,Word2Vec找到多少個(gè)與關(guān)鍵詞最接近的詞,使得算法具有最高的精度。將500個(gè)文本作為數(shù)據(jù)集抓取,其中包含50個(gè)文本,其內(nèi)容重復(fù),這意味著對(duì)原始文本進(jìn)行少量修改。根據(jù)不同匹配的數(shù)目,算法的精確率和召回率如表2所示。

表2 不同匹配數(shù)的性能指標(biāo)
從表2中的數(shù)據(jù)可以看出:當(dāng)匹配數(shù)為3時(shí),文檔的精度率和召回率相對(duì)較高且穩(wěn)定,因此將匹配數(shù)設(shè)置為3是合適的。這是因?yàn)殡S著匹配數(shù)的增加,使得確定文本內(nèi)容是否重復(fù)的難度增加,則檢測(cè)到重復(fù)文檔隨著減少。根據(jù)實(shí)驗(yàn)數(shù)據(jù),在本文算法中,當(dāng)匹配數(shù)是3時(shí),檢測(cè)到正確重復(fù)文本的數(shù)量最大,使得此時(shí)的精確率和召回率都是最高的。
將Simhash算法與本文算法進(jìn)行比較。本實(shí)驗(yàn)使用500個(gè)文本作為數(shù)據(jù)集,其中包含25個(gè)完全重復(fù)內(nèi)容的文本,以及25個(gè)內(nèi)容相似的文本。本文算法選擇3作為匹配數(shù),兩種算法的精確率和召回率如表3所示。

表3 不同算法的性能對(duì)比
從表3可以看出:與算法Simhash相比,本文算法在精度和召回率方面表現(xiàn)明顯更好。這是因?yàn)楸疚恼Z義庫是在云環(huán)境中構(gòu)建的,結(jié)合了云計(jì)算的處理海量數(shù)據(jù)、提供超強(qiáng)計(jì)算能力及數(shù)據(jù)可靠存儲(chǔ)等特點(diǎn),使得本文語義庫構(gòu)建規(guī)模不受限,提高了精確率和召回率,同時(shí)保證了查詢速度。對(duì)于本文算法,兩個(gè)實(shí)驗(yàn)中的數(shù)據(jù)集是不同的。表2和表3之間的比較表明:當(dāng)文本相似時(shí),本文算法的精確度和召回率更高。
可以看出,本文提出的網(wǎng)頁重復(fù)數(shù)據(jù)刪除算法在精確度和召回率方面有明顯的提高,并且區(qū)分網(wǎng)頁的重復(fù)內(nèi)容時(shí)更為有效。