1. 程式人生 > >深度學習之文字分類模型-前饋神經網路(Feed-Forward Neural Networks)

深度學習之文字分類模型-前饋神經網路(Feed-Forward Neural Networks)

目錄
  • DAN(Deep Average Network)
  • Fasttext
    • fasttext文字分類
    • fasttext的n-gram模型
  • Doc2vec

DAN(Deep Average Network)

MLP(Multi-Layer Perceptrons)叫做多層感知機,即由多層網路簡單堆疊而成,進而我們可以在輸出層加入softmax,或者將輸入層作為特徵進行提取後,輸入到SVM,邏輯迴歸,樸素貝葉斯等傳統分類器進行分類預測。其中最具代表的是DAN,其基本結構如下圖所示:

在輸入層,我們對每一篇文章中的詞彙向量進行相加求平均。在中間隱藏層,我們建立了多層的神經網路單元,進行深層次的特徵提取,對每一層,我們都有相應的啟用函式,其中啟用函式可以按照我們的需求自己進行選擇。在輸出層,我們加入了softmax層,對輸出層的個數即為分類標籤的個數,我們要做的事情就是最大化當前文章標籤所對應的神經元節點,進而構造損失函式,進行引數更新。

在預測階段,我們將文章的單詞進行輸入,最終根據輸出層softmax最大的節點,得到我們的預測標籤。對於多分類,我們可以自己限定閾值和多分類的個數,取最大的topK個標籤。

模型使用中的trick:在作者的論文中[1],加了了dropout,將輸入層隨機的進行丟棄,增加了模型的健壯性。

那這種模型有什麼優缺點嗎?我們來總結一下:

優點:

  • 模型簡單,訓練速度快。
  • 模型通過增加隱藏層節點的個數,可以增加模型的複雜度,進而提升模型的準確率。

缺點:

  • 由於輸入層使用的加和平均作為,並沒有考慮單詞之間的順序資訊。

Fasttext

fasttext是facebook在2016年推出的一款獲取詞向量和快速分類的一個工具[2],其基本思想是建立在Google提出的Word2vector的基礎上,並對其進行些許的改進,打造成了一種既可以獲取詞向量又可以進行文字分類的工具,其中,fasttext根據Piotr Bojanowski[2]等人的文章,加入了n-gram模型,增加了單詞的順序資訊,從而增加了準確率。論文實驗結果表明,在情感分析和tag標註上都取得了不錯的效果。

fasttext文字分類

如果想了解fasttext的基本原理,首先要對word2vec有一定的瞭解,可以參考詞向量模型word2vec詳解。

fasttext用於文字分類,其基本模型和word2vec類似,無非是將葉子節點改成類別標籤。我們設文章集合為\(D\),\(d_{i} \in D\),表示第\(i\)篇文章,\(w_{ij}\)表示第\(i\)篇文章中的第\(j\)個單詞,我們假設詞彙集合為\(V\),類別標籤為\(label_i\),表示第\(i\)篇文章的標籤是\(label_i\),對於第\(i\)篇文章的第\(j\)個單詞\(w_{ij}\)來說,我們抽取其上下文的單詞\(context(w_{ij})\),我們可以構建模型

輸入層到隱藏層,對於CBOW模型來說,輸入的就是當前詞的上下文單詞,我們這裡可以設定一個視窗的閾值,比如是1,則我們輸入的當前單詞的前後兩個單詞,從輸入層到隱藏層,我們會對這兩個單詞的詞向量進行相加,得到vec(context(wij)),得到隱藏層的節點。從隱藏層到葉子結點,我們可以設定一個全連線層, 在輸出層,我們可以進行一個softmax,最終最大化當前文章的label,進而構造損失函式,進行求解。

在隱藏層到輸出層中,我們可以用哈夫曼樹來代替全連線結構,進而加快訓練的速度。個人認為,其實對於量級比較少的label,構造哈夫曼樹的作用不大,但是對於類別標籤較多的樣本來說,構造哈夫曼樹作用還是比較大的

以上便是fasttext用於文字分類的整體流程,筆者實驗了在大資料集上的文字分類速度和效果,整體上還是不錯的,可以作為文字分類的一個baseline。

fasttext的n-gram模型

由於輸入的單詞僅僅做了一個簡單的加和,並沒有考慮單詞之間的順序特徵,舉個例子,"我 愛 你"和"你 愛 我"經過分詞之後,可以看到如果根據詞袋模型,兩者的輸入是完全相同的,但是如果加入n-gram資訊的話,就變成了"我 愛 你 我愛 愛你"和"你 愛 我 你愛 愛我"這樣輸入的特徵就不一樣了,區分了兩者。
所以根據[3]的思想,我們可以在分類或者是向量學習的階段,將n-gram特徵作為輸入的資訊,增加更多的特徵,使得學習的更充分。

那麼綜上,我們來總結一下fasttext的優缺點

優點:

  • fasttext在構建使用的哈夫曼樹,極大增加了訓練和預測的速度。
  • 加入了n-gram模型,考慮了單詞之間的順序問題,有效的提高了準確率。

缺點:

  • 雖然fasttext加入了n-gram模型以增加單詞之間的順序資訊,但是總體來說其受限於context的長度,對於大於context視窗大小的單詞,無法捕捉其順序資訊。

Doc2vec

Doc2vec是一種獲取文章向量的一種方法,為什麼要放在文字分類的裡面呢,是因為當我們獲取文章向量之後,我們就可以將文章向量輸入到SVM,邏輯迴歸進行分類預測了,所以,本質上doc2vec目的並不是用於分類,而是獲取文章向量的上面。

Doc2vec是由Tomas Mikolov[4]提出的一種文章向量獲取的方法,其思想是建立在Word2vec的基礎上,區別在於將文章的向量D也作為一種可變的引數,加入到訓練中,如下圖所示,當我們要預測第四個單詞"on"的時候,我們將這批詞所對應的文章向量D與另外三個單詞作為輸入,同時進行預測,在輸入層,我們可以利用簡單的加和或者是取平均值,剩下的基本就和Word2vec一樣,從隱藏層到輸出層我們可以建立一個神經網路,輸出節點的個數即為單詞的個數,或者我們用哈夫曼樹,加快訓練的時間。

同樣,作者在論文中還提出了一種skim-gram的doc2vec,如下圖所示,即我們用當前文章向量D作為輸入。

我們簡單總結一下doc2vec的優缺點

優點:

  • doc2vec是一種無監督的學習,根據語料可以直接獲得文章的向量,省去了手工獲取特徵的麻煩,而且隨著我們語料的增加,模型會更加的精確。
  • 文章和詞向量一起訓練,一定程度上使得文章向量的表達更準確。

缺點:

  • 模型結構比較簡單,不能捕獲單詞的order資訊。
參考文獻
[1]Mohit Iyyer.(2015)Deep Unordered Composition Rivals Syntactic Methods for Text Classification
[2]Armand Joulin.(2016)Bag of Tricks for Efficient Text Classification.
[3]Piotr Bojanowski(2016)Enriching Word Vectors with Subword Information.
[4]Tomas Mikolov(2014)Distributed Representations of Sentences and Docume