review date: 2017/10/10 (by Meyong-Gyu.LEE @Soongsil Univ.)
Korean review of 'Convolutional Neural Networks for Sentence Classification'(EMNLP2014) and 'A Syllable-based Technique for Word Embeddings of Korean Words'(HCLT 2017)
1. VGLAB 이명규CNN for Sentence Classification
문장 분류를 위한
합성곱 신경망
CNN for Sentence
Classification
2. VGLAB 이명규CNN for Sentence Classification
AGENDA
01
02
03
04
05
논문소개 및 논문 선정 이유
Word Embeddings
Classification
Experiments and Conclusion
한국어를 위한 문장분류 방법
4. VGLAB 이명규CNN for Sentence Classification
↳
논문소개 및 논문 선정 이유
1. Convolutional Neural Networks for
Sentence Classification
Part 01
• 2014년 EMNLP(Empirical Methods on Natural Language Processing)에서
발표된 논문
• Submitted on 25 Aug 2014 (v1), last revised 3 Sep 2014 (v2)
• 저자 : Yoon Kim (New York University)
• 1236회 인용됨
5. VGLAB 이명규CNN for Sentence Classification
↳
논문소개 및 논문 선정 이유
1. Convolutional Neural Networks for
Sentence Classification
Part 01
• 문장 수준의 분류 문제에 word vector와
합성곱 신경망(CNN)을 도입한 연구
• NLP에 CNN을 적용했을 때 모델이 단순해도
word2vec 모델로 미리 훈련하면 높은 성능을 낼 수 있을까?
• 선행 연구에서 CNN을 1개 층만 활용했는데, 이것을
멀티 채널로 늘려 보면 어떨까?
6. VGLAB 이명규CNN for Sentence Classification
↳
논문소개 및 논문 선정 이유
2. A Syllable-based Technique for Word Embeddings of
Korean Words
Part 01
• 2017년 발표된 국내 논문
• The 28th Annual Conference on HCLT(Human & Cognitive Language Technology) 논문집
• 저자 : Sanghyuk Choi(서울대학교), Jinseok Seol(연세대학교),
Sang-goo Lee(서울대학교)
7. VGLAB 이명규CNN for Sentence Classification
↳
논문소개 및 논문 선정 이유
2. A Syllable-based Technique for Word Embeddings of
Korean Words
Part 01
• 한국어에 최적화된 단어 임베딩 학습 방법 분석
• 한국어에 대해 최적의 성능을 낼 수 있는 학습용 말뭉치와
적합한 하이퍼 파라미터를 찾고 파라미터가 성능에 미치는
영향 및 결과 분석
8. VGLAB 이명규CNN for Sentence Classification
↳
논문소개 및 논문 선정 이유
두 논문의 선정 이유
Part 01
• SKT Nugu, Amazon Alexa, Naver Clova 등
NLP 기술이 들어간 인공지능 스피커의 원리가 뭘까?
• 그렇다면 이 원리를 어떻게 한국어를 위한 문장분류 문제에
적용할 수 있을까?
10. VGLAB 이명규CNN for Sentence Classification
↳
Word Embeddings
기존의 자연어 처리 방식
Part 02
• Word Embedding은 컴퓨터가 어떤 단어에 대해 인지할 수
있도록 수치적인 방식으로 단어를 표현하는 것
• 단순 수치화를 통해서는 단어의 개념적인 차이를 나타내기가
힘들기 때문에 One-hot encoding 방식을 주로 사용해 왔음.
• Softmax로 구한 값 중에서 가장 큰 값을 1로, 나머지를 0으로 만듬.
• Naive Bayes 분류를 이용한 스팸 분류기가 One-hot encoding의 예시 중 하나
• 컴퓨터가 단어들 간의 관계를 이해한다고 볼 수는 없기 때문에 한계가 명확하다.
11. VGLAB 이명규CNN for Sentence Classification
↳
Word Embeddings
Word2vec 모델
Part 02
• 단어 간 관계를 표현하기 위해 단어 자체의 의미를
벡터화하여 표현하는 모델
• 1980년대부터 관련 연구가 진행되어 옴
• 2000년대 들어 NNLM(Neural Network based Language Model)과
RNNLM(Recurrent NNLM)으로 발전
• 이후 CBOW와 Skip-gram 두 가지의 아키텍쳐 모델을
포함하고 있는 구글의 Word2vec으로 발전
12. VGLAB 이명규CNN for Sentence Classification
↳
Word Embeddings
Using word embeddings as features in classification
Part 02
• Word embedding은 분류를 위한 Classifier로
사용될 수 있다.
• 기존의 다양한 NLP들도 물론 가능
• 단순히 Word embedding만으로 문장을 분류하는
것은 다소 정교하지 못하기 때문에 좀 더 복잡한
방법으로 구성하고자 함
14. VGLAB 이명규CNN for Sentence Classification
↳
• 기존의 최신 정서 분석 기법을 크게
확장한 모델(감정분석을 위해 디자인된 모델)
• Recursive Network 계열에서 좋은
성능을 보임
• 합성 함수는 Tensor로 표현되며,
Tensor의 각 슬라이스는 다른 구성을
인코딩하는 구조
RNTN(Recursive Neural Tensor Networks)
Socher et al.,"Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank", EMNLP 2013
ClassificationPart 03
15. VGLAB 이명규CNN for Sentence Classification
↳
Classification
RNTN(Recursive Neural Tensor Networks)
Part 03
• 단어마다 긍정, 부정의 극성(Polarity)이 태깅되어 있는 형태
• 극성이라는 레이블 정보가 주어진 파싱 트리를 기반으로
단어나 구를 벡터로 임베딩하고, 임베딩된 벡터를 통해
레이블을 예측하는 모델.
• 구절(Phrase-level) 수준의 분류는 느린 속도를 보인다.
16. VGLAB 이명규CNN for Sentence Classification
↳
Classification
CNN(Convolutional Neural Networks)
Part 03
• 컴퓨터 비전을 위해 처음 제안된 개념으로, 거의 모든 현대의 컴퓨터 비전
시스템은 CNN을 사용 중
• Collobert와 Weston이 CNN을 사용하여 POS(Part-Of-Speech) tagging 및
SRL(Semantic role labeling) 등의 NLP 작업에서 최고의 결과를 냄
• CNN이 적용된 대부분의 네트워크들은 여러 개의 합성곱 레이어를
사용하여 매우 복잡한 구조를 가짐.
• 의미론적 파싱, 감정 분석 등 NLP분야에서 점점 유명해지고 있음
• 본 논문에서 사용한 CNN 아키텍쳐 모델의 출처는 Collobert의 JLMR
2011년 논문인 “Natural Language Processing (almost) from Scratch”
17. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Multi-channel CNN
Part 03
• 채널을 두 개로 나누어 연산하는 모델(두 채널은 모두 word2vec으로 initialize)
• Static : Word Vector가 Training중에 변하지 않는 채널
• Non-static : Word Vector를 Backpropagation을 통해 fine-tune
하여 조정하는 채널
• Backpropagation과 fine tune
• Backpropagation : Output neuron에서 계산된 오류를 각 edge들의 weight를 통해 바로 이
전 레이어의 neuron들이 얼마나 오류에 영향을 미쳤는지 계산하는 것. (정보가 Output에서 hidden
으로 흐르기 때문에 backpropagation 이라고 함.)
• Fine tuning : 이미 존재하는 모델에 추가 데이터를 투입, 파라미터를 업데이트함으로서
미세하게 조정하는 행위
18. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Multi-channel CNN
Part 03
• CNN-Static
• 간단한 모델일지라도 훌륭한 성능을 보임
(CNN-Rand는 CNN을 사용했지만 Word Vector의 개념은 사용하지 않은 모델)
• 모든 데이터 세트에 대해 동일한 hyperparameters를 갖는다.
19. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Multi-channel CNN
Part 03
• CNN-Nonstatic
• 각 작업마다 임베딩에 대한 fine-tunning을 수행
• Fine-tunning Vector를 통해 임베딩하므로 CNN-Static에 비해 성능이 썩 좋지는 않음
• CNN-Static이 Backpropagation으로 feature maps까지만 연산한다면,
CNN-Nonstatic은 인풋 레이어의 Word Vector까지도 고려하여 학습
20. VGLAB 이명규CNN for Sentence Classification
↳
Classification
왜 Non-static 모델을 사용하는가?
Part 03
• CNN-Static 모델에서는 벡터의 위치만 같으면
비슷한 단어로 인식
• Bad와 Good, terrible, horrible, lousy가 비슷한 위치에서
여러 번 등장하면 비슷한 단어로 인식함.
• 따라서 인풋 레이어까지도 Backpropagation의
대상으로 포함시켜 학습시킴으로서 단어의
의미를 더 잘 이해할 수 있도록 함.
21. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Multi-channel CNN
Part 03
• n은 문장 속 단어의 개수, k는 Word Vector의 dimension, h는 filter
window size를 의미
22. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Multi-channel CNN
Part 03
• 길이 n의 문장은 다음과 같이 word vector 𝑿𝑿𝒊𝒊를 연결하여 다음과 같은
수식으로 표현 가능
• ⊕는 concatenation 연산을 의미
• 합성곱 연산은 윈도우 크기(=filter window size) 단위로 이뤄짐
23. VGLAB 이명규CNN for Sentence Classification
↳ Multi-channel CNN
• filter의 Weight w에 대하여 feature 𝒄𝒄𝒊𝒊는 다음과 같이 계산된다.
𝒃𝒃는 bias, 𝑓𝑓는 ReLU 함수를 의미
• {𝑿𝑿𝟏𝟏:𝒉𝒉, 𝑿𝑿𝟐𝟐:𝒉𝒉+𝟏𝟏, . . . , 𝑿𝑿𝒏𝒏−𝒉𝒉+𝟏𝟏:𝒏𝒏} 에 필터를 적용하면 아래와 같은 feature map을
구할 수 있다.
얻어진 feature map에 max-pooling 연산을 거쳐 뽑아낸 최대값을
fully-connected layer에 집어넣고, dropout을 적용한 다음 마지막 단에서
softmax 출력을 계산한다.
ClassificationPart 03
24. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Dropout
Part 03
• Dropout은 망의 크기가 커질 경우 Overfitting 문제를 피
하기 위한 regularization 방법 중 하나
• Hinton이 hidden unit들의 동조화(co-adaptation)를 방지하기 위해
제안한 개념
• 망에 있는 모든 레이어들에 대해 학습을 수행하는 것이 아닌,
forward propagation 동안 Input layer나 hidden layer의
일부 뉴런을 생략하고 줄어든 신경망을 통해 학습을 수행하는 것
25. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Dropout
Part 03
• 일정한 mini batch 구간 동안 생략된 망에 대한 학습 후
다시 무작위로 다른 뉴런들을 생략하면서 반복적인 학습을
수행한다.
• 𝑳𝑳𝟐𝟐 − 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 > 𝑠𝑠가 될 때마다 𝑳𝑳𝟐𝟐 − 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 = 𝑠𝑠이 되도록
gradient step 이후에 weight를 조정한다.
26. VGLAB 이명규CNN for Sentence Classification
↳
Classification
Multi-channel CNN 정리
Part 03
• 입력층은 Word2vec을 통해 단어 임베딩을 연결한
문장으로 구성
• 그 다음 Multiple filter를 가진 합성곱 층과 max-pooling
층을 연결
• 마지막으로 Dropout을 적용한 다음 softmax 출력을 계산
27. VGLAB 이명규CNN for Sentence Classification
Experiments and
Conclusion
Part 04
28. VGLAB 이명규CNN for Sentence Classification
↳
Experiments and Conclusion
실험환경과 데이터셋
Part 04
• Convolutional Layer : 1 layer(with ReLU)
• Filter Window Size : 3, 4, 5 with 100 feature maps each(total 300)
• Regularization : Dropout(rate 0.5), 𝑳𝑳𝟐𝟐 norm constraint
• Mini-batch size : 50
• SGD with Adadelta
• Dataset : 구글 Word2vec의 Pre-trained embedding 사용
29. VGLAB 이명규CNN for Sentence Classification
↳
Experiments and Conclusion
실험에 사용된 모델
Part 04
• CNN-rand : word2vec을 사용하지 않고 모든 단어를 무작위로 초기화
• CNN-Static : Pre-trained word2vec을 사용하고, Word Vector가
Training중에 변하지 않음
• CNN-Nonstatic : Pre-trained word2vec을 사용하고, Word Vector를
학습하는 중에 fine-tunning 수행
• CNN-Multichannel : CNN-Static 모델과 CNN-Nonstatic 모델을
둘 다 사용하는 모델
30. VGLAB 이명규CNN for Sentence Classification
↳
Experiments and Conclusion
실험 결과
Part 04
• NLP에 CNN을 적용했을때 word2vec으로 pre-training한 데이터를 사용하면
간단한 네트워크임에도 불구하고 높은 성능을 낼 수 있다
31. VGLAB 이명규CNN for Sentence Classification
↳
Experiments and Conclusion
실험 요약
Part 04
• CNN-rand : 성능이 이하 세 모델들에 비해 그리 좋지 않음
• CNN-Static : word2vec를 도입함으로서 성능을 월등히 개선할 수 있었음
• CNN-Nonstatic : static 방식에 비해 fine-tunning을 수행함으로서 얻는
효과는 미미하지만 감정 분류에 도움이 됨
• CNN-Multichannel : Static과 non-static 모델을 결합함으로서 기대되는
괄목할 만한 성능 향상은 없지만 단어 간의 관계를 잘 이해함(큰 차이는 없음)
32. VGLAB 이명규CNN for Sentence Classification
↳
Experiments and Conclusion
결론
Part 04
• CNN을 적용한 NLP에서 CNN 모델이 단순하더라도
pre-trained word2vec을 사용하면 더 높은 성능을 낼 수 있다
• Word2vec이 다른 word vector 방식들보다 훨씬 성능이 뛰어남
• Hyperparameters를 거의 튜닝하지 않고,
하나의 convolution layer를 가진 CNN이라도 잘 실행됨을 알 수 있음
• Dropout이 regularizer로서 잘 작동하며, 2~4% 정도의 개선 효과가 있음
• Adadelta는 Adgrad와 비슷한 결과를 내지만 더 적은 수의 epoch로도 충분
33. VGLAB 이명규CNN for Sentence Classification
한국어를 위한
문장분류 방법
Part 05
34. VGLAB 이명규CNN for Sentence Classification
↳
한국어를 위한 문장분류 방법
A Syllable-based Technique for Word Embeddings of
Korean Words
Part 05
• 한국어는 교착어이기 때문에 영어 기반의 단어 임베딩은
적합하지 않음.
• 영어를 비롯한 라틴 문자 기반의 언어는 word2vec 모델이 가장 높은 성능을 냄.
• 본 논문에서는 GloVe, Word2vec에서 제안하고 있는
학습 모델을 사용
• Word2vec 방식을 사용하기 위해 오픈 소스인
꼬꼬마 형태소 분석기, 트위터 형태소 분석기를 통해
형태소 품사 태그를 분류하는 전처리 수행
35. VGLAB 이명규CNN for Sentence Classification
↳
• 전처리 과정을 수행한 이유
• 한국어는 문장에서 어근이 독립적으로 존재하지 않고
다른 어절이 동일 형태소를 포함하는 경우가 다소 있기
때문
• 하나의 어근에 대해 너무 많은 형태가 존재하고,
형태에 비례해서 늘어나는 단어 수는 학습 성능을
떨어뜨리는 요인이 됨.
A Syllable-based Technique for Word Embeddings of
Korean Words
한국어를 위한 문장분류 방법Part 05
36. VGLAB 이명규CNN for Sentence Classification
↳
한국어를 위한 문장분류 방법
A Syllable-based Technique for Word Embeddings of
Korean Words
Part 05
• 나무위키, 한국어 위키와 뉴스 기사 크롤링 데이터로 학습 후
WS353 테스트셋으로 평가하되, 테스트셋을 한국어로
번역하여 사용
• 나무위키와 뉴스 기사를 통한 학습이 가장 좋은 결과를 냄.
• 단어 임베딩 시행 후 얻은 학습 단어와 테스트셋 단어 사이의
코사인 유사도 값과 실제 점수와의 피어슨 상관 계수를 이용해
학습을 평가
37. VGLAB 이명규CNN for Sentence Classification
↳
한국어를 위한 문장분류 방법
A Syllable-based Technique for Word Embeddings of
Korean Words
Part 05
• 영문 테스트셋을 한국어로 번역해 사용한다는 가정 하에,
Word2vec 방식이 현재 한국어에 적합한 단어 임베딩 학습
방법이라는 결론
• 그러나 WS353 테스트셋은 한국어 임베딩을 평가하기엔
부족하기 때문에 한국어 특성에 맞는 임베딩 평가 방법 및
데이터셋을 구축할 필요가 있음
• 한국어는 새로 추가되는 어휘들이 노이즈로 작용되는 경우가
종종 있기 때문에 학습 데이터 크기와 성능이 비례하진 않음.
38. VGLAB 이명규CNN for Sentence Classification
출처
• Yoon Kim의 본 논문 ‘Convolutional Neural Networks for Sentence Classification’ (https://arxiv.org/abs/1408.5882)
• Yoon Kim의 논문 요약 슬라이드 (http://www.people.fas.harvard.edu/~yoonkim/data/sent-cnn-slides.pdf)
• BEOMSU KIM의 'word2vec 관련 이론 정리' 블로그 글 (https://goo.gl/U9DrT5)
• code.google.com의 word2vec 공식 페이지 (https://code.google.com/archive/p/word2vec/)
• ‘자연어 처리 문제를 해결하는 CONVOLUTIONAL NEURAL NETWORKS 이해하기’ 블로그 글 (http://mlduck.tistory.com/)
• ‘CS231n : Neural Networks Part 2: Setting up the Data and the Loss’ (http://cs231n.github.io/neural-networks-2/)
• Jamie Kang의 ‘Convolutional Neural Networks for Sentence Classification’ 블로그 글 (https://goo.gl/T6WDGB)
• Ronan Collobert et al.,"Natural Language Processing (almost) from Scratch", 2011 (https://arxiv.org/abs/1103.0398)
• laonple의 ‘Hyperparameters Optimization[1] – 라온피플 머신러닝 아카데미’ 블로그 글 (http://blog.naver.com/laonple/220571820368)
39. VGLAB 이명규CNN for Sentence Classification
Thank you for Listening.