轉帖|使用教程|編輯:我只采一朵|2017-07-12 15:52:13.000|閱讀 2200 次
概述:每天,熱巢的工程師都會分析上百萬中國社交網絡上的熱門內容,熱巢平臺上的大量功能,背后都有機器學習處理文本分類的功勞。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
文本分類 (Text classification) 指的是給定一篇文章,自動判斷該文章所屬的預先定義好的標簽類別 (比如體育、娛樂或者新聞類別等),是自然語言處理 (Natural language processing,NLP) 領域的主要研究方向之一 [1]。
文本分類有著廣闊的應用場景,比如垃圾郵件檢測 (Spam email detection) 和評論情感分析 (Sentiment analysis) ,本質上都可以看做是具有兩種標簽類別的文本分類任務:
垃圾郵件檢測——判斷郵件是否屬于垃圾郵件和非垃圾郵件這兩類;
評論情感分析——判斷評論是否屬于正面郵件和負面評論這兩類。
每天,熱巢的工程師都會分析上百萬中國社交網絡上的熱門內容,熱巢平臺上的大量功能,背后都有機器學習處理文本分類的功勞。
對文本分類的研究可以追溯到二十世紀五十年代,當時主要依據特定的人工規則進行文本分類。
到二十世紀九十年代,統計機器學習 (Statistical machine learning) 成為主流,一些統計機器學習方法,比如支持向量機 (Support vector machine, SVM) [2] 和樸素貝葉斯 (Naive Bayes) [3] 等分類方法在文本分類中取得了非常高的分類準確率。然而,統計機器學習方法首先需要進行特征工程 (Feature engineering) 工作,該工作需要深入理解業務需求,并且非常耗時耗力。
隨著大數據量 (Big data) 和圖形處理單元 (Graphics processing unit, GPU) 強計算力的支持,深度學習 (Deep learning) 近年來發展迅速,在計算機視覺 (Computer vision, CV)、語音識別 (Speech recognition) 和自然語言處理領域都有著廣泛研究與應用 [4]。與統計機器學習方法相比,深度學習方法可以自動提取特征,使得人們將注意力更多地集中在數據和模型上。
關于卷積神經網絡(Convolutional neural network, CNN)
卷積神經網絡 (Convolutional neural network, CNN) [5] 是經典的深度學習模型之一,在大規模圖像識別競賽 (Large scale visual recognition challenge, ILSVRC) 中取得巨大成功。CNN模型的局部連接 (Local connectivity) 和權值共享 (Parameter sharing) 兩大特性有效地提取了數據特征并降低了模型參數以加快模型訓練。
圖1:Kim Yoon 提出的用于文本分類的CNN模型結構
KimYoon [6] 首次提出將CNN模型應用在文本分類中(見圖1)。在該模型中,第一步是詞嵌入層 (Word embedding layer),將每個詞表示為固定長度的稠密的詞向量 (關于詞嵌入的理論部分,我們還會繼續發文介紹)。第二步是卷積層 (Convolutionallayer),采用不同大小的卷積核從上到下依次對詞向量進行卷積操作。第三步是池化層 (Pooling layer),采取的是最大池化 (Max-pooling) 操作。第四步是全連接層 (Fully connected layer, 包括了Dropout層),對輸出標簽類別進行預測。
關于fastText
2016年8月份,Facebook開源了fastText工具,用于快速進行文本表示與文本分類任務 [7]。fastText的模型結構非常簡單 (圖2),單個詞或者ngram組合詞的詞向量取平均后代表該文本的向量,使用softmax函數預測文本所屬各標簽類別的概率,損失函數 (Loss function) 是真實標簽類別與預測標簽類別之間的負對數似然 (Negative log-likelihood)。與“深層”的CNN模型相比,fastText的模型結構是“淺層”的。
圖 2. fastText模型結構。x1, x2, …, xN 分別表示文本的N個ngram 特征
開始實驗
接下來將分別使用CNN模型和fastText模型在公開數據集上進行文本分類,以分類準確度和模型訓練耗時兩個角度評估兩個模型的表現。
相對于圖像和語音來說,文字已經是高度抽象的概念了,因此對文本分析并不需要太深的網絡結構。在這里使用深度學習框架keras [8] 搭建了CNN模型,其結構為:詞嵌入層-Dropout層-卷積層-Dropout層-池化層-全連接層-Dropout層-全連接層。在fastText 的官方GitHub上 [9] 下載并編譯了fastText模型。
實驗所需公開測試數據來自搜狗實驗室新聞數據完整版 [10],包括了搜狐新聞2012年6月到7月期間國內、國際、體育、社會和娛樂等18個標簽類別的新聞數據。在依次經過數據提取、中文分詞、去停用詞、過濾小于10個詞的文本和文本去重一系列文本預處理操作后,選取其中汽車、財經、IT、健康、體育和娛樂6個標簽類別,每個標簽類別下隨機打亂后選取15,000個樣本作為訓練數據集 (Training data),3,000個樣本作為測試數據集 (Testing data),即實驗使用的訓練數據集大小為90,000,測試數據集大小為18,000。
本實驗在CentOS 平臺運行,由于fastText模型訓練不需要GPU加速,因此在訓練CNN模型時也沒有使用GPU。實驗使用的相關軟件以及版本分別是中文分詞工具jieba (0.38) [11], 詞向量訓練工具gensim (2.1) [12] 和CNN模型實現深度學習框架keras (2.0)。編程語言是 Python 2.7。
實驗結果
經過一系列超參數 (Hyper-parameter) 調整后,在分類準確度方面,CNN模型迭代 (Epoch) 訓練數據7次后,在測試數據集上的分類準確度為95.7 % (圖3)。fastText模型在相同測試數據集上的分類準確度為 95.8 % (圖4)。也就是說,在該測試數據集上,兩個模型的分類準確度是基本一致的。
圖 3. CNN模型實驗結果
圖 4. fastText模型實驗結果
在運行時間方面,fastText模型總共只需要27秒鐘就可以完成模型的訓練與預測 (圖4),而CNN模型完成相同的操作耗時2212秒 (圖3),也就是說fastText模型遠遠快于CNN模型。實驗使用的標簽類別和相應數據量并不是太大,在工業界業務需求中往往有成百上千個標簽類別,fastText在更大規模的數據集上的優勢更加明顯 [7]。
值得注意的是,fastText除了可以進行有監督學習的文本分類外,還可以進行無監督的詞向量學習。有了詞向量后,可以直觀地查看語義相關詞。
比如,圖5展示了與輸入詞“梁朝偉”最相關的詞是:聽風者。《聽風者》是梁朝偉和周迅等在2012年主演的一部影片,由于訓練數據是2012年采集的,因此詞向量準確地捕捉到了兩個詞之間的相關關系。與輸入詞“奔馳”語義最相關的詞是:寶馬,可以想象2012年兩個車系的競品關系。
實驗討論
如前文所述,與圖像和語音不同,人類的語言已經是高度抽象的概念了。對于文本分類任務來說,在良好的特征工程基礎上,線性分類器也可以取得很好的效果 [7]。文本分類還是比較偏線性的任務,因此“淺層”的fastText模型就可以達到與“深層”的CNN模型相似的分類準確度。依此類推,為了解決業務需求,具體在選擇算法模型時要充分理解任務屬性,依據數據量大小和算法模型本身的優缺點選擇合適的解決方案。
除了將CNN模型應用在文本分類任務上之外,還可以將其他深度學習模型應用在文本分類上,比如循環神經網絡 (Recurrent neural network, RNN) [13],基于注意力 (Attention) 機制的遞歸神經網絡 [14],循環卷積神經網絡 (Recurrent convolutional neural network, RCNN) [15] 等。由于在此實驗中CNN模型已經取得了不錯的結果,因此在這里沒有嘗試其他深度學習模型。
目前深度學習已經分別在計算機視覺和語音識別領域取得了state-of-the-art的結果,近年來在自然語言處理領域有著廣闊的研究。有趣的是,有人指出深度學習并不能很容易地應用在自然語言處理上 [16]。該文章指出神經網絡適用于處理連續稠密的數據 (比如圖像和語音),而自然語言在單詞/符號水平 (Word/symbol level) 上的并不是連續的,在概念/意義水平 (Concept/meaning level) 上才是連續的。神經網絡在單詞水平上進行分析會受限于訓練數據集,模型訓練完畢后泛化誤差 (Generalization error) 較大。
因此,不同的算法模型都有不同的優勢和劣勢,技術團隊勢必需要充分理解具體的業務需求后,才能提供最佳的技術解決方案并提升解決問題的效率。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn