學習手記:CNN based NLP Application

Hallblazzar
Hallblazzar :Developer Journal
5 min readSep 28, 2018

這個二、三個月來都在做見不得光(?)的Project,現在事情大致告一個段落,趁這空檔來把對Project十分重要的理論立基點記述出來,方便給後人和自己當做參考。至於Project本體是什麼就請別多問了,日後有機會再見分曉。

NLP, How did people to?

傳統基於Recurrent Neural Network的Natural Language Proecessing Application,大致會遵循如下的流程:

  1. 蒐集文本
  2. 利用Word Embeddding將源文本中的詞彙轉換為Vectors
  3. 將以Vector形式表達的文本套入RNN中,依照需求訓練出目標網路

常見的RNN Model對應到NLP應用的情境會有下列數種:

  1. Many-to-Many RNN/Many-to-One:用於文本生成類型應用
  2. Many-to-One RNN:用於分類/評等等類型應用(Classification/Regression)

在NLP領域,RNN的使用已行之有年,但是近年開始有了不一樣的做法--利用Convolutional Neural Network。

How CNN work for NLP?

第一次從指導教授那裏聽到這個東西時,我非常訝異。畢竟以我當時的知識及所學,很難想像CNN要如何處理時序性資料。起手的資料是這兩份:來自Google Brain的大神Denny Britz所著的Understanding Convolutional Neural Networks for NLP[1],以及Microsfot的研究團隊的Stock Market Predictions with Nature Language Deep Learning[2]。僅管兩篇內所涉及的應用目標不同,但仍然能夠自中窺見要如何利用CNN based Model處理NLP Problem的基礎。

首二步驟:蒐集文本與利用Word Embedding將源文本中的詞彙轉換為Vectors,皆與利用RNN時的處理手續無異,第三步驟開始便有所變化:

  1. 將以Vector形式表達的詞彙,依照在文本中的出現次序,依序拚起為s Steps,v個Channel的1-D Tensor。其中s為目標NLP應用中允許的最大輸入文本/語句長度,v為從Word Embedding中生成的Vector長度。可以如下的圖例表示:

2. 用1-D CNN自前一步驟中所生成的1-D Tensor中擷取文本的Hidden State,再針對目標情境處理。如[2]中,即是針對股票市場的新聞進行輿情分析,透過1-D CNN Model生成未來股票的表現評等。Model如下所示:

Does CNN better?

基礎的理論聽起來都非常合理,但是問題來了:用CNN代替RNN有什麼優勢?

  1. 更快的訓練速度[3]:RNN訓練時需要循序逐字將文本讀入,每當輸入後,必須要將當前輸入的字彙和先前輸入的部分重新計算Hidden State。但是對於CNN而言,各Filter間的運算是獨立的,可以大幅減少運算時間。
  2. 對於全文的理解能力[3]:僅管RNN可以逐字將文本閱讀至結尾,但是文本中的語句間關係常會是前後交叉影響,也因此實務上會仰賴Bidirectional RNN/Dual RNN等方式解決前後文交互影響問題,增加運算成本。然而對於CNN而言便不需額外考慮這部分的設計,因為從一開始即是透過分析完整文本來建構Hidden State。
  3. N-Gram[1]:RNN對於N-Gram/Skip-Gram等具有強大的處理能力,但是消耗的運算資源也非常可觀,因此實務上基於RNN的Model,少有能夠提供超過3-Gram或5-Gram的Model。但對於CNN而言,相對於要增加文本量和運算量來提高Grams的RNN,加大Filter Size的成本低上許多。
  4. 開發複雜度:這部份是我自己的體會,相對於RNN Model(不論是RNN/LSTM/GRU),CNN Model的程式在開發上程式碼量會少很多。再者,Model也更好理解及利於維護。

結語

除上述的Model外,[3]中提到還能利用Upsampling進行Deconvolution,從詞句中建構文本生成的應用、或是藉ResNet/DenseNet等,進一步在加深網路同時,亦避開Gradient Decent問題。[1]中也提及也能夠延伸此概念,建立Charactor-Level的NLP。總之,能將CNN based NLP的概念發揮到甚麼程度,全憑個人的想像力。

研究之路、永無止境!

參考資料

[1] Denny Britz(2015), Understanding Convolutional Neural Networks for NLP
[2] Patty Ryan(2017), Stock Market Predictions with Nature Language Deep Learning
[3] Tal Perry(2017), Convolutional Methods for Text

--

--

Hallblazzar
Hallblazzar :Developer Journal

興趣使然的開發者,專長於網路、軟體/系統架構及DevOps,目前努力進入Data Science的世界。用生命享受徜徉於程式碼與架構之美的樂趣,夢想即使80歲還能繼續熱血玩程式。Github: https://github.com/HallBlazzar Mail: hallblazzar@gmail.com