蔡宇翔,王佳斌,鄭天華
(華僑大學(xué)工學(xué)院,泉州 362021)
隨著信息時代的發(fā)展,互聯(lián)網(wǎng)上的文本數(shù)據(jù)呈現(xiàn)爆發(fā)式的增長。海量的數(shù)據(jù)未經(jīng)過分類,人們無法高效地對其提取有用的信息,也浪費了網(wǎng)絡(luò)資源。文本分類作為文本處理重要的技術(shù)之一,被廣泛地用于各項自然語言處理任務(wù)當(dāng)中。文本分類即是通過特定的算法,分析文本數(shù)據(jù)中的潛在規(guī)則,再將新的文本和對應(yīng)的類別相匹配。Spark計算框架是基于內(nèi)存計算,并不會產(chǎn)生IO開銷,可以大幅度提高文本分類的處理效率。文本分類任務(wù)中的難點是如何將文本表現(xiàn)為向量形式。文獻(xiàn)[6]中使用TF-IDF算法,對亞馬遜評論文本進(jìn)行向量化,并使用了Spark mllib庫下的三種機(jī)器學(xué)習(xí)分類算法:邏輯回歸、支持向量機(jī)和樸素貝葉斯,其中支持向量機(jī)的效果最優(yōu),精度達(dá)到了86%,但是使用TF-IDF方法在文本數(shù)量龐大的情況下,會將文本映射成一個高維的、稀疏的向量,導(dǎo)致維度災(zāi)難,且這種方法是將詞語進(jìn)行獨立計算,無法衡量單詞和單詞之間的語義關(guān)系。分布式表示法又被稱為詞嵌入、詞向量。Word2Vec是谷歌發(fā)布的一款計算詞向量的工具,通過在語料庫上的訓(xùn)練,可以很好地表示詞與詞之間的相似性。它使用單詞的上下文計算單詞的向量,充分利用了單詞之間的語義關(guān)系。文獻(xiàn)[9]中使用了Word2Vec詞嵌入技術(shù)對建筑文本進(jìn)行向量化,并使用Spark并行化分類算法,使得訓(xùn)練時間極大地縮短。文獻(xiàn)[10]為了更加全面地表示詞向量,使用外部語料庫對Word2Vec模型進(jìn)行預(yù)先訓(xùn)練,再結(jié)合改進(jìn)后的CNN對新聞文本進(jìn)行分類,在Spark平臺并行化后,相較于單機(jī)傳統(tǒng)的方法,運行效率和精度都得到了提升。相對于傳統(tǒng)的建模方法,使用Word2Vec對文本進(jìn)行表示的方法更好。然而,單獨使用Word2Vec詞嵌入技術(shù),只是將文本表示為文本中所有單詞的詞向量的平均值,這種方法無法體現(xiàn)每一個單詞在句子中的重要程度。針對此問題,本文結(jié)合Spark平臺提出了基于加權(quán)詞向量的文本表示方法,并使用SVM分類器進(jìn)行文本分類。
TF-IDF是一種常用的計算詞語權(quán)重的方法,TF(term frequency)表示詞語在單個文檔中出現(xiàn)的次數(shù),IDF(inverse document frequency)表示包含某個詞語的文檔數(shù)越少,該詞語的區(qū)分能力就越高。TF-IDF算法的核心思想是如果一個詞語在某個文本中出現(xiàn)的頻次較高,那它可能是對文本比較重要的單詞,也有可能是一些普通程度的常用單詞。為了區(qū)分這種情況,將詞頻和逆文檔頻率相乘,如果該詞語較多地出現(xiàn)在該文本內(nèi),又較少地出現(xiàn)在其他文本內(nèi),則可以認(rèn)為該詞語對這個文本的重要性高,相應(yīng)的TF-IDF值也會較高。TF-IDF考慮了詞語在文檔中的分類情況,以此來表示詞語的重要程度。
TF-IDF的計算公式如下:
TF表示單詞的詞頻,n表示詞語在文檔中出現(xiàn)的次數(shù),分母表示文檔中的總單詞數(shù)。IDF表示單詞的逆文檔頻率,表示數(shù)據(jù)集中的總文檔數(shù),D表示含有單詞的文檔數(shù),分母加一是為了避免分母為0導(dǎo)致運算錯誤。本文使用TF-IDF值作為單詞在文檔中的權(quán)重。
Word2Vec是2013年由谷歌開源的一款詞嵌入工具,它使得詞語可以被分布式表示。它是MIKOLOV提出的一種基于神經(jīng)網(wǎng)絡(luò)的概率模型,它在詞向量的維數(shù)通常設(shè)置為100~300,對比傳統(tǒng)的高維向量,可以簡化計算,且不會引起維度災(zāi)難。
Word2Vec分為skip-gram和CBOW兩種方式,CBOW模型是通過前后的個詞來預(yù)測中心詞出現(xiàn)的概率,它的數(shù)學(xué)表示為:
而skip-gram模型則是通過中心詞來預(yù)測前后的個詞,數(shù)學(xué)表示為:
兩種模型之中,skip-gram模型的語義準(zhǔn)確率高,但是同樣的計算代價高,訓(xùn)練時間較長。skip-gram模型有三層神經(jīng)網(wǎng)絡(luò)構(gòu)成,包括輸入層,投影層和輸出層。輸入層為中心詞語的One-Hot向量,乘上模型訓(xùn)練后的權(quán)值矩陣,輸出層為詞語分布在中心詞語前后的概率矩陣。本文使用skip-gram模型進(jìn)行訓(xùn)練。skip-gram模型如圖1所示。
圖1 skip-gram模型
如果單純的使用文本的平均詞向量來作為文本表示,無法顯示單詞的重要性。本文基于Spark ML下的特征庫,計算每個單詞的詞頻以及TF-IDF值,將TF-IDF值歸一化后作為權(quán)值與詞向量相乘,提升重要單詞的權(quán)重,降低非重要單詞的權(quán)重,單詞權(quán)重值的公式如下:
(,)表示為文檔中詞語的權(quán)重值,得到權(quán)重值后將文檔j表示為:
w表示文檔的特征向量,w表示單詞的詞向量。將得到的特征向量作為文本表示。向量化的流程圖如下,將向量化后的文本作為分類器的輸入。
圖2 向量化流程
文本分類是自然語言處理的基礎(chǔ)任務(wù),新聞分類,情感分析等技術(shù)都屬于文本分類的子任務(wù)。分類算法的流程就是對文本的內(nèi)容進(jìn)行訓(xùn)練,構(gòu)建分類器,使用分類器對待測試文本進(jìn)行測試,將其分到相近的類別中。通常文本分類常用的機(jī)器學(xué)習(xí)算法有支持向量機(jī)、樸素貝葉斯、決策樹、隨機(jī)森林算法等。其中支持向量機(jī)的原理是尋找一個超平面,使得樣本與超平面的間隔最大。由于系統(tǒng)健壯性好,正確率高等優(yōu)點,被廣泛運用在文本分類,語音識別等分類任務(wù)中。因此,本文使用基于Spark ML機(jī)器學(xué)習(xí)庫的支持向量機(jī)方法進(jìn)行分類,在驗證加權(quán)詞向量文本表示方法有效性的同時,提高計算效率。
本文的實驗集群由3臺虛擬機(jī)組成,其中1臺作為Master,兩臺作為Slave,系統(tǒng)版本為CentOS7,Spark版本為2.4,Hadoop版本為2.7,使用的開發(fā)語言為Scala 2.12。
本次實驗數(shù)據(jù)使用由清華大學(xué)自然語言處理實驗室整理的新聞文本數(shù)據(jù)集,從體育、財經(jīng)、房產(chǎn)、家居、教育、科技、時尚、時政、游戲、娛樂十個類別中各挑選5000條新聞文本作為訓(xùn)練數(shù)據(jù),1500條作為測試數(shù)據(jù),數(shù)據(jù)共65000條。訓(xùn)練文本的平均長度為422個單詞,測試文本的平均長度為445個單詞,可以看出該數(shù)據(jù)集屬于長文本。
對數(shù)據(jù)預(yù)處理的過程包括分詞,去停用詞等。由于中文文本的單詞之間沒有明確的邊界,所以需要使用分詞工具對文本進(jìn)行分詞。目前常用的分詞工具有jieba,THULAC等。本文使用jieba分詞工具對中文文本進(jìn)行分詞操作,以單詞為單位組成文本。其中有一些單詞,類似于“和”“且”“了”等并沒有實際意義的單詞,和一些標(biāo)點符號,空白字符等字符,需要去除,本文結(jié)合了哈工大停用詞表,四川大學(xué)機(jī)器智能實驗室停用詞表,對文本中無意義的詞語進(jìn)行了去停用詞操作。數(shù)據(jù)預(yù)處理前后對比如表1所示:
表1 文本預(yù)處理
本文使用精確率,召回率和1值作為評價指標(biāo)。精確率和召回率,1值是分類任務(wù)中廣泛運用的指標(biāo)。表2是分類任務(wù)中的混淆矩陣:表示實際屬于該類,并且被分類器判定為該類的文本,表示被分類器判定為該類,但實際不屬于該類的文本。表示真實屬于該類,但被分類器判定為不屬于該類的文本;表示實際不屬于該類其分類器也判定其不屬于該類的文本。
表2 混淆矩陣
準(zhǔn)確率的數(shù)學(xué)公式為:
召回率的數(shù)學(xué)公式為:
1綜合考慮了召回率和精確率,1值的數(shù)學(xué)公式為:
本文使用SparkML庫中的各種模型,可以使用SparkSQL語句對DataFrame進(jìn)行操作,簡化計算。首先訓(xùn)練Word2Vec模型,將前文中預(yù)處理好的文本數(shù)據(jù)送入SparkML庫中的Word2Vec模型中進(jìn)行訓(xùn)練,詞向量維度設(shè)置為100,上下窗口為5,得到詞向量庫。同時將處理好的語料進(jìn)行TF-IDF計算處理。先使用CountVectorize工具對文本進(jìn)行詞頻統(tǒng)計,在使用IDF模型得到詞語的TF-IDF值。然后使用詞語的TF-IDF值作為詞語的權(quán)重,將文本的特征向量表示為文本中所有詞語詞向量的加權(quán)平均值。
將訓(xùn)練文本通過上述操作向量化后送入SVM分類器進(jìn)行訓(xùn)練,SparkML庫中的SVM分類器采用數(shù)據(jù)并行的原理,相比于單機(jī)算法,可以有效提高訓(xùn)練速度。最后使用訓(xùn)練好的SVM分類器對已標(biāo)注的測試文本進(jìn)行測試。從而計算準(zhǔn)確率。
為了測試該方法的性能,本文同時采用了TF-IDF向量化和未加權(quán)的平均Word2Vec詞向量方法進(jìn)行測試,對比三種方法性能的優(yōu)劣。表3是采用加權(quán)詞向量方法的各類分類結(jié)果:
表3 TFIDF-Word2Vec+SVM分類結(jié)果
由表3可以看出,該方法在十個類別中有八個類別的1值達(dá)到了90%以上,說明該分類器的性能優(yōu)異。其中F1值最低的是房產(chǎn)和家居兩個類別,是因為兩個類別的詞匯重合度較大,不易區(qū)分,但是也達(dá)到了75%以上。表4是采用了平均詞向量方法的分類結(jié)果
由表4可知,平均詞向量文本表示方法同樣在八個類別中取得了1值90%以上的性能表現(xiàn),但是同樣由于“房產(chǎn)”和“家居”區(qū)分難度較高的原因,導(dǎo)致了這兩個類別分類效果下降。相比于平均詞向量方法,TF-IDF加權(quán)詞向量方法在這兩個類的1值分別高出了10.2%和3.6%,說明該方法在易混淆,區(qū)分難度大的分類中獲得更好的效果。TF-IDF向量化的分類結(jié)果如表5所示。
表4 avg-Word2Vec+SVM分類結(jié)果
表5 TF-IDF向量化的分類結(jié)果
由表5可以看出,TF-IDF方法的整體性能并不如加權(quán)詞向量方法和平均詞向量方法,且在詞庫較大的情況下出現(xiàn)向量維度過高,特征稀疏的問題,導(dǎo)致計算復(fù)雜度上升。表6是三種方法的綜合對比。
由表6可以看出,TF-IDF加權(quán)詞向量的分類結(jié)果作為出色,精確率,召回率和1值分別比平均詞向量方法高出了2%,1.7%,2%,此方法綜合了TF-IDF和Word2Vec詞向量的優(yōu)點,考慮了詞語的重要性和詞語上下文間的語義關(guān)系,實驗數(shù)據(jù)說明TF-IDF加權(quán)詞向量相比于平均詞向量可以更好地表示文本,從而提高分類的精度。在Spark平臺上實現(xiàn)可以加快文本分類的計算效率。
表6 性能對比
本文結(jié)合Spark ML庫,在傳統(tǒng)的平均詞向量文本表示法的基礎(chǔ)上,使用了詞語的TF-IDF值表示詞語的重要性,作為詞向量的權(quán)重,使用加權(quán)詞向量作為文本的向量表示。由實驗結(jié)果可以看出,相比于平均詞向量和TF-IDF文本表示法,加權(quán)詞向量可以有效的提升SVM分類器的精度。但是詞向量的權(quán)重不應(yīng)該只考慮TF-IDF值,所以在下一步的工作中,需要結(jié)合詞語的語法,語序等信息,更加充分地設(shè)計詞語的權(quán)重值,使得文本可以被更完善地表示出來,結(jié)合Spark平臺,設(shè)計出更加適合大規(guī)模文本的分類系統(tǒng)。