火善棟
(重慶三峽學(xué)院計算機科學(xué)與工程學(xué)院,萬州 404100)
文本分類是自然語言處理領(lǐng)域最活躍的研究方向之一,從新聞分類、商品評論信息情感分類到微博信息打標(biāo)簽等輔助推薦系統(tǒng)都有著非常廣泛的應(yīng)用。隨著深度學(xué)習(xí)的不斷推廣和發(fā)展,圖像分類與識別也變得越來越成熟和簡單,有很多人開始嘗試采用深度學(xué)習(xí)進行文本分類,但是,文本有別于圖像,文本分類的一個首要問題就是如何把文檔轉(zhuǎn)換成神經(jīng)網(wǎng)絡(luò)可以識別和計算的數(shù)字表達形式。對于文檔的數(shù)值表示,現(xiàn)在比較流行的有獨熱(One-Hot)編碼模型、基于詞頻統(tǒng)計的詞袋模型以及Word2 Vec[1]模型等?;谠~頻統(tǒng)計的詞袋模型是文檔分類中用的比較多的文檔向量轉(zhuǎn)換模型,詞袋模型通過統(tǒng)計每個特征詞的TF_IDF[2]值來將文本文檔轉(zhuǎn)換成對應(yīng)的文檔向量,再通過比較這些文檔向量的相似度,實現(xiàn)文本分類問題,但這種模型存在維度高、特征稀疏等特點,導(dǎo)致在進行文本分類時存在計算量大、效率低的問題。為了有效解決這些問題,本文基于詞袋模型,通過采用提取一定數(shù)量的特征詞構(gòu)建特征詞典,來大大縮小文檔向量的維度,然后通過CNN 采用兩種不同的方案進行訓(xùn)練和測試,實驗結(jié)果表明,僅采用CNN 中的全連接網(wǎng)絡(luò)就可以比較好地實現(xiàn)中文文本分類。
本文采用兩種方案對九類(環(huán)境、交通、教育、經(jīng)濟、軍事、體育、醫(yī)藥、藝術(shù)、政治)共1995 篇中文文檔采用 PyTorch 構(gòu)建 CNN[3]進行訓(xùn)練和測試(其中訓(xùn)練文檔為1815 篇,測試文檔為180篇)。
其實驗和測試具體步驟如下:
(1)讀取每一類文檔中的所有文檔,過濾掉其中的非中文符號,并進行中文分詞;
(2)過濾掉分詞中的單字詞,統(tǒng)計每類文檔中每個詞出現(xiàn)的次數(shù),按單詞出現(xiàn)的次數(shù)從大到小進行排序;
(3)為了減少特征詞的數(shù)量,只從每類文檔中選取一定數(shù)量的詞(本實驗分別對每類排在前1000、1500、2000個詞進行了提?。?/p>
(4)對每類文檔中抽取的特征詞進行合并,去掉重復(fù)的詞,構(gòu)成訓(xùn)練文檔特征詞典并以npy文檔的形式進行保存。
(1)以特征詞典為基礎(chǔ),遍歷所有的訓(xùn)練文檔,統(tǒng)計特征詞典中每一個特征詞包含訓(xùn)練文檔的數(shù)目并計算其IDF,其計算公式為
其中:docNumber為訓(xùn)練文檔的文件總數(shù),number為包含特征詞的文件數(shù)目。
(2)將所有特征詞的IDF 值以npy 文檔的形式進行保存。
(1)以特征詞典為基礎(chǔ),統(tǒng)計每一個特征詞在每一篇訓(xùn)練文檔中的詞頻(TF),詞頻等于特征詞在對應(yīng)文檔中出現(xiàn)的次數(shù)除以該文檔的總詞條數(shù)。
(2)將每一個特征詞的TF 與IDF 相乘得到特征詞典中每一個特征詞的TF_IDF 值,從而構(gòu)建所有訓(xùn)練文檔的文檔向量,為了便于訓(xùn)練,將每一個訓(xùn)練文檔的文檔向量以npy文檔的形式進行保存。
為每一個訓(xùn)練文檔向量添加對應(yīng)的類別標(biāo)簽(1~9)并打亂次序,以16 個訓(xùn)練文檔為一個批次進行訓(xùn)練,其網(wǎng)絡(luò)模型如圖1所示。
圖1 CNN全連接網(wǎng)絡(luò)的結(jié)構(gòu)
本文對每類文檔按詞頻進行降序排列,分別選取每類排在前1000、1500 和2000 的詞條構(gòu)建特征詞典進行訓(xùn)練(其文檔特征向量構(gòu)建方式和激活函數(shù)如表1 所示)。圖2 為選取每類排在前1500 個詞條構(gòu)建特征詞典所得到的訓(xùn)練迭代次數(shù)與損失誤差結(jié)果圖,從訓(xùn)練結(jié)果圖可以看出,當(dāng)?shù)螖?shù)達到2300 次左右時,其損失誤差的最小值基本處于穩(wěn)定狀態(tài),為了防止過擬合,訓(xùn)練時采用了dropout 策略,發(fā)現(xiàn)訓(xùn)練損失達到一個穩(wěn)定值后仍然出現(xiàn)一些細(xì)微的波動。
表1 卷積網(wǎng)絡(luò)全連接層實驗結(jié)果
圖2 全連接(tanh)訓(xùn)練結(jié)果
導(dǎo)入訓(xùn)練過程中保存的特征詞典文檔和IDF文檔得到訓(xùn)練集特征詞典和每個特征詞的IDF值,并以特征詞典和IDF 值為基準(zhǔn)對180 篇(每類分別為20)測試文檔進行類別判斷,
其測試結(jié)果如表1 所示,從測試結(jié)果來看,分類的準(zhǔn)確性都在96%以上。
方案2 的實驗步驟與方案1的實驗步驟基本相同,不同的是方案1 的文檔特征向量是一維的,而方案2 的文檔特征向量是二維的(模仿單通道圖片),在進行特征輸入時,將一維文檔特征向量轉(zhuǎn)換成M×M或者(M-1) ×M的二維文檔特征向量,進行轉(zhuǎn)換時后面位數(shù)不夠的地方以0進行填充。其向量轉(zhuǎn)換效果如圖3所示。
圖3 一維向量轉(zhuǎn)二維向量示意圖
方案2網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 方案2網(wǎng)絡(luò)結(jié)構(gòu)實驗
從圖4 可以看出,方案2 其實就在方案1全連接網(wǎng)絡(luò)的基礎(chǔ)上添加了兩個卷積層和兩個最大池化層,以每類文檔取前1500 特征詞條為例,其網(wǎng)絡(luò)訓(xùn)練迭代次數(shù)與損失誤差結(jié)果如圖5所示,從訓(xùn)練結(jié)果來看,當(dāng)?shù)螖?shù)達到2500時,其最小損失誤差基本處于穩(wěn)定狀態(tài),但是損失誤差的波動范圍比較大,其訓(xùn)練效果沒有單一的全連接網(wǎng)絡(luò)好。
圖5 卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練結(jié)果
與方案1 類似,采用180 篇文檔對卷積網(wǎng)絡(luò)的訓(xùn)練結(jié)果進行了測試,其實驗結(jié)果見表2,從實驗結(jié)果來看,采用卷積對文檔特征向量進行降維和特征提取,雖然能夠取得一定的準(zhǔn)確率,但是其分類效果不如全連接網(wǎng)絡(luò)。
表2 卷積網(wǎng)絡(luò)實驗結(jié)果
通過以上實驗結(jié)果可以看出,對于中文文本分類問題,當(dāng)采用TF_IDF 方法來構(gòu)建文檔特征向量時,為了避免文檔特征向量的維度過大,可以先根據(jù)每個詞條在每類文檔中出現(xiàn)的次數(shù),從中提取一定數(shù)量的特征詞來構(gòu)建特征詞典。從表1 的實驗結(jié)果來看,當(dāng)提取的特征詞達到一定數(shù)量時,隨著特征詞數(shù)量的增多,對文檔分類結(jié)果的影響非常小,因此,對于中文文本分類問題,可以通過這種方法來降低特征詞典的長度,從而達到提高訓(xùn)練和分類速度的目的;另外,從表1的實驗結(jié)果可以看出tanh激活函數(shù)略優(yōu)于regu(),TF_IDF 統(tǒng)計方法總體上略優(yōu)于TF 統(tǒng)計方法;相比于卷積神經(jīng)網(wǎng)絡(luò),全連接網(wǎng)絡(luò)更適合做文本分類,而且準(zhǔn)確率比較高,運算量比較小。