【论文笔记】CNN for NLP
什么是Convolutional Neural Network(卷積神經網絡)?
最早應該是LeCun(1998)年論文提出,其結果如下:運用于手寫數字識別。詳細就不介紹,可參考zouxy09的專欄,主要關注convolution、pooling,個人理解是這樣的,convolution是做特征檢測,得到多個feature maps,而pooling是對特征進行篩選,提取關鍵信息,過濾掉一些噪音,另一方面是減少訓練參數。
Single Layer CNN
與圖像處理不同,對于自然語言處理任務來說,輸入一般是用矩陣表示的句子或文檔。對于句子矩陣,每一行表示一個單詞,每個詞可以用向量表示(word2vec or GloVe, but they could also be one-hot vectors)。下面介紹一種簡單的cnn結構,一層convolution+一層pooling。來自Yoon Kim(2014)的論文。
該CNN很簡單,共分四層,
第一層是詞向量層,doc中的每個詞,都將其映射到詞向量空間,假設詞向量為k維,則n個詞映射后,相當于生成一張n*k維的圖像;
第二層是卷積層,多個濾波器作用于詞向量層,不同濾波器生成不同的feature map;
第三層是pooling層,取每個feature map的最大值,這樣操作可以處理變長文檔,因為第三層輸出只依賴于濾波器的個數;
第四層是一個全連接的softmax層,輸出是每個類目的概率。除此之外,輸入層可以有兩個channel,其中一個channel采用預先利用word2vec訓練好的詞向量,另一個channel的詞向量可以通過backpropagation在訓練過程中調整。
這樣做的結果是:在目前通用的7個分類評測任務中,有4個取得了state-of-the-art的結果,另外3個表現接近最好水平。
?
首先做一些符號說明:輸入是詞向量Xi(長度是k),句子向量Xi:n是詞向量的級聯(拼接成長向量),filter是w,可看成一個滑動窗口,這里的w是向量,長度是hk(滑動窗口包含h個詞)。
Convolution:卷積操作,f是激活函數,ci表示卷積得到的特征。通過滑動filter w,與句子所有詞進行卷積,可得到feature map?
?
Pooling:使用max-pooling獲得feature map中最大的值,然后使用多個filter獲得不同n-grams的特征。
Multi-Channel:這里很有意思,輸入句子時,使用兩個通道(channel,可以認為是輸入copy一份),都用word2vec初始化,其中一個詞的向量保持不變(static),另一個是non-static,在BP過程不斷修改,最后再pooling前對兩個通道得到的卷積特征進行累加。
Classification:通過pooling,得到句子最后的特征向量,然后直接用softmax進行分類。
?
轉載于:https://www.cnblogs.com/zeze/p/8253124.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【论文笔记】CNN for NLP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 448C Pain
- 下一篇: js生成元素的事件不执行问题