學習手記:CNN based NLP Application
這個二、三個月來都在做見不得光(?)的Project,現在事情大致告一個段落,趁這空檔來把對Project十分重要的理論立基點記述出來,方便給後人和自己當做參考。至於Project本體是什麼就請別多問了,日後有機會再見分曉。
NLP, How did people to?
傳統基於Recurrent Neural Network的Natural Language Proecessing Application,大致會遵循如下的流程:
- 蒐集文本
- 利用Word Embeddding將源文本中的詞彙轉換為Vectors
- 將以Vector形式表達的文本套入RNN中,依照需求訓練出目標網路
常見的RNN Model對應到NLP應用的情境會有下列數種:
- Many-to-Many RNN/Many-to-One:用於文本生成類型應用
- 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時的處理手續無異,第三步驟開始便有所變化:
- 將以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有什麼優勢?
- 更快的訓練速度[3]:RNN訓練時需要循序逐字將文本讀入,每當輸入後,必須要將當前輸入的字彙和先前輸入的部分重新計算Hidden State。但是對於CNN而言,各Filter間的運算是獨立的,可以大幅減少運算時間。
- 對於全文的理解能力[3]:僅管RNN可以逐字將文本閱讀至結尾,但是文本中的語句間關係常會是前後交叉影響,也因此實務上會仰賴Bidirectional RNN/Dual RNN等方式解決前後文交互影響問題,增加運算成本。然而對於CNN而言便不需額外考慮這部分的設計,因為從一開始即是透過分析完整文本來建構Hidden State。
- N-Gram[1]:RNN對於N-Gram/Skip-Gram等具有強大的處理能力,但是消耗的運算資源也非常可觀,因此實務上基於RNN的Model,少有能夠提供超過3-Gram或5-Gram的Model。但對於CNN而言,相對於要增加文本量和運算量來提高Grams的RNN,加大Filter Size的成本低上許多。
- 開發複雜度:這部份是我自己的體會,相對於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