韓會珍,劉立波
(寧夏大學(xué) 信息工程學(xué)院,寧夏 銀川 750021)
近年來,人工智能正逐漸改變著世界,而自然語言處理已成為計算機科學(xué)與人工智能領(lǐng)域內(nèi)一個重要方向,在各個行業(yè)應(yīng)用越來越廣泛[1—2]。隨著深度學(xué)習的出現(xiàn)和計算能力的提升,自然語言處理中情感分析和主題分類等文本分類任務(wù)都取得了很高的準確性,但高性能往往取決于訓(xùn)練數(shù)據(jù)的大小和質(zhì)量[3],文本數(shù)據(jù)的收集往往是十分困難的,文本增強技術(shù)的出現(xiàn)很好地解決了這類問題。
在實際的文本數(shù)據(jù)收集中,正常文本與敏感文本的數(shù)量很容易失衡,但又要求訓(xùn)練出的模型能夠召回較為全面的敏感文本[4—6]。這就需要文本“數(shù)據(jù)增強”,來擴展敏感文本數(shù)量,讓數(shù)據(jù)更豐富。傳統(tǒng)文本數(shù)據(jù)增強方法中,同義詞替換(SR)方法是對文本中的一些詞語進行替換來完成數(shù)據(jù)增強,方式實現(xiàn)較為簡單,但生成的文本與原文本相似度太高。采用VAEHD 文本生成模型可以學(xué)習文本中的潛在性解釋,生成具有特定情感屬性的文本[7]。但是該模型實現(xiàn)過程較為繁瑣,且需要額外的數(shù)據(jù)。本文采用一種簡單文本增強(EDA)方法,不需要額外的數(shù)據(jù),而且同義詞替換、隨機交換、隨機插入、隨機刪除4 種方式的結(jié)合能更好地擴充語義,實現(xiàn)起來也較為簡單。因此,依據(jù)實際需求,首先對文本進行預(yù)處理,以處理亂碼、換行符冗余等問題,然后再利用EDA 方法進行文本數(shù)據(jù)增強。采用Python 語言結(jié)合Flask 框架設(shè)計實現(xiàn)了Web 網(wǎng)頁版單文本和批量文本數(shù)據(jù)增強系統(tǒng)[8—12],對于處理少樣本場景下樣本不均衡性、數(shù)據(jù)量不足易導(dǎo)致模型過擬合有較好的應(yīng)用價值。
該系統(tǒng)開發(fā)和測試均采用實驗室構(gòu)建的枸杞蟲害文本描述數(shù)據(jù)集,包含大青葉蟬、負泥蟲、木虱等17種常見枸杞蟲害。由于該數(shù)據(jù)集的文本描述的是人工撰寫,耗時耗力,搜集到各類枸杞蟲害的描述信息有限,因此在構(gòu)建數(shù)據(jù)集時,有的蟲害種類文本描述數(shù)量過少,有的蟲害種類文本描述數(shù)量較多,造成了數(shù)據(jù)集的樣本不均衡,且枸杞蟲害數(shù)據(jù)集文本總量只有1 670,對模型訓(xùn)練來說數(shù)據(jù)量不足,所以選取該數(shù)據(jù)集作為該文本數(shù)據(jù)增強系統(tǒng)的訓(xùn)練和測試數(shù)據(jù)。
基于Python 設(shè)計的文本數(shù)據(jù)增強系統(tǒng),以實驗構(gòu)建的樣本不均衡且數(shù)據(jù)量不足的枸杞蟲害文本描述數(shù)據(jù)集進行數(shù)據(jù)增強,前端界面用Flask 框架結(jié)合Python 語言響應(yīng)處理實現(xiàn)Web 網(wǎng)頁交互[13]。該系統(tǒng)主要分為預(yù)處理模塊、單文本數(shù)據(jù)增強模塊、批量文本數(shù)據(jù)增強模塊。具體功能模塊見圖1。
圖1 文本數(shù)據(jù)增強系統(tǒng)功能模塊
文本數(shù)據(jù)增強系統(tǒng)流程圖見圖2。
圖2 文本數(shù)據(jù)增強流程圖
該系統(tǒng)流程設(shè)計主要包含:①文本數(shù)據(jù)預(yù)處理;②單文本或批量文本數(shù)據(jù)增強;③設(shè)置文本原路徑和增強后文本路徑;④EDA 中各增強方式比例設(shè)置;⑤保存增強后生成的文本。
文本數(shù)據(jù)增強是對文本數(shù)據(jù)進行擴充。該系統(tǒng)采用改進的EDA 文本數(shù)據(jù)增強技術(shù),其文本數(shù)據(jù)增強4 種方式含義見表1。
表1 文本數(shù)據(jù)增強4 種方式含義
該系統(tǒng)主要采用實驗室構(gòu)建的少樣本枸杞蟲害文本描述數(shù)據(jù)集進行文本預(yù)處理及數(shù)據(jù)增強操作。
3.1.1 文本預(yù)處理實現(xiàn) 由于撰寫文本時,編碼格式不同,操作方式有誤,可能會導(dǎo)致文本中出現(xiàn)中英文夾雜、亂碼、換行符冗余等文本不規(guī)范問題,通過文本預(yù)處理技術(shù)實現(xiàn)文本的規(guī)范化很有必要。
本文通過hanzi API 實現(xiàn)了對中文文本字符的替換和刪除,并通過re 正則表達式解決了刪除空行、亂碼等問題,實現(xiàn)了文本數(shù)據(jù)的規(guī)范化。
3.1.2 文本數(shù)據(jù)增強實現(xiàn) 針對單文本和批量文本的數(shù)據(jù)增強,首先通過os.path.isfile(filename)函數(shù)判斷要增強的是單個文本還是批量文本。對單個文本直接進行數(shù)據(jù)增強;而批量文本則先利用函數(shù)os.listdir(filename)獲取輸入文件夾路徑下的所有文本文件,再用循環(huán)語句分別對單個文本進行數(shù)據(jù)增強。批量處理可以選擇輸入包含100,200,500 等多個文本的文件夾,系統(tǒng)會根據(jù)獲取路徑對文本進行增強操作。
在數(shù)據(jù)增強過程中,首先,獲取需要增強的文本原路徑和增強后的保存路徑;然后,通過stop words list 過濾掉一些出現(xiàn)過于頻繁但實際意義不大的詞來對文本進行清理,利用EDA 技術(shù)中synonym_replacement()函 數(shù)、random_deletion()函數(shù)、random_swap()函數(shù)、random_insertion()函數(shù),分別對文本數(shù)據(jù)進行同義詞替換、隨機刪除、隨機交換、隨機插入來增強文本數(shù)據(jù);其次,設(shè)置num_aug 參數(shù)確定要生成文本的數(shù)量,即文本數(shù)據(jù)增強倍數(shù),設(shè)置4 種數(shù)據(jù)增強方式的參數(shù)值范圍為0~1;最后,將增強后的文本數(shù)據(jù)寫入保存路徑下的新建文件夾。
Python 語言是近年來人工智能編程方向潮流的計算機編程語言。Flask 是一個輕量級的Web 框架,簡單易上手,靈活小巧。Flask 中的route 路徑及各種封裝函數(shù),使用方便快捷,能快速高效地開發(fā)該系統(tǒng)。
該系統(tǒng)采用Python 為主要開發(fā)工具,F(xiàn)lask 框架進行Web 端界面布局設(shè)計,搭建系統(tǒng)環(huán)境。之后通過Flask 框架將HTML 頁面保存的表單數(shù)據(jù)提交到Python 后臺進行響應(yīng)處理,完成數(shù)據(jù)增強操作。
環(huán)境搭建所需注意:①安裝nltk 自然語言處理工具包pip install -U nltk;②下載WordNet,將壓縮包放入C:UsersPublic.DESKTOPPUC4DFJAppDataRoaming ltk_datacorpora,并解壓在該文件夾內(nèi)。
該系統(tǒng)以Flask 框架結(jié)合HTML 設(shè)計編寫簡單的Web 操作界面,采用實驗室構(gòu)建的枸杞蟲害文本描述數(shù)據(jù)集進行文本數(shù)據(jù)增強。該系統(tǒng)界面包含文本預(yù)處理頁面和文本數(shù)據(jù)增強頁面,分別見圖3 和圖4。
圖3 文本預(yù)處理界面
圖4 文本數(shù)據(jù)增強界面
圖4 中生成數(shù)量表示一個原句子生成多少個新句子,即單個文本數(shù)據(jù)增強4 倍,生成后文本數(shù)量共5 句。同義替換比例、隨機插入比例、隨機交換比例、隨機刪除比例設(shè)置參數(shù)值為0.1。
該系統(tǒng)測試時,分別對單個文本和批量文本進行數(shù)據(jù)增強操作。原始單文本和增強后的文本效果見圖5 和圖6。圖5 是格式不規(guī)范的單個文本,圖6是5 倍增強后生成的文本。
圖5 單個原文本界面
圖6 單文本增強后的界面
批量原文本和增強后的文本見圖7 和圖8。圖7 是原文件夾里的所有文本,圖8 是5 倍增強后生成的所有的文本。
圖7 批量原文本的界面
圖8 批量文本增強后的界面
為體現(xiàn)該文本數(shù)據(jù)增強系統(tǒng)的魯棒性及有效性,該實驗采用枸杞蟲害文本描述數(shù)據(jù)集進行不同訓(xùn)練集、不同增強倍數(shù)的分類準確率測試,對文本數(shù)據(jù)增強效果的魯棒性和效率進行分析研究。
(1)文本數(shù)據(jù)增強效果。該實驗分別選取了枸杞蟲害文本描述數(shù)據(jù)集200、500、1 000、Full Data(枸杞蟲害文本描述總數(shù),共1 670 個文本描述)不同訓(xùn)練集大小的文本數(shù)據(jù),在增強倍數(shù)分別為1 倍、2倍、4 倍、8 倍、16 倍、32 倍的條件下進行數(shù)據(jù)增強,并將增強后的文本數(shù)據(jù)作為訓(xùn)練集輸入到TextCNN 模型進行文本分類識別,結(jié)果見圖9。
圖9 不同訓(xùn)練集分類效果評價圖
對于小數(shù)量數(shù)據(jù)集,過擬合的可能性更大,所以生成許多增廣的句子會大大提高性能。對于較大的訓(xùn)練集,每個原始句子增加過多的增廣句子是沒有幫助的,因為當有大量真實數(shù)據(jù)可用時,模型傾向于適當?shù)剡M行歸納?;谶@些結(jié)果,由圖9 可以得出表2 的結(jié)果。
表2 推薦的文本增強倍數(shù)
由圖9 可以看出,利用該系統(tǒng)進行不同訓(xùn)練集規(guī)模數(shù)據(jù)增強后得到的枸杞蟲害文本描述在4 倍數(shù)據(jù)增強時分類效果最好,準確率達到了85.3%。
(2)實驗方法的增強效果。該實驗對枸杞蟲害文本描述數(shù)據(jù)集中500 個文本,分別采用SR、VAEHD、本文EDA 方法進行16 倍數(shù)據(jù)增強,并對增強后的數(shù)據(jù)采用TextCNN 分類模型進行分類識別,評價指標采用準確率和時間,結(jié)果見表3。
表3 不同數(shù)據(jù)增強方式文本分類結(jié)果對比
由表3 可知,該系統(tǒng)采用的EDA 數(shù)據(jù)增強方法比SR 和VAEHD 方法在文本分類實驗中的準確率分別提高了11.1%和3.7%,且文本數(shù)據(jù)增強時間分別減少了0.129 s 和0.065 s,說明該系統(tǒng)采用的方法比傳統(tǒng)數(shù)據(jù)增強方法效果更好。
(3)系統(tǒng)的效率。為了驗證該系統(tǒng)文本數(shù)據(jù)增強的快速性和高效性,對數(shù)據(jù)集中100 個、500 個文本分別進行5 倍、10 倍批量文本增強,并統(tǒng)計增強后文本總數(shù)量和增強所用時間,實驗結(jié)果見表4。
表4 批量文本數(shù)據(jù)增強效果
由表4 可知,該系統(tǒng)能在0.47 s 和2.50 s 內(nèi)分別完成對100 個、500 個文本的批處理數(shù)據(jù)增強,說明該系統(tǒng)能快速高效地完成批量文本數(shù)據(jù)增強。
根據(jù)以上實驗結(jié)果可以看出,該系統(tǒng)不僅可以高效地進行單文本增強,還能實現(xiàn)批量文本增強操作。增強后的文本數(shù)據(jù)在文本分類實驗中也取得了較好的準確率。實驗采用枸杞蟲害文本描述數(shù)據(jù)集進行文本數(shù)據(jù)增強,對該數(shù)據(jù)集進行4 倍數(shù)據(jù)增強,增強后的文本數(shù)量達到8 350,解決了樣本不均衡問題,完成了對枸杞蟲害文本描述數(shù)據(jù)集的數(shù)據(jù)擴充。
本文基于Python 文本數(shù)據(jù)增強系統(tǒng)實現(xiàn)了對文本數(shù)據(jù)的擴充增強,并完成了單文本數(shù)據(jù)增強和批量文本數(shù)據(jù)增強的功能。對解決小樣本場景下樣本數(shù)量不足容易導(dǎo)致模型過擬合、樣本間不均衡的問題十分有效,而且可根據(jù)數(shù)據(jù)增強中的同義詞替換、隨機交換、隨機刪除、隨機插入進行文本局部調(diào)整。該系統(tǒng)完成了枸杞蟲害文本描述數(shù)據(jù)集的文本數(shù)據(jù)增強,解決了該數(shù)據(jù)集的樣本不均衡、數(shù)據(jù)量不足的問題。實驗結(jié)果表明,實驗采用的枸杞蟲害文本描述數(shù)據(jù)集在4 倍數(shù)據(jù)增強時分類效果最好,準確率達到了85.3%。相比傳統(tǒng)的SR 方法以及VAEHD方法,本文采用的EDA 方法在500 個文本16 倍數(shù)據(jù)增強條件下,文本分類準確率提高了11.1%和3.7%。此外,該系統(tǒng)能在0.47 s 內(nèi)和2.50 s 內(nèi)分別完成對100 個、500 個文本10 倍的批處理數(shù)據(jù)增強,表明該系統(tǒng)的快速高效性。
該系統(tǒng)采用Web 操作界面,簡單易懂,但存在一些不足。目前該系統(tǒng)只能對txt 文本進行操作,且存在字符長度限制問題,但對傳統(tǒng)文本數(shù)據(jù)集是一個簡單實用的系統(tǒng)。下一步工作將會繼續(xù)改進和完善系統(tǒng)功能,提高系統(tǒng)的兼容性,優(yōu)化系統(tǒng)的長文本功能,進一步提高文本數(shù)據(jù)增強的水平。