【NLP傻瓜式教程】手把手带你RCNN文本分类(附代码)
繼續(xù)之前的文本分類系列
【NLP傻瓜式教程】手把手帶你CNN文本分類(附代碼)
【NLP傻瓜式教程】手把手帶你RNN文本分類(附代碼)
【NLP傻瓜式教程】手把手帶你fastText文本分類(附代碼)
傳統(tǒng)文本分類
之前介紹的都是屬于深度神經(jīng)網(wǎng)絡(luò)框架的,那么在Deep Learning出現(xiàn)或者風(fēng)靡之前,文本分類是怎么做的呢?
傳統(tǒng)的文本分類工作主要分為三個過程:特征工程、特征選擇和不同分類機器學(xué)習(xí)算法。
1.1 特征工程
對于文本數(shù)據(jù)的特征工程來說,最廣泛使用的功能是bag-of-words、tf-idf等。此外,還可以設(shè)計一些更復(fù)雜的特征,比如詞性標簽、名詞短語以及tree kernels等。
1.2 特征選擇
特征選擇旨在刪除噪聲特征,提高分類性能。最常見的特征選擇方法比如去停詞(例如,“The”)、信息增益、互信息或L1正則化等以選擇有用的特性。
1.3 機器學(xué)習(xí)算法
機器學(xué)習(xí)算法常用分類器,如邏輯回歸(LR)、樸素貝葉斯(NB)和支持向量機(SVM)。然而,這些方法都存在數(shù)據(jù)稀疏問題。
RCNN論文概述
論文來自Recurrent Convolutional Neural Networks for Text Classification[1]
作者在論文中首先對比了傳統(tǒng)文本分類算法與深度學(xué)習(xí)算法。
傳統(tǒng)的特征表示方法往往忽略文本中的上下文信息或詞序,對于捕捉詞的語義仍然不滿意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,當我們分析“Bank”(unigram)這個詞時,我們可能不知道它是指金融機構(gòu)還是河旁。此外,“South Bank”(bigram),尤其是考慮到兩個大寫字母,可能會誤導(dǎo)那些對倫敦不太了解的人,把它當作金融機構(gòu)。當我們獲得更大的上下文“stroll along the South Bank”(5-gram),我們就能很容易地辨別出它的意思。雖然高階n-grams和更復(fù)雜的特性(如樹內(nèi)核)被設(shè)計用于捕獲更多的上下文信息和單詞序列,但它們?nèi)匀淮嬖跀?shù)據(jù)稀疏問題,這嚴重影響了分類的準確性。近年來,經(jīng)過預(yù)先訓(xùn)練的word embedding和深層神經(jīng)網(wǎng)絡(luò)的快速發(fā)展,給各種NLP任務(wù)帶來了新的啟發(fā)。word embedding是單詞的一種分布式表示,極大地緩解了數(shù)據(jù)稀疏問題(Bengio et al. 2003)。預(yù)先訓(xùn)練的詞嵌入可以捕捉有意義的句法和語義規(guī)律性。
接著對目前應(yīng)用較為廣泛的深度學(xué)習(xí)框架算法進行了綜述:
Socher et al 提出遞歸神經(jīng)網(wǎng)絡(luò)(RecursiveNN),在構(gòu)建句子表示方面已被證明是有效的。然而,遞歸通過樹結(jié)構(gòu)捕獲了一個句子的語義。它的性能很大程度上取決于文本樹結(jié)構(gòu)的性能。此外,構(gòu)造這樣一種文本樹的時間復(fù)雜度至少為,其中n為文本的長度。當模型遇到長句或文檔時,這將是非常耗時的。此外,兩個句子之間的關(guān)系很難用樹結(jié)構(gòu)來表示。因此,遞歸不適合對長句或文檔建模。
另一種模型,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),模型時間復(fù)雜度為。該模型通過逐字分析一個文本單詞,并將所有先前文本的語義存儲在一個固定大小的隱藏層中。RNN的優(yōu)點是能夠更好地捕捉上下文信息。這可能有利于捕獲長文本的語義。然而,RNN是一個有偏倚的模型,在這個模型中,后面的單詞比先前的單詞更具優(yōu)勢。因此,當它被用于捕獲整個文檔的語義時,它可能會降低效率,因為關(guān)鍵組件可能出現(xiàn)在文檔中的任何地方,而不是最后。為了解決偏置問題,我們引入了卷積神經(jīng)網(wǎng)絡(luò)(CNN),將一個不帶偏見的模型引入到NLP任務(wù)中,它可以很好地確定文本中帶有最大池化層的識別性短語。因此,與遞歸或循環(huán)神經(jīng)網(wǎng)絡(luò)相比,CNN可以更好地捕捉文本的語義。CNN的時間復(fù)雜度也是O(n)。然而,以前對CNNs的研究傾向于使用簡單的卷積核,如固定窗。使用這樣的內(nèi)核時,很難確定窗口大小:小窗口大小可能導(dǎo)致一些關(guān)鍵信息的丟失,而大的窗口會導(dǎo)致巨大的參數(shù)空間(這可能很難訓(xùn)練)。因此,它提出了一個問題:我們能否比傳統(tǒng)的基于窗口的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)更多的上下文信息,更準確地表示文本的語義。
為了解決上述模型的局限性,作者們提出了一個循環(huán)卷積神經(jīng)網(wǎng)絡(luò)(RCNN),并將其應(yīng)用于文本分類的任務(wù)。首先,我們應(yīng)用一個雙向的循環(huán)結(jié)構(gòu),與傳統(tǒng)的基于窗口的神經(jīng)網(wǎng)絡(luò)相比,它可以大大減少噪聲,從而最大程度地捕捉上下文信息。此外,該模型在學(xué)習(xí)文本表示時可以保留更大范圍的詞序。其次,使用了一個可以自動判斷哪些特性在文本分類中扮演關(guān)鍵角色的池化層(max-pooling),以捕獲文本中的關(guān)鍵組件。模型結(jié)合了RNN的結(jié)構(gòu)和最大池化層,利用了循環(huán)神經(jīng)模型和卷積神經(jīng)模型的優(yōu)點。此外,模型的時間復(fù)雜度為O(n),它與文本長度的長度是線性相關(guān)的。
RCNN模型框架
如下圖是作者提出的模型框架,輸入是一個文本D,它可以看成是由一系列單詞(W1,W2,,,Wn)組成的。輸出是一個概率分布,最大的那個位置對應(yīng)文章屬于的類別K。
接下來我們來仔細分析一下框架訓(xùn)練的過程。
Word Representation Learning
為了更準確地表達單詞的意思,作者使用了單詞本身和其上下文來表示這個詞。在論文中,使用雙向循環(huán)結(jié)構(gòu)來實現(xiàn)。使用來定義詞左邊的文本,來定義詞右邊文本。這里和是長度為|c|的稠密向量。計算公式如下:
以“A sunset stroll along the South Bank affords an array of stunning vantage points” 這句話為例分析,結(jié)合上圖,Cl(W7)表示了“Bank”這個詞左側(cè)的上下文語義信息(即“stroll along the South ”),同理,Cr(W7)表示了“Bank”這個詞右側(cè)的上下文語義信息(即“ affords an array ...”)。據(jù)此,我們就可以定義單詞Wi的向量表示:
循環(huán)結(jié)構(gòu)可以在文本的向前掃描時獲取所有的Cl,在反向掃描時獲取所有的Cr。時間復(fù)雜度為O(n)。當我們獲得了單詞Wi的表示Xi后,我們將一個線性變換與tanh激活函數(shù)一起應(yīng)用到Xi,并將結(jié)果傳遞到下一層。
y是一個潛在的語義向量,每一個語義因素都將被分析,以確定代表文本的最有用的因素。
Text Representation Learning
上面部分是單詞的表示,那么怎么來提取文本的特征表示呢?作者在這里使用了CNN,當前面所有的單詞表示y都計算出來以后,接上一個max-pooling層
這里的max函數(shù)是一個按元素max的函數(shù),也就是說,前一步單詞表達得到的y是一個n維向量,這一步y(tǒng)的第k個元素是上一步y(tǒng)的所有向量的第k個元素的最大值。池化層將不同長度的文本轉(zhuǎn)換為固定長度的向量。通過使用池化層,我們可以在整個文本中捕獲信息。還有其他類型的池層,比如平均池層(Collobert et al. 2011)。這里不使用平均池,因為這里只有幾個單詞和它們的組合對于捕獲文檔的含義非常有用。在文檔中,最大池化層試圖找到最重要的潛在語義因素。
模型的最后一部分是輸出層:
最后對y應(yīng)用softmax得到概率:
代碼實現(xiàn)
也是一樣的根據(jù)論文構(gòu)建RCNN網(wǎng)絡(luò)....
不想貼了,要不大家還是一樣直接后臺自取吧
「完整代碼可以在公眾號后臺回復(fù)"RCNN"獲取。」
本文參考資料
[1]
Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636
-?END?-
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊AI基礎(chǔ)下載(pdf更新到25集)本站QQ群1003271085,加入本站微信群請回復(fù)“加群”獲取一折本站知識星球優(yōu)惠券,請回復(fù)“知識星球”喜歡文章,點個在看
總結(jié)
以上是生活随笔為你收集整理的【NLP傻瓜式教程】手把手带你RCNN文本分类(附代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP傻瓜式教程】手把手带你HAN文本
- 下一篇: 如何打造一支高效的AI团队