일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 한국의 기획자들
- "명탐정 코난"
- SWT
- 페이스북
- USIM
- 모던음악만만세
- CDMA
- brew
- 그녀가말했다
- 공정위
- VoIP
- HSDPA
- 김장훈
- Wibro
- ETF
- 사요
- 위피
- Java
- 퀄컴
- 이지형
- 김장훈의who
- 유희열의라디오천국
- 민동현의토요명화
- 차트쇼쇼쇼
- 민동현
- 라디오
- itmusic
- 자바
- EV-DO Rev. B
- 러시아
- Today
- Total
zyint's blog
[논문요약] Convolutional Neural Networks for Sentence Classification (EMNLP 2014) 본문
[논문요약] Convolutional Neural Networks for Sentence Classification (EMNLP 2014)
진트 2018. 7. 28. 17:35Kim, Y. (2014). Convolutional Neural Networks for Sentence Classification. https://doi.org/10.3115/v1/D14-1181
이 논문은 기존에 pretrain된 word embedding vector를 이용해서 문장을 vector로 표현하는 방법입니다.
문장을 벡터로 표현하고 분류를 하든 여러가지 어플리케이션에 적용할 수 있는데 이 논문에서는 classification 문제에 적용했습니다.
이때, Computer vision에서 많이 사용하는 convolution neural network를 사용하는데, 최근 질문 답변이나 다양한 논문 및 application에서 이 방방법을 기반으로 사용합니다.
그래서 나온지 4년된 논문임에도 인용 횟수가 많습니다. (좋겠다...)
그래서 간단하게 요약을 해보면 다음과 같은 구조입니다.
단계 1. pretrain한 단어 벡터를 준비합니다.
- 논문에서는 Google News 100billion 단어(1000억개)를 학습한 word2vec를 사용하였습니다. 차원은 300차원
- 혹시나 pretrained word vector에 등장하지 않는 단어들은 랜덤하게 벡터를 초기화하고 fine-tuning을 수행합니다.
- Collobert(2011)가 Wikipedia로 학습한 데이터도 써봤다는데 성능이 좋지 않아서 Google꺼를 썼다고 합니다. 1
- pretrain 단어 벡터만 쓸수도 있지만, 다른 방법도 있습니다. 이미지에서 RGB채널과 같이 텍스트에서도 채널을 넣는 방법인데,
- 한 채널은 pretrained word embedding그대로 사용하고 finetuning하지 않게 합니다,
- 다른 채널은 pretrain word vector로 초기화한 fine tuning 가능한 벡터로만듭니다. 데이터마다 다르지만 (어쩌면) 정확도를 올릴 수 있습니다.
단계 3. 논문에 Figure1이 전체 구조를 설명하고 있긴한데 명확하지 않아서 이해하기보다는 헷갈릴 수 있습니다.
- 2단계의 문장에서 한 번에 h개 단어를 보도록 하고 (이걸 윈도우라고 합니다)
- h개 단어의 벡터(1단계에 얻은 pretrained word vectors)를 concatenation 합니다. 즉, 300차원 * h 크기 만큼의 1차원 벡터가 만들어집니다.
단계 5. 이렇게 단계3,4에서 한개 윈도우의 c_i 값을 계산하면 윈도우를 이동하면 한 개 문장에서 여러개의 값을 구할 수 있습니다. 이걸 벡터로 표현하면 다음과 같습니다. 이걸 feature map이라고 합니다.
단계 6. 문장마다 단어개수가 다르고, 그러면 문장마다 feature map의 개수가 달라지는데. 모든 문장마다 하다의 값을 갖게끔 feature map벡터 중 가장 큰 값 하나만 사용합니다. 이걸 유식하게 max-over-time pooling operation 이라고 부릅니다.
단계 7: 단계3~6 까지가 한개 filter로 1개 feature 값을 생성한 겁니다. filter는 weight vector w 를 표현하는 걸로, 윈도우 크기 h와 filter의 weight vector w를 초기화하는걸 달리하면서 여러개의 필터를 만들 수 있습니다. 논문에서는 실험에서 1개 윈도우 크기마다 100개의 filter를 만들어서 썼습니다. h는 3,4,5를 썼네요.
즉, 이제 300개의 feature가 만들어 진겁니다.
단계8: fully connected softmax layer를 통과시킵니다.
이 때 regularization인 dropout을 사용하는데 keep probability는 p=0.5로 사용했습니다. 2
이때, 학습과정에서는 dropout을 사용하고
test time에는 dropout을 사용하지 않습니다. 그리고 학습된 벡터는
와 같이 rescale해주며, Gradient descent step 이후
인 경우 l2-norm이 s와 같게 되게끔 rescaling해줍니다.
Dropout을 적용함으로써 실험적으로 2~4% 정도 정확도 향상이 있었다고 합니다.
논문의 주요 contribution 중 하나는 이렇게 embedding한 문장 벡터를 다양한 application에서 적용할 수 있었다는 점입니다.
- R. Collobert, J. Weston, L. Bottou, M. Karlen, K. Kavukcuglu, P. Kuksa. 2011. Natural Language Processing (Almost) from Scratch. Journal of Machine Learning Research 12:2493–2537. [본문으로]
- ® G. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever, R. Salakhutdinov. 2012. Improving neural networks by preventing co-adaptation of feature detectors. CoRR, abs/1207.0580. [본문으로]