작성자: 세종대학교 데이터사이언스학과 이정은
이번 강의에서는 CNN을 사용한 Text Classification에 대해 설명합니다.
기존 RNN은 prefix context없이 phrase를 잡아낼 수 없고, 마지막 단어 벡터의 영향을 많이 받는 문제를 가지고 있었습니다.
CNN을 텍스트 처리에 사용하고자 한 메인 아이디어는 "문장 내 가능한 모든 단어 subsequence의 representation을 계산하면 어떨까?"였습니다.
이 방법은 해당 구문이 문법적으로 옳은지 판단할 수 없고, linguistically하지 않은 것 같다는 단점이 있습니다.
일반적으로 CNN은 이미지 처리에서 주로 쓰이며 2D convolution을 사용하지만, 텍스트 처리에서는 filter가 위아래 한 방향으로만 이동하는 1D Convolution을 사용합니다.
Input은 문장 내 각 단어를 나타내는 dense word vector입니다. (one-hot vector도 가능합니다.) Input의 크기는 단어 개수 x word vector의 차원, Filter의 크기는 한번에 보고자 하는 단어의 개수 x word vector의 차원입니다.
Filter는 polite/non-polite, about food/non about food 등의 특징을 나타냅니다.
한 개의 Filter가 위에서 아래로 이동하며 내적을 진행하면 output은 single vector인 5x1이 됩니다. 3개의 filter를 사용하면 output의 크기는 5x3으로 filter의 개수만큼 늘어납니다.
이때, 문장 내 단어의 개수는 7개에서 5개로 줄어들어 문장이 shrunk됩니다. 이를 해결하기 위해 padding을 사용합니다.
padding=1을 적용하면, input과 동일한 길이의 output을 얻을 수 있습니다.
Pooling은 특징들을 요약하는 역할을 합니다. Pooling에는 최대값을 가져오는 Max pooling과 평균값을 사용하는 Average pooling이 있습니다. 더 많이 사용되는 것은 max pooling인데, 그 이유는 자연어 처리에서 특징이 나타나는 경우는 매우 sparse하기 때문입니다. 예를 들어, polite라는 특징은 접속사, 관사 등에서는 나타날 수 없고, 그 외의 특정 단어에서 polite함이 드러날 것 입니다. 이때 이 특징을 max pooling이 더 잘 포착할 수 있다고 합니다.
Stride는 filter가 한번에 이동하는 거리를 나타냅니다. Stride=2와 Stride=2 & local max pooling은 둘 다 representation을 압축하여 생성하지만, 다른 결과값을 가집니다. 실제 텍스트 처리에서는 많이 사용되지 않습니다.
K-Max Pooling은 각 열에서 max값 k개를 선정하는 방법으로, 해당 값은 정렬 시키지 않고 위 열의 동일하게 가져옵니다.
Dilation rate는 filter 사이의 간격을 의미합니다. 즉, dilation=2인 3x3 filter는 dilation만큼 건너 뛰어 연산을 진행합니다. NLP에서의 dilated convolution은 적은 parameter로 더 넓은 범위를 볼 수 있게 합니다.
이미지 처리에서의 Dilation
https://zzsza.github.io/data/2018/02/23/introduction-convolution/
문장 자체의 의미를 중점적으로 이해하고 싶다면, filter의 크기를 증가시키거나 dilated convolution을 사용하여 한번에 보는 범위를 늘릴 수 있습니다. 혹은 CNN의 depth를 증가시키면 됩니다.
"Yoon Kim(2014): Convolutional Neural Networks for Sentence Classification. EMNLP 2014."
해당 논문의 목적은 Sentence classification입니다.
Convolution 연산은 word vectors을 concatenate하여 진행합니다. 한 채널에 대한 연산 결과는 c_i로 나타낼 수 있고, feature map c는 n개의 단어와 window size=h일 때 n-h+1 차원을 가지게 됩니다.
feature map c를 max pooling하여 각 channel마다 하나의 값을 얻습니다. max pooling을 하면 filter weight와 window size, 문장 길이의 변화에 강해집니다.
Max pooling 이후 나온 feature vector에 softmax를 취하여 클래스 분류를 진행합니다.
실제 모델에서는 filter size=2,3,4인 filter를 feature map으로 각 100개씩 사용하였습니다. pre-trained word vector를 사용하여 초기화하고, fine-tuning과 frozen을 모두 사용했습니다. 그리고 Dropout과 각 클래스의 softmax weight를 L2 normalize했습니다.
해당 모델은 간단한 single layer CNN으로 유의미한 분류 결과를 낸 것에 의의가 있습니다.
Residual Block과 Highway Block 모두 Shorcut connection의 개념으로 convolution layer를 지나 나온 결과에 x에 대한 정보를 더해줍니다. Highway Block에서의 T(x)는 Transform gate, C(x)는 Carry gate를 의미하는데, 이는 output이 input에 대하여 얼마나 변환되고 옮겨졌는지를 표현합니다.
Batch Normalization은 CNN에서 주로 사용며, 배치별로 평균=0, 분산=1로 정규화시키는 작업입니다. 이를 수행하면 Convolution block이 항상 같은 scale을 가지기 때문에 안정적인 학습이 가능해집니다. 또한, parameter initialization에 덜 예민해지고 learning rate tuning이 한결 쉬워집니다.
Batch Nomralization / Layer Normalization
https://yonghyuc.wordpress.com/2020/03/04/batch-norm-vs-layer-norm/
1x1 크기의 filter로, 적은 parameter 개수로 channel의 수를 줄일 수 있습니다.
seq2seq 이전에 나온 translation 모델로, encode로 CNN & decoder로 RNN을 사용한 모델입니다.
"Conneau, Schwenk, Lecun, Barrault(2017): Very Deep Convolutional Networks for Text Classification. EACL 2017."
해당 논문에서는 text classification을 위한 deep한 CNN 모델을 제안합니다.
VD-CNN의 모델 구조는 다음과 같습니다. VGGnet, ResNet과 비슷한 구조를 가집니다.
실험에는 large text classification dataset들을 사용하였고, layer가 깊을수록 error값이 낮은 것을 확인할 수 있습니다. 해당 표에는 기재되어 있지 않지만 depth=47이 depth=29보다 낮은 성능을 보였다고 합니다. 즉, NLP 분야는 depth=34가 minimum인 이미지 분야처럼 deep한 모델을 사용하기는 어렵다는 것을 의미합니다.
RNN은 parallelize가 어려워 느리다는 단점을 가집니다. 이를 개선하기 위해 parallelize가 쉬운 CNN과 결합한 모델이 Quasi-Recurrent Neural Network입니다. 두 모델의 장점만을 가져와 Convolution과 Pooling을 통해 sequencial data를 parell로 처리합니다. 해당 모델은Sentiment classification을 진행했을 때, LSTM과 비슷한 성능을 내지만 3배 빠른 속도를 보였다고 합니다.
https://www.youtube.com/watch?v=EAJoRA0KX7I&list=PLoROMvodv4rOhcuXMZkNm7j3fVwBBY42z&index=12
https://zzsza.github.io/data/2018/02/23/introduction-convolution/
https://velog.io/@tobigs-text1314/CS224n-Lecture-11-ConvNets-for-NLP
https://arxiv.org/pdf/1408.5882.pdf
https://ratsgo.github.io/deep%20learning/2017/10/09/CNNs/
https://yonghyuc.wordpress.com/2020/03/04/batch-norm-vs-layer-norm/
https://arxiv.org/pdf/1606.01781.pdf
https://arxiv.org/pdf/1611.01576.pdf
투빅스 14기 한유진
CNN을 사용하여 Text classification을 수행하는 과정, 흐름을 잘 설명해주셔서 좋았습니다. 또한, 이미지처리와 비교한 NLP에서의 CNN활용법도 알 수 있었습니다. 좋은 강의 감사합니다!
투빅스 15기 조준혁
CNN을 이용해 Text관련 Task를 수행하는 방법과 모델에 대한 이해를 할 수 있었던 강의였습니다.
투빅스 15기 김동현
Filter / Padding / Pooling(Max pooling, Average pooling) / Stride / Dilation rate의 개념과 계산방법을 자세히 알아볼 수 있는 시간이었습니다.
Gates units used vertically은 Residual Block과 Highway Block 모두 Shorcut connection의 개념으로 convolution layer를 지나 나온 결과에 x에 대한 정보를 더해줍니다. Highway Block에서의 T(x)는 Transform gate, C(x)는 Carry gate를 의미하는데, 이는 output이 input에 대하여 얼마나 변환되고 옮겨졌는지를 표현합니다.
두 모델의 장점만을 가져와 parallelize가 쉬운 CNN과 결합한 모델이 Quasi-Recurrent Neural Network은 Convolution과 Pooling을 통해 sequencial data를 parell로 처리합니다. 이를 통해 RNN이 parallelize가 어려워 느리다는 단점을 개선합니다.
투빅스 14기 정재윤
RNN은 Prefix context없이는 Phrase를 잡기 힘들고 마지막 단어에 영향을 굉장히 많이 받는 단점을 가지고 있다. 그래서 "문장 내 가능한 모든 단어 subsequence의 representation을 계산하면 어떨까?"라는 생각을 바탕으로 텍스트 처리에 CNN을 적용하려고 시도했습니다.
연산의 대부분은 CNN의 연산과 크게 차이가 없으나 dilation은 조금 생소한 개념이다. dilation이란 filter를 적용할 때 데이터 사이의 간격을 넓혀서 보는 것으로 적은 parameter로 더 넓은 범위를 볼 수 있게 된다.
이러한 발전으로 VD-CNN이라는 구조가 만들어졌다. 그러나 vision분야와는 달리 NLP분야에서는 단순히 모델이 깊다는 이유만으로 성능이 개선되지는 않았다.
투빅스 15기 조효원
투빅스 15기 조효원
투빅스 15기 이윤정
투빅스 15기 이수민
투빅스 15기 김재희
투빅스 14기 박준영
CNN을 text에 적용하는 방법과 관련 모델들을 배울 수 있었던 유익했던 강의였습니다. 감사합니다!!
투빅스 14기 정세영
Text classification에 적용되는 CNN의 개념을 맥락을 집어주시면서 설명해주셔서 이해하기 수월했습니다.