NL-005, Convolutional Neural Networks for Sentence Classification (2014-EMNLP)
이 논문도 NLP 초기에 읽었던 논문이고 엄청 유명한 논문이다. Sentence classification에 CNN을 적용한 논문이고 이를 이용하여 NLP에 CNN을 적용하는 여러 task에 적용이 되고는 한다.
Kim이란 성을 가지신 분이고 매우 뛰어난 분이시던데 한국분이신가..교포신가.. 궁금
유명한 논문이라 정리된 글도 많지만 살짝 부족한 부분도 있는 것 같아서 내용 부분을 추가해보자...
Reference
Kim이란 성을 가지신 분이고 매우 뛰어난 분이시던데 한국분이신가..교포신가.. 궁금
유명한 논문이라 정리된 글도 많지만 살짝 부족한 부분도 있는 것 같아서 내용 부분을 추가해보자...
0. Abstract
- Sentence-level classification을 위해 pre-trained word vector에서 CNN을 가지고 실험을 하였다.
- Word vector을 task-specific vector로 fine-tunning해서 성능이 좋아졌다.
- (non fine-tunning) Static vector과 task-specific vector을 혼합하여 사용하였다.
- 간단한 CNN 구조만으로 성능이 7개중 4개의 SOTA을 찍었다.
1. Introduction
- NLP에서 많은 연구 방법이 LM 모델로 word vector을 학습하고 learned word vector을 classification에 사용하였다.
- 기존에는 one-hot encoding을 사용하기도 하였다. 하지만 이는 sparse하고 semantic feature을 담고있지 않는다.
- CNN은 원래 local feature을 뽑는 것이고 영상에 사용되는 방법이다.
- 하지만 효과적으로 semantic parsing, search query retrieval, sentence modeling, traditional NLP tasks에 적용하여 좋은 결과를 도출하였다.
- 기학습된 word vector을 가져와서 convolution layer 한 개를 붙였다.
- 첫 번째로 keep the word vector하고 hyper parameter을 약간만 학습시켜서 좋은 연구 결과를 얻었다.
- 즉 pre-trained vector은 universal feature이라고 볼 수 있다.
- 여기서 pre-trained vector은 word2vec인 듯
- 다른 방법으로 learning task-specific vector을 fine-tunning을 통하여 성능을 향상 시켰다.
- 마지막으로 1,2을 둘 다 사용하여 multiple channels을 가지도록 사용하였다.
2. Method
- 각 단어는 k차원으로 word vector로 표시된다.
- 문장에 n개의 단어가 있는 것이고 이를 2차원으로 표시하여 그림과 같이nxk 직사각형을 만든다.
- 이 때 만약 n=10이라 했는데 문장에는 8개 단어만 있으면 2개를 padding하는 것이고 12개 단어가 있으면 뒤에 2개를 버림하는 것 (코드상으로 그럴 것. 이론적으로는 문장 길이가 달라도 됨)
- 여기서 직사각형이 2개인 것은, 한 쪽은 word2vec까지 static으로 학습을 하는 것이고 한 쪽은 non-static으로 학습을 안하는 것이다.
- x는 각 단어의 word vector로 concat을 한다는 의미이다.
- 여기서 wx+b가 convolution filter로 우리가 아는 2D convolution이다. 왜 이렇게 표시가 되냐면, conv가 [h x k] size이다. 즉 word vector 전체를 감싸야 하기 때문에 가로는 k 사이즈를 가져야 하고, h-gram 단위를 가지냐에 따라 conv 세로 길이(=h)가 결정되는 것이다.
- f는 hyperbolic tangent 활성 함수이다.
- x1:h가 c1, x2:h+1이 c2가 되는 식으로 h size conv filter가 window sliding하면서 생성되는 feature map들을 c라고 표기한다.
- 이렇게 생성된 c에서 max-over pooling 연산을 취하는데 이 말은
을 통하여 가장 큰 feature map을 가져가겠다는 것이다.
- highest value 취하는 이 것은 인접한 h에서 word vector가 서로 연관성이 가장 높은 세트를 가져간다 라고 볼 수 있다.
- 즉 one feature from one filter의 의미로 sentence 길이가 상관이 없어도 한 개의 feature만 가져가는 식이다.
- 두 개의 채널(static과 non-static)이 있고 h는 2와 3을 사용하면 모델의 그림처럼 총 차원이 4인 vector가 max-over pooling의 결과로 나오게 된다.
2.1 Regularization
- Weight vectors의 l2-norm와 함께 dropout을 적용
- 여기서는 (4)식 대신, (5)식을 이용하는 방법이다. (z o r)에서 o는 element-wise 곱으로 1일 확률 p , 0인 확률은 1-p을 가지는 Bernoulli random variables을 가지는 masking vector이다.
- BP할 때, masking 값이 1로 살아남는 곳으로만 학습을 한다.
- Testing시는, pw로 w를 scaling을 하여 진행을 한다.
- 추가적으로 l1-norms을 적용하는데 ||w||2 > s이면 ||w|| = s으로 rescaling을 한다.
3. Datasets and Experimental Setup
- 다음과 같은 benchmark에 대해서 수행하였다. (자세한 건 생략)
- MR (Movie review)
- SST-1 (Standford Sentiment Treebank)
- SST-2 (SST-1 with neutral review)
- Subj (Subjectivity dataset / subjective or objective)
- TREC (6 question types: person, location, numeric information, etc)
- CR (Customer review)
- MPQA (Opinion polarity detection)
3.1 Hyperparameters and Training
- ReLU 사용
- filter windows (h) of 3, 4, 5을 이용하여 100개의 feature maps 사용
- Dropout rate (p) of 0.5
- l2 constrain (s) of 3
- Mini-batch size of 50
- 이러한 값들은 SST-2 dev set을 통하여 찾았다.
- 또한 dev set을 랜덤하게 10% 설정하여 early stopping을 하였다.
3.2 Pre-trained Word Vectors
- 여기서 사용되사전에 학습된 300차원 word2vec을 사용였다. (100 billion words from Google News)
3.3 Model Variations
- 다양한 모델의 변형을 사용하였다.
- CNN-rand
- 모든 단어는 랜덤 초기화
- CNN-static
- pre-trained word2vec을 사용하였고 이는 학습 안함.
- Unknown 단어들은 랜덤 초기화하여 이것은 학습.
- CNN-non-static
- 위와 똑같으나 fine-tunning 진행
- CNN-multichannel
- 두 가지 word vectors을 사용
- 둘 다 pre-trained word2vec이지만, 하나만 fine-tunning 진행
4. Results and Discussion
- Pre-trained 효과는 CNN-static을 통하여 확인할 수 있다.
- 즉 간단한 모델 + pre-trained word2vec을 사용하는게 효과적이다.
- 이는 사실 이제는 당연한 말인데.. 이 당시에는 큰 발견이었나 봄.
- Fine-tunning한 CNN-non-static 모델은 task에 좀 더 specific 해지는 효과가 있다.
4.1 Multichannel vs Single Channel Models
- 원래 예상은 multichannel이 small dataset에서 성능이 좋을 것이라 생각하였다.
- 왜냐하면 multichannel이 overfitting을 막아줄 수 있을 것이기 때문이다.
- 하지만 결과를 보면 항상 그런 것은 아니다. (즉 섞여있다.)
4.2 Static vs Non-static Representations
- Single channel non-static와 multichannel에서 non-static channel 부분이 fine-tunning하면서 task에 specific하게 만드는 효과를 table3에서 볼 수 있다.
- Table2은 SST-2로 fine-tunning 한 결과이기 때문에 non-static channel이 sentiment가 같은 느낌으로 유사도를 뽑아내는 것이기 때문에 task-specific 해졌다고 볼 수 있다.
- 또한 pre-trained에 없는 words을 학습하기 때문에 non-static 모델이 더 의미이가 있는 표현을 나타낸다고 본다.
4.3 Further Observations
- 옛날 논문이기 때문에 사실 이 부분은 간단히만..
- Kalchbrenner이 한 CNN 모델은 성능이 안좋다. (그것에 대해 간략히 설명)
- Dropout은 good regularizer이다. 이를 통해 2%~4% 성능이 향상되었다.
- Word2vec에 없는 단어를 랜덤 초기화할 때, 막하는 것이 아니라 pre-trained된 words의 분포를 따르도록 초기화하면 성능이 좋아진다.
- 당연하다고 볼 수도 있지만, 이 부분도 나름 의미가 있다고 생각한다.
- 다른 public 데이터 세트인 wiki로 학습된 word2vec이 훨씬 더 좋은 성능을 보임을 간단히 실험을 통해 발견했다.
- pre-trinaed 데이터 세트가 다르기 때문에 성능이 다른 것이긴 하겠지..
- Adadelta로 학습했을 때, 비슷한 결과를 도출함.
5. Conclusion
- Pre-trained word2vec을 사용하였고 간단한 CNN 모델의 hyperparameters tunning을 한 것임에도 불구하고 놀라운 결과를 도출하였다.
- 즉 pre-trained word vectors가 중요하다.
댓글
댓글 쓰기