前言
作為NLP領(lǐng)域最經(jīng)典的使用場(chǎng)景之一侨艾,文本分類(lèi)積累了許多的實(shí)現(xiàn)方法褐啡。這里我們根據(jù)是否使用深度學(xué)習(xí)方法將文本分類(lèi)主要分為一下兩個(gè)大類(lèi):
- 基于傳統(tǒng)機(jī)器學(xué)習(xí)的文本分類(lèi)瞬场,如 TF-IDF文本分類(lèi)抵代。
- 基于深度學(xué)習(xí)的文本分類(lèi)抢肛,如Facebook開(kāi)源的FastText文本分類(lèi)煞抬,Text-CNN 文本分類(lèi)霜大,Text-CNN 文本分類(lèi)等。
一革答、基于傳統(tǒng)機(jī)器學(xué)習(xí)的文本分類(lèi)
隨著統(tǒng)計(jì)學(xué)習(xí)方法的發(fā)展战坤,特別是在90年代后互聯(lián)網(wǎng)在線文本數(shù)量增長(zhǎng)和機(jī)器學(xué)習(xí)學(xué)科的興起,逐漸形成了一套解決大規(guī)模文本分類(lèi)問(wèn)題的經(jīng)典玩法残拐,這個(gè)階段的主要套路是人工特征工程+淺層分類(lèi)模型途茫。整個(gè)文本分類(lèi)問(wèn)題就拆分成了特征工程和分類(lèi)器兩部分。
1.1 特征工程
這里的特征工程也就是將文本表示為計(jì)算機(jī)可以識(shí)別的溪食、能夠代表該文檔特征的特征矩陣的過(guò)程囊卜。在基于傳統(tǒng)機(jī)器學(xué)習(xí)的文本分類(lèi)中,我們通常將特征工程分為文本預(yù)處理错沃、特征提取栅组、文本表示等三個(gè)部分。
1.1.1 文本預(yù)處理
文本預(yù)處理過(guò)程是提取文本中的關(guān)鍵詞來(lái)表示文本的過(guò)程枢析。中文文本預(yù)處理主要包括文本分詞和去停用詞兩個(gè)階段玉掸。
文本分詞,是因?yàn)楹芏嘌芯勘砻魈卣髁6葹樵~粒度遠(yuǎn)好于字粒度(其實(shí)很好理解醒叁,因?yàn)榇蟛糠址诸?lèi)算法不考慮詞序信息司浪,基于字粒度顯然損失了過(guò)多“n-gram”信息)泊业。具體到中文分詞,不同于英文有天然的空格間隔啊易,需要設(shè)計(jì)復(fù)雜的分詞算法吁伺。傳統(tǒng)分詞算法主要有基于字符串匹配的正向/逆向/雙向最大匹配;基于理解的句法和語(yǔ)義分析消歧租谈;基于統(tǒng)計(jì)的互信息/CRF方法篮奄。近年來(lái)隨著深度學(xué)習(xí)的應(yīng)用,WordEmbedding + Bi-LSTM+CRF方法逐漸成為主流垦垂,本文重點(diǎn)在文本分類(lèi)宦搬,就不展開(kāi)了。
而停止詞是文本中一些高頻的代詞劫拗、連詞间校、介詞等對(duì)文本分類(lèi)無(wú)意義的詞,通常維護(hù)一個(gè)停用詞表页慷,特征提取過(guò)程中刪除停用表中出現(xiàn)的詞憔足,本質(zhì)上屬于特征選擇的一部分。
1.1.2 特征提取
特征提取包括特征選擇和特征權(quán)重計(jì)算兩部分酒繁。
特征選擇的基本思路是根據(jù)某個(gè)評(píng)價(jià)指標(biāo)獨(dú)立的對(duì)原始特征項(xiàng)(詞項(xiàng))進(jìn)行評(píng)分排序滓彰,從中選擇得分最高的一些特征項(xiàng),過(guò)濾掉其余的特征項(xiàng)州袒。常用的評(píng)價(jià)有:文檔頻率揭绑、互信息、信息增益郎哭、χ2統(tǒng)計(jì)量等豌拙。
特征權(quán)重計(jì)算主要是經(jīng)典的TF-IDF方法及其擴(kuò)展方法馋艺。TF-IDF的主要思想是一個(gè)詞的重要度與在類(lèi)別內(nèi)的詞頻成正比拴疤,與所有類(lèi)別出現(xiàn)的次數(shù)成反比媳拴。
1.1.3 文本表示
文本表示的目的是把文本預(yù)處理后的轉(zhuǎn)換成計(jì)算機(jī)可理解的方式,是決定文本分類(lèi)質(zhì)量最重要的部分亥至。傳統(tǒng)做法常用詞袋模型(BOW, Bag Of Words)或向量空間模型(Vector Space Model)悼沈,最大的不足是忽略文本上下文關(guān)系,每個(gè)詞之間彼此獨(dú)立姐扮,并且無(wú)法表征語(yǔ)義信息絮供。
1.2 分類(lèi)器
大部分機(jī)器學(xué)習(xí)方法都在文本分類(lèi)領(lǐng)域有所應(yīng)用,比如樸素貝葉斯分類(lèi)算法(Na?ve Bayes)茶敏、KNN杯缺、SVM、最大熵和神經(jīng)網(wǎng)絡(luò)等等睡榆。
二萍肆、基于深度學(xué)習(xí)的文本分類(lèi)
2.1 FastText文本分類(lèi)
2.1.1 FastText使用場(chǎng)景
FastText是Facebook AI Research在16年開(kāi)源的一種文本分類(lèi)器。 其特點(diǎn)就是fast胀屿。相對(duì)于其它文本分類(lèi)模型塘揣,如SVM,Logistic Regression等模型宿崭,fastText能夠在保持分類(lèi)效果的同時(shí)亲铡,大大縮短了訓(xùn)練時(shí)間。
2.1.2 FastText的幾個(gè)特點(diǎn)
- 適合大型數(shù)據(jù)+高效的訓(xùn)練速度:能夠訓(xùn)練模型“在使用標(biāo)準(zhǔn)多核CPU的情況下10分鐘內(nèi)處理超過(guò)10億個(gè)詞匯葡兑。
- 支持多語(yǔ)言表達(dá):利用其語(yǔ)言形態(tài)結(jié)構(gòu)奖蔓,F(xiàn)astText能夠被設(shè)計(jì)用來(lái)支持包括英語(yǔ)、德語(yǔ)讹堤、西班牙語(yǔ)吆鹤、法語(yǔ)以及捷克語(yǔ)等多種語(yǔ)言。FastText 的性能要比 Word2Vec 工具明顯好上不少洲守。
- FastText專注于文本分類(lèi)疑务。它適合類(lèi)別特別多的分類(lèi)問(wèn)題,如果類(lèi)別比較少梗醇,容易過(guò)擬合
2.1.3 FastText原理
FastText方法包含三部分知允,模型架構(gòu),層次SoftMax和N-gram特征叙谨。
2.1.3.1 模型架構(gòu)
FastText模型架構(gòu)和 Word2Vec 中的 CBOW 模型很類(lèi)似温鸽,因?yàn)樗鼈兊淖髡叨际荈acebook的科學(xué)家Tomas Mikolov。不同之處在于手负,F(xiàn)astText預(yù)測(cè)標(biāo)簽涤垫,而CBOW 模型預(yù)測(cè)中間詞。
-
CBOW的架構(gòu):輸入的是w(t)的上下文2d個(gè)詞虫溜,經(jīng)過(guò)隱藏層后雹姊,輸出的是w(t)。
-
FastText的架構(gòu):將整個(gè)文本作為特征去預(yù)測(cè)文本的類(lèi)別衡楞。
2.1.3.2 層次SoftMax
- 對(duì)于有大量類(lèi)別的數(shù)據(jù)集吱雏,F(xiàn)astText使用了一種分層分類(lèi)器(而非扁平式架構(gòu))。不同的類(lèi)別被整合進(jìn)樹(shù)形結(jié)構(gòu)中(想象下二叉樹(shù)而非 list)瘾境。在某些文本分類(lèi)任務(wù)中類(lèi)別很多歧杏,計(jì)算線性分類(lèi)器的復(fù)雜度高。為了改善運(yùn)行時(shí)間迷守,F(xiàn)astText模型使用了層次 Softmax技巧犬绒。層次Softmax技巧建立在哈弗曼編碼的基礎(chǔ)上,對(duì)標(biāo)簽進(jìn)行編碼兑凿,能夠極大地縮小模型預(yù)測(cè)目標(biāo)的數(shù)量凯力。
-
fastText 也利用了類(lèi)別不均衡這個(gè)事實(shí)(一些類(lèi)別出現(xiàn)次數(shù)比其他的更多)茵瘾,通過(guò)使用 Huffman 算法建立用于表征類(lèi)別的樹(shù)形結(jié)構(gòu)(Huffman樹(shù))。因此咐鹤,頻繁出現(xiàn)類(lèi)別的樹(shù)形結(jié)構(gòu)的深度要比不頻繁出現(xiàn)類(lèi)別的樹(shù)形結(jié)構(gòu)的深度要小拗秘,這也使得進(jìn)一步的計(jì)算效率更高。
2.1.3.3 N-gram特征
- FastText 可以用于文本分類(lèi)和句子分類(lèi)祈惶。不管是文本分類(lèi)還是句子分類(lèi)雕旨,我們常用的特征是詞袋模型。但詞袋模型不能考慮詞之間的順序捧请,因此 FastText還加入了 N-gram 特征凡涩。“我 愛(ài) 她” 這句話中的詞袋模型特征是 “我”疹蛉,“愛(ài)”, “她”活箕。這些特征和句子 “她 愛(ài) 我” 的特征是一樣的。如果加入 2-gram氧吐,第一句話的特征還有 “我-愛(ài)” 和 “愛(ài)-她”讹蘑,這兩句話 “我 愛(ài) 她” 和 “她 愛(ài) 我” 就能區(qū)別開(kāi)來(lái)了。當(dāng)然啦筑舅,為了提高效率座慰,我們需要過(guò)濾掉低頻的 N-gram。
- 在 FastText中翠拣,每個(gè)詞被看做是 n-gram字母串包版仔。為了區(qū)分前后綴情況,"<"误墓, ">"符號(hào)被加到了詞的前后端蛮粮。除了詞的子串外,詞本身也被包含進(jìn)了 n-gram字母串包谜慌。以 where 為例然想,n=3 的情況下,其子串分別為<wh, whe, her, ere, re>欣范,以及其本身 变泄。
2.1.4 FastText 和 word2vec 對(duì)比
- 相似點(diǎn):
- 模型結(jié)構(gòu)很像,都是采用embedding向量的形式恼琼,得到word的隱向量表達(dá)妨蛹。
- 采用很多相似的優(yōu)化方法,比如使用Hierarchical softmax優(yōu)化訓(xùn)練和預(yù)測(cè)中的打分速度晴竞。
- 不同點(diǎn):
- 模型的輸出層:word2vec的輸出層蛙卤,對(duì)應(yīng)的是每一個(gè)term,計(jì)算某term的概率最大;而fasttext的輸出層對(duì)應(yīng)的是分類(lèi)的label颤难。不過(guò)不管輸出層對(duì)應(yīng)的是什么內(nèi)容神年,起對(duì)應(yīng)的vector都不會(huì)被保留和使用。
- 模型的輸入層:word2vec的輸出層行嗤,是 context window 內(nèi)的term瘤袖;而fasttext 對(duì)應(yīng)的整個(gè)sentence的內(nèi)容,包括term昂验,也包括 n-gram的內(nèi)容。
- 兩者本質(zhì)的不同艾扮,體現(xiàn)在 h-softmax的使用:
- Word2vec的目的是得到詞向量既琴,該詞向量最終是在輸入層得到,輸出層對(duì)應(yīng)的h-softmax也會(huì)生成一系列的向量泡嘴,但最終都被拋棄甫恩,不會(huì)使用。
- fastText則充分利用了h-softmax的分類(lèi)功能酌予,遍歷分類(lèi)樹(shù)的所有葉節(jié)點(diǎn)磺箕,找到概率最大的label(一個(gè)或者N個(gè))。
2.2 Text-CNN文本分類(lèi)
TextCNN 是利用卷積神經(jīng)網(wǎng)絡(luò)對(duì)文本進(jìn)行分類(lèi)的算法抛虫,它是由 Yoon Kim 在2014年在 “Convolutional Neural Networks for Sentence Classification” 一文中提出的松靡。詳細(xì)的原理圖如下。
TextCNN詳細(xì)過(guò)程:第一層是圖中最左邊的7乘5的句子矩陣建椰,每行是詞向量雕欺,維度=5,這個(gè)可以類(lèi)比為圖像中的原始像素點(diǎn)了棉姐。然后經(jīng)過(guò)有 filter_size=(2,3,4) 的一維卷積層屠列,每個(gè)filter_size 有兩個(gè)輸出 channel。第三層是一個(gè)1-max pooling層伞矩,這樣不同長(zhǎng)度句子經(jīng)過(guò)pooling層之后都能變成定長(zhǎng)的表示了笛洛,最后接一層全連接的 softmax 層,輸出每個(gè)類(lèi)別的概率乃坤。
特征:這里的特征就是詞向量苛让,有靜態(tài)(static)和非靜態(tài)(non-static)方式。static方式采用比如word2vec預(yù)訓(xùn)練的詞向量侥袜,訓(xùn)練過(guò)程不更新詞向量蝌诡,實(shí)質(zhì)上屬于遷移學(xué)習(xí)了,特別是數(shù)據(jù)量比較小的情況下枫吧,采用靜態(tài)的詞向量往往效果不錯(cuò)浦旱。non-static則是在訓(xùn)練過(guò)程中更新詞向量。推薦的方式是 non-static 中的 fine-tunning方式九杂,它是以預(yù)訓(xùn)練(pre-train)的word2vec向量初始化詞向量颁湖,訓(xùn)練過(guò)程中調(diào)整詞向量宣蠕,能加速收斂,當(dāng)然如果有充足的訓(xùn)練數(shù)據(jù)和資源甥捺,直接隨機(jī)初始化詞向量效果也是可以的抢蚀。
通道(Channels):圖像中可以利用 (R, G, B) 作為不同channel,而文本的輸入的channel通常是不同方式的embedding方式(比如 word2vec或Glove)镰禾,實(shí)踐中也有利用靜態(tài)詞向量和fine-tunning詞向量作為不同channel的做法皿曲。
一維卷積(conv-1d):圖像是二維數(shù)據(jù),經(jīng)過(guò)詞向量表達(dá)的文本為一維數(shù)據(jù)吴侦,因此在TextCNN卷積用的是一維卷積屋休。一維卷積帶來(lái)的問(wèn)題是需要設(shè)計(jì)通過(guò)不同 filter_size 的 filter 獲取不同寬度的視野。
Pooling層:利用CNN解決文本分類(lèi)問(wèn)題的文章還是很多的备韧,比如這篇 A Convolutional Neural Network for Modelling Sentences 最有意思的輸入是在 pooling 改成 (dynamic) k-max pooling劫樟,pooling階段保留 k 個(gè)最大的信息,保留了全局的序列信息织堂。
參考文獻(xiàn)