1、傳統(tǒng)的自然語(yǔ)言處理模型
1)傳統(tǒng)的詞袋模型或者連續(xù)詞袋模型(CBOW)都可以通過構(gòu)建一個(gè)全連接的神經(jīng)網(wǎng)絡(luò)對(duì)句子進(jìn)行情感標(biāo)簽的分類,但是這樣存在一個(gè)問題,我們通過激活函數(shù)可以讓某些結(jié)點(diǎn)激活(例如一個(gè)句子里”not”,”hate”這樣的較強(qiáng)的特征詞),但是由于在這樣網(wǎng)絡(luò)構(gòu)建里,句子中詞語(yǔ)的順序被忽略,也許同樣兩個(gè)句子都出現(xiàn)了not和hate但是一個(gè)句子(I do not hate this movie)表示的是good的情感,另一個(gè)句子(I hate this movie and will not choose it)表示的是bad的情感。其實(shí)很重要的一點(diǎn)是在剛才上述模型中我們無(wú)法捕獲像not hate這樣由連續(xù)兩個(gè)詞所構(gòu)成的關(guān)鍵特征的詞的含義。
2)在語(yǔ)言模型里n-gram模型是可以用來(lái)解決上面的問題的,想法其實(shí)就是將連續(xù)的兩個(gè)詞作為一個(gè)整體納入到模型中,這樣確實(shí)能夠解決我們剛才提出的問題,加入bi-gram,tri-gram可以讓我們捕捉到例如“don’t love”,“not the best”。但是新的問題又來(lái)了,如果我們使用多元模型,實(shí)際訓(xùn)練時(shí)的參數(shù)是一個(gè)非常大的問題,因?yàn)榧僭O(shè)你有20000個(gè)詞,加入bi-gram實(shí)際上你就要有400000000個(gè)詞,這樣參數(shù)訓(xùn)練顯然是爆炸的。另外一點(diǎn),相似的詞語(yǔ)在這樣的模型中不能共享例如參數(shù)權(quán)重等,這樣就會(huì)導(dǎo)致相似詞無(wú)法獲得交互信息。
2、自然語(yǔ)言處理中的卷積神經(jīng)網(wǎng)絡(luò)
在圖像中卷積核通常是對(duì)圖像的一小塊區(qū)域進(jìn)行計(jì)算,而在文本中,一句話所構(gòu)成的詞向量作為輸入。每一行代表一個(gè)詞的詞向量,所以在處理文本時(shí),卷積核通常覆蓋上下幾行的詞,所以此時(shí)卷積核的寬度與輸入的寬度相同,通過這樣的方式,我們就能夠捕捉到多個(gè)連續(xù)詞之間的特征(只要通過設(shè)置卷積核的尺寸,卷積核的寬度一般和詞向量的長(zhǎng)度一致,長(zhǎng)度可以去1,2,3這類的值,當(dāng)取3時(shí)就會(huì)將3個(gè)連續(xù)詞的特征表示出來(lái)),并且能夠在同一類特征計(jì)算時(shí)中共享權(quán)重。如下圖所示
如上圖所示,不同長(zhǎng)度的卷積核,會(huì)獲得不同長(zhǎng)度的輸出值,但在之后的池化中又會(huì)得到相同的長(zhǎng)度(比如上面的深紅色的卷積核是4 × 5,對(duì)于輸入值為7 × 5的輸入值,卷積之后的輸出值就是4 × 1,最大池化之后就是1 × 1;深綠色的卷積核是3 × 5,卷積之后的輸出值是5 × 1,最大池化之后就是1 × 1),最后將所有池化后的值組合在一起,這樣有一點(diǎn)好處,無(wú)論輸入值的大小是否相同(輸入值行一般不相等,對(duì)于輸入值列是詞向量的長(zhǎng)度,一般都是相等,但是行是和文本中詞的數(shù)量相關(guān)的),要用相同數(shù)量的卷積核進(jìn)行卷積,之后再池化就會(huì)獲得相同長(zhǎng)度的向量(向量的長(zhǎng)度和卷積核的數(shù)量相等),這樣再之后就可以用全連接層了(全連接層的輸入值的向量大小必須是一致的)。
3、卷積層的最大池化問題
MaxPooling Over Time是NLP中CNN模型中最常見的一種下采樣操作。意思是對(duì)于某個(gè)Filter抽取到若干特征值,只取其中得分最大的那個(gè)值作為Pooling層保留值,其它特征值全部拋棄,值最大代表只保留這些特征中最強(qiáng)的,而拋棄其它弱的此類特征(正如上圖所示的那樣)。
CNN中采用Max Pooling操作有幾個(gè)好處:
1)這個(gè)操作可以保證特征的位置與旋轉(zhuǎn)不變性,因?yàn)椴徽撨@個(gè)強(qiáng)特征在哪個(gè)位置出現(xiàn),都會(huì)不考慮其出現(xiàn)位置而能把它提出來(lái)。對(duì)于圖像處理來(lái)說這種位置與旋轉(zhuǎn)不變性是很好的特性,但是對(duì)于NLP來(lái)說,這個(gè)特性其實(shí)并不一定是好事,因?yàn)樵诤芏郚LP的應(yīng)用場(chǎng)合,特征的出現(xiàn)位置信息是很重要的,比如主語(yǔ)出現(xiàn)位置一般在句子頭,賓語(yǔ)一般出現(xiàn)在句子尾等等,這些位置信息其實(shí)有時(shí)候?qū)τ诜诸惾蝿?wù)來(lái)說還是很重要的,但是Max Pooling 基本把這些信息拋掉了。
2)MaxPooling能減少模型參數(shù)數(shù)量,有利于減少模型過擬合問題。因?yàn)榻?jīng)過Pooling操作后,往往把2D(圖像中)或者1D(自然語(yǔ)言中)的數(shù)組轉(zhuǎn)換為單一數(shù)值,這樣對(duì)于后續(xù)的Convolution層或者全聯(lián)接隱層來(lái)說無(wú)疑單個(gè)Filter的參數(shù)或者隱層神經(jīng)元個(gè)數(shù)就減少了。
3)對(duì)于NLP任務(wù)來(lái)說,Max Pooling有個(gè)額外的好處;在此處,可以把變長(zhǎng)的輸入X整理成固定長(zhǎng)度的輸入。因?yàn)镃NN最后往往會(huì)接全聯(lián)接層,而其神經(jīng)元個(gè)數(shù)是需要事先定好的,如果輸入是不定長(zhǎng)的那么很難設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)。
但是,CNN模型采取MaxPooling Over Time也有一些值得注意的缺點(diǎn):首先就如上所述,特征的位置信息在這一步驟完全丟失。在卷積層其實(shí)是保留了特征的位置信息的,但是通過取唯一的最大值,現(xiàn)在在Pooling層只知道這個(gè)最大值是多少,但是其出現(xiàn)位置信息并沒有保留;另外一個(gè)明顯的缺點(diǎn)是:有時(shí)候有些強(qiáng)特征會(huì)出現(xiàn)多次,比如我們常見的TF.IDF公式,TF就是指某個(gè)特征出現(xiàn)的次數(shù),出現(xiàn)次數(shù)越多說明這個(gè)特征越強(qiáng),但是因?yàn)镸ax Pooling只保留一個(gè)最大值,所以即使某個(gè)特征出現(xiàn)多次,現(xiàn)在也只能看到一次,就是說同一特征的強(qiáng)度信息丟失了。這是Max Pooling Over Time典型的兩個(gè)缺點(diǎn)。
針對(duì)上面提出的兩個(gè)缺點(diǎn),通常的解決辦法是下面兩種池化方法
K-Max Pooling
K-MaxPooling的核心思想是:原先的Max Pooling Over Time從Convolution層一系列特征值中只取最強(qiáng)的那個(gè)值,K-Max Pooling可以取所有特征值中得分在Top –K的值,并保留這些特征值原始的先后順序,就是說通過多保留一些特征信息供后續(xù)階段使用。如下圖所示
很明顯,K-Max Pooling可以表達(dá)同一類特征出現(xiàn)多次的情形,即可以表達(dá)某類特征的強(qiáng)度;另外,因?yàn)檫@些Top K特征值的相對(duì)順序得以保留,所以應(yīng)該說其保留了部分位置信息,但是這種位置信息只是特征間的相對(duì)順序,而非絕對(duì)位置信息。
Chunk-Max Pooling
Chunk-MaxPooling的核心思想是:把某個(gè)Filter對(duì)應(yīng)的Convolution層的所有特征向量進(jìn)行分段,切割成若干段后,在每個(gè)分段里面各自取得一個(gè)最大特征值,比如將某個(gè)Filter的特征向量切成3個(gè)Chunk,那么就在每個(gè)Chunk里面取一個(gè)最大值,于是獲得3個(gè)特征值。如下圖所示,不同顏色代表不同段
Chunk-Max Pooling思路類似于K-Max Pooling,因?yàn)樗彩菑腃onvolution層取出了K個(gè)特征值,但是兩者的主要區(qū)別是:K-Max Pooling是一種全局取Top K特征的操作方式,而Chunk-Max Pooling則是先分段,在分段內(nèi)包含特征數(shù)據(jù)里面取最大值,所以其實(shí)是一種局部Top K的特征抽取方式。
至于這個(gè)Chunk怎么劃分,可以有不同的做法,比如可以事先設(shè)定好段落個(gè)數(shù),這是一種靜態(tài)劃分Chunk的思路;也可以根據(jù)輸入的不同動(dòng)態(tài)地劃分Chunk間的邊界位置,可以稱之為動(dòng)態(tài)Chunk-Max方法。事實(shí)上對(duì)于K-Max Pooling也有動(dòng)態(tài)的去獲取K的值的方法,表達(dá)式如下
s代表的是句子長(zhǎng)度,L代表總的卷積層的個(gè)數(shù),l代表的是當(dāng)前是在幾個(gè)卷積層,所以可以看出這里的k是隨著句子的長(zhǎng)度和網(wǎng)絡(luò)深度而改變。
Chunk-Max Pooling很明顯也是保留了多個(gè)局部Max特征值的相對(duì)順序信息,盡管并沒有保留絕對(duì)位置信息,但是因?yàn)槭窍葎澐諧hunk再分別取Max值的,所以保留了比較粗粒度的模糊的位置信息;當(dāng)然,如果多次出現(xiàn)強(qiáng)特征,則也可以捕獲特征強(qiáng)度。
如果分類所需要的關(guān)鍵特征的位置信息很重要,那么類似Chunk-Max Pooling這種能夠粗粒度保留位置信息的機(jī)制應(yīng)該能夠?qū)Ψ诸愋阅苡幸欢ǔ潭鹊奶嵘饔茫坏菍?duì)于很多分類問題,估計(jì)Max-Pooling over time就足夠了。
4、卷積神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言處理中的應(yīng)用
最適合CNNs的莫過于分類任務(wù),如語(yǔ)義分析、垃圾郵件檢測(cè)和話題分類。卷積運(yùn)算和池化會(huì)丟失局部區(qū)域某些單詞的順序信息,因此純CNN的結(jié)構(gòu)框架不太適用于PoS Tagging和Entity Extraction等順序標(biāo)簽任務(wù)。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103583 -
cnn
+關(guān)注
關(guān)注
3文章
354瀏覽量
22741 -
自然語(yǔ)言處理
+關(guān)注
關(guān)注
1文章
628瀏覽量
14155
原文標(biāo)題:自然語(yǔ)言處理之卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用
淺談圖神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言處理中的應(yīng)用簡(jiǎn)述

評(píng)論