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