【NLP實戰】手把手帶你RCNN文本分類

  • 2020 年 3 月 13 日
  • 筆記

傳統文本分類

之前介紹的都是屬於深度神經網絡框架的,那麼在Deep Learning出現或者風靡之前,文本分類是怎麼做的呢?

傳統的文本分類工作主要分為三個過程:特徵工程、特徵選擇和不同分類機器學習算法。

1.1 特徵工程

對於文本數據的特徵工程來說,最廣泛使用的功能是bag-of-words、tf-idf等。此外,還可以設計一些更複雜的特徵,比如詞性標籤、名詞短語以及tree kernels等。

1.2 特徵選擇

特徵選擇旨在刪除噪聲特徵,提高分類性能。最常見的特徵選擇方法比如去停詞(例如,「The」)、信息增益、互信息或L1正則化等以選擇有用的特性。

1.3 機器學習算法

機器學習算法常用分類器,如邏輯回歸(LR)、樸素貝葉斯(NB)和支持向量機(SVM)。然而,這些方法都存在數據稀疏問題。

RCNN論文概述

論文來自Recurrent Convolutional Neural Networks for Text Classification[1]

作者在論文中首先對比了傳統文本分類算法與深度學習算法。

傳統的特徵表示方法往往忽略文本中的上下文信息或詞序,對於捕捉詞的語義仍然不滿意。例如,在句子,A sunset stroll along the South Bank affords an array of stunning vantage points中,當我們分析「Bank」(unigram)這個詞時,我們可能不知道它是指金融機構還是河旁。此外,「South Bank」(bigram),尤其是考慮到兩個大寫字母,可能會誤導那些對倫敦不太了解的人,把它當作金融機構。當我們獲得更大的上下文「stroll along the South Bank」(5-gram),我們就能很容易地辨別出它的意思。雖然高階n-grams和更複雜的特性(如樹內核)被設計用於捕獲更多的上下文信息和單詞序列,但它們仍然存在數據稀疏問題,這嚴重影響了分類的準確性。近年來,經過預先訓練的word embedding和深層神經網絡的快速發展,給各種NLP任務帶來了新的啟發。word embedding是單詞的一種分佈式表示,極大地緩解了數據稀疏問題(Bengio et al. 2003)。預先訓練的詞嵌入可以捕捉有意義的句法和語義規律性。

接着對目前應用較為廣泛的深度學習框架算法進行了綜述:

  • Socher et al 提出遞歸神經網絡(RecursiveNN),在構建句子表示方面已被證明是有效的。然而,遞歸通過樹結構捕獲了一個句子的語義。它的性能很大程度上取決於文本樹結構的性能。此外,構造這樣一種文本樹的時間複雜度至少為,其中n為文本的長度。當模型遇到長句或文檔時,這將是非常耗時的。此外,兩個句子之間的關係很難用樹結構來表示。因此,遞歸不適合對長句或文檔建模。
  • 另一種模型,循環神經網絡(RNN),模型時間複雜度為。該模型通過逐字分析一個文本單詞,並將所有先前文本的語義存儲在一個固定大小的隱藏層中。RNN的優點是能夠更好地捕捉上下文信息。這可能有利於捕獲長文本的語義。然而,RNN是一個有偏倚的模型,在這個模型中,後面的單詞比先前的單詞更具優勢。因此,當它被用於捕獲整個文檔的語義時,它可能會降低效率,因為關鍵組件可能出現在文檔中的任何地方,而不是最後。為了解決偏置問題,我們引入了卷積神經網絡(CNN),將一個不帶偏見的模型引入到NLP任務中,它可以很好地確定文本中帶有最大池化層的識別性短語。因此,與遞歸或循環神經網絡相比,CNN可以更好地捕捉文本的語義。CNN的時間複雜度也是O(n)。然而,以前對CNNs的研究傾向於使用簡單的卷積核,如固定窗。使用這樣的內核時,很難確定窗口大小:小窗口大小可能導致一些關鍵信息的丟失,而大的窗口會導致巨大的參數空間(這可能很難訓練)。因此,它提出了一個問題:我們能否比傳統的基於窗口的神經網絡學習更多的上下文信息,更準確地表示文本的語義。

為了解決上述模型的局限性,作者們提出了一個循環卷積神經網絡(RCNN),並將其應用於文本分類的任務。首先,我們應用一個雙向的循環結構,與傳統的基於窗口的神經網絡相比,它可以大大減少噪聲,從而最大程度地捕捉上下文信息。此外,該模型在學習文本表示時可以保留更大範圍的詞序。其次,使用了一個可以自動判斷哪些特性在文本分類中扮演關鍵角色的池化層(max-pooling),以捕獲文本中的關鍵組件。模型結合了RNN的結構和最大池化層,利用了循環神經模型和卷積神經模型的優點。此外,模型的時間複雜度為O(n),它與文本長度的長度是線性相關的。

RCNN模型框架

如下圖是作者提出的模型框架,輸入是一個文本D,它可以看成是由一系列單詞(W1,W2,,,Wn)組成的。輸出是一個概率分佈,最大的那個位置對應文章屬於的類別K。

接下來我們來仔細分析一下框架訓練的過程。

Word Representation Learning

為了更準確地表達單詞的意思,作者使用了單詞本身和其上下文來表示這個詞。在論文中,使用雙向循環結構來實現。使用來定義詞左邊的文本,來定義詞右邊文本。這裡和是長度為|c|的稠密向量。計算公式如下:

以「A sunset stroll along the South Bank affords an array of stunning vantage points」 這句話為例分析,結合上圖,Cl(W7)表示了「Bank」這個詞左側的上下文語義信息(即「stroll along the South 」),同理,Cr(W7)表示了「Bank」這個詞右側的上下文語義信息(即「 affords an array …」)。據此,我們就可以定義單詞Wi的向量表示:

循環結構可以在文本的向前掃描時獲取所有的Cl,在反向掃描時獲取所有的Cr。時間複雜度為O(n)。當我們獲得了單詞Wi的表示Xi後,我們將一個線性變換與tanh激活函數一起應用到Xi,並將結果傳遞到下一層。

y是一個潛在的語義向量,每一個語義因素都將被分析,以確定代表文本的最有用的因素。

Text Representation Learning

上面部分是單詞的表示,那麼怎麼來提取文本的特徵表示呢?作者在這裡使用了CNN,當前面所有的單詞表示y都計算出來以後,接上一個max-pooling層

這裡的max函數是一個按元素max的函數,也就是說,前一步單詞表達得到的y是一個n維向量,這一步y的第k個元素是上一步y的所有向量的第k個元素的最大值。池化層將不同長度的文本轉換為固定長度的向量。通過使用池化層,我們可以在整個文本中捕獲信息。還有其他類型的池層,比如平均池層(Collobert et al. 2011)。這裡不使用平均池,因為這裡只有幾個單詞和它們的組合對於捕獲文檔的含義非常有用。在文檔中,最大池化層試圖找到最重要的潛在語義因素。

模型的最後一部分是輸出層:

最後對y應用softmax得到概率:

本文參考資料

[1]

Recurrent Convolutional Neural Networks for Text Classification: https://dl.acm.org/doi/10.5555/2886521.2886636

END