1. 文本分類任務(wù)介紹
文本分類是自然語言處理的一個(gè)基本任務(wù),試圖推斷出給定的文本(句子、文檔等)的標(biāo)簽或標(biāo)簽集合。文本分類的應(yīng)用非常廣泛。如:
垃圾郵件分類:二分類問題,判斷郵件是否為垃圾郵件
情感分析
二分類問題,判斷文本情感是積極(positive)還是消極(negative)
多分類問題,判斷文本情感屬于{非常消極,消極,中立,積極,非常積極}中的哪一類
新聞主題分類:判斷新聞屬于哪個(gè)類別,如財(cái)經(jīng)、體育、娛樂等
自動(dòng)問答系統(tǒng)中的問句分類
社區(qū)問答系統(tǒng)中的問題分類:多標(biāo)簽分類
更多應(yīng)用:
讓AI當(dāng)法官: 基于案件事實(shí)描述文本的罰金等級(jí)分類(多分類)和法條分類(多標(biāo)簽分類)。
判斷新聞是否為機(jī)器人所寫: 二分類
不同類型的文本分類往往有不同的評(píng)價(jià)指標(biāo),具體如下:
二分類:accuracy,precision,recall,f1-score,...
多分類: Micro-Averaged-F1, Macro-Averaged-F1, ...
多標(biāo)簽分類:Jaccard相似系數(shù), ...
2. 傳統(tǒng)機(jī)器學(xué)習(xí)方法
傳統(tǒng)的機(jī)器學(xué)習(xí)方法主要利用自然語言處理中的n-gram概念對(duì)文本進(jìn)行特征提取,并且使用TFIDF對(duì)n-gram特征權(quán)重進(jìn)行調(diào)整,然后將提取到的文本特征輸入到Logistics回歸、SVM等分類器中進(jìn)行訓(xùn)練。但是,上述的特征提取方法存在數(shù)據(jù)稀疏和維度爆炸等問題,這對(duì)分類器來說是災(zāi)難性的,并且使得訓(xùn)練的模型泛化能力有限。因此,往往需要采取一些策略進(jìn)行降維:
人工降維:停用詞過濾,低頻n-gram過濾等
自動(dòng)降維:LDA等
值得指出的是,將深度學(xué)習(xí)中的word2vec,doc2vec作為文本特征與上文提取的特征進(jìn)行融合,常??梢蕴岣吣P途取?/p>
3. CNN用于文本分類
論文Convolutional Neural Networks for Sentence Classification提出了使用CNN進(jìn)行句子分類的方法。
3.1 CNN模型推導(dǎo)
一個(gè)句子是由多個(gè)詞拼接而成的,如果一個(gè)句子有n個(gè)詞,且第i個(gè)詞表示為正i,詞;通過embedding后表示為k維的向量,即,則一個(gè)句子為n?*?k的矩陣,可以形式化如下:
一個(gè)包含h個(gè)的詞的詞窗口表示為:
一個(gè)filter是大小為h*k的矩陣,表示為:
通過一個(gè)filter作用一個(gè)詞窗口提取可以提取一個(gè)特征,?如下:
其中,是bias值,f為激活函數(shù)如Relu等。
卷積操作:通過一個(gè)filter在整個(gè)句子上從句首到句尾掃描-遍,提取每個(gè)詞窗口的特征,可以得到一個(gè)特征圖(featuremap),表示如下(這里默認(rèn)不對(duì)句padding):?
池化操作:對(duì)一個(gè)filter提取到的featuremap進(jìn)行maxpooling,得到只即:
若有m個(gè)filter,則通過一層卷積一層池化后可以得到一個(gè)長(zhǎng)度為m的向量:
最后,將向量z輸入到全連接層,得到最終的特征提取向量y(這里的W為全連接層的權(quán)重,注意與filter進(jìn)行區(qū)分):
3.2 優(yōu)化CNN模型
3.2.1 詞向量
隨機(jī)初始化 (CNN-rand)
預(yù)訓(xùn)練詞向量進(jìn)行初始化,在訓(xùn)練過程中固定 (CNN-static)
預(yù)訓(xùn)練詞向量進(jìn)行初始化,在訓(xùn)練過程中進(jìn)行微調(diào) (CNN-non-static)
多通道(CNN-multichannel):將固定的預(yù)訓(xùn)練詞向量和微調(diào)的詞向量分別當(dāng)作一個(gè)通道(channel),卷積操作同時(shí)在這兩個(gè)通道上進(jìn)行,可以類比于圖像RGB三通道。
上圖為模型架構(gòu)示例,在示例中,句長(zhǎng)n=9,詞向量維度k=6,fiter有兩種窗口大小(或者說kernelsize),每種有2個(gè),因此filter總個(gè)數(shù)m=4,其中:
一種的窗口大小h=2(紅色框),卷積后的向量維度為n一h+1=8
另-種窗口大小h=3(黃色框),卷積后的向量維度為n一h+1=7
3.2.2 正則化
Dropout:對(duì)全連接層的輸入z向量進(jìn)行dropout
其中為masking向量(每個(gè)維度值非0即1,可以通過伯努利分布隨機(jī)生成),和向量z進(jìn)行元素與元素對(duì)應(yīng)相乘,讓r向量值為0的位置對(duì)應(yīng)的z向量中的元素值失效(梯度無法更新)。
L2-norms:對(duì)L2正則化項(xiàng)增加限制:當(dāng)正則項(xiàng)1|W112>8時(shí),令|W1l2=s,其中s為超參數(shù)。
3.3 一些結(jié)論
Multichannel vs. Single Channel Models: 雖然作者一開始認(rèn)為多通道可以預(yù)防過擬合,從而應(yīng)該表現(xiàn)更高,尤其是在小規(guī)模數(shù)據(jù)集上。但事實(shí)是,單通道在一些語料上比多通道更好;
Static vs. Non-static Representations: 在大部分的語料上,CNN-non-static都優(yōu)于CNN-static,一個(gè)解釋:預(yù)訓(xùn)練詞向量可能認(rèn)為‘good’和‘bad’類似(可能它們有許多類似的上下文),但是對(duì)于情感分析任務(wù),good和bad應(yīng)該要有明顯的區(qū)分,如果使用CNN-static就無法做調(diào)整了;
Dropout可以提高2%–4%性能(performance);
對(duì)于不在預(yù)訓(xùn)練的word2vec中的詞,使用均勻分布隨機(jī)初始化,并且調(diào)整a使得隨機(jī)初始化的詞向量和預(yù)訓(xùn)練的詞向量保持相近的方差,可以有微弱提升;
可以嘗試其他的詞向量預(yù)訓(xùn)練語料,如Wikipedia[Collobert et al. (2011)]
Adadelta(Zeiler, 2012)和Adagrad(Duchi et al., 2011)可以得到相近的結(jié)果,但是所需epoch更少。
3.4 進(jìn)一步思考CNN
3.4.1 為什么CNN能夠用于文本分類(NLP)?
為什么CNN能夠用于文本分類(NLP)?
filter相當(dāng)于N-gram ?
filter只提取局部特征?全局特征怎么辦?可以融合嗎?
RNN可以提取全局特征
RCNN(下文說明): RNN和CNN的結(jié)合
3.4.2 超參數(shù)怎么調(diào)?
論文A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification提供了一些策略。
用什么樣的詞向量
使用預(yù)訓(xùn)練詞向量比隨機(jī)初始化的效果要好
采取微調(diào)策略(non-static)的效果比固定詞向量(static)的效果要好
無法確定用哪種預(yù)訓(xùn)練詞向量(Google word2vec / GloVe representations)更好,不同的任務(wù)結(jié)果不同,應(yīng)該對(duì)于你當(dāng)前的任務(wù)進(jìn)行實(shí)驗(yàn);
filter窗口大小、數(shù)量
在實(shí)踐中,100到600是一個(gè)比較合理的搜索空間。
每次使用一種類型的filter進(jìn)行實(shí)驗(yàn),表明filter的窗口大小設(shè)置在1到10之間是一個(gè)比較合理的選擇。
首先在一種類型的filter大小上執(zhí)行搜索,以找到當(dāng)前數(shù)據(jù)集的“最佳”大小,然后探索這個(gè)最佳大小附近的多種filter大小的組合。
每種窗口類型的filter對(duì)應(yīng)的“最好”的filter個(gè)數(shù)(feature map數(shù)量)取決于具體數(shù)據(jù)集;
但是,可以看出,當(dāng)feature map數(shù)量超過600時(shí),performance提高有限,甚至?xí)p害performance,這可能是過多的feature map數(shù)量導(dǎo)致過擬合了;
激活函數(shù) (tanh, relu, ...)
Sigmoid, Cube, and tanh cube相較于Relu和Tanh的激活函數(shù),表現(xiàn)很糟糕;
tanh比sigmoid好,這可能是由于tanh具有zero centering property(過原點(diǎn));
與Sigmoid相比,ReLU具有非飽和形式(a non-saturating form)的優(yōu)點(diǎn),并能夠加速SGD的收斂。
對(duì)于某些數(shù)據(jù)集,線性變換(Iden,即不使用非線性激活函數(shù))足夠捕獲詞嵌入與輸出標(biāo)簽之間的相關(guān)性。(但是如果有多個(gè)隱藏層,相較于非線性激活函數(shù),Iden就不太適合了,因?yàn)橥耆镁€性激活函數(shù),即使有多個(gè)隱藏層,組合后整個(gè)模型還是線性的,表達(dá)能力可能不足,無法捕獲足夠信息);
因此,建議首先考慮ReLU和tanh,也可以嘗試Iden
池化策略:最大池化就是最好的嗎
對(duì)于句子分類任務(wù),1-max pooling往往比其他池化策略要好;
這可能是因?yàn)樯舷挛牡木唧w位置對(duì)于預(yù)測(cè)Label可能并不是很重要,而句子某個(gè)具體的n-gram(1-max pooling后filter提取出來的的特征)可能更可以刻畫整個(gè)句子的某些含義,對(duì)于預(yù)測(cè)label更有意義;
(但是在其他任務(wù)如釋義識(shí)別,k-max pooling可能更好。)
正則化
0.1到0.5之間的非零dropout rates能夠提高一些performance(盡管提升幅度很?。?,具體的最佳設(shè)置取決于具體數(shù)據(jù)集;
對(duì)l2 norm加上一個(gè)約束往往不會(huì)提高performance(除了Opi數(shù)據(jù)集);
當(dāng)feature map的數(shù)量大于100時(shí),可能導(dǎo)致過擬合,影響performance,而dropout將減輕這種影響;
在卷積層上進(jìn)行dropout幫助很小,而且較大的dropout rate對(duì)performance有壞的影響。
3.5 字符級(jí)別的CNN用于文本分類
論文Character-level convolutional networks for text classification將文本看成字符級(jí)別的序列,使用字符級(jí)別(Character-level)的CNN進(jìn)行文本分類。
3.5.1 字符級(jí)CNN的模型設(shè)計(jì)
首先需要對(duì)字符進(jìn)行數(shù)字化(quantization)。具體如下:
定義字母表(Alphabet):大小為m(對(duì)于英文m=70m=70,如下圖,之后會(huì)考慮將大小寫字母都包含在內(nèi)作為對(duì)比)
字符數(shù)字化(編碼): "one-hot"編碼
序列(文本)長(zhǎng)度:?(定值)然后論文設(shè)計(jì)了兩種類型的卷積網(wǎng)絡(luò):Large和Small(作為對(duì)照實(shí)驗(yàn))
它們都有9層,其中6層為卷積層(convolutional layer);3層為全連接層(fully-connected layer):
Dropout的概率都為0.5
使用高斯分布(Gaussian distribution)對(duì)權(quán)重進(jìn)行初始化:
最后一層卷積層單個(gè)filter輸出特征長(zhǎng)度(the output frame length)為,推
第一層全連接層的輸入維度(其中1024和256為filter個(gè)數(shù)或者說frame/feature size):
下圖為模型的一個(gè)圖解示例。其中文本長(zhǎng)度為10,第一層卷積的kernel size為3(半透明黃色正方形),卷積個(gè)數(shù)為9(Feature=9),步長(zhǎng)為1,因此Length=10-3+1=8,然后進(jìn)行非重疊的max-pooling(即pooling的stride=size),pooling size為2,因此池化后的Length = 8 / 2 = 4。
3.5.2 字符級(jí)CNN的相關(guān)總結(jié)與思考
字符級(jí)CNN是一個(gè)有效的方法
數(shù)據(jù)集的大小可以為選擇傳統(tǒng)方法還是卷積網(wǎng)絡(luò)模型提供指導(dǎo):對(duì)于幾百上千等小規(guī)模數(shù)據(jù)集,可以優(yōu)先考慮傳統(tǒng)方法,對(duì)于百萬規(guī)模的數(shù)據(jù)集,字符級(jí)CNN開始表現(xiàn)不錯(cuò)。
字符級(jí)卷積網(wǎng)絡(luò)很適用于用戶生成數(shù)據(jù)(user-generated data)(如拼寫錯(cuò)誤,表情符號(hào)等),
沒有免費(fèi)的午餐(There is no free lunch)
中文怎么辦
中文中的同音詞非常多,如何克服?
如果把中文中的每個(gè)字作為一個(gè)字符,那么字母表將非常大
是否可以把中文先轉(zhuǎn)為拼音(pinyin)?
論文Character-level Convolutional Network for Text Classification Applied to Chinese Corpus進(jìn)行了相關(guān)實(shí)驗(yàn)。
將字符級(jí)和詞級(jí)進(jìn)行結(jié)合是否結(jié)果更好
英文如何結(jié)合
中文如何結(jié)合
3.5.3 使用同義詞表進(jìn)行數(shù)據(jù)增強(qiáng)
對(duì)于深度學(xué)習(xí)模型,采用適當(dāng)?shù)臄?shù)據(jù)增強(qiáng)(Data Augmentation)技術(shù)可以提高模型的泛化能力。數(shù)據(jù)增強(qiáng)在計(jì)算機(jī)視覺領(lǐng)域比較常見,例如對(duì)圖像進(jìn)行旋轉(zhuǎn),適當(dāng)扭曲,隨機(jī)增加噪聲等操作。對(duì)于NLP,最理想的數(shù)據(jù)增強(qiáng)方法是使用人類復(fù)述句子(human rephrases of sentences),但是這比較不現(xiàn)實(shí)并且對(duì)于大規(guī)模語料來說代價(jià)昂貴。一個(gè)更自然的選擇是使用詞語或短語的同義詞或同義短語進(jìn)行替換,從而達(dá)到數(shù)據(jù)增強(qiáng)的目的。具體做法如下:
英文同義詞典: from themytheascomponent used in LibreOffice1 project.
http://www.libreoffice.org/
從給定的文本中抽取出所有可以替換的詞,然后隨機(jī)選擇個(gè)進(jìn)行替換,其中r由一個(gè)參數(shù)為p的幾何分布(geometric distribution)確定,即
給定一個(gè)待替換的詞,其同義詞可能有多個(gè)(一個(gè)列表),選擇第s個(gè)的概率也通過另一個(gè)幾何分布確定,即。這樣是為了當(dāng)前詞的同義詞列表中的距離較遠(yuǎn)(s較大)的同義詞被選的概率更小。
論文實(shí)驗(yàn)設(shè)置:p=0.5,q=0.5
4. RNN用于文本分類
策略1:直接使用RNN的最后一個(gè)單元輸出向量作為文本特征
策略2:使用雙向RNN的兩個(gè)方向的輸出向量的連接(concatenate)或均值作為文本特征
策略3:將所有RNN單元的輸出向量的均值pooling或者max-pooling作為文本特征
策略4:層次RNN+Attention,Hierarchical Attention Networks
5. RCNN(RNN+CNN)用于文本分類
論文Recurrent Convolutional Neural Networks for Text Classification設(shè)計(jì)了一種RNN和CNN結(jié)合的模型用于文本分類。
5.1 RCNN模型推導(dǎo)
5.1.1 詞表示學(xué)習(xí)
使用雙向RNN分別學(xué)習(xí)當(dāng)前詞的左上下文表示和右上下文表示再與當(dāng)前詞自身的表示連接,構(gòu)成卷積層的輸入。具體如下:
然后將作為的表示,輸入到激活函數(shù)為tanh,kernel?size為1的卷積層,得到的潛在語義向量(latent?semantic?vector)
將kernelsize設(shè)置為1是因?yàn)?img src="http://file.elecfans.com/web1/M00/57/E4/pIYBAFtNsZyARJX7AAAAz-8o8Hc097.png" />中已經(jīng)包含左右上下文的信息,無需再使用窗口大于1的filter進(jìn)行特征提取。但是需要說明的是,在實(shí)踐中仍然可以同時(shí)使用多種kernel?size的filter,如[1,?2,?3],可能取得更好的效果,一種可能的解釋是窗口大于1的ilter強(qiáng)化了的左右最近的上下文信息。此外,實(shí)踐中可以使用更復(fù)雜的RNN來捕獲的上下文信息如LSTM和GRU等。
5.1 2 文本表示學(xué)習(xí)
經(jīng)過卷積層后,獲得了所有詞的表示,然后在經(jīng)過最大池化層和全連接層得到文本的表示,最后通過softmax層進(jìn)行分類。具體如下:
下圖為上述過程的一個(gè)圖解:
5.2 RCNN相關(guān)總結(jié)
NN vs. traditional methods: 在該論文的所有實(shí)驗(yàn)數(shù)據(jù)集上,神經(jīng)網(wǎng)絡(luò)比傳統(tǒng)方法的效果都要好
Convolution-based vs. RecursiveNN: 基于卷積的方法比基于遞歸神經(jīng)網(wǎng)絡(luò)的方法要好
RCNN vs. CFG and C&J: The RCNN可以捕獲更長(zhǎng)的模式(patterns)
RCNN vs. CNN: 在該論文的所有實(shí)驗(yàn)數(shù)據(jù)集上,RCNN比CNN更好
CNNs使用固定的詞窗口(window of words), 實(shí)驗(yàn)結(jié)果受窗口大小影響
RCNNs使用循環(huán)結(jié)構(gòu)捕獲廣泛的上下文信息
6. 一定要CNN/RNN嗎
上述的深度學(xué)習(xí)方法通過引入CNN或RNN進(jìn)行特征提取,可以達(dá)到比較好的效果,但是也存在一些問題,如參數(shù)較多導(dǎo)致訓(xùn)練時(shí)間過長(zhǎng),超參數(shù)較多模型調(diào)整麻煩等。下面兩篇論文提出了一些簡(jiǎn)單的模型用于文本分類,并且在簡(jiǎn)單的模型上采用了一些優(yōu)化策略。
6.1 深層無序組合方法
論文Deep Unordered Composition Rivals Syntactic Methods for Text Classification提出了NBOW(Neural Bag-of-Words)模型和DAN(Deep Averaging Networks)模型。對(duì)比了深層無序組合方法(Deep Unordered Composition)和句法方法(Syntactic Methods)應(yīng)用在文本分類任務(wù)中的優(yōu)缺點(diǎn),強(qiáng)調(diào)深層無序組合方法的有效性、效率以及靈活性。
6.1.1 Neural Bag-of-Words Models
論文首先提出了一個(gè)最簡(jiǎn)單的無序模型Neural Bag-of-Words Models (NBOWmodel)。該模型直接將文本中所有詞向量的平均值作為文本的表示,然后輸入到softmax 層,形式化表示如下:
6.1.2 Considering Syntax for Composition
一些考慮語法的方法:
Recursive neural networks (RecNNs)
可以考慮一些復(fù)雜的語言學(xué)現(xiàn)象,如否定、轉(zhuǎn)折等 (優(yōu)點(diǎn))
實(shí)現(xiàn)效果依賴輸入序列(文本)的句法樹(可能不適合長(zhǎng)文本和不太規(guī)范的文本)
需要更多的訓(xùn)練時(shí)間
Using a convolutional network instead of a RecNN
時(shí)間復(fù)雜度同樣比較大,甚至更大(通過實(shí)驗(yàn)結(jié)果得出的結(jié)論,這取決于filter大小、個(gè)數(shù)等超參數(shù)的設(shè)置)
6.1.3 Deep Averaging Networks
Deep Averaging Networks (DAN)是在NBOWmodel的基礎(chǔ)上,通過增加多個(gè)隱藏層,增加網(wǎng)絡(luò)的深度(Deep)。下圖為帶有兩層隱藏層的DAN與RecNN模型的對(duì)比。
6.1.4 Word Dropout Improves Robustness
針對(duì)DAN模型,論文提出一種word dropout策略:在求平均詞向量前,隨機(jī)使得文本中的某些單詞(token)失效。形式化表示如下:
Word Dropout可能會(huì)使得某些非常重要的token失效。然而,使用word dropout往往確實(shí)有提升,這可能是因?yàn)?,一些?duì)標(biāo)簽預(yù)測(cè)起到關(guān)鍵性作用的word數(shù)量往往小于無關(guān)緊要的word數(shù)量。例如,對(duì)于情感分析任務(wù),中立(neutral)的單詞往往是最多的。
Word dropout 同樣可以用于其他基于神經(jīng)網(wǎng)絡(luò)的方法。
Word Dropout或許起到了類似數(shù)據(jù)增強(qiáng)(Data Augmentation)的作用?
6.2 fastText
論文Bag of Tricks for Efficient Text Classification提出一個(gè)快速進(jìn)行文本分類的模型和一些trick。
6.2.1 fastText模型架構(gòu)
fastText模型直接對(duì)所有進(jìn)行embedded的特征取均值,作為文本的特征表示,如下圖。
6.2.2 特點(diǎn)
當(dāng)類別數(shù)量較大時(shí),使用Hierachical Softmax
將N-gram融入特征中,并且使用Hashing trick[Weinberger et al.2009]提高效率
7. 最新研究
根據(jù)github repo:state-of-the-art-result-for-machine-learning-problems,下面兩篇論文提出的模型可以在文本分類取得最優(yōu)的結(jié)果(讓AI當(dāng)法官比賽第一名使用了論文Learning Structured Text Representations中的模型):
Learning Structured Text Representations
Attentive Convolution
論文Multi-Task Label Embedding for Text Classification認(rèn)為標(biāo)簽與標(biāo)簽之間有可能有聯(lián)系,所以不是像之前的深度學(xué)習(xí)模型把標(biāo)簽看成one-hot vector,而是對(duì)每個(gè)標(biāo)簽進(jìn)行embedding學(xué)習(xí),以提高文本分類的精度。
References[1] Le and Mikolov - 2014 - Distributed representations of sentences and documents[2] Kim - 2014 - Convolutional neural networks for sentence classification[3] Zhang and Wallace - 2015 - A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification[4] Zhang et al. - 2015 - Character-level convolutional networks for text classification[5] Lai et al. - 2015 - Recurrent Convolutional Neural Networks for Text Classification[6] Iyyer et al. - 2015 - Deep unordered composition rivals syntactic methods for Text Classification[7] Joulin et al. - 2016 - Bag of tricks for efficient text classification[8] Liu and Lapata - 2017 - Learning Structured Text Representations[9] Yin and Schütze - 2017 - Attentive Convolution[10] Zhang et al. - 2017 - Multi-Task Label Embedding for Text Classification
-
文本分類
+關(guān)注
關(guān)注
0文章
18瀏覽量
7306 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8418瀏覽量
132634 -
自然語言
+關(guān)注
關(guān)注
1文章
288瀏覽量
13350
原文標(biāo)題:深度學(xué)習(xí)在文本分類中的應(yīng)用
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論