原來CNN也能運用於NLP中

 



當提及CNN一般普遍都會直覺聯想到在電腦視覺方面的應用。
而近幾年CNN也踏入自然語言處理,也有相當好的成績。

通常CNN要處裡應用於NLP的任務,往往需要以矩陣形式表達句子或文本。
(PS:因為CNN你要餵進去的格式要是矩陣)

矩陣中每一行對應一個分詞元素,通常會是一個單詞或是一個字符。
換言之,每一行都是一個詞或者字符的向量(比方word2vec)



假設共有10個詞,每個詞都用128維的vector表示,那就可得到一個10*128維度的矩陣。
如此一來這個矩陣就有點像是一幅影像。




Embedding層:一個7x5的矩陣,其中每row(橫列)是一個單詞的向量,即詞向量,詞向量的維度為5。(這邊用比較低的維度for好舉利用,通常可能用到128,256就會有128或256直行。)


Convolution層:這里是一維卷積,卷積核寬度固定:即為詞向量維度(都是5個直行),卷積核的高度即一個窗口中包含的單詞的個數,這里的kernel_size=(2,3,4)即為一個窗口中分別可以包含2,3,4個單詞。然後每個kernel_size輸出2個通道,實際上是每類(包含單詞個數)卷積核的個數為2而已,再將卷積輸出的結果經過激活函數輸出



MaxPooling層(池化):每類卷積核輸出兩個通道,然後再取各個通道結果的最大值(MaxPooling),於是就得到了6個值。

FullConnection層:將MaxPooling層的輸出結果進行拼接構成一個全連接層的輸入,然後再根據分類類別數接上一個softmax層就可以得到分類結果了。











Ref:
CNN在NLP的应用--文本分类
https://yxzf.github.io/2017/03/cnn-for-nlp-in-sentence-classification/
Convolutional Neural Network in Natural Language Processing
https://towardsdatascience.com/convolutional-neural-network-in-natural-language-processing-96d67f91275c

textCNN原理一览与基于Pytorch的文本分类案例
https://zhuanlan.zhihu.com/p/339784219

https://www.researchgate.net/figure/Convolutional-Neural-Network-for-NLP-51_fig4_340622598

Convolution for NLP Task
https://ravikumarmn.github.io/cnn-copy/

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header