沈雅婷 左志新
(南京理工大學紫金學院 江蘇 南京 210023)
分類一直是自然語言處理(NLP)領域的重點問題,被廣泛地應用到生活之中。隨著中國互聯網信息技術行業的快速發展以及大數據時代的到來,電子文本數據呈現井噴式增長,例如微博、商品評論、商品名稱等短文本數據占比最大。合理地對其進行分類,便于用戶快速查找所需信息或商品,也便于商家及時發現問題和掌握用戶需求,提高用戶滿意度。針對產生的大量短文本數據,人工分類存在速度慢,成本高等問題,所以需要機器去代替人工完成分類。
文本分類問題是NLP領域中一個非常經典的問題,最早可以追溯到20世紀50年代,早期主要通過知識工程,手工定義規則來分類,不僅浪費時間和人力,而且使用范圍和準確度都十分有限。隨著20世紀90年代互聯網在線文本的涌現和機器學習的興起,研究者重新開始對文本分類的研究,逐漸將文本分類問題拆分成特征工程和分類器兩個部分,即基于傳統機器學習的文本分類。其中特征工程包括文本預處理、特征提取和文本表示等,分類器基本都是統計分類的方法,如K近鄰、樸素貝葉斯[1]、決策樹、支持向量機等。以上方法相比早期的方法有著更好的分類效果,但是文本表示的特征表達能力較弱,還需要人工進行特征工程且非常費時費力,成本很高。隨著計算能力提升、成本下降、海量大數據支持和人工神經網絡興起,基于人工神經網絡的深度學習方法逐漸成為主流的研究方向,深度學習方法利用人工神經網絡的網絡結構自動獲取特征表達的能力解決文本分類的文本表示問題[2],避免了繁雜的人工特征工程,即端到端地解決問題。在文本分類中,常用的神經網絡模型有TextCNN[3-4]、TextRNN、fastText[5]等。
直至目前,文本分類在工業界和學術界已經積累了很多方法,主要分為基于傳統機器學習、基于深度學習兩種文本分類實現方法。基于深度學習的文本分類方法比基于傳統機器學習的文本分類方法準確度高,而常規深度學習的文本分類方法中的神經網絡訓練時間較長。短文本分類的本質還是文本分類,可以直接使用這些方法,但是短文本存在長度短、特征稀疏、表述不規范等特點導致分類性能明顯下降。目前針對短文本的特點,主要有通過外部語料庫構建詞向量、利用網絡資源構建專門的類別詞庫對特定的短文本進行擴展等方法,以提高短文本的分類性能。雖然這些方法降低了短文本的稀疏性,提高了分類準確率,但是獲取覆蓋所有類別的外部語料庫是很困難的。并且在大數據的時代背景下,短文本數據的流通變得越來越快,已有的文本分類方法無法達到既準確率高又訓練速度快,這就限制了其在大數據背景下的廣泛使用,漸漸不能滿足時代對信息處理的高速要求。因此,為了滿足時代要求,迫切需要尋求一種新的方法以實現對短文本又好又快地自動分類。
本文提出一種新的模型框架(B_f),以快速文本分類算法(fastText)作為基模型,借鑒自舉匯聚法(Bagging)集成算法基本思想,構建多基模型的方法對文本進行分類。通過實驗證實提出的方法在文本分類中較獨立基模型具有不錯的效果,較基于機器學習的傳統文本分類算法和深度學習分類方法在準確度與效率上有明顯優勢。
fastText是一個基于淺層神經網絡、架構簡單的快速文本分類器,由Facebook在2016年開源。其優點是可以使用標準多核CPU在10分鐘內訓練超過10億個詞,比常規深度學習模型快幾百倍,在5分鐘內可以對超過30萬個類別的50萬個句子完成分類。其通過使用n-gram(N元模子)特征來縮小線性規模,其分類準確度能夠與常規深度學習模型保持相當,但訓練時間卻大大短于常規深度模型,分類速度也比深度模型快很多。
fastText由輸入層、隱藏層和輸出層三層構成,其模型結構如圖1所示。

圖1 fastText模型結構
圖1中:Xn表示第n個單詞以及字符的n-gram特征的one-hot表示;Vn表示第n個單詞以及字符的n-gram特征密集向量表示;Labeln表示第n個標簽。
fastText是將已經分詞后的文本作為輸入,輸出該文本屬于不同類別的概率。使用文本中的詞和詞組構成特征向量,通過線性變換,將特征向量映射到隱藏層,然后構建層次Softmax分類器根據類別的權重和模型參數使用Huffman編碼對標簽進行編碼,將Huffman樹作為輸出[6-9],Huffman樹的葉子節點即為標簽。
當數據集的類別很多時,線性分類器的計算會變得很昂貴。為了降低Softmax層的計算復雜度,fastText使用了一個基于Huffman編碼樹的分層Softmax。在這個Huffman樹中,每個葉子節點即代表一個標簽。利用了類別不平衡的這個事實,將每個類別出現的頻率作為權重,使用Huffman算法構建Huffman樹,出現頻率高的類別比出現頻率低的類別深度要小,使得計算效率更高。
常用的特征有詞袋(Bag-of-words,BoW)模型和n-gram特征。其中詞袋模型不考慮詞之間的順序,但是對于很多分類問題而言,詞序十分重要,如果詞序不同,文本含義可能截然相反,但是直接考慮順序的計算成本又很高昂,而n-gram考慮了局部詞序。因此,fastText使用n-gram特征,通過向量表示單詞n-gram來將局部詞序考慮在內,過濾掉低頻的n-gram,從而提高效率[10]。
Bagging[11]是通過多個模型相結合降低泛化誤差的技術,把多個不同的個體分類器集成為一個分類器的集成學習方法,主要思想是將訓練數據有放回地抽樣訓練多個不同模型,然后將所有模型對測試樣例的表決輸出。由于Bagging集成學習算法的個體分類器之間沒有強依賴關系,從而可以并行,可使用分布式計算進一步提高算法的效率。
1) TextCNN模型。CNN是一種前饋神經網絡,廣泛應用于模式識別、圖像處理等領域,是深度學習的代表算法之一。2014年,紐約大學Yoon Kim將CNN應用在文本分類上提出TextCNN模型,一個簡單且具有少量超參數調整的CNN,可根據具體任務進行微調進一步提高性能。對矩陣化的文本進行卷積和最大池化后,再通過全連接層的Softmax進行結果輸出。由于其結構簡單、效果好,在文本分類任務上有著廣泛的應用。
2) 樸素貝葉斯模型。貝葉斯算法是以貝葉斯原理為基礎,使用數理統計的知識對樣本數據集進行分類。貝葉斯分類算法的誤判率很低,在數據集較大的情況下表現出較高的準確率,同時算法本身也比較簡單。樸素貝葉斯算法是在貝葉斯算法的基礎上進行了相應的簡化,即假設給定目標值時屬性之間相互條件獨立,也就是特征向量中一個特征的取值并不影響其他特征的取值,雖然在一定程度上降低了貝葉斯算法的分類效果,但是由于其實現簡單且表現驚人,成為應用最為廣泛的分類模型之一。
B_f使用fastText模型作為基模型,借鑒Bagging集成算法的基本思想,挑選fastText的兩組最優超參數。15次打亂預處理后的訓練數據作為訓練樣本集分別進行訓練,最后構建由15個產生的基模型組成的多基模型,結合少數服從多數的投票機制才能對預處理后的測試樣本數據進行標簽預測,B_f的總體流程如圖2所示。

圖2 B_f總體流程
在使用數據之前,需要對原始文本數據進行預處理工作。主要流程有分詞和去停用詞等,步驟詳述如下:
1) 中文分詞。中文與英文不同,英文是以詞為單位,詞與詞之間用空格分隔,而中文是以字為單位,需要使用相關分詞工具將中文漢字序列分割成詞并用空格分隔[12]。中文分詞算法可以分為三類:(1) 字符串匹配算法,其核心思想是詞典匹配完成詞語切分;(2) 基于理解的分詞算法,其基本思想是在分詞的同時進行句法、語義分析,因為中文語言的復雜性,目前基于理解的分詞系統還處于試驗階段;(3) 基于統計的分詞算法,其主要思想是將每個詞看作是由字組成的,如果相連的字在不同文本中出現的頻率越多,則證明這段字越有可能是一個詞。目前Python常用的分詞工具有jieba分詞、THULAC(一個高效的中文詞法分析工具包)等。因此本文選取了具有分詞速度快、準確率高和使用簡單等特點的jieba分詞作為本文使用的分詞工具。部分文本使用jieba分詞樣例如表1所示。

表1 部分文本使用jieba分詞樣例
(2) 去停用詞。去停用詞為了將文本中一些出現頻率高、無實際意義、對有效信息噪音干擾的詞去掉,如“的”“是”“和”等,并且可以節省計算機的存儲與計算資源[13]。本文使用“哈工大停用詞表”、“四川大學機器智能實驗室停用詞庫”和“百度停用詞表”相整合的停用詞表作為中文停用詞表對文本進行過濾。
超參數[14-15]是機器學習以及深度學習模型內的框架參數,是在學習之前設置的參數,而不是通過訓練得到的。通常,需要對超參數進行調優,給學習機選擇一組最優超參數,以提高學習的性能和效果,是一項繁瑣但至關重要的任務。通常需要手動設定,不斷試錯調試,需要大量的專家經驗;也可以通過貝葉斯優化算法[16-17]等自動的優化模型進行調優。
由于n-gram超參數是fastText模型一個重要的超參數,能夠影響模型的時間效率以及分類精度,所以將n-gram超參數設置為一個固定的值,再進行調優可以大幅度提高超參數調優的進度。通過多次手動調優的實驗發現,對于商品名稱而言,n-gram超參數設置為1或2時,模型的時間效率以及分類精度最好,研究者需要根據具體數據進行微調。
將預處理后的商品名稱訓練數據劃分為訓練集和驗證集,然后分別將fastText模型的n-gram超參數設定為1和2,進行超參數調優,獲得兩組最優超參數。
B_f共由15個fastText基模型組成,其中7個由n-gram超參數為1的最優超參數組作為超參數訓練得到,另外7個由n-gram超參數為2的最優超參數組作為超參數訓練得,最后1個基模型是在這兩組最優超參數組中隨機抽取一組最為超參數訓練得。如圖3所示。當對文本進行預測時采用投票機制[18]融合,得到最終預測標簽。多基模型如圖2所示。

圖3 多基模型示意圖
每個基模型的訓練數據都是由訓練集隨機打亂而來。對于神經網絡來說當訓練集較大時,訓練集前面的樣本對模型權重的影響會隨著訓練變小,通過多次的打亂達到一種綜合的目的。多基模型相對于獨立模型而言,對容易產生歧義的樣本分類更加有效,單個模型對不同類別的樣本分類具有偏向性,實現效果有限,使用多個模型組合能夠提高模型的泛化能力[19-20]。
輸入:訓練集D;fastText算法A。
輸出:B_f分類器C(X)。
Step1對訓練集D進行預處理;創建預處理后的訓練集D1。
Step2使用預處理后的訓練集D1進行fastText算法A超參數調優;創建最優超參數組P1;創建最優超參數組P2。
Step3fori=1 to 7
Step4將預處理后的訓練集D1隨機打亂;創建樣本集Di。
Step5用樣本集Di和使用最優超參數組P1作為超參數的fastText算法A訓練,得到基分類器ci(x)。
因此,趙五娘與公婆之間的關系,不是封建的孝道關系,而是體現了下層社會中人與人之間的一種優良的、樸素的道德關系。
Step6end for
Step7fori=7 to 14
Step8將預處理后的訓練集D1隨機打亂;創建樣本集Di。
Step9用樣本集Di和使用最優超參數組P2作為超參數的fastText算法A訓練,得到基分類器ci(x)。
Step10end for
Step11將預處理后的訓練集D1隨機打亂;創建樣本集D15。
Step12用樣本集D15和隨機使用最優超參數組P1或P2作為超參數的fastText算法A訓練,得到基分類器c15(x)。
Step13輸出B_f分類器
(1)
使用B_f分類器C(X)對未知樣本x分類:
未知樣本x分類時,每個分類器ci(x)得出一個分類結果,15個分類器投票,得票最多的類別即為未知樣本x的分類結果,并輸出分類結果:
(2)
1) 實驗數據。實驗使用浪潮卓數大數據產業發展有限公司提供的網絡零售平臺商品數據,其中商品名與標簽來源于網絡。選用其中已標記標簽的數據作為實驗數據,包含本地生活——游戲充值——QQ充值、本地生活——游戲充值——游戲點卡、寵物生活——寵物零食——磨牙/潔齒等1 260個類別。共有50萬條數據,本文將分別取數據的100%、50%和1%作為實驗數據,如表2所示,其中類別數目c隨著數據規模增大而遞增。實驗全部通過十折交叉驗證[21]方式進行,使獲得的數據真實有效。

表2 不同規模下的數據集對比表
2) 實驗環境。硬件環境平臺:MacBook Pro,處理器2.6 GHz Intel Core i7,內存16 GB 2 400 MHz DDR4,macOS Mojave操作系統。軟件環境平臺:Python 3.7,scikit-learn,TensorFlow。
本文采用準確率(Accuracy)、精確率(Precision)、召回率(Recall)和綜合評價指標(F1-Measure)作為評估指標。準確率(Accuracy)計算式為:
(3)
精確率(Precision)的計算式為:
(4)
召回率(Recall)的計算式為:
(5)
綜合評價指標(F1-Measure)的計算式為:
(6)
式中:TP為真正例;TN為真負例;FP為假正例;FN為假負例。
使用十折交叉驗證得到最終的準確率、精確率、召回率和綜合評價指標,以減小實驗結果的誤差負例。
對于文本分類任務,TextRNN和TextCNN是深度學習中最常見的兩大類模型,由于TextRNN與TextCNN分類效果相差不大,TextCNN擅長捕獲更短的序列信息,TextRNN擅長捕獲更長的序列信息且訓練成本更大。本實驗使用的商品名稱數據集,商品名稱描述相對較短,特征詞較集中,所以略去TextRNN,使用TextCNN作為對比模型。同時,作為傳統文本分類算法的樸素貝葉斯,也較適合處理此類描述相對較短、特征詞較集中的文本分類問題。本次實驗采用對比分析,在預處理后的實驗數據的100%、50%和1%上進行實驗。將B_f與單個fastText模型、TextCNN模型以及樸素貝葉斯模型進行對比實驗,并采用十折交叉驗證方法對這四種算法分別訓練十次,將每次訓練的輸出結果保留,并將十次輸出結果取平均值得到四種模型結果的準確率、精確率、召回率和綜合評價指標對比如表3-表6所示,其中最優值加粗表示。

表3 四種模型結果準確率對比

表4 四種模型結果精確率對比

表5 四種模型結果召回率對比

表6 四種模型結果綜合評價指標對比
可以看出,本文模型在使用的數據規模為100%時預測精確率高達88.47%,其準確率也達到了86.62%,綜合評價指標為87.22%。當數據規模為50%時,本文模型各項指標依然領先與另外三個模型。當數據規模為1%時,本文模型各項指標略微低于TextCNN。不難看出本文模型對于單個fastText模型有較大的提升,對比TextCNN模型在數據規模較大時也有著明顯的優勢,對比樸素貝葉斯模型同樣有著明顯優勢。因此可得,本文模型相比于單個fastText模型、TextCNN模型、樸素貝葉斯模型較為理想,達到實驗目的。
作為傳統文本分類算法的樸素貝葉斯在訓練時只需計算概率,并不需要復雜的矩陣計算或者迭代優化,因此樸素貝葉斯模型不作為訓練時間參考模型。三種模型一次的訓練時長如表7所示。不難看出,TextCNN模型由于結構相對復雜,通常需要很長的訓練時間,訓練成本較高,在數據規模較大的情況下此問題更加明顯。fastText模型由于結構簡單取得了很好的效果,本文模型由于采用fastText模型為基模型,也取得相對令人滿意的效果。

表7 三種模型訓練時間對比 s
本文在fastText模型的基礎上構建了多基模型框架B_f。它比單個fastText模型具有更高的分類準確率;比TextCNN等深度學習模型在數據量大的情況下有著更短的訓練時長和更高的準確率;比樸素貝葉斯等傳統文本分類模型也具有更好的分類效果。能夠有效地處理商品名稱描述的文本分類問題,同時普遍適用于大規模數據的有監督文本分類問題。
鑒于本文提出的多基模型框架B_f的基模型之間沒有強依賴關系,可以并行實現。下一步將考慮擴大模型規模,進行在分布式環境下的研究,以進一步提高文本分類的準確率和時間效率。