系統學習NLP(三十一)--基於CNN句子分類

這篇文章翻譯自A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification

近年來,卷積神經網絡在句子分類任務上取得了顯著的成績(Kim, 2014;Kalchbrenner et al .,2014),然而,這些模型要求從業者指定精確的模型結構與模型參數,例如,選擇濾波器大小、正則化參數等等。目前尚不清楚對於句子分類的任務,不同的參數設定會對模型性能造成什麼樣的影響。因此,在這裏我們對單層卷積神經網絡進行情感分析,探索不同的參數對模型性能的影響;我們的目標是找出對語句分類來說的重要因素和不重要因素。由於一層的CNN結構簡單,實驗的表現也很好(Kim, 2014),我們就着重使用這個模型來驗證(而不同更復雜的模型),從我們廣泛的實證結果中得到一些了實用的建議,這些結果對於那些有興趣用CNN對句子分類的人來說很有用。我們的實驗結果所證實的一個重要結論是,研究人員應該記錄性能差異,因爲這可能是由於隨機初始化或推理產生的。

一、Introduction

在這個工作中,我們關注的是情感分類的重要任務。最近,研究表明,神經網絡(CNNs)對這項任務的表現很好(Kim, 2014; Kalchbrenner et al., 2014; Wang et al., 2015; Goldberg, 2015; Iyyer et al., 2015)。這類模型利用詞的分佈式表示,首先將包含每個句子轉換成一個向量,從而形成一個矩陣作爲輸入給CNN(圖1)。實證結果令人印象深刻。這些模型不需要太複雜就能實現強大的結果:例如,Kim(2014)提出了一種直接的單層CNN架構,它可以在多個任務中實現一致的(或類似的)結果。因此,現在有了令人信服的支持,更傾向於使用CNN而不是稀疏線性模型來進行句子分類任務。然而,CNN的一個缺點是,它們要求從業者指定要使用的精確模型架構,並設置超參數。同樣的,做出這樣的決定似乎是一種黑箱操作,特別是因爲在模型中有許多“自由參數”可以探索。這與廣泛用於文本分類的線性模型形成了鮮明的對比,例如正則化的邏輯迴歸和線性支持向量機(SVMs) (Joachims, 1998)。這樣的模型特徵通常是通過對文本的稀疏表示而產生的,並且需要相對較少的調優:通常只需要設置正則化項的係數(即:模型偏差)。使用訓練數據進行線性搜索來確定參數是設置超參數的方法。

最近關於CNN的句子分類的研究,已經提供了用於實現報告結果的設置。然而這些參數設定是通過並非是特定的調參過程。但實際上,搜索CNN的參數空間是極其昂貴的,至少有兩個原因:(1)訓練這些模型的速度相對較慢,即使使用gpu。例如,在SST-1數據集(Socher et al., 2013)中使用與(Kim, 2014)類似的配置,進行10倍交叉驗證,需要1個小時。可能的模型架構和超參數空間是巨大的。例如,我們所討論的簡單的CNN架構,至少需要指定以下內容:輸入的詞向量表示;濾波器大小;特徵圖的數量;激活功能;池化策略;dropout比例(如果有的話);和l2範數的係數(如果有的話)。

實際上,對所有這些參數進行調優是不可行的,尤其是考慮到參數估計所需的運行時間。因此,我們的目的是要根據經驗來確定那些需要花費精力進行調整的參數,以及那些在性能上無關緊要的,或者在特定的數據集上有“最佳”效果的參數。我們從前人對神經模型的經驗分析中得到啓發,該模型由Coates et al.(2011)和Breuel (Breuel, 2015)進行,研究了非監督特徵學習效果的影響因素,以及隨機梯度下降(SGD)超參數對訓練的影響。在這裏,我們考慮了模型結構的配置和單層CNNs的超參數值對句子分類任務的影響。我們報告了大量實驗的結果,探索了不同的模型結構,運行了7個句子分類數據集。

二、背景和預備

深度學習方法已在機器學習中得到很好的應用(LeCun et al., 2015;Bengio,2009)。對於圖像和語音處理任務來說,它們尤其成功(也很受歡迎)。然而,最近這些方法已經開始超越傳統的自然語言處理(NLP)任務的線性模型(Goldberg, 2015),這個領域的大部分興趣都集中在如何得到分佈式的詞語表達(Bengio et al., 2003;Mikolov et al., 2013)並共同將這種“內部”表徵嵌入到分類模型中(Col lobert and Weston, 2008;Collobert et al .,2011)或句子建模(Kalchbrenner et al., 2014;Socher et al .,2013)。

在(Kalchbrenner et al., 2014)中,作者構建了一個包含多個卷積層的CNN架構。他們的模型使用了動態k-max池。他們的模型假定潛在的、密集的、低維度的詞向量(在推理之前初始化爲隨機值)。

Kim(2014)定義了一個更簡單的架構,在相同的數據集上實現了類似的結果(Kalchbrenner et al., 2014)。這個模型也將每個單詞都表示爲一個稠密的、低維的向量(Mikolov et al., 2013),他們使用預先訓練的詞向量,並考慮兩種方法:靜態和非靜態。在前一種方法中,詞向量被視爲靜態輸入,而在後一種方法中,則動態調整爲特定任務的詞向量。

在其他地方,Johnson和Zhang(2014)引入了相似的模型,但改用了高維的one-hot向量表示。他們考慮了這一方法的兩種變體,seq-CNN和bow-CNN。前者完全保留了順序結構(以在非常高維的空間輸入空間中操作的代價),而後者保留了一些序列,但在小區域內丟失了順序。他們的重點是更長的文本的分類,而不是句子(當然,這個模型也可以用於句子的分類)。Kim的體系結構相對簡單——這與Johnson和Zhang(2014)所提出的基本相同,模塊化的詞向量——再加上在多個數據集上觀察到的強大的經驗性能,使得這是一個很有吸引力的句子分類方法。然而,在實踐中,我們需要做一些模型架構決策和設置各種超參數。目前,很少有經驗數據可以指導此類決定;解決這一差距是我們的目標。

2.1 CNN

我們首先描述我們在本文中使用的相對簡單的CNN架構。我們從一個標記化的句子開始,然後我們將它轉換成一個句子矩陣,其中的行根據每個詞得到的單詞向量。例如,這些可能是谷歌word2vec (Mikolov et al., 2013)或GloVe(Pennington et al., 2014)模型的輸出。我們用d表示向量的維數。如果給定句子的長度(即詞彙數)是s,然後句子的維數矩陣s×d.接下來,我們可以有效地將句子矩陣作爲一個“圖像”,通過線性濾波器對它進行卷積操作。在NLP應用中,數據具有固有的順序結構。直觀上,因爲行表示離散的符號(即單詞),所以使用寬度等於向量的維數的濾波器是合理的。(比如d)。然後我們可以考慮只改變濾波器的“高度”,它指的是共同考慮的相鄰行數(詞向量)。從這一點開始,我們將把濾波器的高度稱爲濾波器的區域大小。

假設有一個濾波器的參數化權向量w∈Rh×d和區域大小h;w包含要估計的h·d個參數。我們用A∈Rs×d表示句子矩陣,並使用A[i,j]代表從第i行到第j行的子矩陣。卷積算子的輸出序列是通過對A的子矩陣進行重複的卷積操作而得到的:

oi=w·A[i:i+h−1] (1)

其中,i=1….s−h+1,..表示子矩陣和濾波器的點積(先對對應元素做乘法,然後求和),輸出序列的長度爲s−h+1。再加上一個偏置項b以及激活函數ff得到對應的特徵圖c∈Rs−h+1:

ci=f(oi+b)

注意,我們可以使用多個濾波器來實現相同的區域大小,目標是每個濾波器從相同的區域學習互補的特性。也可以指定多個不同區域大小的過濾器(例如:“高度”)。

每個濾波器生成的特徵圖的維數,正好是句子長度和濾波區域大小的函數。然後,將一個池化函數應用到每個feature map中,以減少需要估計的參數的尺寸和數量。通常,池化操作爲1-max池函數(Boureau et al.,2010b),它從每個feature map生成一個一維特性。或者,可以將池化操作修改爲在特徵映射中在相同大小的區域內對每個區域對應的顯著特徵進行編碼。每個濾波器映射生成的輸出可以被連接到一個“頂部”特徵向量,在1-max池的情況下它的大小將獨立於單個的句子長度。然後通過一個softmax函數來生成這個表示,以生成最終的分類。在這個softmax層,可以選擇應用“dropout策略”(Hinton et al., 2012)作爲正則化方法。這需要在向量中隨機設置一些值爲0。我們也可以選擇施加l2範數約束,當它超過這個值時,將向量的l2範數線性擴展到一個指定的閾值。在訓練過程中,最小化的目標是分類的交叉熵損失,估計的參數包括濾波器的權向量(s)、激活函數中的偏置項,以及softmax函數的權向量。請注意,我們可以選擇固定詞向量(我們將其稱爲“static”)或作爲模型的附加參數,並在模型訓練過程中調整(我們將把這種方法稱爲“non-static”)。我們探索了這兩種變體。圖1提供了一個簡單的示意圖,以說明剛剛描述的模型架構。

 

三、數據集

我們使用同樣的7個數據集(Kim, 2014),簡要總結如下:

  • MR:句子極性數據集(Pang and Lee, 2005)。
  • SST-1: Stanford Sentiment Treebank (Socher et al., 2013)。請注意,爲了使輸入表示在任務中一致,我們只對句子進行訓練和測試。與之形成對比的是(Kim, 2014),在這篇文章中,作者對短語和句子進行了訓練。
  • SST-2:從SST-1派生而來,但只對兩個類進行解析。我們只對句子進行訓練和測試,不包括短語。
  • Subj:主觀性數據集(Pang and Lee, 2005)。
  • TREC:問題分類數據集(Li and Roth, 2002)。
  • CR:客戶審覈數據集(Hu and Liu, 2004)。
  • MPQA:觀點極性數據集(Wiebe et al., 2005)

在表1中,我們報告了所有七個數據集的平均長度和標記化語句的最大長度。有關這些數據集的更多細節,請參考(Kim, 2014)。

四、baseline模型的性能

爲了給CNN的結果提供一個參考點,我們首先報告了使用稀疏正則化SVM進行句子分類的性能。我們使用unigram和bigram特性,只對所有數據集保持最頻繁的3萬個特徵。我們還想通過將信息直接嵌入到這些模型中,來探索實現的相對收益。爲此,我們用平均的單詞向量(從谷歌word2vec3或GloVe4)來計算這個表達式,並計算出包含句子的單詞,類似於(Lai et al., 2015)中的方法。然後,我們使用RBF-kernel SVM作爲在這個稠密特性空間中操作的分類器。我們還嘗試將unigram, bi-gram和word2vec作爲句子的特徵,使用線性支持向量機作爲分類器。我們通過嵌套的交叉摺疊驗證來優化正則化超參數,從而提高了精度。對所有的數據集都進行了十折交叉驗證,結果如表2所示。爲了保持一致性,我們對之前工作中描述的數據使用相同的預處理步驟(Kim, 2014)。從這些結果中可以立即發現的一件事是,將word2vec輸出引入到特徵向量中可以實現性能提升。

這裏bow表示n-gram特徵,wv表示word2vec特徵。 

五、CNN情感分析

我們現在報告的結果來自於我們的主要分析工作,目的是使用CNNs對句子情感分析,作爲一個具體的架構和超參數設置的功能。爲此,我們以baseline配置(如下所述)作爲起點,該配置在之前的工作(Kim, 2014)中表現得很好。然後,我們依次探討了修改該baseline配置組件的效果,並保持其他設置不變。

我們用“靜態”和“非靜態”兩種詞向量來進行實驗。在前一種情況下,在訓練過程中,單詞向量不會被更新,而在後一種情況下,向量會不斷調整。非靜態配置優於靜態配置。因此,本文只報告非靜態結果,儘管我們提供了附錄中靜態配置的結果。

5.1 Baseline 參數設置

我們現在考慮CNN的baseline模型配置的性能。具體來說,我們從之前工作中使用的模型架構和超參數開始(Kim, 2014)。爲了將由於各種體系結構決策和超參數設置導致的性能差異置於環境中,必須嚴格評估參數估計過程中的差異。不幸的是,儘管有一個高度隨機的推理過程,但大多數之前的工作並沒有說明這樣的差異。該方差可歸因於隨機梯度下降(SGD)、隨機dropout和隨機權值參數初始化的估計。我們表明,通過10倍交叉驗證計算的平均性能在重複運行時表現出較高的方差。

我們首先使用表2中描述的原始參數設置,併爲每個數據集複製實驗100次,其中每一個複製都是一個10倍的CV,並且複製的摺疊是固定的。表2中的“ReLU”指的是整流線性單元(Maas et al., 2013),這是CNN常用的激活函數。我們記錄每個重複試驗的10折交叉驗證的平均精度,並報告超過100次重複試驗的平均值、最小值和最大值。我們對靜態和非靜態方法都這樣做。這提供了一種我們可以觀察到的不改變模型的方差的感覺。爲了清晰顯示,我們排除了SST-1,因爲在這個數據集上,精度明顯降低(但是,結果可以在表中找到),由於我們對某些數據集進行了不同的分割和處理,正如前面所描述的那樣,結果也與原來的不同。因爲在這個工作中,我們只關心CNN的每個部分對性能的敏感性和影響,我們不太關心絕對的準確性,也不會比較我們在之前的作品中得到的結果。

在確定了CNNs的基準性能之後,我們現在考慮不同架構決策和超參數設置的影響。爲此,我們保留所有其他的設置常量(如表3所示),並且只改變感興趣的組件。對於我們所考慮的每一個配置,我們重複實驗10次,每一次實驗都是10折交叉驗證。就像原始參數設置的100次重複試驗一樣,我們也報告了10次10折交叉驗證試驗的平均均值、最小均值和最大值。對於所有的實驗,我們對數據使用與(Kim, 2014)相同的預處理步驟。類似地,我們使用ADADELTA更新規則 (Zeiler, 2012),並將minibatch大小設置爲50。

5.2 輸入向量的影響

句子分類模型的一個很好的特性是,它以分佈式的詞語作爲輸入的形式開始,這是一種靈活的結構,它可以在不同的預先訓練的詞向量中交換。因此,我們首先探討了CNNs對所使用的輸入表示的句子分類的敏感性。特別地,我們用Glove表示替換谷歌word2vec。谷歌word2vec使用了一個局部上下文窗口模型,從谷歌新聞(Mikolov et al., 2013)中訓練了1000億單詞,而GloVe則提出了一個模型,它利用了一個非常大的語料庫(Pennington et al., 2014),利用全局單詞的聯合作用來統計數據。在本文中,我們使用了一個Glove版本,它是從一個包含8400億個web數據標記的語料庫中訓練出來的,並且還有300個維度。我們保留所有其他設置與原始配置相同。我們的報告結果見表5。(請注意,我們還報告了SVM的結果,這些結果在表2中增加了平均Glove向量。)

作爲獲取對所有數據集最佳性能的潛在簡單方法,我們還考慮了一種方法,該方法利用了這兩種預先訓練出來的表示方法。具體地說,我們將word2vec和Glove向量連接到每個單詞,生成了600維的單詞向量,我們將它們作爲CNN的輸入。預訓練的向量可能並不總是適用於特定的單詞(在word2vec或Glove中,或者兩者都有);在這種情況下,我們隨機初始化相應的子向量,如上所述。結果見表6。這裏我們報告的結果只針對非靜態變量,考慮到它的一般優勢。

從這些結果中可以看出,使用Glove和word2vec時的相對性能取決於數據集,不幸的是,僅僅將這些表示連接起來並不一定有幫助。實際上,當面對一個新的數據集時,很可能需要使用訓練數據來嘗試不同的預先訓練的單詞向量。我們也嘗試用長、稀疏的one-hot向量作爲輸入詞表示(Johnson and Zhang, 2014)。在這個策略中,每個單詞被編碼成一個熱矢量,它是一個稀疏的高維向量。在這種情況下,句子矩陣的寬度等於詞彙量。在訓練過程中,一個one-hot向量是固定的,因爲這個方法就像它在一個預構建的字典中搜索每個單詞一樣。

將結果與word2vec和Glove的結果進行比較,我們可以看到在相同的CNN基本配置下,one-hot的性能比word2vec或Glove差。

我們不排除有特定配置的可能性,one-hot的CNN可能會比其他的輸入表示的句子分類地更好。但我們這裏的證據是,one-hot表示的CNN可能不適合句子分類。這可能是由於稀疏性;這些句子可能過於簡短,不足以提供足夠的信息來進行這種高維編碼(而對於長文檔來說,這可能不是一個問題)。

5.3 濾波器區域大小

我們首先將區域大小設爲1來看看濾波器區域大小的效果,我們將這個區域的feature map的數量設置爲100(與原來的配置一樣)。我們考慮區域大小爲1、3、5、7、10、15、20、25和30,並記錄每個區域大小的10倍交叉驗證的平均值、最小值和最大精度,並將結果顯示在表8中。這裏評估的是單濾波器。


圖3顯示了每個區域大小和區域大小爲3時的10次重複實驗的平均精度之間的差異。因爲我們只對精確的趨勢感興趣,因爲我們改變了CNN的區域大小或其他組件(而不是每個任務的絕對性能),我們只顯示了從任意baseline的精度變化(這裏,一個區域大小爲3)。我們遵循本公約的所有數據,以方便解釋。

從圖中可以看出,每個數據集都有自己的最佳濾波區域大小範圍。實際上,這表明在指定範圍內執行粗網格搜索;這裏的數據表明,句子分類的合理範圍可能是2到25。然而,對於包含較長句子的數據集,例如CR(最大語句長度爲105),最優區域的大小可能更大。這也可能是由於在CR中,在更大的窗口下,更容易預測正面/負面的客戶評論。

我們還探討了合併多個不同的過濾器區域大小的效果,同時保持每個區域大小的feature map的數量爲100。在這裏,我們發現將幾個過濾器與區域大小接近最佳的單一區域大小可以提高性能,但是在最優範圍之外添加區域大小可能會損害性能。例如,從圖3可以看出,MR數據集的最佳單個區域大小是7。因此,我們將幾個不同的過濾器區域大小結合到這個最優範圍內,並將其與在此範圍之外使用區域大小的方法進行比較。從表9可以看出,使用(5,6,7)和(7,8,9)和(6,7,8,9)——靠近最佳單一區域大小的集合——產生最好的結果。當與(3,4,5)baseline設置比較時,差異尤其明顯。注意,即使只使用單個良好的過濾器區域大小(這裏爲7),結果也比組合不同的大小(3、4、5)更好。最佳的組合是簡單地使用許多特徵映射(這裏爲400),以及所有區域大小等於7,即最好的區域大小。

但是,我們注意到在某些情況下(例如,對於TREC數據集),使用多個不同的,但接近最優的區域大小表現最好。我們在表6的TREC數據集上使用幾個區域大小提供了另一個示例性經驗結果。從單個區域大小的性能來看,我們發現TREC的最佳單過濾區域大小是3和5,因此我們研究這些值附近的區域大小,並將其與使用多個區域大小的值進行比較。

這裏我們看到(3,3,3)和(3,3,3)比(2,3,4)和(3,4,5)更差。然而,結果仍然表明,在最優的最佳區域尺寸附近的區域大小的組合比在最優的單一區域大小下使用多個區域的大小要好得多。此外,我們再次看到一個良好的區域大小(3)超過了幾個次優區域大小(7、8、9)和(14、15、16)。

根據這些觀察,我們認爲這建議先進行粗線通過一個過濾器搜索區域大小找到最好的考慮數據集的大小,然後探索附近的幾個區域大小的組合這最好的尺寸,包括結合不同的區域大小和副本的最優尺寸。

5.4 特徵圖數量

我們再次保持其他配置不變,因此有3個過濾器區域大小:3、4和5。我們只更改每個相對於100的baseline的特徵映射的數量。我們考慮大小10,50,100,200,400,600,1000,2000。報告結果如圖4所示。

每個過濾器區域大小的“最佳”feature map數量取決於數據集。然而,增加超過600個feature map,充其量只能帶來邊際收益,而且往往會損害業績(可能是由於過擬合)。另一個重要的事實是,當feature map的數量增加時,需要更長的時間來訓練模型。實際上,這裏的證據表明,搜索範圍可能在100到600之間。注意,當一個人面臨一個新的類似的句子分類問題時,這個範圍只是提供一個可能的標準。當然,有可能在某些情況下,超過600個特徵圖是有益的,但這裏的證據表明,花費精力去探索這一點可能是不值得的。

5.5 激活函數

我們考慮了卷積層的七個不同的激活函數,包括:ReLU(根據baseline配置),雙曲正切(tanh), Sigmoid函數(Maas et al., 2013), SoftPlus函數(Dugas et al., 2001), Cube function (Chen and Manning, 2014)和tanh Cube function (Pei et al., 2015)。我們使用“Iden”來表示原本函數,這意味着不使用任何激活函數。表15展示了使用不同的激活函數在非靜態CNN中實現的結果。在9個數據集中,最好的激活函數是Iden、ReLU和tanh。在只有一個數據集(MPQA)中,SoftPlus函數的性能超過了其他函數。Sigmoid、Cube和tanh數據集始終比其他激活函數執行得更糟糕。因此,我們在這裏不報告結果。tanh函數的性能可能是由於它的零中心特性(與Sigmoid相比)。ReLU與Sigmoid相比具有非飽和形式的優點,並且已經觀察到可以加速SGD的收斂(Krizhevsky等,2012)。一個有趣的結果是,不應用任何激活函數(Iden)有時會有所幫助。這表明在一些數據集上,一個線性變換足以捕獲單詞嵌入和輸出標籤之間的相關性。然而,如果存在多個隱藏層,則Iden可能比非線性激活函數更不合適。實際上,對於單層CNNs中激活函數的選擇,我們的研究結果表明對ReLU和tanh進行了實驗,也可能是Iden。

5.6 池化


接下來我們研究了池化策略和池化區域大小的影響。我們將過濾器區域大小和特徵映射的數量固定在baseline配置中,從而只改變池策略或池區域大小。在baseline參數設定中,我們對所有的feature map都使用了最大池化。得到長度爲1的特徵向量。但是,也可以在較小的相同大小的局部區域上執行池化操作,而不是在整個feature map (Boureau et al., 2011)上執行。feature map上的每個小區域都經過池化操作生成單個數字,並且這些數字可以連接成一個feature map對應的特徵向量。下面的步驟與1-max池相同:我們將所有的特徵向量連接在一起,形成分類層的單個特徵向量。我們試驗了大小爲3、10、20和30的局部區域,並發現1-max池比所有局部最大池配置的性能好。所有的數據集都呈現了這個結果。我們還考慮了類似於k-max池化的策略(Kalchbrenner et al., 2014),其中從整個feature map中提取了最大的k個值,並保留了這些值的相對順序。我們對k進行了探索,發現1-max池的性能最好,始終優於k-max池。

接下來,我們考慮取區域的平均值,而不是區域的最大值(Boureau等人,2010a)。我們保留了其餘的參數。我們嘗試了區域大小爲 的局部平均池化。我們發現,至少在CR和TREC數據集上,平均池化比最大池化的性能差(很多)。由於在平均池下觀察到的性能和運行時間非常慢,所以我們沒有對所有數據集進行完整的實驗。我們對池化策略的分析表明,1-max池化對句子分類任務的效果總是優於其他策略。這可能是因爲預測上下文的位置無關緊要,而句子中的某些n-grams可以比共同考慮的整個句子更具預測性。

5.7 正則化

CNNs的兩種常見正則化策略是dropout和l2範數。我們在這裏探討這些效應。從輸入到倒數第一層應用Dropout。我們試驗了從0.0到0.9的dropout比率,並根據baseline配置將l2範數約束固定到3。非靜態CNN的結果如圖5所示,0.5指定爲baseline。我們也展示了當我們去掉了dropout和l2範數約束時(即不執行正則化時)的準確性,表示爲None。另外,我們還考慮了l2正則對權重向量的影響,這些權重向量參數化了softmax函數。回想一下,當一個權重向量的l2範數超過這個閾值時,它是線性伸縮的,因此較小的c意味着更強的正則化。像dropout,這個策略只適用於倒數第一層。我們在圖8中顯示了不同c對非靜態CNN的相對影響,我們將dropout率固定在0.5;3是這裏的baseline模型的正則化參數,(再一次地,任意地)。

從圖7和圖8可以看出,根據數據集,非零的dropout比率可以幫助(儘管非常少)從0.1到0.5。但是,施加l2正則約束通常不會很大地提高性能(除了Opi),甚至對至少一個數據集(CR)的性能產生負面影響。我們還研究了在增加feature map的數量時dropout比率效應。我們將每個過濾器大小的feature map的數量從100增加到500,並將max l2正則約束設置爲3。dropout比率的影響如圖7所示。我們看到,drouout比率的影響幾乎和特徵圖的數量是100的時候一樣,而且沒有多大幫助。但是我們觀察到,對於數據集SST-1來說,當它是0.7時,dropout比率實際上是有幫助的。從圖4可以看出,當feature map的數量大於100時,可能由於過擬合而影響了性能,所以在這個情況下dropout將會減輕這種影響。

我們也嘗試了只在卷積層上應用“dropout”,但仍然將分類層的最大標準約束設置爲3,使所有其他設置完全相同。這意味着我們在訓練時隨機將句子矩陣的元素設置爲0,然後在測試時將p與句子矩陣相乘。從圖8中可以看出,dropout比率對卷積層的影響如圖8所示。我們再次看到,在卷積層上運用dropout幫助很小,而且很大的dropout率極大地傷害了性能。

總之,與現有的一些文獻(Srivastava et al., 2014)相反,我們發現dropout對CNN的表現沒有什麼好處。我們將這一現象歸因於一層CNN的參數數量比多層深度學習模型要小。另一種可能的解釋是,使用詞嵌入有助於防止過擬合(與基於單詞的編碼相比)。然而,我們並不是主張完全放棄正則化。實際上,我們建議將dropout率設置爲一個小的值(0 -0.5),並使用一個相對較大的max正則約束,同時增加feature maps的數量,以查看更多的特性是否會有所幫助。當進一步增加feature map的數量似乎會降低性能時,增加dropout比率可能是值得的。

六、結論

我們對CNNs的句子分類進行了廣泛的實驗分析。我們總結了我們的主要發現,並從這些實際的指導中總結出了研究人員和實踐者在現實場景中使用和部署cnn的方法。

6.1 主要實證結果的總結

  • 以前的工作往往只報告模型實現的數據集的平均性能。但是,這種忽略方差完全是由於隨機推理過程所使用的。這可以是相當大的:保持所有的常數(包括摺疊),因此方差是完全由隨機推理過程決定的,我們發現,平均精度(通過10倍交叉驗證計算)的範圍可以達到1.5個點。在irony數據集上,AUC的範圍甚至更大,達到3.4分(見表3)。在將來的工作中應該進行更多的複製,並且應該報告範圍/方差,以防止可能的關於相對模型性能的錯誤結論。我們發現,即使將它們調到手邊的任務,輸入詞向量表示(例如,在word2vec和Glove之間)的選擇對性能有影響,但是不同的表示對不同的任務有更好的表現。至少對於句子分類來說,兩者似乎都比直接使用one-hot向量要好。

  • 然而,我們注意到:(1)如果有一個足夠大量的訓練數據,結果可能就不是這樣,以及(2)與這裏的簡單版本相比,最近由約翰遜和張提出的semi-supervised CNN模型(Johnson and Zhang, 2015)可能提高性能(Johnson and Zhang, 2014)。

  • 過濾區域的大小對性能有很大的影響,應該進行調整。

  • feature map的數量也可以在性能上扮演重要的角色,增加feature map的數量會增加模型的訓練時間。

  • 1-max池一致優於其他池化策略。

  • 正則化對模型的性能影響較小。

6.2對從業人員的具體建議

根據我們的經驗結果,我們提供了關於CNN架構和超參數的指南,爲那些希望在句子分類任務中部署cnnn的從業者提供參考。

  • 考慮從表2中描述的基本配置開始,使用非靜態word2vec或Golve,而不是one-hot矢量。但是,如果訓練數據集的大小是非常大的,那麼使用one-hot向量來探索可能是值得的。或者,如果一個人能夠訪問大量未標記的域內數據(Johnson和Zhang, 2015),也可能是一個選項。

  • 通過對單個過濾器區域大小的線性搜索來找到“最佳”的單一區域大小。一個合理的範圍可能1至10。然而,對於像CR這樣的長句的數據集,可能值得探索更大的過濾器區域大小。一旦確定了這一“最佳”區域大小,就可能值得探索將多個過濾器組合在一起,使用區域大小接近這個最佳大小的區域,因爲根據經驗,多個“好”區域大小總是優於僅使用單一最佳區域大小。

  • 將每個過濾器區域的特徵映射的數量從100個更改爲600個,並且在這個過程中,使用一個小的dropout比率(0 -0.5)和一個大的max正則約束。注意,增加feature map的數量會增加運行時間,因此需要權衡考慮。還要注意發現的最佳值是否在距離邊界附近(Bengio, 2012)。如果最好的值接近600,那麼嘗試更大的值可能是值得的。

  • 如果可能,考慮不同的激活函數:ReLU和tanh是最好的整體候選。對於我們的一層CNN來說,完全沒有激活函數是值得的。

  • 使用1-max池;似乎沒有必要花費資源來評估替代戰略。

  • 關於正則化:當增加feature map的數量開始減少性能時,試着施加更強的正則化,例如,dropout比率大於0.5。

  • 在評估模型的性能(或其特定配置)時,必須考慮方差。因此,應該重複交叉摺疊驗證過程,並考慮方差和範圍。

當然,以上建議僅適用於包含有相似屬性的句子的數據集。也許有一些與我們的發現背道而馳的例子。儘管如此,我們相信這些建議可能會爲研究人員或實踐者提供一個合理的起點,他們希望將簡單的一層CNN應用到現實世界的句子分類任務中。我們強調,我們選擇了這個簡單的單層CNN,根據觀察到的強大的經驗性能,它將它定位爲一個新的baseline模型,類似於詞袋SVM和邏輯迴歸。因此,在實施更復雜的模型之前,應該考慮這種方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章