ToBigs / [CS224N] 11. ConvNets for NLP

ljeun·2021년 5월 19일
0

ToBigs

목록 보기
3/3
post-thumbnail

작성자: 세종대학교 데이터사이언스학과 이정은

해당 포스팅은 ToBigs 텍스트 심화세미나에서 발표를 진행했습니다.
https://velog.io/@tobigs-text1415/Lecture-11-Convolutional-Networks-for-NLP

ConvNets for NLP

이번 강의에서는 CNN을 사용한 Text Classification에 대해 설명합니다.

1. Why CNN?

RNN의 단점


기존 RNN은 prefix context없이 phrase를 잡아낼 수 없고, 마지막 단어 벡터의 영향을 많이 받는 문제를 가지고 있었습니다.

CNN for text


CNN을 텍스트 처리에 사용하고자 한 메인 아이디어는 "문장 내 가능한 모든 단어 subsequence의 representation을 계산하면 어떨까?"였습니다.
이 방법은 해당 구문이 문법적으로 옳은지 판단할 수 없고, linguistically하지 않은 것 같다는 단점이 있습니다.

2. 1D Convolution for text

일반적으로 CNN은 이미지 처리에서 주로 쓰이며 2D convolution을 사용하지만, 텍스트 처리에서는 filter가 위아래 한 방향으로만 이동하는 1D Convolution을 사용합니다.

1D Convolution 연산


Input은 문장 내 각 단어를 나타내는 dense word vector입니다. (one-hot vector도 가능합니다.) Input의 크기는 단어 개수 x word vector의 차원, Filter의 크기는 한번에 보고자 하는 단어의 개수 x word vector의 차원입니다.

Filter


Filter는 polite/non-polite, about food/non about food 등의 특징을 나타냅니다.
한 개의 Filter가 위에서 아래로 이동하며 내적을 진행하면 output은 single vector인 5x1이 됩니다. 3개의 filter를 사용하면 output의 크기는 5x3으로 filter의 개수만큼 늘어납니다.
이때, 문장 내 단어의 개수는 7개에서 5개로 줄어들어 문장이 shrunk됩니다. 이를 해결하기 위해 padding을 사용합니다.

Padding


padding=1을 적용하면, input과 동일한 길이의 output을 얻을 수 있습니다.

Pooling


Pooling은 특징들을 요약하는 역할을 합니다. Pooling에는 최대값을 가져오는 Max pooling과 평균값을 사용하는 Average pooling이 있습니다. 더 많이 사용되는 것은 max pooling인데, 그 이유는 자연어 처리에서 특징이 나타나는 경우는 매우 sparse하기 때문입니다. 예를 들어, polite라는 특징은 접속사, 관사 등에서는 나타날 수 없고, 그 외의 특정 단어에서 polite함이 드러날 것 입니다. 이때 이 특징을 max pooling이 더 잘 포착할 수 있다고 합니다.

Stride, Local Max Pooling / K-Max Pooling


Stride는 filter가 한번에 이동하는 거리를 나타냅니다. Stride=2와 Stride=2 & local max pooling은 둘 다 representation을 압축하여 생성하지만, 다른 결과값을 가집니다. 실제 텍스트 처리에서는 많이 사용되지 않습니다.
K-Max Pooling은 각 열에서 max값 k개를 선정하는 방법으로, 해당 값은 정렬 시키지 않고 위 열의 동일하게 가져옵니다.

Dilation


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를 증가시키면 됩니다.

3. Single Layer CNN for Sentence Classification

"Yoon Kim(2014): Convolutional Neural Networks for Sentence Classification. EMNLP 2014."

해당 논문의 목적은 Sentence classification입니다.

Model Architecture


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를 취하여 클래스 분류를 진행합니다.

Experiments


실제 모델에서는 filter size=2,3,4인 filter를 feature map으로 각 100개씩 사용하였습니다. pre-trained word vector를 사용하여 초기화하고, fine-tuning과 frozen을 모두 사용했습니다. 그리고 Dropout과 각 클래스의 softmax weight를 L2 normalize했습니다.
해당 모델은 간단한 single layer CNN으로 유의미한 분류 결과를 낸 것에 의의가 있습니다.

4. Toolkits

Gates units used vertically

Batch Normalization

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/

1 Convolution

1x1 크기의 filter로, 적은 parameter 개수로 channel의 수를 줄일 수 있습니다.

CNN Translation


seq2seq 이전에 나온 translation 모델로, encode로 CNN & decoder로 RNN을 사용한 모델입니다.

5. Deep CNN for Text Classification

"Conneau, Schwenk, Lecun, Barrault(2017): Very Deep Convolutional Networks for Text Classification. EACL 2017."
해당 논문에서는 text classification을 위한 deep한 CNN 모델을 제안합니다.

VD-CNN architecture


VD-CNN의 모델 구조는 다음과 같습니다. VGGnet, ResNet과 비슷한 구조를 가집니다.

Experiments


실험에는 large text classification dataset들을 사용하였고, layer가 깊을수록 error값이 낮은 것을 확인할 수 있습니다. 해당 표에는 기재되어 있지 않지만 depth=47이 depth=29보다 낮은 성능을 보였다고 합니다. 즉, NLP 분야는 depth=34가 minimum인 이미지 분야처럼 deep한 모델을 사용하기는 어렵다는 것을 의미합니다.

6. Quasi-Recurrent Nueral Network


RNN은 parallelize가 어려워 느리다는 단점을 가집니다. 이를 개선하기 위해 parallelize가 쉬운 CNN과 결합한 모델이 Quasi-Recurrent Neural Network입니다. 두 모델의 장점만을 가져와 Convolution과 Pooling을 통해 sequencial data를 parell로 처리합니다. 해당 모델은Sentiment classification을 진행했을 때, LSTM과 비슷한 성능을 내지만 3배 빠른 속도를 보였다고 합니다.


참고자료
https://arxiv.org/pdf/1408.5882.pdf
https://zzsza.github.io/data/2018/02/23/introduction-convolution/
https://happyzipsa.tistory.com/10
https://hwkim94.github.io/deeplearning/rnn/qrnn/paperreview/2018/03/02/QRNN1.html

0개의 댓글